refacil-sdd-ai 1.0.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 +145 -0
- package/bin/cli.js +207 -0
- package/config/openspec-config.yaml +8 -0
- package/package.json +36 -0
- package/skills/apply/SKILL.md +48 -0
- package/skills/archive/SKILL.md +72 -0
- package/skills/bug/SKILL.md +128 -0
- package/skills/explore/SKILL.md +42 -0
- package/skills/guide/SKILL.md +141 -0
- package/skills/propose/SKILL.md +63 -0
- package/skills/review/SKILL.md +104 -0
- package/skills/review/checklist.md +62 -0
- package/skills/setup/SKILL.md +145 -0
- package/skills/test/SKILL.md +113 -0
- package/skills/test/testing-patterns.md +150 -0
- package/skills/verify/SKILL.md +65 -0
- package/templates/claude-md.md +23 -0
- package/templates/cursorrules.md +21 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:guide
|
|
3
|
+
description: Guia interactiva de la metodologia SDD-AI — explica que comando usar segun lo que necesites hacer
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:guide — Guia de la Metodologia SDD-AI
|
|
8
|
+
|
|
9
|
+
Eres un guia interactivo que ayuda al desarrollador a entender la metodologia y elegir el comando correcto.
|
|
10
|
+
|
|
11
|
+
## Instrucciones
|
|
12
|
+
|
|
13
|
+
Preguntale al usuario que necesita hacer. Basandote en su respuesta, explicale el flujo correspondiente y el comando que debe ejecutar.
|
|
14
|
+
|
|
15
|
+
Presenta estas opciones:
|
|
16
|
+
|
|
17
|
+
1. **Crear un feature nuevo** — Quiero implementar una funcionalidad nueva
|
|
18
|
+
2. **Corregir un bug** — Tengo un error que necesito investigar y corregir
|
|
19
|
+
3. **Explorar el codigo** — Quiero entender como funciona algo antes de hacer cambios
|
|
20
|
+
4. **Generar tests** — Necesito crear pruebas unitarias para codigo existente o nuevo
|
|
21
|
+
5. **Revisar mi implementacion** — Quiero validar que mi codigo cumple los estandares
|
|
22
|
+
6. **Configurar el repo** — Necesito instalar/configurar las herramientas
|
|
23
|
+
|
|
24
|
+
## Respuestas por opcion
|
|
25
|
+
|
|
26
|
+
### Opcion 1: Feature nuevo
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
FLUJO PARA NUEVO FEATURE:
|
|
30
|
+
|
|
31
|
+
1. /refacil:propose <descripcion>
|
|
32
|
+
Crea una propuesta completa con: proposal, specs, design y tasks.
|
|
33
|
+
La IA te guia para definir todos los artefactos.
|
|
34
|
+
|
|
35
|
+
2. /refacil:apply
|
|
36
|
+
Implementa las tasks definidas en el paso anterior.
|
|
37
|
+
La IA escribe el codigo siguiendo el plan.
|
|
38
|
+
|
|
39
|
+
3. /refacil:test
|
|
40
|
+
Genera tests unitarios basados en las specs y el design.
|
|
41
|
+
Cada criterio de aceptacion se convierte en al menos 1 test.
|
|
42
|
+
|
|
43
|
+
4. /refacil:verify
|
|
44
|
+
Valida que la implementacion cumple con las specs.
|
|
45
|
+
Revisa completitud, correccion y coherencia.
|
|
46
|
+
|
|
47
|
+
5. /refacil:review
|
|
48
|
+
Review con el checklist de calidad del equipo.
|
|
49
|
+
Evalua codigo, arquitectura, testing, seguridad y performance.
|
|
50
|
+
|
|
51
|
+
6. /refacil:archive
|
|
52
|
+
Archiva el cambio completado. Mueve artefactos a archive/.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Opcion 2: Bug fix
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
FLUJO PARA BUG FIX:
|
|
59
|
+
|
|
60
|
+
1. /refacil:bug <descripcion del error>
|
|
61
|
+
Flujo guiado completo:
|
|
62
|
+
- Describes el bug (que pasa, que deberia pasar)
|
|
63
|
+
- La IA investiga la causa raiz en el codebase
|
|
64
|
+
- Te presenta hipotesis para confirmar
|
|
65
|
+
- Propone e implementa la correccion
|
|
66
|
+
- Genera tests de regresion automaticamente
|
|
67
|
+
- Ejecuta los tests para verificar
|
|
68
|
+
|
|
69
|
+
2. /refacil:review (opcional)
|
|
70
|
+
Review con checklist si el fix es complejo.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Opcion 3: Explorar
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
FLUJO PARA EXPLORACION:
|
|
77
|
+
|
|
78
|
+
1. /refacil:explore <que quieres entender>
|
|
79
|
+
Investiga el codebase sin hacer cambios.
|
|
80
|
+
Analiza arquitectura, flujos, dependencias.
|
|
81
|
+
Genera un reporte con hallazgos.
|
|
82
|
+
Util antes de proponer un cambio grande.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Opcion 4: Tests
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
FLUJO PARA GENERAR TESTS:
|
|
89
|
+
|
|
90
|
+
1. /refacil:test
|
|
91
|
+
Si hay un cambio activo en openspec/changes/, genera tests
|
|
92
|
+
basados en los artefactos (specs, design, tasks).
|
|
93
|
+
|
|
94
|
+
Si no hay cambio activo, puedes pasar un archivo o directorio:
|
|
95
|
+
/refacil:test src/mi-servicio.ts
|
|
96
|
+
Genera tests para ese archivo especifico.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Opcion 5: Review
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
FLUJO PARA REVIEW:
|
|
103
|
+
|
|
104
|
+
1. /refacil:review
|
|
105
|
+
Evalua la implementacion contra el checklist del equipo:
|
|
106
|
+
- Conformidad con specs
|
|
107
|
+
- Calidad de codigo y patrones
|
|
108
|
+
- Arquitectura DDD
|
|
109
|
+
- Testing (coverage >= 80%)
|
|
110
|
+
- Seguridad (OWASP top 10)
|
|
111
|
+
- Performance (N+1, async, indices)
|
|
112
|
+
|
|
113
|
+
Genera un reporte PASS/FAIL/N/A por cada item.
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Opcion 6: Setup
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
CONFIGURACION:
|
|
120
|
+
|
|
121
|
+
1. /refacil:setup
|
|
122
|
+
Verifica e instala todo lo necesario:
|
|
123
|
+
- Node.js >= 20.19.0
|
|
124
|
+
- OpenSpec
|
|
125
|
+
- Inicializacion del repo
|
|
126
|
+
- Configuracion de convenciones
|
|
127
|
+
- Verificacion de AGENTS.md y skills
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Tips
|
|
131
|
+
|
|
132
|
+
Despues de explicar el flujo, ofrece estos tips segun la herramienta:
|
|
133
|
+
|
|
134
|
+
**Claude Code:**
|
|
135
|
+
- Los comandos se ejecutan escribiendo `/refacil:comando` en el chat
|
|
136
|
+
- Usa `/plan` antes de implementar para ver el plan sin escribir codigo
|
|
137
|
+
|
|
138
|
+
**Cursor:**
|
|
139
|
+
- Los comandos se ejecutan en Composer (Ctrl+I / Cmd+I) escribiendo `/refacil:comando`
|
|
140
|
+
- Usa @ para agregar archivos de contexto adicionales
|
|
141
|
+
- Activa "Codebase" en Composer para contexto completo del repo
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:propose
|
|
3
|
+
description: Crear una propuesta de cambio completa — genera proposal, specs, design y tasks siguiendo la metodologia SDD-AI
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:propose — Propuesta de Cambio
|
|
8
|
+
|
|
9
|
+
Este comando envuelve la funcionalidad de OpenSpec fast-forward (ff) y agrega las convenciones del equipo.
|
|
10
|
+
|
|
11
|
+
## Antes de empezar
|
|
12
|
+
|
|
13
|
+
Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones.
|
|
14
|
+
Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
|
|
15
|
+
|
|
16
|
+
Verifica que exista `openspec/`. Si no existe, informa al usuario que ejecute `/refacil:setup` primero.
|
|
17
|
+
|
|
18
|
+
## Instrucciones
|
|
19
|
+
|
|
20
|
+
### Paso 1: Entender el cambio (aporte Refacil)
|
|
21
|
+
|
|
22
|
+
Si el usuario NO proporciono suficiente contexto en $ARGUMENTS, preguntale:
|
|
23
|
+
- **Que tipo de cambio es?** (feature nuevo, mejora, refactor)
|
|
24
|
+
- **Cual es el problema o necesidad?** (contexto de negocio)
|
|
25
|
+
- **Cual es el objetivo?** (que debe lograr en una oracion)
|
|
26
|
+
|
|
27
|
+
Si $ARGUMENTS ya es claro, no preguntes de nuevo.
|
|
28
|
+
|
|
29
|
+
### Paso 2: Delegar a OpenSpec ff (fast-forward)
|
|
30
|
+
|
|
31
|
+
Ejecuta internamente las instrucciones de la skill `openspec-ff-change` que esta instalada en `.claude/skills/openspec-ff-change/SKILL.md` (o `.cursor/skills/openspec-ff-change/SKILL.md`).
|
|
32
|
+
|
|
33
|
+
Lee esa skill y sigue sus instrucciones para generar todos los artefactos (proposal, specs, design, tasks) en una sola pasada.
|
|
34
|
+
|
|
35
|
+
**Indicaciones adicionales para la generacion de artefactos:**
|
|
36
|
+
- Los artefactos deben generarse en **español con terminos tecnicos en ingles**
|
|
37
|
+
- Los criterios de aceptacion deben usar formato **Dado/Cuando/Entonces**
|
|
38
|
+
- Incluir siempre **criterios de rechazo** (edge cases) en las specs
|
|
39
|
+
- Las tasks deben incluir **estimacion de esfuerzo** (S/M/L)
|
|
40
|
+
- El design debe referenciar **patrones existentes** del repo (encontrados en AGENTS.md o explorando el codebase)
|
|
41
|
+
|
|
42
|
+
### Paso 3: Validar con el usuario (aporte Refacil)
|
|
43
|
+
|
|
44
|
+
Despues de que OpenSpec genere los artefactos, presenta un resumen al usuario:
|
|
45
|
+
- Archivos a crear/modificar
|
|
46
|
+
- Criterios de aceptacion clave
|
|
47
|
+
- Riesgos identificados
|
|
48
|
+
- Estimacion total de esfuerzo
|
|
49
|
+
|
|
50
|
+
Pregunta si quiere ajustar algo.
|
|
51
|
+
|
|
52
|
+
### Paso 4: Siguiente paso
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
Propuesta creada en: openspec/changes/[nombre]/
|
|
56
|
+
Siguiente paso: ejecuta /refacil:apply para implementar las tasks.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Reglas
|
|
60
|
+
|
|
61
|
+
- No implementar codigo en esta fase, solo planificar
|
|
62
|
+
- Siempre explorar el codebase ANTES de generar artefactos
|
|
63
|
+
- Los criterios de aceptacion deben ser especificos y testeables
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:review
|
|
3
|
+
description: Review de codigo con el checklist de calidad del equipo — evalua codigo, arquitectura, testing, seguridad y performance
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:review — Review con Checklist del Equipo
|
|
8
|
+
|
|
9
|
+
Eres un reviewer exigente pero constructivo que evalua el codigo contra el checklist de calidad del equipo.
|
|
10
|
+
|
|
11
|
+
## Contexto
|
|
12
|
+
|
|
13
|
+
Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones.
|
|
14
|
+
Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
|
|
15
|
+
Lee el archivo [checklist.md](checklist.md) para conocer los criterios de evaluacion.
|
|
16
|
+
|
|
17
|
+
## Instrucciones
|
|
18
|
+
|
|
19
|
+
### Paso 1: Identificar que revisar
|
|
20
|
+
|
|
21
|
+
Si hay un cambio activo en `openspec/changes/`, usalo como referencia.
|
|
22
|
+
Si el usuario paso un argumento ($ARGUMENTS), revisa ese archivo o carpeta especifica.
|
|
23
|
+
Si no hay cambio activo ni argumento, revisa los cambios no commiteados (git diff).
|
|
24
|
+
|
|
25
|
+
### Paso 2: Recopilar archivos a revisar
|
|
26
|
+
|
|
27
|
+
- Lee los artefactos de OpenSpec si existen (specs, design)
|
|
28
|
+
- Identifica todos los archivos creados/modificados
|
|
29
|
+
- Lee cada archivo para entender los cambios
|
|
30
|
+
|
|
31
|
+
### Paso 3: Evaluar contra checklist
|
|
32
|
+
|
|
33
|
+
Para CADA item del [checklist.md](checklist.md), evalua:
|
|
34
|
+
|
|
35
|
+
- **PASS**: Cumple completamente
|
|
36
|
+
- **FAIL**: No cumple (incluir explicacion y como corregir)
|
|
37
|
+
- **N/A**: No aplica a este cambio
|
|
38
|
+
|
|
39
|
+
Se especifico en las evaluaciones. No des PASS generico — justifica brevemente.
|
|
40
|
+
|
|
41
|
+
### Paso 4: Reporte
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
=== Review Report ===
|
|
45
|
+
|
|
46
|
+
## 1. Conformidad con Spec
|
|
47
|
+
[PASS/FAIL/N/A] Todos los criterios de aceptacion cubiertos
|
|
48
|
+
[PASS/FAIL/N/A] No hay funcionalidad fuera del alcance
|
|
49
|
+
[PASS/FAIL/N/A] Edge cases manejados
|
|
50
|
+
|
|
51
|
+
## 2. Calidad de Codigo
|
|
52
|
+
[PASS/FAIL/N/A] Sigue patrones del repo
|
|
53
|
+
[PASS/FAIL/N/A] Sin codigo duplicado
|
|
54
|
+
[PASS/FAIL/N/A] Nombres claros y descriptivos
|
|
55
|
+
[PASS/FAIL/N/A] Sin console.log/TODO/codigo comentado
|
|
56
|
+
[PASS/FAIL/N/A] Imports usan alias del proyecto
|
|
57
|
+
|
|
58
|
+
## 3. Arquitectura
|
|
59
|
+
[PASS/FAIL/N/A] Limites de dominio respetados
|
|
60
|
+
[PASS/FAIL/N/A] Dependencias en direccion correcta
|
|
61
|
+
[PASS/FAIL/N/A] Sin logica de negocio en infraestructura
|
|
62
|
+
|
|
63
|
+
## 4. Testing
|
|
64
|
+
[PASS/FAIL/N/A] Cada archivo tiene su .spec.ts
|
|
65
|
+
[PASS/FAIL/N/A] Tests cubren criterios de aceptacion
|
|
66
|
+
[PASS/FAIL/N/A] Edge cases testeados
|
|
67
|
+
[PASS/FAIL/N/A] Coverage >= 80%
|
|
68
|
+
[PASS/FAIL/N/A] npm test pasa sin errores
|
|
69
|
+
|
|
70
|
+
## 5. Seguridad
|
|
71
|
+
[PASS/FAIL/N/A] Sin secrets hardcodeados
|
|
72
|
+
[PASS/FAIL/N/A] Inputs validados
|
|
73
|
+
[PASS/FAIL/N/A] Sin inyeccion SQL
|
|
74
|
+
[PASS/FAIL/N/A] Endpoints con autorizacion
|
|
75
|
+
|
|
76
|
+
## 6. Performance
|
|
77
|
+
[PASS/FAIL/N/A] Queries usan indices
|
|
78
|
+
[PASS/FAIL/N/A] Sin queries N+1
|
|
79
|
+
[PASS/FAIL/N/A] Operaciones pesadas son async
|
|
80
|
+
|
|
81
|
+
## 7. Mantenibilidad
|
|
82
|
+
[PASS/FAIL/N/A] Codigo autoexplicativo
|
|
83
|
+
[PASS/FAIL/N/A] Funciones hacen una sola cosa
|
|
84
|
+
[PASS/FAIL/N/A] Archivos < 300 lineas
|
|
85
|
+
|
|
86
|
+
## 8. Git y Deploy
|
|
87
|
+
[PASS/FAIL/N/A] Commits atomicos
|
|
88
|
+
[PASS/FAIL/N/A] Sin archivos generados en commit
|
|
89
|
+
[PASS/FAIL/N/A] Migraciones reversibles (si aplica)
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
RESUMEN: [X] PASS | [Y] FAIL | [Z] N/A
|
|
93
|
+
VEREDICTO: APROBADO / REQUIERE CORRECCIONES
|
|
94
|
+
|
|
95
|
+
Correcciones necesarias:
|
|
96
|
+
1. [FAIL] [seccion] — [que corregir y como]
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Reglas
|
|
100
|
+
|
|
101
|
+
- Ser constructivo: no solo decir que falla, sino como corregirlo
|
|
102
|
+
- No ser excesivamente estricto con N/A — si no aplica, marcarlo
|
|
103
|
+
- Si todo es PASS, felicitar brevemente y sugerir `/refacil:archive`
|
|
104
|
+
- Si hay FAILs criticos (seguridad, tests), marcar como bloqueantes
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Checklist de Calidad — Equipo Refacil
|
|
2
|
+
|
|
3
|
+
## 1. Conformidad con Spec
|
|
4
|
+
- Todos los criterios de aceptacion de la spec estan cubiertos
|
|
5
|
+
- No se implemento funcionalidad fuera del alcance de la spec
|
|
6
|
+
- Los criterios de rechazo (edge cases) estan manejados
|
|
7
|
+
- El modelo de datos coincide con lo especificado
|
|
8
|
+
|
|
9
|
+
## 2. Calidad de Codigo
|
|
10
|
+
- El codigo sigue los patrones existentes del repo (ver AGENTS.md)
|
|
11
|
+
- No hay codigo duplicado que pueda extraerse
|
|
12
|
+
- Los nombres de variables, funciones y clases son claros y descriptivos
|
|
13
|
+
- No hay console.log, TODO, o codigo comentado sin razon
|
|
14
|
+
- Los imports usan los alias configurados del proyecto (@core/*, @logger/*, etc.)
|
|
15
|
+
- No hay dependencias circulares nuevas
|
|
16
|
+
|
|
17
|
+
## 3. Arquitectura
|
|
18
|
+
- Se respetan los limites de dominio (DDD)
|
|
19
|
+
- Las dependencias fluyen correctamente: domain <- application <- infrastructure
|
|
20
|
+
- No hay logica de negocio en la capa de infraestructura
|
|
21
|
+
- Los puertos (interfaces) estan en domain, las implementaciones en infrastructure
|
|
22
|
+
- Los DTOs estan en la capa correcta
|
|
23
|
+
|
|
24
|
+
## 4. Testing
|
|
25
|
+
- Cada archivo nuevo/modificado tiene su .spec.ts correspondiente
|
|
26
|
+
- Los tests cubren los criterios de aceptacion de la spec
|
|
27
|
+
- Hay tests para edge cases y escenarios de error
|
|
28
|
+
- Los mocks son minimos y necesarios
|
|
29
|
+
- Los tests son independientes entre si
|
|
30
|
+
- Coverage >= 80% en archivos nuevos
|
|
31
|
+
- npm test pasa sin errores
|
|
32
|
+
|
|
33
|
+
## 5. Seguridad
|
|
34
|
+
- No hay secrets hardcodeados (passwords, API keys, tokens)
|
|
35
|
+
- Los inputs del usuario estan validados (class-validator)
|
|
36
|
+
- No hay inyeccion SQL posible (queries parametrizadas con TypeORM)
|
|
37
|
+
- Los endpoints sensibles tienen autorizacion adecuada
|
|
38
|
+
- No se expone informacion sensible en logs o respuestas de error
|
|
39
|
+
|
|
40
|
+
## 6. Performance
|
|
41
|
+
- Las consultas a base de datos usan indices apropiados
|
|
42
|
+
- No hay queries N+1
|
|
43
|
+
- Las operaciones pesadas son asincronas donde corresponde
|
|
44
|
+
- No hay memory leaks obvios (subscriptions sin unsubscribe, etc.)
|
|
45
|
+
|
|
46
|
+
## 7. Mantenibilidad
|
|
47
|
+
- El codigo es autoexplicativo (comentarios solo donde la logica no es obvia)
|
|
48
|
+
- Las funciones hacen una sola cosa
|
|
49
|
+
- Los archivos no son excesivamente largos (< 300 lineas como guia)
|
|
50
|
+
- El manejo de errores es consistente con el resto del proyecto
|
|
51
|
+
|
|
52
|
+
## 8. Git y Deploy
|
|
53
|
+
- Los commits son atomicos y tienen mensajes descriptivos
|
|
54
|
+
- No hay archivos generados o temporales en el commit
|
|
55
|
+
- Las migraciones de BD (si hay) son reversibles
|
|
56
|
+
- No hay breaking changes no documentados
|
|
57
|
+
|
|
58
|
+
## 9. Zona Horaria (Critico)
|
|
59
|
+
- Todas las fechas usan UTC
|
|
60
|
+
- Se usa @core/utils/date-time.util para operaciones con fechas
|
|
61
|
+
- NO se usa new Date() para comparaciones directas
|
|
62
|
+
- Las columnas de BD usan TIMESTAMP WITH TIME ZONE
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:setup
|
|
3
|
+
description: Verificar e instalar OpenSpec, generar AGENTS.md y configurar el repositorio para la metodologia SDD-AI
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:setup — Configuracion del Repositorio
|
|
8
|
+
|
|
9
|
+
Eres un asistente de setup que guia al desarrollador paso a paso para configurar el repositorio con la metodologia SDD-AI.
|
|
10
|
+
|
|
11
|
+
## Proceso paso a paso
|
|
12
|
+
|
|
13
|
+
Ejecuta cada paso secuencialmente. Informa al usuario del resultado de cada paso antes de continuar. Si un paso falla, NO continues — informa el error y como resolverlo.
|
|
14
|
+
|
|
15
|
+
### Paso 1: Verificar Node.js
|
|
16
|
+
|
|
17
|
+
Ejecuta `node --version` y verifica que sea >= 20.19.0 (requerido por OpenSpec).
|
|
18
|
+
|
|
19
|
+
- Si la version es correcta: "Node.js [version] OK"
|
|
20
|
+
- Si la version es < 20.19.0: informa que OpenSpec requiere Node.js >= 20.19.0. Pide que actualice Node.js y detente.
|
|
21
|
+
- Si no esta instalado: informa que necesita instalar Node.js >= 20.19.0 y detente.
|
|
22
|
+
|
|
23
|
+
### Paso 2: Verificar OpenSpec
|
|
24
|
+
|
|
25
|
+
Ejecuta `openspec --version 2>&1`.
|
|
26
|
+
|
|
27
|
+
- Si esta instalado: "OpenSpec [version] OK"
|
|
28
|
+
- Si no esta instalado o el comando falla, pregunta al usuario si desea instalarlo. Si acepta:
|
|
29
|
+
```bash
|
|
30
|
+
npm install -g @fission-ai/openspec@latest
|
|
31
|
+
```
|
|
32
|
+
Despues de instalar, ejecuta `openspec --version` de nuevo para verificar. Si falla, sugiere:
|
|
33
|
+
- Verificar permisos (puede necesitar `sudo` en Linux/Mac)
|
|
34
|
+
- Verificar que npm global bin esta en el PATH
|
|
35
|
+
|
|
36
|
+
### Paso 3: Inicializar OpenSpec en el repo
|
|
37
|
+
|
|
38
|
+
Verifica si existe la carpeta `openspec/` en la raiz del proyecto.
|
|
39
|
+
|
|
40
|
+
- Si ya existe: "OpenSpec ya inicializado. OK"
|
|
41
|
+
- Si no existe, ejecuta:
|
|
42
|
+
```bash
|
|
43
|
+
openspec init --tools claude,cursor
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**IMPORTANTE**: `openspec init` tambien instala sus propios comandos (`opsx:*`) en `.claude/` y `.cursor/`. Esto es normal y esperado. Los comandos `opsx:*` de OpenSpec y los `refacil:*` de esta metodologia coexisten sin conflicto. Los `refacil:*` son los que el equipo debe usar — los `opsx:*` son los comandos nativos de OpenSpec que funcionan por debajo.
|
|
47
|
+
|
|
48
|
+
### Paso 4: Configurar OpenSpec
|
|
49
|
+
|
|
50
|
+
Verifica si existe `openspec/config.yaml`.
|
|
51
|
+
|
|
52
|
+
**Si NO existe** (esto es comun porque `openspec init` en modo no-interactivo no lo crea), crealo:
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
# OpenSpec Configuration — Equipo Refacil
|
|
56
|
+
language: spanish
|
|
57
|
+
# Los terminos tecnicos (API, REST, gRPC, etc.) permanecen en ingles.
|
|
58
|
+
# Las descripciones, propuestas y specs se generan en espanol.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Si ya existe**, verifica que tenga `language: spanish`. Si no lo tiene, sugiere agregarlo.
|
|
62
|
+
|
|
63
|
+
### Paso 5: Generar AGENTS.md
|
|
64
|
+
|
|
65
|
+
**Este es el paso mas importante.** Analiza el repositorio automaticamente para generar un `AGENTS.md` personalizado.
|
|
66
|
+
|
|
67
|
+
Verifica si ya existe `AGENTS.md` en la raiz. Si existe, pregunta al usuario si quiere regenerarlo. Si no quiere, salta este paso.
|
|
68
|
+
|
|
69
|
+
#### 5.1 Analizar el repositorio
|
|
70
|
+
|
|
71
|
+
Lee estos archivos si existen (no falles si alguno no existe, simplemente omitelo):
|
|
72
|
+
- `package.json` — nombre, scripts, dependencias (tech stack)
|
|
73
|
+
- `tsconfig.json` o `tsconfig.base.json` — paths aliases, target
|
|
74
|
+
- `nest-cli.json` — estructura monorepo NestJS (si aplica)
|
|
75
|
+
- `angular.json` — estructura Angular (si aplica)
|
|
76
|
+
- `README.md` — descripcion del proyecto
|
|
77
|
+
- `.eslintrc.*` o `eslint.config.*` — reglas de linting
|
|
78
|
+
- Seccion jest en package.json o `jest.config.*` — configuracion de tests
|
|
79
|
+
- Estructura de carpetas del primer nivel (ejecuta `ls` en la raiz)
|
|
80
|
+
- `Dockerfile` o `docker-compose.yml` — info de deployment
|
|
81
|
+
- `.env.example` — variables de entorno
|
|
82
|
+
|
|
83
|
+
#### 5.2 Generar el AGENTS.md
|
|
84
|
+
|
|
85
|
+
Con la informacion recopilada, genera un archivo `AGENTS.md` completo. El contenido debe ser en espanol con terminos tecnicos en ingles.
|
|
86
|
+
|
|
87
|
+
Secciones obligatorias:
|
|
88
|
+
|
|
89
|
+
1. **Encabezado**: Nombre del proyecto, descripcion breve y proposito. Incluir nota de compatibilidad con el estandar agents.md.
|
|
90
|
+
|
|
91
|
+
2. **Metodologia SDD-AI**: Tabla con TODOS los comandos refacil:* y sus descripciones. Incluir los dos flujos principales (feature y bug).
|
|
92
|
+
|
|
93
|
+
3. **Comandos de desarrollo**: Extraer TODOS los scripts de package.json y documentarlos con su proposito. Agrupar por categoria (build, dev, test, lint).
|
|
94
|
+
|
|
95
|
+
4. **Arquitectura**: Estructura de carpetas detectada. Si es monorepo, listar apps y libs. Indicar patron de diseno usado (DDD, MVC, Clean Architecture, etc.) basandose en la estructura.
|
|
96
|
+
|
|
97
|
+
5. **Stack tecnologico**: Tabla con framework, lenguaje, BD, cache, comunicacion, testing, etc. Todo extraido de dependencies en package.json.
|
|
98
|
+
|
|
99
|
+
6. **Alias de rutas**: Path mappings de tsconfig.json si existen. Indicar que SIEMPRE se deben usar en imports.
|
|
100
|
+
|
|
101
|
+
7. **Base de datos**: ORM detectado (TypeORM, Prisma, Sequelize, Mongoose, etc.), tipo de BD, convenciones de entidades si se pueden inferir.
|
|
102
|
+
|
|
103
|
+
8. **Testing**: Framework de test, comandos, configuracion de coverage, convenciones de naming para tests.
|
|
104
|
+
|
|
105
|
+
9. **Reglas criticas**: Tres secciones:
|
|
106
|
+
- "Siempre hacer": convenciones obligatorias del proyecto
|
|
107
|
+
- "Nunca hacer": anti-patrones especificos para el stack
|
|
108
|
+
- "Preguntar primero": cambios de alto impacto que requieren confirmacion
|
|
109
|
+
|
|
110
|
+
#### 5.3 Mostrar al usuario
|
|
111
|
+
|
|
112
|
+
Muestra el AGENTS.md generado completo. Pregunta si quiere ajustar algo antes de guardarlo.
|
|
113
|
+
|
|
114
|
+
Si el usuario aprueba (o no tiene cambios), escribe el archivo en la raiz del proyecto.
|
|
115
|
+
|
|
116
|
+
### Paso 6: Verificar skills
|
|
117
|
+
|
|
118
|
+
Verifica que existan las carpetas `.claude/skills/refacil-*` y/o `.cursor/skills/refacil-*`.
|
|
119
|
+
|
|
120
|
+
- Si existen: "Skills de Refacil: [N] instaladas OK"
|
|
121
|
+
- Si NO existen: informa al usuario:
|
|
122
|
+
```
|
|
123
|
+
Las skills de Refacil no estan instaladas.
|
|
124
|
+
Ejecuta en la terminal: npx refacil-sdd-ai init
|
|
125
|
+
Luego reinicia esta sesion de Claude Code / Cursor.
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Paso 7: Resumen final
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
=== refacil:setup completado ===
|
|
132
|
+
Node.js: [version] OK
|
|
133
|
+
OpenSpec: [version] OK
|
|
134
|
+
openspec/: Inicializado OK
|
|
135
|
+
config.yaml: Configurado OK
|
|
136
|
+
AGENTS.md: Generado OK
|
|
137
|
+
Skills Refacil: [N] instaladas OK
|
|
138
|
+
|
|
139
|
+
IMPORTANTE: Si acabas de instalar las skills por primera vez,
|
|
140
|
+
debes REINICIAR la sesion de Claude Code o Cursor para que
|
|
141
|
+
los comandos /refacil:* aparezcan disponibles.
|
|
142
|
+
|
|
143
|
+
El repositorio esta listo para usar la metodologia SDD-AI.
|
|
144
|
+
Ejecuta /refacil:guide para ver los comandos disponibles.
|
|
145
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refacil:test
|
|
3
|
+
description: Generar tests unitarios basados en los artefactos de OpenSpec o para archivos especificos — cubre criterios de aceptacion, edge cases y patrones del equipo
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# refacil:test — Generacion de Tests Unitarios
|
|
8
|
+
|
|
9
|
+
Eres un asistente de testing que genera pruebas unitarias de alta calidad.
|
|
10
|
+
|
|
11
|
+
## Contexto
|
|
12
|
+
|
|
13
|
+
Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones.
|
|
14
|
+
Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
|
|
15
|
+
Lee el archivo [testing-patterns.md](testing-patterns.md) para conocer los patrones de test del equipo.
|
|
16
|
+
|
|
17
|
+
## Instrucciones
|
|
18
|
+
|
|
19
|
+
### Modo 1: Tests desde artefactos de OpenSpec (sin argumentos)
|
|
20
|
+
|
|
21
|
+
Si el usuario ejecuta `/refacil:test` sin argumentos:
|
|
22
|
+
|
|
23
|
+
1. **Buscar cambio activo**: Lista carpetas en `openspec/changes/` y pregunta cual testear si hay mas de uno.
|
|
24
|
+
|
|
25
|
+
2. **Leer artefactos**:
|
|
26
|
+
- `specs.md` — Extraer criterios de aceptacion (CA-XX) y criterios de rechazo (CR-XX)
|
|
27
|
+
- `design.md` — Identificar componentes y archivos creados/modificados
|
|
28
|
+
- `tasks.md` — Identificar archivos implementados
|
|
29
|
+
|
|
30
|
+
3. **Para cada archivo creado/modificado**, genera un `.spec.ts`:
|
|
31
|
+
|
|
32
|
+
a. **Analiza el archivo** — Entiende que hace, sus metodos publicos, dependencias
|
|
33
|
+
b. **Mapea criterios** — Cada CA-XX y CR-XX del spec = al menos 1 test
|
|
34
|
+
c. **Agrega edge cases** — null, undefined, valores limite, errores de red
|
|
35
|
+
d. **Genera el test** — Siguiendo los patrones de [testing-patterns.md](testing-patterns.md)
|
|
36
|
+
|
|
37
|
+
4. **Ejecutar tests**: Corre `npm test` y verifica que pasen.
|
|
38
|
+
|
|
39
|
+
5. **Corregir fallos**: Si hay tests que fallan, analiza y corrige iterativamente.
|
|
40
|
+
|
|
41
|
+
6. **Reportar coverage**: Ejecuta `npm run test:cov` y reporta:
|
|
42
|
+
```
|
|
43
|
+
=== Reporte de Tests ===
|
|
44
|
+
Tests generados: [N] archivos
|
|
45
|
+
Tests ejecutados: [N] tests
|
|
46
|
+
Pasaron: [N]
|
|
47
|
+
Fallaron: [N]
|
|
48
|
+
Coverage archivos nuevos: [X]%
|
|
49
|
+
Coverage minimo requerido: 80%
|
|
50
|
+
Estado: CUMPLE / NO CUMPLE
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Modo 2: Tests para archivo especifico (con argumento)
|
|
54
|
+
|
|
55
|
+
Si el usuario pasa un archivo: `/refacil:test src/mi-servicio.ts`
|
|
56
|
+
|
|
57
|
+
1. **Lee el archivo** especificado ($ARGUMENTS)
|
|
58
|
+
2. **Analiza** sus metodos publicos, dependencias, logica
|
|
59
|
+
3. **Genera** el `.spec.ts` correspondiente
|
|
60
|
+
4. **Ejecuta** y corrige hasta que pasen
|
|
61
|
+
|
|
62
|
+
## Estructura de un test
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// archivo.spec.ts
|
|
66
|
+
import { Test, TestingModule } from '@nestjs/testing';
|
|
67
|
+
|
|
68
|
+
describe('NombreClase', () => {
|
|
69
|
+
let service: NombreClase;
|
|
70
|
+
|
|
71
|
+
beforeEach(async () => {
|
|
72
|
+
jest.clearAllMocks();
|
|
73
|
+
const module: TestingModule = await Test.createTestingModule({
|
|
74
|
+
providers: [
|
|
75
|
+
NombreClase,
|
|
76
|
+
{ provide: 'DependenciaPort', useValue: mockDependencia },
|
|
77
|
+
],
|
|
78
|
+
}).compile();
|
|
79
|
+
service = module.get<NombreClase>(NombreClase);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('nombreMetodo', () => {
|
|
83
|
+
// Criterios de aceptacion
|
|
84
|
+
it('should [resultado] when [condicion] (CA-01)', async () => {
|
|
85
|
+
// Arrange - Mockear dependencias
|
|
86
|
+
// Act - Ejecutar metodo
|
|
87
|
+
// Assert - Verificar resultado
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// Criterios de rechazo
|
|
91
|
+
it('should throw [error] when [condicion invalida] (CR-01)', async () => {
|
|
92
|
+
// Arrange - Preparar escenario de error
|
|
93
|
+
// Act & Assert - Verificar que falla controladamente
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Edge cases
|
|
97
|
+
it('should handle null input gracefully', async () => {
|
|
98
|
+
// ...
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Reglas
|
|
105
|
+
|
|
106
|
+
- Cada criterio de aceptacion (CA-XX) debe tener al menos 1 test
|
|
107
|
+
- Cada criterio de rechazo (CR-XX) debe tener al menos 1 test
|
|
108
|
+
- Coverage minimo del 80% en archivos nuevos
|
|
109
|
+
- Los tests deben ser independientes entre si
|
|
110
|
+
- Mocks minimos y necesarios — no mockear lo que se puede testear directo
|
|
111
|
+
- Nombres descriptivos: `should [verbo] [resultado] when [condicion]`
|
|
112
|
+
- Usar los alias de rutas del proyecto en los imports
|
|
113
|
+
- Los tests deben pasar con `npm test` sin errores
|