|
16 | 16 |
|
17 | 17 | * Si ya existe un docstring, puede sugerirse un estilo básico acorde a PEP8, pero **no será un error** si faltan `return`, tipos o parámetros documentados. |
18 | 18 | 5. No proponer cambios puramente estéticos (espacios, comillas simples vs dobles, orden de imports, etc.). |
| 19 | +6. Mantener el feedback **muy conciso** en los PRs: priorizar pocos puntos claros, evitar párrafos largos y no repetir el contexto que ya está explicado en la descripción del PR. |
19 | 20 |
|
20 | 21 | --- |
21 | 22 |
|
|
83 | 84 | * Caso ilustrativo: reemplazar listas armadas a mano con `result = self.env['res.partner'].search_fetch(domain=[('is_company', '=', True)], fields=['name', 'email', 'vat'])`. |
84 | 85 | * Recordar que los writes vectorizados (`recordset.write`) y las operaciones en lotes evitan locks prolongados y mejoran la trazabilidad de auditoría del ORM. |
85 | 86 | * Ejemplo recomendado: `partners.write({'comment': 'Actualizado masivamente'})` en lugar de iterar y escribir registro por registro. |
| 87 | +* Tener en cuenta la **navegación de campos relacionales** en Odoo: acceder a campos encadenados como `m.fiscal_position_id.l10n_ar_tax_ids` es seguro incluso cuando `fiscal_position_id` está vacío (devuelve un recordset vacío). Por eso, expresiones como `not m.fiscal_position_id.l10n_ar_tax_ids` ya cubren el caso en que no haya posición fiscal y **no hace falta** añadir un chequeo previo separado sobre `fiscal_position_id`. |
| 88 | +* Revisar accesos directos por índice en listas o recordsets, por ejemplo `lines[0].id`: si el conjunto está vacío puede lanzar `IndexError`. Copilot debe sugerir patrones más seguros (por ejemplo `if lines: first = lines[0]`) o, cuando sea posible, reescribir la lógica para trabajar sobre el recordset completo en lugar de un único elemento. |
86 | 89 |
|
87 | 90 | --- |
88 | 91 |
|
@@ -162,7 +165,7 @@ En estos casos **normalmente corresponde** proponer migración (salvo notas en c |
162 | 165 | * asignar company/website por defecto, |
163 | 166 | * o migrar datos entre reglas. |
164 | 167 |
|
165 | | -> **Nota:** hemos eliminado explícitamente de esta lista el caso “Añadir `required=True` a campos existentes sin default” como condición automática de migración; Copilot no debe sugerir script de migración **solo** por ese motivo, salvo que en el diff se vea claro que hay datos históricos incompatibles. |
| 168 | +> **Nota:** No se incluye en esta lista el caso “Añadir `required=True` a campos existentes sin default” como condición automática de migración; Copilot no debe sugerir script de migración **solo** por ese motivo, salvo que en el diff se vea claro que hay datos históricos incompatibles. |
166 | 169 |
|
167 | 170 | --- |
168 | 171 |
|
@@ -224,6 +227,14 @@ En estos casos **normalmente corresponde** proponer migración (salvo notas en c |
224 | 227 |
|
225 | 228 | --- |
226 | 229 |
|
| 230 | +## Cobertura de tests automatizados – reglas generales |
| 231 | + |
| 232 | +* Cuando el diff introduzca **funcionalidad nueva no trivial** (nuevos métodos con lógica compleja, nuevos flujos de negocio, refactors grandes, nuevas APIs, etc.), revisar si existe cobertura de tests razonable para esos cambios. |
| 233 | +* Si no se ve una cobertura clara, sugerir de forma **concreta y breve** qué tipo de test añadir (unitarios de modelo, tests de wizards, tours, pruebas sobre reportes, etc.), sin exigir una suite completa para cada cambio. |
| 234 | +* Para cambios pequeños o puramente cosméticos (ajustes en textos, vistas simples, pequeñas correcciones) **no hace falta** proponer la creación de tests nuevos. |
| 235 | + |
| 236 | +--- |
| 237 | + |
227 | 238 | ## Convenciones de scripts en `migrations/` (generales) |
228 | 239 |
|
229 | 240 | * Ubicación: `migrations/<module_version>/`. |
@@ -304,10 +315,11 @@ def migrate(cr, registry): |
304 | 315 | * **Bump + migración:** “Se renombra `old_ref` → `new_ref`: falta **bump de versión** y **pre-script** en `migrations/` para copiar valores antes del upgrade; añadir **post-script** para recompute del stored.” |
305 | 316 |
|
306 | 317 | * Evitar explicaciones largas o reescrituras completas salvo que el cambio sea claro y necesario. |
| 318 | +* Priorizar comentarios en forma de **lista corta de puntos** (3–7 ítems) y frases breves en lugar de bloques de texto extensos. |
307 | 319 |
|
308 | 320 | --- |
309 | 321 |
|
310 | | -## Resumen operativo para Copilot (v18) |
| 322 | +## Resumen operativo para Copilot |
311 | 323 |
|
312 | 324 | 1. **Detecta cambios en modelos/vistas/seguridad/datos → exige bump de `version` en `__manifest__.py`.** |
313 | 325 | 2. **Si hay cambio estructural (según la lista actualizada) → propone y describe script(s) de migración en `migrations/` (pre/post/end)**, con enfoque idempotente y en lotes. |
|
0 commit comments