refacil-sdd-ai 1.0.5 → 1.0.8

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/bin/cli.js CHANGED
@@ -55,24 +55,50 @@ function installSkills() {
55
55
  return installed;
56
56
  }
57
57
 
58
+ const SDD_SECTION_MARKER = '## Metodologia SDD-AI (Refacil)';
59
+
60
+ function extractSddSection(templateContent) {
61
+ const idx = templateContent.indexOf(SDD_SECTION_MARKER);
62
+ if (idx === -1) return templateContent;
63
+ return templateContent.substring(idx);
64
+ }
65
+
58
66
  function createClaudeMd() {
59
67
  const dest = path.join(projectRoot, 'CLAUDE.md');
68
+ const template = fs.readFileSync(path.join(packageRoot, 'templates', 'claude-md.md'), 'utf8');
69
+
60
70
  if (fs.existsSync(dest)) {
61
- console.log(' CLAUDE.md ya existe, no se sobreescribe.');
62
- return false;
71
+ const existing = fs.readFileSync(dest, 'utf8');
72
+ if (existing.includes(SDD_SECTION_MARKER)) {
73
+ console.log(' CLAUDE.md ya tiene la seccion SDD-AI. Sin cambios.');
74
+ return false;
75
+ }
76
+ const sddSection = extractSddSection(template);
77
+ fs.writeFileSync(dest, existing.trimEnd() + '\n\n' + sddSection + '\n');
78
+ console.log(' CLAUDE.md existente — seccion SDD-AI agregada al final.');
79
+ return true;
63
80
  }
64
- const template = fs.readFileSync(path.join(packageRoot, 'templates', 'claude-md.md'), 'utf8');
81
+
65
82
  fs.writeFileSync(dest, template);
66
83
  return true;
67
84
  }
68
85
 
69
86
  function createCursorRules() {
70
87
  const dest = path.join(projectRoot, '.cursorrules');
88
+ const template = fs.readFileSync(path.join(packageRoot, 'templates', 'cursorrules.md'), 'utf8');
89
+
71
90
  if (fs.existsSync(dest)) {
72
- console.log(' .cursorrules ya existe, no se sobreescribe.');
73
- return false;
91
+ const existing = fs.readFileSync(dest, 'utf8');
92
+ if (existing.includes(SDD_SECTION_MARKER)) {
93
+ console.log(' .cursorrules ya tiene la seccion SDD-AI. Sin cambios.');
94
+ return false;
95
+ }
96
+ const sddSection = extractSddSection(template);
97
+ fs.writeFileSync(dest, existing.trimEnd() + '\n\n' + sddSection + '\n');
98
+ console.log(' .cursorrules existente — seccion SDD-AI agregada al final.');
99
+ return true;
74
100
  }
75
- const template = fs.readFileSync(path.join(packageRoot, 'templates', 'cursorrules.md'), 'utf8');
101
+
76
102
  fs.writeFileSync(dest, template);
77
103
  return true;
78
104
  }
@@ -123,14 +149,14 @@ function init() {
123
149
  const count = installSkills();
124
150
  console.log(` ${count} skills instaladas en .claude/skills/ y .cursor/skills/`);
125
151
 
126
- // Create CLAUDE.md
152
+ // Create or update CLAUDE.md
127
153
  if (createClaudeMd()) {
128
- console.log(' CLAUDE.md creado');
154
+ console.log(' CLAUDE.md OK');
129
155
  }
130
156
 
131
- // Create .cursorrules
157
+ // Create or update .cursorrules
132
158
  if (createCursorRules()) {
133
- console.log(' .cursorrules creado');
159
+ console.log(' .cursorrules OK');
134
160
  }
135
161
 
136
162
  console.log('\n Siguientes pasos:\n');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "refacil-sdd-ai",
3
- "version": "1.0.5",
3
+ "version": "1.0.8",
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"
@@ -31,6 +31,6 @@
31
31
  "url": ""
32
32
  },
33
33
  "engines": {
34
- "node": ">=18.0.0"
34
+ "node": ">=20.19.0"
35
35
  }
36
36
  }
@@ -10,12 +10,58 @@ Este comando envuelve la funcionalidad de OpenSpec apply y agrega las convencion
10
10
 
11
11
  ## Antes de empezar
12
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.
13
+ ### Verificar prerequisitos
14
+
15
+ 1. **OpenSpec instalado**: Ejecuta `openspec --version 2>&1`. Si el comando falla o no se reconoce, informa al usuario: "OpenSpec no esta instalado. Ejecuta `/refacil:setup` para instalarlo y configurar el repositorio." y **detente**.
16
+
17
+ 2. **OpenSpec inicializado**: Verifica que exista la carpeta `openspec/` en la raiz del proyecto. Si no existe, informa al usuario: "OpenSpec no esta inicializado en este repositorio. Ejecuta `/refacil:setup` para configurarlo." y **detente**.
18
+
19
+ 3. **AGENTS.md**: Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones. Si NO existe, informa al usuario: "No se encontro AGENTS.md. Ejecuta `/refacil:setup` para generarlo." y **detente**.
15
20
 
16
21
  ## Instrucciones
17
22
 
18
- ### Paso 1: Delegar a OpenSpec apply
23
+ ### Paso 1: Validar rama de trabajo
24
+
25
+ Ejecuta `git branch --show-current` para obtener la rama actual.
26
+
27
+ #### Ramas protegidas: `master`, `main`, `develop`, `dev`, `testing`, `qa`
28
+
29
+ - **Si la rama es cualquier rama protegida** (`master`, `main`, `develop`, `dev`, `testing`, `qa`):
30
+
31
+ Informa al usuario que no se pueden hacer cambios directamente en esa rama y **pidele el numero de tarea de Jira**:
32
+ ```
33
+ Estas en la rama '[nombre-rama]' que es una rama protegida.
34
+ No se deben hacer cambios directamente aqui.
35
+
36
+ Cual es el numero de tarea de Jira para este cambio? (ejemplo: RF-5088)
37
+ ```
38
+
39
+ **Crear la rama siempre desde develop/dev actualizado:**
40
+ 1. **Verificar working directory limpio**: Ejecuta `git status --porcelain`. Si hay cambios sin commitear (archivos modificados o sin trackear), informa al usuario:
41
+ ```
42
+ Hay cambios sin commitear en la rama actual.
43
+ Para cambiar de rama de forma segura, necesito guardarlos temporalmente con git stash.
44
+ Quieres que haga git stash antes de continuar?
45
+ ```
46
+ - Si acepta: ejecuta `git stash push -m "stash-automatico-refacil"` y continua. Al final del proceso (despues de crear la rama), ejecuta `git stash pop` para restaurar los cambios.
47
+ - Si no acepta: **detente**.
48
+ 2. Detecta cual existe en el repo: `develop` o `dev` (ejecuta `git branch --list develop dev`)
49
+ 3. Cambia a esa rama: `git checkout develop` (o `dev`)
50
+ 4. Actualiza: `git pull origin develop` (o `dev`)
51
+ 5. Determina el nombre de la nueva rama:
52
+ - Si el usuario entrego el numero de Jira (ej: `RF-5088`): la rama sera `feature/RF-5088`
53
+ - Si el usuario no tiene tarea de Jira: usa un nombre descriptivo corto basado en el cambio activo en openspec/changes/ (ej: `feature/agregar-filtro-productos`). Pero **recomienda crear la tarea en Jira** para trazabilidad.
54
+ 6. Verifica que la rama no exista ya: `git branch --list [nombre-rama]`
55
+ - Si ya existe, informa al usuario y pregunta si quiere cambiarse a esa rama existente o elegir otro nombre.
56
+ 7. Crea la rama: `git checkout -b [nombre-rama]`
57
+ 8. Si se hizo stash en el paso 1, ejecuta `git stash pop` para restaurar los cambios.
58
+
59
+ Si el usuario no acepta crear rama, **detente**.
60
+
61
+ - **Si la rama es cualquier otra** (feature/, fix/, hotfix/, refactor/, etc.):
62
+ La rama es valida. Continua con el siguiente paso sin interrumpir.
63
+
64
+ ### Paso 2: Delegar a OpenSpec apply
19
65
 
20
66
  Ejecuta internamente las instrucciones de la skill `openspec-apply-change` que esta instalada en `.claude/skills/openspec-apply-change/SKILL.md` (o `.cursor/skills/openspec-apply-change/SKILL.md`).
21
67
 
@@ -27,7 +73,7 @@ Lee esa skill y sigue sus instrucciones pasandole el argumento del usuario: **$A
27
73
  - No hacer refactors no solicitados en codigo existente
28
74
  - Si una task es ambigua, preguntar antes de implementar
29
75
 
30
- ### Paso 2: Resumen y siguiente paso (aporte Refacil)
76
+ ### Paso 3: Resumen y siguiente paso (aporte Refacil)
31
77
 
32
78
  Al terminar la implementacion de OpenSpec, agrega este resumen:
33
79
 
@@ -10,8 +10,13 @@ Este comando envuelve la funcionalidad de OpenSpec archive (que internamente lla
10
10
 
11
11
  ## Antes de empezar
12
12
 
13
- Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones.
14
- Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
13
+ ### Verificar prerequisitos
14
+
15
+ 1. **OpenSpec instalado**: Ejecuta `openspec --version 2>&1`. Si el comando falla o no se reconoce, informa al usuario: "OpenSpec no esta instalado. Ejecuta `/refacil:setup` para instalarlo y configurar el repositorio." y **detente**.
16
+
17
+ 2. **OpenSpec inicializado**: Verifica que exista la carpeta `openspec/` en la raiz del proyecto. Si no existe, informa al usuario: "OpenSpec no esta inicializado en este repositorio. Ejecuta `/refacil:setup` para configurarlo." y **detente**.
18
+
19
+ 3. **AGENTS.md**: Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones. Si NO existe, informa al usuario: "No se encontro AGENTS.md. Ejecuta `/refacil:setup` para generarlo." y **detente**.
15
20
 
16
21
  ## Instrucciones
17
22
 
@@ -64,7 +64,48 @@ Presenta la correccion propuesta:
64
64
 
65
65
  Espera aprobacion del usuario antes de implementar.
66
66
 
67
- ### Paso 5: Implementar el fix
67
+ ### Paso 5: Validar rama de trabajo (antes de escribir codigo)
68
+
69
+ **ANTES de implementar cualquier cambio**, ejecuta `git branch --show-current` para obtener la rama actual.
70
+
71
+ #### Ramas protegidas: `master`, `main`, `develop`, `dev`, `testing`, `qa`
72
+
73
+ - **Si la rama es cualquier rama protegida** (`master`, `main`, `develop`, `dev`, `testing`, `qa`):
74
+
75
+ Informa al usuario que no se pueden hacer cambios directamente en esa rama y **pidele el numero de tarea de Jira**:
76
+ ```
77
+ Estas en la rama '[nombre-rama]' que es una rama protegida.
78
+ No se deben hacer cambios directamente aqui.
79
+
80
+ Cual es el numero de tarea de Jira para este fix? (ejemplo: RF-5088)
81
+ ```
82
+
83
+ **Crear la rama siempre desde develop/dev actualizado:**
84
+ 1. **Verificar working directory limpio**: Ejecuta `git status --porcelain`. Si hay cambios sin commitear (archivos modificados o sin trackear), informa al usuario:
85
+ ```
86
+ Hay cambios sin commitear en la rama actual.
87
+ Para cambiar de rama de forma segura, necesito guardarlos temporalmente con git stash.
88
+ Quieres que haga git stash antes de continuar?
89
+ ```
90
+ - Si acepta: ejecuta `git stash push -m "stash-automatico-refacil"` y continua. Al final del proceso (despues de crear la rama), ejecuta `git stash pop` para restaurar los cambios.
91
+ - Si no acepta: **detente**.
92
+ 2. Detecta cual existe en el repo: `develop` o `dev` (ejecuta `git branch --list develop dev`)
93
+ 3. Cambia a esa rama: `git checkout develop` (o `dev`)
94
+ 4. Actualiza: `git pull origin develop` (o `dev`)
95
+ 5. Determina el nombre de la nueva rama:
96
+ - Si el usuario entrego el numero de Jira (ej: `RF-5088`): la rama sera `fix/RF-5088`
97
+ - Si el usuario no tiene tarea de Jira: usa un nombre descriptivo corto del bug (ej: `fix/error-calculo-total`). Pero **recomienda crear la tarea en Jira** para trazabilidad.
98
+ 6. Verifica que la rama no exista ya: `git branch --list [nombre-rama]`
99
+ - Si ya existe, informa al usuario y pregunta si quiere cambiarse a esa rama existente o elegir otro nombre.
100
+ 7. Crea la rama: `git checkout -b [nombre-rama]`
101
+ 8. Si se hizo stash en el paso 1, ejecuta `git stash pop` para restaurar los cambios.
102
+
103
+ Si el usuario no acepta crear rama, **detente**.
104
+
105
+ - **Si la rama es cualquier otra** (feature/, fix/, hotfix/, etc.):
106
+ La rama es valida. Continua sin interrumpir.
107
+
108
+ ### Paso 6: Implementar el fix
68
109
 
69
110
  Con aprobacion del usuario:
70
111
 
@@ -72,7 +113,7 @@ Con aprobacion del usuario:
72
113
  2. Verifica que el cambio es minimo y enfocado
73
114
  3. No hacer refactors adicionales
74
115
 
75
- ### Paso 6: Tests de regresion
116
+ ### Paso 7: Tests de regresion
76
117
 
77
118
  Genera tests que:
78
119
 
@@ -93,7 +134,7 @@ describe('Bug Fix: [descripcion corta]', () => {
93
134
  });
94
135
  ```
95
136
 
96
- ### Paso 7: Verificar
137
+ ### Paso 8: Verificar
97
138
 
98
139
  1. Ejecuta `npm test` — todos los tests deben pasar
99
140
  2. Muestra resumen del fix
@@ -112,7 +153,7 @@ describe('Bug Fix: [descripcion corta]', () => {
112
153
  2. /refacil:up-code — Subir los cambios a tu rama de desarrollo
113
154
  ```
114
155
 
115
- ### Paso 8 (opcional): Crear artefactos OpenSpec
156
+ ### Paso 9 (opcional): Crear artefactos OpenSpec
116
157
 
117
158
  Si el bug es significativo, preguntar al usuario si quiere documentarlo en OpenSpec:
118
159
  - Crear carpeta en `openspec/changes/fix-[nombre]/`
@@ -10,9 +10,13 @@ Este comando envuelve la funcionalidad de OpenSpec explore y agrega contexto del
10
10
 
11
11
  ## Antes de empezar
12
12
 
13
- Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones del repositorio. Usa esa informacion como contexto durante la exploracion.
13
+ ### Verificar prerequisitos
14
14
 
15
- Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
15
+ 1. **OpenSpec instalado**: Ejecuta `openspec --version 2>&1`. Si el comando falla o no se reconoce, informa al usuario: "OpenSpec no esta instalado. Ejecuta `/refacil:setup` para instalarlo y configurar el repositorio." y **detente**.
16
+
17
+ 2. **OpenSpec inicializado**: Verifica que exista la carpeta `openspec/` en la raiz del proyecto. Si no existe, informa al usuario: "OpenSpec no esta inicializado en este repositorio. Ejecuta `/refacil:setup` para configurarlo." y **detente**.
18
+
19
+ 3. **AGENTS.md**: Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones del repositorio. Usa esa informacion como contexto durante la exploracion. Si NO existe, informa al usuario: "No se encontro AGENTS.md. Ejecuta `/refacil:setup` para generarlo." y **detente**.
16
20
 
17
21
  ## Instrucciones
18
22
 
@@ -39,8 +39,9 @@ FLUJO PARA NUEVO FEATURE:
39
39
  La IA NO continua hasta que apruebes explicitamente.
40
40
 
41
41
  3. /refacil:apply
42
- Implementa las tasks aprobadas en el paso anterior.
43
- La IA escribe el codigo siguiendo el plan.
42
+ Valida que NO estes en una rama protegida (master, main, develop, dev, testing, qa).
43
+ Si estas en una, te pide el numero de tarea de Jira y crea la rama desde develop.
44
+ Luego implementa las tasks aprobadas siguiendo el plan.
44
45
 
45
46
  4. /refacil:test
46
47
  Genera tests unitarios basados en las specs y el design.
@@ -52,14 +53,16 @@ FLUJO PARA NUEVO FEATURE:
52
53
 
53
54
  6. /refacil:review
54
55
  Review con el checklist de calidad del equipo.
55
- Evalua codigo, arquitectura, testing, seguridad y performance.
56
+ Evalua conformidad con specs, codigo, arquitectura, testing,
57
+ seguridad, performance y reglas especificas del proyecto.
56
58
 
57
59
  7. /refacil:archive
58
60
  Archiva el cambio completado. Mueve artefactos a archive/.
59
61
 
60
62
  8. /refacil:up-code
61
63
  Sube los cambios a tu rama de desarrollo.
62
- Valida que NO estes en ramas protegidas (master, main, develop, testing, qa).
64
+ Valida que NO estes en ramas protegidas (master, main, develop, dev, testing, qa).
65
+ Si necesita crear rama, te pide el numero de tarea de Jira.
63
66
  ```
64
67
 
65
68
  ### Opcion 2: Bug fix
@@ -73,6 +76,8 @@ FLUJO PARA BUG FIX:
73
76
  - La IA investiga la causa raiz en el codebase
74
77
  - Te presenta hipotesis para confirmar
75
78
  - Propone la correccion y espera tu aprobacion
79
+ - Valida rama: si estas en rama protegida, te pide el numero
80
+ de tarea de Jira y crea la rama desde develop
76
81
  - Implementa el fix y genera tests de regresion
77
82
  - Ejecuta los tests para verificar
78
83
 
@@ -118,10 +123,11 @@ FLUJO PARA REVIEW:
118
123
  Evalua la implementacion contra el checklist del equipo:
119
124
  - Conformidad con specs
120
125
  - Calidad de codigo y patrones
121
- - Arquitectura DDD
126
+ - Arquitectura (segun convenciones de AGENTS.md)
122
127
  - Testing (coverage >= 80%)
123
128
  - Seguridad (OWASP top 10)
124
129
  - Performance (N+1, async, indices)
130
+ - Reglas especificas del proyecto (de AGENTS.md)
125
131
 
126
132
  Genera un reporte PASS/FAIL/N/A por cada item.
127
133
  ```
@@ -134,8 +140,9 @@ FLUJO PARA SUBIR CODIGO:
134
140
  1. /refacil:up-code
135
141
  Sube tus cambios al repositorio remoto de forma segura:
136
142
  - Detecta la rama actual
137
- - Valida que NO sea una rama protegida (master, main, develop, testing, qa)
138
- - Si estas en rama protegida, te ayuda a crear una rama de desarrollo
143
+ - Valida que NO sea una rama protegida (master, main, develop, dev, testing, qa)
144
+ - Si estas en rama protegida, te pide el numero de tarea de Jira
145
+ y crea la rama desde develop
139
146
  - Ejecuta git add, commit y push
140
147
 
141
148
  Opcionalmente puedes pasar el mensaje del commit:
@@ -10,10 +10,13 @@ Este comando envuelve la funcionalidad de OpenSpec fast-forward (ff) y agrega la
10
10
 
11
11
  ## Antes de empezar
12
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.
13
+ ### Verificar prerequisitos
15
14
 
16
- Verifica que exista `openspec/`. Si no existe, informa al usuario que ejecute `/refacil:setup` primero.
15
+ 1. **OpenSpec instalado**: Ejecuta `openspec --version 2>&1`. Si el comando falla o no se reconoce, informa al usuario: "OpenSpec no esta instalado. Ejecuta `/refacil:setup` para instalarlo y configurar el repositorio." y **detente**.
16
+
17
+ 2. **OpenSpec inicializado**: Verifica que exista la carpeta `openspec/` en la raiz del proyecto. Si no existe, informa al usuario: "OpenSpec no esta inicializado en este repositorio. Ejecuta `/refacil:setup` para configurarlo." y **detente**.
18
+
19
+ 3. **AGENTS.md**: Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones, arquitectura y patrones. Si NO existe, informa al usuario: "No se encontro AGENTS.md. Ejecuta `/refacil:setup` para generarlo." y **detente**.
17
20
 
18
21
  ## Instrucciones
19
22
 
@@ -88,6 +88,11 @@ Se especifico en las evaluaciones. No des PASS generico — justifica brevemente
88
88
  [PASS/FAIL/N/A] Sin archivos generados en commit
89
89
  [PASS/FAIL/N/A] Migraciones reversibles (si aplica)
90
90
 
91
+ ## 9. Reglas especificas del proyecto
92
+ [PASS/FAIL/N/A] Cumple reglas de "Siempre hacer" de AGENTS.md
93
+ [PASS/FAIL/N/A] No viola reglas de "Nunca hacer" de AGENTS.md
94
+ [PASS/FAIL/N/A] Reglas adicionales del proyecto (si aplica)
95
+
91
96
  ---
92
97
  RESUMEN: [X] PASS | [Y] FAIL | [Z] N/A
93
98
  VEREDICTO: APROBADO / REQUIERE CORRECCIONES
@@ -1,5 +1,7 @@
1
1
  # Checklist de Calidad — 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.
4
+
3
5
  ## 1. Conformidad con Spec
4
6
  - Todos los criterios de aceptacion de la spec estan cubiertos
5
7
  - No se implemento funcionalidad fuera del alcance de la spec
@@ -7,33 +9,35 @@
7
9
  - El modelo de datos coincide con lo especificado
8
10
 
9
11
  ## 2. Calidad de Codigo
10
- - El codigo sigue los patrones existentes del repo (ver AGENTS.md)
12
+ - El codigo sigue los patrones existentes del repo (consultar AGENTS.md seccion de arquitectura/convenciones)
11
13
  - No hay codigo duplicado que pueda extraerse
12
14
  - Los nombres de variables, funciones y clases son claros y descriptivos
13
15
  - No hay console.log, TODO, o codigo comentado sin razon
14
- - Los imports usan los alias configurados del proyecto (@core/*, @logger/*, etc.)
16
+ - Los imports usan los alias configurados del proyecto (consultar AGENTS.md seccion de alias de rutas, si aplica)
15
17
  - No hay dependencias circulares nuevas
16
18
 
17
19
  ## 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
20
+ - Se respetan los limites y capas definidos en AGENTS.md
21
+ - Las dependencias fluyen en la direccion correcta segun la arquitectura del proyecto
22
+ - No hay logica de negocio en la capa de infraestructura o transporte
23
+ - Las interfaces/puertos estan en la capa correcta segun las convenciones del repo
22
24
  - Los DTOs estan en la capa correcta
23
25
 
26
+ > **Nota**: La arquitectura varia por proyecto (DDD, MVC, Clean Architecture, Hexagonal, etc.). Consultar AGENTS.md para saber cual aplica y evaluar en consecuencia.
27
+
24
28
  ## 4. Testing
25
- - Cada archivo nuevo/modificado tiene su .spec.ts correspondiente
29
+ - Cada archivo nuevo/modificado tiene su archivo de test correspondiente
26
30
  - Los tests cubren los criterios de aceptacion de la spec
27
31
  - Hay tests para edge cases y escenarios de error
28
32
  - Los mocks son minimos y necesarios
29
33
  - Los tests son independientes entre si
30
34
  - Coverage >= 80% en archivos nuevos
31
- - npm test pasa sin errores
35
+ - Los tests pasan sin errores (ejecutar el comando de test indicado en AGENTS.md)
32
36
 
33
37
  ## 5. Seguridad
34
38
  - 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)
39
+ - Los inputs del usuario estan validados (usar la libreria de validacion del proyecto)
40
+ - No hay inyeccion SQL posible (queries parametrizadas con el ORM del proyecto)
37
41
  - Los endpoints sensibles tienen autorizacion adecuada
38
42
  - No se expone informacion sensible en logs o respuestas de error
39
43
 
@@ -41,7 +45,7 @@
41
45
  - Las consultas a base de datos usan indices apropiados
42
46
  - No hay queries N+1
43
47
  - Las operaciones pesadas son asincronas donde corresponde
44
- - No hay memory leaks obvios (subscriptions sin unsubscribe, etc.)
48
+ - No hay memory leaks obvios (subscriptions sin unsubscribe, listeners sin cleanup, etc.)
45
49
 
46
50
  ## 7. Mantenibilidad
47
51
  - El codigo es autoexplicativo (comentarios solo donde la logica no es obvia)
@@ -55,8 +59,7 @@
55
59
  - Las migraciones de BD (si hay) son reversibles
56
60
  - No hay breaking changes no documentados
57
61
 
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
62
+ ## 9. Reglas especificas del proyecto
63
+ - Consultar la seccion "Reglas criticas" de AGENTS.md
64
+ - Evaluar contra las reglas de "Siempre hacer", "Nunca hacer" y "Preguntar primero"
65
+ - Si AGENTS.md define reglas adicionales (ej: zona horaria, formato de fechas, naming conventions), verificar su cumplimiento
@@ -107,7 +107,47 @@ Secciones obligatorias:
107
107
  - "Nunca hacer": anti-patrones especificos para el stack
108
108
  - "Preguntar primero": cambios de alto impacto que requieren confirmacion
109
109
 
110
- #### 5.3 Mostrar al usuario
110
+ #### 5.3 Fallback si el analisis falla
111
+
112
+ Si por cualquier razon no puedes generar un AGENTS.md completo (archivos no legibles, repo vacio, error inesperado), genera un AGENTS.md minimo con esta estructura:
113
+
114
+ ```markdown
115
+ # [nombre del proyecto]
116
+
117
+ > Generado por /refacil:setup — completar manualmente las secciones marcadas con TODO.
118
+
119
+ ## Metodologia SDD-AI
120
+
121
+ | Comando | Descripcion |
122
+ |---------|-------------|
123
+ | `/refacil:setup` | Instalar OpenSpec y generar AGENTS.md |
124
+ | `/refacil:guide` | Guia interactiva — que comando usar |
125
+ | `/refacil:explore` | Explorar el codebase sin cambios |
126
+ | `/refacil:propose` | Crear propuesta de cambio |
127
+ | `/refacil:apply` | Implementar tasks del cambio |
128
+ | `/refacil:test` | Generar tests unitarios |
129
+ | `/refacil:verify` | Validar implementacion vs specs |
130
+ | `/refacil:review` | Review con checklist de calidad |
131
+ | `/refacil:archive` | Archivar cambio completado |
132
+ | `/refacil:up-code` | Subir codigo a rama de desarrollo |
133
+ | `/refacil:bug` | Flujo guiado de bugfix |
134
+
135
+ ## Stack tecnologico
136
+ TODO: Completar con el stack del proyecto
137
+
138
+ ## Arquitectura
139
+ TODO: Completar con la estructura del proyecto
140
+
141
+ ## Comandos de desarrollo
142
+ TODO: Completar con los scripts de package.json
143
+
144
+ ## Reglas criticas
145
+ TODO: Completar con las convenciones del equipo
146
+ ```
147
+
148
+ Informa al usuario que el AGENTS.md fue generado con secciones TODO que debe completar manualmente o ejecutando `/refacil:setup` de nuevo.
149
+
150
+ #### 5.4 Mostrar al usuario
111
151
 
112
152
  Muestra el AGENTS.md generado completo. Pregunta si quiere ajustar algo antes de guardarlo.
113
153
 
@@ -29,17 +29,34 @@ Verifica que la rama actual **NO** sea ninguna de las siguientes ramas protegida
29
29
  - `qa`
30
30
  - `dev`
31
31
 
32
- Si la rama actual es una rama protegida, **DETENTE** e informa al usuario:
32
+ Si la rama actual es una rama protegida, **DETENTE** y **pide el numero de tarea de Jira**:
33
33
 
34
34
  ```
35
- ERROR: Estas en la rama '[nombre-rama]' que es una rama de ambiente protegida.
35
+ ERROR: Estas en la rama '[nombre-rama]' que es una rama protegida.
36
36
  No se puede hacer push directo a ramas protegidas (master, main, develop, testing, qa, dev).
37
37
 
38
- Crea una rama de desarrollo primero:
39
- git checkout -b feature/[nombre-descriptivo]
38
+ Cual es el numero de tarea de Jira para este cambio? (ejemplo: RF-5088)
40
39
  ```
41
40
 
42
- Pregunta al usuario si desea crear una rama de desarrollo. Si acepta, sugiere un nombre basado en los cambios pendientes y ejecuta `git checkout -b [nombre-sugerido]`.
41
+ **Crear la rama siempre desde develop/dev actualizado:**
42
+ 1. **Verificar working directory limpio**: Ejecuta `git status --porcelain`. Si hay cambios sin commitear (archivos modificados o sin trackear), informa al usuario:
43
+ ```
44
+ Hay cambios sin commitear en la rama actual.
45
+ Para cambiar de rama de forma segura, necesito guardarlos temporalmente con git stash.
46
+ Quieres que haga git stash antes de continuar?
47
+ ```
48
+ - Si acepta: ejecuta `git stash push -m "stash-automatico-refacil"` y continua. Al final del proceso (despues de crear la rama), ejecuta `git stash pop` para restaurar los cambios.
49
+ - Si no acepta: **detente**.
50
+ 2. Detecta cual existe en el repo: `develop` o `dev` (ejecuta `git branch --list develop dev`)
51
+ 3. Cambia a esa rama: `git checkout develop` (o `dev`)
52
+ 4. Actualiza: `git pull origin develop` (o `dev`)
53
+ 5. Determina el nombre de la nueva rama:
54
+ - Si el usuario entrego el numero de Jira (ej: `RF-5088`): la rama sera `feature/RF-5088`
55
+ - Si el usuario no tiene tarea de Jira: usa un nombre descriptivo corto (ej: `feature/ajuste-validacion`). Pero **recomienda crear la tarea en Jira** para trazabilidad.
56
+ 6. Verifica que la rama no exista ya: `git branch --list [nombre-rama]`
57
+ - Si ya existe, informa al usuario y pregunta si quiere cambiarse a esa rama existente o elegir otro nombre.
58
+ 7. Crea la rama: `git checkout -b [nombre-rama]`
59
+ 8. Si se hizo stash en el paso 1, ejecuta `git stash pop` para restaurar los cambios.
43
60
 
44
61
  Si el usuario no quiere crear una rama, **detente**. No continuar con el push.
45
62
 
@@ -75,7 +92,7 @@ Ejecuta `git push -u origin [rama-actual]` para subir los cambios.
75
92
 
76
93
  ## Reglas
77
94
 
78
- - NUNCA hacer push a ramas protegidas: master, main, develop, testing, qa
95
+ - NUNCA hacer push a ramas protegidas: master, main, develop, dev, testing, qa
79
96
  - Si el usuario esta en una rama protegida, SIEMPRE preguntar antes de crear una rama nueva
80
97
  - Siempre hacer push a ramas de desarrollo propias (feature/, fix/, hotfix/, refactor/, etc.)
81
98
  - No forzar push (--force) a menos que el usuario lo pida explicitamente
@@ -10,8 +10,13 @@ Este comando envuelve la funcionalidad de OpenSpec verify y agrega verificacion
10
10
 
11
11
  ## Antes de empezar
12
12
 
13
- Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones.
14
- Si NO existe `AGENTS.md`, informa al usuario: "No se encontro AGENTS.md. Ejecuta /refacil:setup para generarlo." y detente.
13
+ ### Verificar prerequisitos
14
+
15
+ 1. **OpenSpec instalado**: Ejecuta `openspec --version 2>&1`. Si el comando falla o no se reconoce, informa al usuario: "OpenSpec no esta instalado. Ejecuta `/refacil:setup` para instalarlo y configurar el repositorio." y **detente**.
16
+
17
+ 2. **OpenSpec inicializado**: Verifica que exista la carpeta `openspec/` en la raiz del proyecto. Si no existe, informa al usuario: "OpenSpec no esta inicializado en este repositorio. Ejecuta `/refacil:setup` para configurarlo." y **detente**.
18
+
19
+ 3. **AGENTS.md**: Si existe `AGENTS.md` en la raiz del proyecto, leelo para entender las convenciones. Si NO existe, informa al usuario: "No se encontro AGENTS.md. Ejecuta `/refacil:setup` para generarlo." y **detente**.
15
20
 
16
21
  ## Instrucciones
17
22