refacil-sdd-ai 2.0.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,10 +49,12 @@ refacil-sdd-ai update
49
49
  ## Comandos del CLI
50
50
 
51
51
  ```bash
52
- refacil-sdd-ai init # Instalar skills y crear configs en el repo actual
53
- refacil-sdd-ai update # Actualizar skills a la ultima version
54
- refacil-sdd-ai clean # Eliminar skills del repo
55
- refacil-sdd-ai help # Ver ayuda
52
+ refacil-sdd-ai init # Instalar skills, hooks y crear configs en el repo actual
53
+ refacil-sdd-ai update # Actualizar skills y hooks a la ultima version
54
+ refacil-sdd-ai check-update # Verifica si hay una version mas reciente en npm (usado por hook)
55
+ refacil-sdd-ai check-review # Verifica que el review se haya completado (usado por hook)
56
+ refacil-sdd-ai clean # Eliminar skills del repo
57
+ refacil-sdd-ai help # Ver ayuda
56
58
  ```
57
59
 
58
60
  ## Skills disponibles
@@ -95,11 +97,11 @@ Para mantener trazabilidad y calidad sin pasos innecesarios:
95
97
  2. `/refacil:apply`
96
98
  3. `/refacil:test`
97
99
  4. `/refacil:verify`
98
- 5. `/refacil:review`
100
+ 5. `/refacil:review` (automatico si no se ejecuto — ver [Hooks automaticos](#hooks-automaticos))
99
101
  6. `/refacil:archive`
100
102
  7. `/refacil:up-code`
101
103
 
102
- Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar en `review -> up-code`.
104
+ Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar con `up-code` (el review se ejecuta automaticamente si no se hizo).
103
105
 
104
106
  ## Flujos de trabajo
105
107
 
@@ -113,19 +115,23 @@ Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar en `review ->
113
115
  /refacil:verify
114
116
  # → Si hay correcciones: verify pregunta si aplicarlas automaticamente
115
117
  # → Si aprueba: aplica fixes y re-verifica (max 2 rondas)
116
- /refacil:review
118
+ /refacil:review # opcional — se ejecuta automaticamente en up-code si no se hizo
117
119
  /refacil:archive
118
- /refacil:up-code
120
+ /refacil:up-code # si falta review, lo ejecuta automaticamente antes del push
119
121
  ```
120
122
 
121
123
  ### Bug fix
122
124
 
123
125
  ```
124
126
  /refacil:bug "descripcion del error"
125
- /refacil:review
126
- /refacil:up-code
127
+ # → Investiga, implementa fix, genera tests de regresion
128
+ # → Crea trazabilidad en openspec/changes/fix-[ID]-[nombre]/summary.md
129
+ # → Pregunta por ID de ticket (ej. REF-123) para nombrar la carpeta
130
+ /refacil:up-code # ejecuta review automaticamente si no se hizo
127
131
  ```
128
132
 
133
+ > **Nota**: En una misma rama pueden corregirse multiples bugs. Cada uno genera su propia carpeta `fix-*` con su trazabilidad independiente.
134
+
129
135
  ### Explorar codigo
130
136
 
131
137
  ```
@@ -149,18 +155,61 @@ Antes de avanzar de etapa, valida estos estados:
149
155
  - `READY_FOR_APPLY`: artefactos SDD completos + aprobacion explicita
150
156
  - `READY_FOR_VERIFY`: implementacion terminada y enfocada al alcance
151
157
  - `READY_FOR_REVIEW`: verify ejecutado y bloqueantes tratados
152
- - `READY_FOR_ARCHIVE`: cambio funcionalmente cerrado
158
+ - `READY_FOR_ARCHIVE`: cambio funcionalmente cerrado + review aprobado (`.review-passed`)
153
159
  - `READY_FOR_MERGE`: rama lista para PR
154
160
 
161
+ ### Hooks automaticos
162
+
163
+ El paquete instala hooks en `.claude/settings.json` durante `init` y `update`:
164
+
165
+ | Hook | Evento | Que hace |
166
+ |------|--------|----------|
167
+ | `check-update` | `SessionStart` | Verifica si hay nueva version del paquete en npm e informa al usuario |
168
+ | `check-review` | `PreToolUse` (Bash) | Intercepta `git push` y verifica que exista `.review-passed` en cada cambio activo de `openspec/changes/`. Si falta, ejecuta `/refacil:review` automaticamente |
169
+
170
+ #### Flujo del hook de review
171
+
172
+ ```
173
+ /refacil:up-code (o git push manual)
174
+ → Hook check-review se dispara
175
+ → Busca carpetas en openspec/changes/ (excluye archive/)
176
+ → ¿Todas tienen .review-passed?
177
+ SI → permite el push
178
+ NO → bloquea y ejecuta /refacil:review automaticamente
179
+ → Si APROBADO: crea .review-passed, reintenta push
180
+ → Si REQUIERE CORRECCIONES: informa al usuario, no pushea
181
+ ```
182
+
183
+ #### Evidencia de review
184
+
185
+ Cuando `/refacil:review` aprueba un cambio, crea el archivo `.review-passed` en la carpeta del cambio:
186
+
187
+ ```
188
+ openspec/changes/mi-feature/
189
+ ├── proposal.md
190
+ ├── design.md
191
+ ├── tasks.md
192
+ ├── specs.md
193
+ └── .review-passed ← evidencia de review aprobado (JSON)
194
+
195
+ openspec/changes/fix-REF-123-login-timeout/
196
+ ├── summary.md ← trazabilidad del bug fix
197
+ └── .review-passed ← evidencia de review aprobado (JSON)
198
+ ```
199
+
200
+ El archivo `.review-passed` contiene: veredicto, fecha, resumen, cantidad de hallazgos y si hubo blockers.
201
+
155
202
  ## Como funciona
156
203
 
157
- 1. **`refacil-sdd-ai init`** copia las skills a `.claude/skills/` y `.cursor/skills/`, y crea `CLAUDE.md` + `.cursorrules`
204
+ 1. **`refacil-sdd-ai init`** copia las skills a `.claude/skills/` y `.cursor/skills/`, crea `CLAUDE.md` + `.cursorrules`, y configura hooks automaticos en `.claude/settings.json`
158
205
  2. **`/refacil:setup`** (en Claude Code o Cursor) instala OpenSpec, analiza el repo y genera un `AGENTS.md` personalizado
159
206
  3. Las demas skills (`propose`, `apply`, `test`, etc.) leen `AGENTS.md` para entender las convenciones del proyecto
207
+ 4. Los hooks garantizan calidad automaticamente: verificacion de version al iniciar sesion y review obligatorio antes de push
160
208
 
161
209
  ```
162
210
  refacil-sdd-ai init → Skills en .claude/ y .cursor/
163
211
  CLAUDE.md y .cursorrules creados
212
+ Hooks configurados en .claude/settings.json
164
213
 
165
214
  /refacil:setup → OpenSpec instalado
166
215
  AGENTS.md generado (analisis automatico del repo)
@@ -169,15 +218,17 @@ refacil-sdd-ai init → Skills en .claude/ y .cursor/
169
218
  /refacil:apply → Codigo implementado
170
219
  /refacil:test → Tests generados
171
220
  /refacil:verify → Validacion PASS/FAIL (puede aplicar fixes con aprobacion)
172
- /refacil:review → Review con checklist
221
+ /refacil:review → Review con checklist + .review-passed si aprueba
222
+ /refacil:bug → Fix + trazabilidad en openspec/changes/fix-*/summary.md
173
223
  /refacil:archive → Cambio archivado
174
- /refacil:up-code → Push a rama de desarrollo
224
+ /refacil:up-code → Review automatico (si falta) + push a rama de desarrollo
175
225
  ```
176
226
 
177
227
  ## Que se instala en tu repo
178
228
 
179
229
  ```
180
230
  .claude/skills/refacil-*/ # Claude Code (refacil-prereqs incluye OPENSPEC-DELTAS.md)
231
+ .claude/settings.json # Hooks automaticos (check-update + check-review)
181
232
  .cursor/skills/refacil-*/ # Cursor — copia equivalente
182
233
  .../refacil-setup/ # troubleshooting.md si falla install/PATH
183
234
  CLAUDE.md # Claude Code — apunta a AGENTS.md
package/bin/cli.js CHANGED
@@ -149,23 +149,48 @@ function installHook() {
149
149
  if (!settings.hooks) settings.hooks = {};
150
150
  if (!settings.hooks.SessionStart) settings.hooks.SessionStart = [];
151
151
 
152
- // Skip if already installed (marked with _sdd)
153
- const alreadyInstalled = settings.hooks.SessionStart.some(h => h._sdd === true);
154
- if (alreadyInstalled) {
155
- console.log(' Hook check-update ya configurado.');
156
- return false;
152
+ let changed = false;
153
+
154
+ // SessionStart: check-update
155
+ const hasUpdateHook = settings.hooks.SessionStart.some(h => h._sdd === true);
156
+ if (!hasUpdateHook) {
157
+ settings.hooks.SessionStart.push({
158
+ _sdd: true,
159
+ matcher: '',
160
+ hooks: [
161
+ {
162
+ type: 'command',
163
+ command: 'refacil-sdd-ai check-update',
164
+ },
165
+ ],
166
+ });
167
+ changed = true;
157
168
  }
158
169
 
159
- settings.hooks.SessionStart.push({
160
- _sdd: true,
161
- matcher: '',
162
- hooks: [
163
- {
164
- type: 'command',
165
- command: 'refacil-sdd-ai check-update',
166
- },
167
- ],
168
- });
170
+ // PreToolUse: check-review
171
+ if (!settings.hooks.PreToolUse) settings.hooks.PreToolUse = [];
172
+
173
+ const hasReviewHook = settings.hooks.PreToolUse.some(
174
+ (h) => h._sdd_review === true,
175
+ );
176
+ if (!hasReviewHook) {
177
+ settings.hooks.PreToolUse.push({
178
+ _sdd_review: true,
179
+ matcher: 'Bash',
180
+ hooks: [
181
+ {
182
+ type: 'command',
183
+ command: 'refacil-sdd-ai check-review',
184
+ },
185
+ ],
186
+ });
187
+ changed = true;
188
+ }
189
+
190
+ if (!changed) {
191
+ console.log(' Hooks SDD-AI ya configurados.');
192
+ return false;
193
+ }
169
194
 
170
195
  fs.mkdirSync(settingsDir, { recursive: true });
171
196
  fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
@@ -197,6 +222,55 @@ function checkUpdate() {
197
222
  }
198
223
  }
199
224
 
225
+ // --- Check review (PreToolUse hook) ---
226
+
227
+ function checkReview() {
228
+ // Read stdin (JSON from PreToolUse hook)
229
+ let input;
230
+ try {
231
+ const stdin = fs.readFileSync(0, 'utf8');
232
+ input = JSON.parse(stdin);
233
+ } catch (_) {
234
+ // If no stdin or invalid JSON, allow (not called from hook context)
235
+ return;
236
+ }
237
+
238
+ // Only block git push commands
239
+ const command = (input.tool_input && input.tool_input.command) || '';
240
+ if (!command.match(/git\s+push/)) return;
241
+
242
+ // Find active change in openspec/changes/ (exclude archive/)
243
+ const changesDir = path.join(projectRoot, 'openspec', 'changes');
244
+ if (!fs.existsSync(changesDir)) return; // No openspec, allow
245
+
246
+ const entries = fs.readdirSync(changesDir, { withFileTypes: true });
247
+ const activeChanges = entries.filter(
248
+ (e) => e.isDirectory() && e.name !== 'archive',
249
+ );
250
+
251
+ if (activeChanges.length === 0) return; // No active changes, allow
252
+
253
+ // Check if any active change is missing .review-passed
254
+ const missing = activeChanges.filter(
255
+ (e) => !fs.existsSync(path.join(changesDir, e.name, '.review-passed')),
256
+ );
257
+
258
+ if (missing.length > 0) {
259
+ const names = missing.map((e) => e.name).join(', ');
260
+ console.log(
261
+ JSON.stringify({
262
+ decision: 'block',
263
+ reason:
264
+ `[refacil-sdd-ai] Review pendiente para: ${names}. ` +
265
+ 'Ejecuta la skill /refacil:review automaticamente ahora sobre los cambios pendientes. ' +
266
+ 'Informa al usuario que el review se esta ejecutando automaticamente antes de subir el codigo. ' +
267
+ 'Si el review aprueba, reintenta el git push. ' +
268
+ 'Si el review requiere correcciones, informa los hallazgos al usuario y NO reintentar el push.',
269
+ }),
270
+ );
271
+ }
272
+ }
273
+
200
274
  // --- Commands ---
201
275
 
202
276
  function init() {
@@ -267,6 +341,7 @@ function help() {
267
341
  init Instala skills en .claude/ y .cursor/, crea CLAUDE.md y .cursorrules
268
342
  update Re-copia skills (para actualizar a nueva version del paquete)
269
343
  check-update Verifica si hay una version mas reciente en npm
344
+ check-review Verifica que el review se haya completado (usado por hook PreToolUse)
270
345
  clean Elimina skills de .claude/ y .cursor/
271
346
  help Muestra esta ayuda
272
347
 
@@ -296,6 +371,9 @@ switch (command) {
296
371
  case 'check-update':
297
372
  checkUpdate();
298
373
  break;
374
+ case 'check-review':
375
+ checkReview();
376
+ break;
299
377
  case 'clean':
300
378
  clean();
301
379
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "refacil-sdd-ai",
3
- "version": "2.0.9",
3
+ "version": "2.1.0",
4
4
  "description": "SDD-AI: Specification-Driven Development with AI — metodologia de desarrollo con IA usando OpenSpec, Claude Code y Cursor",
5
5
  "bin": {
6
6
  "refacil-sdd-ai": "./bin/cli.js"
@@ -103,7 +103,32 @@ describe('Bug Fix: [descripcion corta]', () => {
103
103
  });
104
104
  ```
105
105
 
106
- ### Paso 8: Verificar
106
+ ### Paso 8: Crear trazabilidad del fix (obligatorio)
107
+
108
+ Pregunta al usuario: **"Tienes un ID de tarea o ticket para este bug? (ej. REF-123, JIRA-456)"**
109
+ - Si responde con un ID → nombre de carpeta: `fix-[ID]-[descripcion-corta]` (ej. `fix-REF-123-login-timeout`)
110
+ - Si no tiene o quiere continuar → genera un nombre descriptivo corto: `fix-[descripcion-corta]` (maximo 3-4 palabras en kebab-case, ej. `fix-null-pointer-payment`)
111
+
112
+ **No uses el nombre de la rama** como nombre de carpeta — en una misma rama pueden corregirse multiples bugs, cada uno con su propia carpeta fix.
113
+
114
+ Crea la carpeta en `openspec/changes/[nombre-fix]/` con un archivo `summary.md`:
115
+
116
+ ```markdown
117
+ # Fix: [descripcion corta]
118
+
119
+ - **Fecha**: [fecha ISO]
120
+ - **Severidad**: [Critico|Alto|Medio|Bajo]
121
+ - **Causa raiz**: [explicacion breve]
122
+ - **Fix aplicado**: [que se cambio]
123
+ - **Archivos modificados**: [lista]
124
+ - **Tests de regresion**: [N] tests agregados
125
+ ```
126
+
127
+ Este archivo es obligatorio para la trazabilidad del fix y permite que el hook de review (`check-review`) detecte el cambio activo. El archivo `.review-passed` sera creado por `/refacil:review` al aprobar.
128
+
129
+ **Opcionalmente**, si el bug es significativo, el usuario puede pedir artefactos completos de OpenSpec (proposal.md, design.md, tasks.md, specs) en esta misma carpeta.
130
+
131
+ ### Paso 9: Verificar y siguientes pasos
107
132
 
108
133
  1. Resuelve el comando de tests segun `METHODOLOGY-CONTRACT.md` y ejecutalo — todos los tests deben pasar
109
134
  2. Muestra resumen del fix
@@ -115,25 +140,20 @@ describe('Bug Fix: [descripcion corta]', () => {
115
140
  Fix: [que se cambio]
116
141
  Archivos modificados: [lista]
117
142
  Tests de regresion: [N] tests agregados
143
+ Trazabilidad: openspec/changes/fix-[nombre]/summary.md
118
144
  [comando-test]: PASS
119
145
 
120
146
  Siguientes pasos:
121
- 1. /refacil:review — Review del fix (recomendado para bugs criticos)
147
+ 1. /refacil:review — Review del fix (obligatorio antes de push)
122
148
  2. /refacil:up-code — Subir los cambios a tu rama de desarrollo
123
149
  ```
124
150
 
125
- ### Paso 9 (opcional): Crear artefactos OpenSpec
126
-
127
- Si el bug es significativo, preguntar al usuario si quiere documentarlo en OpenSpec:
128
- - Crear carpeta en `openspec/changes/fix-[nombre]/`
129
- - Generar `proposal.md`, `design.md`, `tasks.md` y especificacion (`specs.md` y/o `specs/**/*.md`, misma regla que `refacil:propose`)
130
-
131
151
  ## Reglas
132
152
 
133
153
  - SIEMPRE investigar antes de proponer una correccion
134
154
  - NUNCA implementar sin aprobacion del usuario
135
155
  - El fix debe ser MINIMO — no aprovechar para refactorizar
136
156
  - Los tests de regresion son OBLIGATORIOS
137
- - Si el bug es en produccion (critico), priorizar velocidad pero sin saltarse tests
157
+ - Si el bug es en produccion (critico), priorizar velocidad pero sin saltarse tests ni trazabilidad
138
158
  - Responder en español con terminos tecnicos en ingles
139
159
  - Usa modo de salida **conciso** por defecto y **detallado** solo si el usuario lo pide (ver `METHODOLOGY-CONTRACT.md`)
@@ -12,7 +12,15 @@ Eres un reviewer exigente pero constructivo que evalua el codigo contra el check
12
12
 
13
13
  Lee `SKILL.md` en `.claude/skills/refacil-prereqs/` o `.cursor/skills/refacil-prereqs/` (misma skill en Claude Code y Cursor) y aplica el **perfil `agents`** antes de continuar.
14
14
  Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` y aplica el modo de salida definido ahi.
15
- Lee el archivo [checklist.md](checklist.md) para conocer los criterios de evaluacion.
15
+
16
+ ### Cargar checklists
17
+
18
+ 1. **Siempre** lee el checklist general: [checklist.md](checklist.md)
19
+ 2. **Detecta el tipo de proyecto** inspeccionando dependencias, `AGENTS.md`, o la estructura del repo:
20
+ - Si tiene frameworks de servidor, APIs, microservicios, acceso a BD, colas o workers → lee tambien [checklist-back.md](checklist-back.md)
21
+ - Si tiene estructura de componentes UI, manejo de estado en cliente, rutas/vistas o consume APIs para renderizar interfaces → lee tambien [checklist-front.md](checklist-front.md)
22
+ - Si es fullstack (tiene ambos) → lee ambos checklists especificos
23
+ 3. Evalua **solo** los items de los checklists que apliquen. Marca N/A en items que no correspondan al tipo de proyecto.
16
24
 
17
25
  ## Instrucciones
18
26
 
@@ -68,22 +76,71 @@ BLOCKERS: [si/no]
68
76
  - Evidencia: [archivo/rango o comportamiento]
69
77
  - Correccion sugerida: [accion concreta]
70
78
 
71
- ## Checklist resumido
79
+ ## Checklist General
80
+ - Alcance y foco: [PASS/FAIL/N/A]
72
81
  - Conformidad con Spec: [PASS/FAIL/N/A]
73
82
  - Calidad de Codigo: [PASS/FAIL/N/A]
74
83
  - Arquitectura: [PASS/FAIL/N/A]
84
+ - Manejo de errores: [PASS/FAIL/N/A]
75
85
  - Testing: [PASS/FAIL/N/A]
76
86
  - Seguridad: [PASS/FAIL/N/A]
77
- - Performance: [PASS/FAIL/N/A]
78
- - Mantenibilidad: [PASS/FAIL/N/A]
87
+ - Dependencias: [PASS/FAIL/N/A]
88
+ - Mantenibilidad y observabilidad: [PASS/FAIL/N/A]
79
89
  - Git y Deploy: [PASS/FAIL/N/A]
80
90
  - Reglas del proyecto (AGENTS.md): [PASS/FAIL/N/A]
81
91
 
92
+ ## Checklist Backend (si aplica)
93
+ - Validacion de entrada: [PASS/FAIL/N/A]
94
+ - Contratos de API: [PASS/FAIL/N/A]
95
+ - Manejo de errores: [PASS/FAIL/N/A]
96
+ - Arquitectura y patrones: [PASS/FAIL/N/A]
97
+ - Concurrencia y atomicidad: [PASS/FAIL/N/A]
98
+ - Consultas a BD: [PASS/FAIL/N/A]
99
+ - Caching: [PASS/FAIL/N/A]
100
+ - Resiliencia y conexiones: [PASS/FAIL/N/A]
101
+ - Colas y mensajeria: [PASS/FAIL/N/A]
102
+ - Performance: [PASS/FAIL/N/A]
103
+ - Logging: [PASS/FAIL/N/A]
104
+ - Testing backend: [PASS/FAIL/N/A]
105
+
106
+ ## Checklist Frontend (si aplica)
107
+ - Componentes y estructura: [PASS/FAIL/N/A]
108
+ - Estado y datos: [PASS/FAIL/N/A]
109
+ - Manejo de errores en UI: [PASS/FAIL/N/A]
110
+ - Integracion con APIs: [PASS/FAIL/N/A]
111
+ - Validacion de formularios: [PASS/FAIL/N/A]
112
+ - Ruteo y navegacion: [PASS/FAIL/N/A]
113
+ - Consistencia visual: [PASS/FAIL/N/A]
114
+ - Performance frontend: [PASS/FAIL/N/A]
115
+ - Accesibilidad: [PASS/FAIL/N/A]
116
+ - Seguridad frontend: [PASS/FAIL/N/A]
117
+ - Testing frontend: [PASS/FAIL/N/A]
118
+
82
119
  ## Correcciones minimas para aprobar
83
120
  1. [item accionable]
84
121
  2. [item accionable]
85
122
  ```
86
123
 
124
+ ### Paso 5: Marcador de review (obligatorio si APROBADO)
125
+
126
+ Si el veredicto es **APROBADO** o **APROBADO CON OBSERVACIONES**, crea un archivo marcador en el directorio del cambio activo:
127
+
128
+ **Ruta:** `openspec/changes/[nombre-cambio]/.review-passed`
129
+
130
+ **Contenido (JSON):**
131
+ ```json
132
+ {
133
+ "verdict": "APROBADO|APROBADO CON OBSERVACIONES",
134
+ "date": "<fecha ISO actual>",
135
+ "changeName": "<nombre-cambio>",
136
+ "summary": "<resumen de 1 linea del resultado>",
137
+ "failCount": <numero de FAILs encontrados>,
138
+ "blockers": false
139
+ }
140
+ ```
141
+
142
+ Este archivo es evidencia de que el review se completo y es requerido por el hook de `PreToolUse` antes de permitir `git push`. No lo crees si el veredicto es REQUIERE CORRECCIONES.
143
+
87
144
  ## Reglas
88
145
 
89
146
  - Ser constructivo: no solo decir que falla, sino como corregirlo
@@ -0,0 +1,91 @@
1
+ # Checklist Backend — Equipo Refacil
2
+
3
+ > Complementa el [checklist general](checklist.md). Aplica a repositorios **backend** (APIs, microservicios, workers, colas).
4
+ > Detectar tipo: si el proyecto tiene frameworks de servidor (HTTP, gRPC, mensajeria), estructura de microservicios, o acceso a base de datos, aplica este checklist.
5
+ > Marcar N/A en secciones que no apliquen al cambio revisado (ej. colas si el cambio no toca mensajeria).
6
+
7
+ ## B1. Validacion de entrada
8
+ - Los DTOs/objetos de entrada de endpoints usan el mecanismo de validacion automatica del framework
9
+ - Cada campo declara tipo y restricciones (obligatorio, formato, rango)
10
+ - Endpoints nombrados en kebab-case (`get-user-info`, `create-payment`)
11
+ - No se confian datos del cliente sin validar (query params, headers, body)
12
+
13
+ ## B2. Contratos de API
14
+ - Las respuestas usan una estructura consistente (no retornar formatos distintos segun el caso)
15
+ - Los codigos HTTP son correctos y especificos (no todo es 200 o 500)
16
+ - Los DTOs de respuesta no exponen campos internos (IDs de BD, campos de auditoria, relaciones internas)
17
+ - Si el endpoint es consumido por otro servicio: verificar que no se introduzcan breaking changes en el contrato (campos renombrados, eliminados o con tipo diferente)
18
+ - Los errores retornan un formato estandar con mensaje entendible para el consumidor
19
+
20
+ ## B3. Manejo de errores (estandar Refacil)
21
+ - No hay bloques try/catch anidados o multiples en un mismo hilo de peticion
22
+ - Los errores se capturan, loggean y devuelven respuestas formateadas
23
+ - Modulos/servicios nuevos usan el filtro o middleware global de excepciones del proyecto (si existe)
24
+ - Se distingue entre errores del cliente (4xx) y errores del servidor (5xx)
25
+ - Los errores de dependencias externas (APIs, BD, colas) se manejan con mensajes propios, no se propagan tal cual al consumidor
26
+
27
+ ## B4. Arquitectura y patrones
28
+ - **Responsabilidad por capas**: no hay logica de negocio en la capa de transporte (controllers/handlers) ni en la capa de infraestructura (repositorios/adaptadores)
29
+ - Los DTOs estan en la capa correcta (entrada en transporte, salida en aplicacion)
30
+ - Repository Pattern para acceso a datos (si el proyecto tiene un repositorio base, los nuevos lo extienden)
31
+ - Si es un microservicio nuevo, sigue la estructura definida en AGENTS.md (hexagonal, clean architecture, etc.)
32
+ - Las dependencias fluyen en la direccion correcta segun la arquitectura del proyecto
33
+
34
+ ## B5. Concurrencia y atomicidad
35
+ - Las operaciones que modifican multiples registros o tablas usan transacciones de BD (todo o nada)
36
+ - Los endpoints de escritura criticos (pagos, transferencias, creacion de ordenes) son **idempotentes**: si se reintentan, no duplican el efecto
37
+ ```
38
+ // Patron: verificar si la operacion ya se ejecuto antes de procesarla
39
+ SI existeOperacion(idempotencyKey) ENTONCES retornar resultado_existente
40
+ SINO ejecutar operacion Y guardar resultado con idempotencyKey
41
+ ```
42
+ - Si multiples procesos pueden modificar el mismo recurso al mismo tiempo, se usan locks distribuidos o versionado optimista para evitar race conditions
43
+ - Las operaciones de lectura-modificacion-escritura son atomicas (no leer, procesar en memoria y escribir sin proteccion)
44
+
45
+ ## B6. Consultas a BD
46
+ - No hay bucles para traer informacion de distintas fuentes de datos
47
+ - Si se necesitan datos cruzados, crear una funcion que use JOINs o consultas optimizadas internamente
48
+ - Las consultas usan indices apropiados
49
+ - No hay queries N+1
50
+ - No hay inyeccion SQL/NoSQL posible (queries parametrizadas con el ORM/driver del proyecto)
51
+ - Las migraciones (si hay) son reversibles y no rompen datos existentes
52
+
53
+ ## B7. Caching
54
+ - Consultas repetitivas a BD usan cache **distribuido** (no cache local en memoria del proceso — evitar reinicios por falta de RAM)
55
+ - El patron es: verificar cache -> si no hay, consultar BD -> guardar en cache con TTL
56
+ - Las claves de cache son especificas y predecibles (incluyen los parametros que hacen unica la consulta)
57
+ - Se invalida el cache cuando los datos subyacentes cambian (si aplica)
58
+ - El TTL es apropiado para el tipo de dato (configuracion: largo, datos transaccionales: corto o sin cache)
59
+
60
+ ## B8. Resiliencia y conexiones
61
+ - Todas las llamadas externas (HTTP, gRPC, BD, colas) tienen **timeout configurado** (no esperar indefinidamente)
62
+ - Si una dependencia externa falla, la respuesta degrada de forma controlada (fallback, mensaje de error claro, reintento)
63
+ - Connection pooling en BD y clientes HTTP (no abrir/cerrar conexion por cada peticion)
64
+ - Las conexiones se liberan correctamente (en bloques finally o equivalente)
65
+ - Si el proyecto usa circuit breaker, las llamadas a servicios inestables lo implementan
66
+
67
+ ## B9. Colas y mensajeria (si aplica)
68
+ - Los consumers son **idempotentes**: procesar el mismo mensaje dos veces no duplica el efecto
69
+ - Se confirma el procesamiento (ack) **despues** de completar la operacion, no antes
70
+ - Los mensajes que fallan repetidamente van a una dead letter queue (no se pierden ni bloquean la cola)
71
+ - Los producers no pierden mensajes si la cola no esta disponible (retry o persistencia local)
72
+ - Los payloads de mensajes contienen la informacion suficiente para procesarse sin consultas adicionales innecesarias
73
+
74
+ ## B10. Performance
75
+ - Las operaciones pesadas o de larga duracion son asincronas (colas, workers, background jobs)
76
+ - No hay memory leaks obvios (subscriptions sin unsubscribe, listeners sin cleanup, conexiones sin cerrar, timers sin cancelar)
77
+ - Los endpoints con respuesta pesada usan paginacion
78
+ - No se cargan relaciones completas de BD si solo se necesitan campos puntuales (select especifico)
79
+
80
+ ## B11. Logging (estandar Refacil)
81
+ - Se usa el logger centralizado del proyecto (no prints directos a consola), si ya se tiene en el repositorio
82
+ - Procesos criticos en la operacion (ventas, transacciones, pagos) tienen logs
83
+ - Se loggean propiedades especificas y necesarias — nunca objetos complejos ni entidades con relaciones completas
84
+ - Los logs en catch contienen informacion suficiente para diagnosticar el error (que fallo, con que datos, en que contexto)
85
+ - Los logs tienen nivel apropiado: error para fallos, warn para situaciones inesperadas recuperables, info para flujos criticos de negocio
86
+
87
+ ## B12. Testing backend
88
+ - Tests de integracion con BD real para repositorios y queries complejas (no solo mocks)
89
+ - Tests de los contratos de API (request valido retorna estructura esperada, request invalido retorna error formateado)
90
+ - Tests de casos de error (dependencia caida, timeout, datos invalidos)
91
+ - Si hay concurrencia critica: tests que validen idempotencia o atomicidad
@@ -0,0 +1,72 @@
1
+ # Checklist Frontend — Equipo Refacil
2
+
3
+ > Complementa el [checklist general](checklist.md). Aplica a repositorios **frontend** (aplicaciones web, mobile, desktop con UI).
4
+ > Detectar tipo: si el proyecto tiene estructura de componentes UI, manejo de estado en cliente, rutas/vistas, o consume APIs para renderizar interfaces, aplica este checklist.
5
+
6
+ ## F1. Componentes y estructura
7
+ - Los componentes tienen una sola responsabilidad (no mezclan logica de negocio con presentacion)
8
+ - La logica compleja esta separada en funciones auxiliares, servicios o el patron de reutilizacion del framework
9
+ - Los componentes reutilizables estan en la carpeta compartida del proyecto (consultar AGENTS.md)
10
+ - No hay componentes excesivamente grandes (> 200 lineas como guia — considerar extraer)
11
+
12
+ ## F2. Estado y datos
13
+ - El estado se maneja en el nivel mas cercano a donde se necesita (evitar pasar datos innecesariamente por multiples niveles)
14
+ - No hay estado duplicado o derivable que pueda calcularse
15
+ - Las llamadas a APIs usan el patron establecido en el proyecto (consultar AGENTS.md)
16
+ - Se manejan los 4 estados de cada vista que consume datos: carga, error, vacio y con datos
17
+
18
+ ## F3. Manejo de errores en UI
19
+ - Existe manejo de errores a nivel de componente o seccion (que la app no se caiga entera por un error en un widget)
20
+ - Las pantallas de error muestran feedback visual claro al usuario (nunca pantallas en blanco o rotas)
21
+ - Los errores inesperados se capturan y loggean (si el proyecto tiene servicio de monitoreo)
22
+ - Sin errores ni warnings en consola del navegador en flujos normales
23
+
24
+ ## F4. Integracion con APIs
25
+ - Se manejan los estados de red: reintentos, timeout, desconexion
26
+ - Las peticiones se cancelan al desmontar el componente o navegar fuera (evitar actualizaciones de estado en componentes ya destruidos)
27
+ - Listas largas usan paginacion o scroll infinito con carga incremental
28
+ - Se evitan llamadas duplicadas o innecesarias al mismo endpoint
29
+
30
+ ## F5. Validacion de formularios
31
+ - Los formularios validan entrada del usuario antes de enviar
32
+ - Los mensajes de error son claros y en el idioma del usuario
33
+ - Se previene el doble envio (deshabilitar boton, estado de carga)
34
+
35
+ ## F6. Ruteo y navegacion
36
+ - Las rutas protegidas validan autenticacion/autorizacion antes de renderizar
37
+ - Existe manejo de rutas no encontradas (pantalla 404 o redireccion)
38
+ - Deep linking funciona correctamente (acceder directo a una URL interna)
39
+ - Las redirecciones post-login/logout son correctas
40
+
41
+ ## F7. Consistencia visual
42
+ - Se usan los componentes y tokens del sistema de diseno del proyecto (consultar AGENTS.md)
43
+ - Se respeta la escala de espaciado y tipografia definida
44
+ - No hay estilos inline innecesarios si el proyecto tiene un sistema de estilos definido
45
+ - Iconos e imagenes optimizados (formatos adecuados, tamanos correctos)
46
+ - No hay texto hardcodeado si el proyecto usa internacionalizacion (i18n)
47
+ - La UI es responsive si aplica al proyecto
48
+
49
+ ## F8. Performance frontend
50
+ - No hay re-renderizados innecesarios (usar las tecnicas de memoizacion/optimizacion del framework)
51
+ - Code splitting / carga diferida de rutas o modulos pesados
52
+ - Las imagenes usan carga diferida (lazy loading)
53
+ - Fuentes optimizadas (precarga, fallback definido)
54
+ - No se cargan dependencias pesadas sin necesidad (evaluar tamano del bundle)
55
+ - Sin dependencias duplicadas en el bundle
56
+ - Las listas largas usan virtualizacion si aplica
57
+
58
+ ## F9. Accesibilidad (a11y)
59
+ - Los elementos interactivos tienen etiquetas accesibles (labels, textos alternativos, roles ARIA)
60
+ - La navegacion por teclado funciona correctamente
61
+ - El contraste de colores es adecuado
62
+ - Los targets tactiles tienen tamano minimo adecuado (44x44px como guia)
63
+
64
+ ## F10. Seguridad frontend
65
+ - No hay datos sensibles expuestos en el cliente (tokens, secrets, API keys en codigo fuente)
66
+ - Los inputs estan sanitizados para prevenir XSS
67
+ - No se almacenan tokens o datos sensibles en almacenamiento del cliente sin proteccion adecuada
68
+
69
+ ## F11. Testing frontend
70
+ - Tests de interaccion de usuario (clicks, formularios, navegacion)
71
+ - Tests de los 4 estados visuales (carga, error, vacio, con datos)
72
+ - Los tests verifican comportamiento del usuario, no detalles de implementacion
@@ -1,77 +1,112 @@
1
- # Checklist de Calidad — Equipo Refacil
1
+ # Checklist General — Equipo Refacil
2
2
 
3
- > **IMPORTANTE**: Este checklist es generico. Antes de evaluar, lee `AGENTS.md` del proyecto para adaptar cada seccion al stack, arquitectura y convenciones reales del repositorio. Si AGENTS.md indica patrones, frameworks o reglas especificas, usalas en lugar de los ejemplos genericos de abajo.
3
+ > Aplica a **todos** los repositorios (backend, frontend, fullstack), independiente del lenguaje o framework.
4
+ > Antes de evaluar, lee `AGENTS.md` del proyecto para adaptar cada seccion al stack real.
4
5
  > Si `AGENTS.md` no existe, aplica este checklist como baseline y marca N/A en reglas que dependan de convenciones no documentadas.
6
+ > **Ademas de este checklist**, carga el checklist especifico del tipo de proyecto:
7
+ > - Backend: [checklist-back.md](checklist-back.md)
8
+ > - Frontend: [checklist-front.md](checklist-front.md)
5
9
 
6
10
  ## Como usar este checklist (metodologia)
7
11
  1. Define alcance de revision: `$ARGUMENTS` > `openspec/changes/` > `git diff`.
8
- 2. Evalua primero bloqueantes: Spec, Testing y Seguridad.
9
- 3. Luego evalua Calidad, Arquitectura, Performance y Mantenibilidad.
12
+ 2. Evalua primero bloqueantes: Alcance, Spec, Testing y Seguridad.
13
+ 3. Luego evalua Calidad, Arquitectura, Errores, Dependencias y Mantenibilidad.
10
14
  4. Marca cada item como PASS, FAIL o N/A con una justificacion breve.
11
15
  5. Para cada FAIL, agrega severidad: CRITICO, ALTO, MEDIO o BAJO.
12
16
  6. Si hay muchos FAIL, prioriza los 5 de mayor impacto.
13
17
 
14
- ## 1. Conformidad con Spec
18
+ ## 1. Alcance y foco
19
+ - El cambio hace **una sola cosa** (no mezcla features con refactors, ni correcciones con mejoras no solicitadas)
20
+ - No se implemento funcionalidad fuera del alcance de la spec o del bug reportado
21
+ - Si hay cambios no relacionados, deben estar en un commit o PR separado
22
+ - El tamano del cambio es razonable para revisar (si es demasiado grande, sugerir dividir)
23
+
24
+ ## 2. Conformidad con Spec
15
25
  - Todos los criterios de aceptacion de la spec estan cubiertos
16
- - No se implemento funcionalidad fuera del alcance de la spec
17
26
  - Los criterios de rechazo (edge cases) estan manejados
18
27
  - El modelo de datos coincide con lo especificado
28
+ - No hay diferencias entre lo que dice la spec y lo que hace el codigo
29
+
30
+ ## 3. Calidad de Codigo
31
+
32
+ ### Tipado (estandar Refacil)
33
+ - No hay uso de tipos genericos sin restriccion (ej. `any`, `object`, `dynamic`) — usar interfaces, tipos concretos o genericos tipados
34
+ - Se definen interfaces/DTOs para el transporte de datos entre capas
19
35
 
20
- ## 2. Calidad de Codigo
21
- - El codigo sigue los patrones existentes del repo (consultar AGENTS.md seccion de arquitectura/convenciones)
36
+ ### Validacion de objetos (estandar Refacil)
37
+ - Se valida el objeto Y la propiedad antes de acceder (null-safe access o guard clause)
38
+ - No hay accesos directos a propiedades de objetos que pueden ser nulos o indefinidos
39
+
40
+ ### Naming (estandar Refacil)
41
+ - **Variables**: camelCase — **Clases**: PascalCase — **Archivos**: kebab-case con tipo de componente
42
+ - Nombres autodocumentados: el nombre explica el fin del componente sin necesidad de comentarios
43
+
44
+ ### Limpieza
45
+ - El codigo sigue los patrones existentes del repo (consultar AGENTS.md)
22
46
  - No hay codigo duplicado que pueda extraerse
23
- - Los nombres de variables, funciones y clases son claros y descriptivos
24
- - No hay `console.log` fuera de bloques `catch` (permitido solo para diagnostico de errores), TODO, o codigo comentado sin razon
25
- - Los imports usan los alias configurados del proyecto (consultar AGENTS.md seccion de alias de rutas, si aplica)
47
+ - Se prefieren variables inmutables (evitar mutaciones innecesarias)
48
+ - No hay prints/logs de debug sueltos, TODO sin ticket asociado, o codigo comentado sin razon
49
+ - Se usan enums y constantes para valores fijos valores configurables van en archivos de configuracion, no hardcodeados
50
+ - Los imports usan los alias del proyecto (si aplica)
26
51
  - No hay dependencias circulares nuevas
27
52
 
28
- ## 3. Arquitectura
53
+ ## 4. Arquitectura
54
+ - **SRP**: cada clase/funcion tiene una sola responsabilidad
55
+ - **KISS**: la solucion es tan simple como sea posible — no hay sobreingenieria ni abstracciones prematuras
56
+ - La logica esta separada en unidades con un solo fin, reutilizables
57
+ - No se envian mas de 4 parametros a un metodo — si se necesitan mas, encapsular en un objeto/DTO
29
58
  - Se respetan los limites y capas definidos en AGENTS.md
30
- - Las dependencias fluyen en la direccion correcta segun la arquitectura del proyecto
31
- - No hay logica de negocio en la capa de infraestructura o transporte
32
- - Las interfaces/puertos estan en la capa correcta segun las convenciones del repo
33
- - Los DTOs estan en la capa correcta
59
+ - No se introduce acoplamiento innecesario entre modulos o servicios
60
+
61
+ > La arquitectura varia por proyecto. Consultar AGENTS.md para saber cual aplica.
34
62
 
35
- > **Nota**: La arquitectura varia por proyecto (DDD, MVC, Clean Architecture, Hexagonal, etc.). Consultar AGENTS.md para saber cual aplica y evaluar en consecuencia.
63
+ ## 5. Manejo de errores
64
+ - Los errores se manejan de forma consistente con el resto del proyecto
65
+ - Los mensajes de error son utiles para diagnosticar (que fallo, en que contexto)
66
+ - No se exponen detalles internos al usuario/consumidor (stack traces, rutas internas, IDs de BD)
67
+ - Los errores esperados (validacion, negocio) se distinguen de los inesperados (sistema, infraestructura)
68
+ - No hay errores silenciados (catch vacio sin log ni manejo)
36
69
 
37
- ## 4. Testing
70
+ ## 6. Testing
38
71
  - Cada archivo nuevo/modificado tiene su archivo de test correspondiente
39
72
  - Los tests cubren los criterios de aceptacion de la spec
40
73
  - Hay tests para edge cases y escenarios de error
41
- - Los mocks son minimos y necesarios
42
- - Los tests son independientes entre si
74
+ - Los tests validan **comportamiento**, no detalles de implementacion (no se rompen al refactorizar)
75
+ - Los mocks son minimos y necesarios — no se mockea lo que se puede probar directamente
76
+ - Los tests son independientes entre si (no dependen de orden de ejecucion ni de estado compartido)
43
77
  - Coverage >= 80% en archivos nuevos
44
78
  - Los tests pasan sin errores (ejecutar el comando de test indicado en AGENTS.md)
45
79
 
46
- ## 5. Seguridad
47
- - No hay secrets hardcodeados (passwords, API keys, tokens)
48
- - Los inputs del usuario estan validados (usar la libreria de validacion del proyecto)
49
- - No hay inyeccion SQL posible (queries parametrizadas con el ORM del proyecto)
50
- - Los endpoints sensibles tienen autorizacion adecuada
51
- - No se expone informacion sensible en logs o respuestas de error
80
+ ## 7. Seguridad
81
+ - No hay secrets hardcodeados (passwords, API keys, tokens, URLs internas de servicios)
82
+ - Los inputs del usuario estan validados antes de procesarse
83
+ - Los endpoints o rutas sensibles tienen autorizacion adecuada
84
+ - No se expone informacion sensible en logs, respuestas de error o codigo fuente del cliente
85
+ - No hay dependencias con vulnerabilidades conocidas criticas (verificar si el proyecto tiene audit configurado)
52
86
 
53
- ## 6. Performance
54
- - Las consultas a base de datos usan indices apropiados
55
- - No hay queries N+1
56
- - Las operaciones pesadas son asincronas donde corresponde
57
- - No hay memory leaks obvios (subscriptions sin unsubscribe, listeners sin cleanup, etc.)
87
+ ## 8. Dependencias
88
+ - Las dependencias nuevas estan justificadas (no se agrega una libreria para algo que se puede hacer en pocas lineas)
89
+ - La licencia es compatible con el proyecto
90
+ - La dependencia esta activamente mantenida (no abandonada)
91
+ - No duplica funcionalidad que ya existe en el proyecto o en otra dependencia instalada
92
+ - La version esta fijada o usa rango seguro (no `*` ni `latest`)
58
93
 
59
- ## 7. Mantenibilidad
94
+ ## 9. Mantenibilidad y observabilidad
60
95
  - El codigo es autoexplicativo (comentarios solo donde la logica no es obvia)
61
- - Las funciones hacen una sola cosa
62
96
  - Los archivos no son excesivamente largos (< 400 lineas como guia)
63
- - El manejo de errores es consistente con el resto del proyecto
97
+ - Si algo falla en produccion, hay suficiente informacion para diagnosticar (logs, trazas, contexto en errores)
98
+ - Los cambios en configuracion estan documentados (variables de entorno nuevas, flags, parametros)
64
99
 
65
- ## 8. Git y Deploy
100
+ ## 10. Git y Deploy
66
101
  - Los commits son atomicos y tienen mensajes descriptivos
67
- - No hay archivos generados o temporales en el commit
68
- - Las migraciones de BD (si hay) son reversibles
102
+ - No hay archivos generados, temporales o sensibles en el commit (verificar .gitignore)
69
103
  - No hay breaking changes no documentados
104
+ - Si hay migraciones, son reversibles y no rompen datos existentes
70
105
 
71
- ## 9. Reglas especificas del proyecto
106
+ ## 11. Reglas especificas del proyecto
72
107
  - Consultar la seccion "Reglas criticas" de AGENTS.md
73
108
  - Evaluar contra las reglas de "Siempre hacer", "Nunca hacer" y "Preguntar primero"
74
- - Si AGENTS.md define reglas adicionales (ej: zona horaria, formato de fechas, naming conventions), verificar su cumplimiento
109
+ - Si AGENTS.md define reglas adicionales, verificar su cumplimiento
75
110
 
76
111
  ## Criterio de salida del review
77
112
  - **APROBADO**: No hay FAILs CRITICOS/ALTOS.