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 +36 -10
- package/package.json +2 -2
- package/skills/apply/SKILL.md +50 -4
- package/skills/archive/SKILL.md +7 -2
- package/skills/bug/SKILL.md +45 -4
- package/skills/explore/SKILL.md +6 -2
- package/skills/guide/SKILL.md +14 -7
- package/skills/propose/SKILL.md +6 -3
- package/skills/review/SKILL.md +5 -0
- package/skills/review/checklist.md +19 -16
- package/skills/setup/SKILL.md +41 -1
- package/skills/up-code/SKILL.md +23 -6
- package/skills/verify/SKILL.md +7 -2
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
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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": ">=
|
|
34
|
+
"node": ">=20.19.0"
|
|
35
35
|
}
|
|
36
36
|
}
|
package/skills/apply/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
14
|
-
|
|
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:
|
|
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
|
|
76
|
+
### Paso 3: Resumen y siguiente paso (aporte Refacil)
|
|
31
77
|
|
|
32
78
|
Al terminar la implementacion de OpenSpec, agrega este resumen:
|
|
33
79
|
|
package/skills/archive/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
14
|
-
|
|
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
|
|
package/skills/bug/SKILL.md
CHANGED
|
@@ -64,7 +64,48 @@ Presenta la correccion propuesta:
|
|
|
64
64
|
|
|
65
65
|
Espera aprobacion del usuario antes de implementar.
|
|
66
66
|
|
|
67
|
-
### Paso 5:
|
|
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
|
|
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
|
|
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
|
|
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]/`
|
package/skills/explore/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
13
|
+
### Verificar prerequisitos
|
|
14
14
|
|
|
15
|
-
|
|
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
|
|
package/skills/guide/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
43
|
-
|
|
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,
|
|
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
|
|
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
|
|
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:
|
package/skills/propose/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
package/skills/review/SKILL.md
CHANGED
|
@@ -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 (
|
|
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 (
|
|
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
|
|
19
|
-
- Las dependencias fluyen
|
|
20
|
-
- No hay logica de negocio en la capa de infraestructura
|
|
21
|
-
-
|
|
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
|
|
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
|
-
-
|
|
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 (
|
|
36
|
-
- No hay inyeccion SQL posible (queries parametrizadas con
|
|
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.
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
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
|
package/skills/setup/SKILL.md
CHANGED
|
@@ -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
|
|
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
|
|
package/skills/up-code/SKILL.md
CHANGED
|
@@ -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**
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -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
|
-
|
|
14
|
-
|
|
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
|
|