refacil-sdd-ai 2.2.0 → 2.4.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 +210 -18
- package/bin/cli.js +80 -30
- package/lib/compact-guidance.js +77 -0
- package/package.json +2 -1
- package/skills/apply/SKILL.md +2 -6
- package/skills/archive/SKILL.md +1 -4
- package/skills/bug/SKILL.md +9 -42
- package/skills/explore/SKILL.md +1 -3
- package/skills/prereqs/SKILL.md +16 -25
- package/skills/propose/SKILL.md +1 -3
- package/skills/review/SKILL.md +9 -47
- package/skills/setup/SKILL.md +6 -0
- package/skills/test/SKILL.md +10 -23
- package/skills/up-code/SKILL.md +5 -10
- package/skills/verify/SKILL.md +1 -4
- package/templates/compact-guidance.md +45 -0
- package/templates/{claude-md.md → methodology-guide.md} +10 -6
- package/templates/cursorrules.md +0 -22
package/README.md
CHANGED
|
@@ -97,13 +97,15 @@ Para mantener trazabilidad y calidad sin pasos innecesarios:
|
|
|
97
97
|
2. `/refacil:apply`
|
|
98
98
|
3. `/refacil:test`
|
|
99
99
|
4. `/refacil:verify`
|
|
100
|
-
5. `/refacil:review` (
|
|
100
|
+
5. `/refacil:review` (si lo omites, `/refacil:up-code` lo dispara antes del push)
|
|
101
101
|
6. `/refacil:archive`
|
|
102
102
|
7. `/refacil:up-code`
|
|
103
103
|
|
|
104
|
-
Si es bugfix,
|
|
104
|
+
Si es bugfix, inicia con `/refacil:bug` (ya genera tests de regresion internamente) y continua con `/refacil:review` → `/refacil:archive` → `/refacil:up-code`.
|
|
105
105
|
|
|
106
|
-
> **Nota
|
|
106
|
+
> **Nota — dos capas independientes de chequeo de review**:
|
|
107
|
+
> - `/refacil:up-code` detecta si falta `.review-passed` y **ejecuta `/refacil:review` automaticamente** antes del push.
|
|
108
|
+
> - El hook `check-review` (en `.claude/settings.json`) intercepta tambien `git push` manuales y **bloquea** la operacion si falta `.review-passed`. El hook NO invoca skills por si mismo — solo bloquea y emite instrucciones para ejecutar `/refacil:review` manualmente.
|
|
107
109
|
>
|
|
108
110
|
|
|
109
111
|
## Flujos de trabajo
|
|
@@ -117,7 +119,7 @@ Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar con `/refacil:
|
|
|
117
119
|
/refacil:test
|
|
118
120
|
/refacil:verify
|
|
119
121
|
# → Si hay correcciones: verify pregunta si aplicarlas automaticamente
|
|
120
|
-
# → Si aprueba: aplica fixes y re-verifica (
|
|
122
|
+
# → Si aprueba: aplica fixes y re-verifica (maximo 2 rondas de correccion automatica)
|
|
121
123
|
/refacil:review
|
|
122
124
|
/refacil:archive
|
|
123
125
|
/refacil:up-code
|
|
@@ -147,7 +149,7 @@ Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar con `/refacil:
|
|
|
147
149
|
>
|
|
148
150
|
> **Importante**: `/refacil:archive` requiere review aprobado (`.review-passed`). Si no existe, bloquea el archivado. Para bugs, el archive no delega a OpenSpec — hace el archivado manual y documenta el bug en `openspec/specs/` como spec individual en formato OpenSpec estandar, con `review.yaml` separado.
|
|
149
151
|
>
|
|
150
|
-
> En cambios regulares (feature/mejora) que se archivan con OpenSpec, Refacil
|
|
152
|
+
> En cambios regulares (feature/mejora) que se archivan con OpenSpec, Refacil **extrae los campos** de `.review-passed` (JSON) y los persiste como `review.yaml` dentro de cada spec afectado (o en `openspec/specs/review-metadata.yaml` si no hay mapeo preciso). El archivo `.review-passed` original no se copia: solo su contenido convertido a YAML.
|
|
151
153
|
|
|
152
154
|
### Explorar codigo
|
|
153
155
|
|
|
@@ -155,6 +157,143 @@ Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar con `/refacil:
|
|
|
155
157
|
/refacil:explore "que quiero entender"
|
|
156
158
|
```
|
|
157
159
|
|
|
160
|
+
## Diagrama de flujo completo
|
|
161
|
+
|
|
162
|
+
Vista unica del ciclo de vida de un cambio — desde la necesidad hasta el PR integrado.
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
166
|
+
│ INICIO: Necesidad de cambio │
|
|
167
|
+
└────────────────────────────────┬────────────────────────────────┘
|
|
168
|
+
│
|
|
169
|
+
▼
|
|
170
|
+
┌────────────────────────┐
|
|
171
|
+
│ ¿Repo configurado? │
|
|
172
|
+
└───┬────────────────┬───┘
|
|
173
|
+
NO│ │SI
|
|
174
|
+
▼ │
|
|
175
|
+
┌──────────────────┐ │
|
|
176
|
+
│ refacil-sdd-ai │ │
|
|
177
|
+
│ init │ │
|
|
178
|
+
│ /refacil:setup │ │
|
|
179
|
+
└────────┬─────────┘ │
|
|
180
|
+
└────────┬────────┘
|
|
181
|
+
▼
|
|
182
|
+
┌────────────────────────┐
|
|
183
|
+
│ ¿Que tipo de tarea? │
|
|
184
|
+
└───┬────────┬───────┬───┘
|
|
185
|
+
│ │ │
|
|
186
|
+
┌─────────┘ │ └─────────┐
|
|
187
|
+
▼ ▼ ▼
|
|
188
|
+
┌────────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
189
|
+
│ FEATURE NUEVO │ │ BUG │ │ EXPLORAR │
|
|
190
|
+
└───────┬────────┘ └──────┬───────┘ └──────┬───────┘
|
|
191
|
+
│ │ │
|
|
192
|
+
▼ ▼ ▼
|
|
193
|
+
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
|
|
194
|
+
│/refacil:propose │ │/refacil:bug │ │/refacil:explore │
|
|
195
|
+
│ │ │ │ │ │
|
|
196
|
+
│ Genera: │ │ Investiga + │ │ Analiza codigo │
|
|
197
|
+
│ • proposal.md │ │ fix + test │ │ sin modificar │
|
|
198
|
+
│ • specs/ │ │ de regresion │ │ │
|
|
199
|
+
│ • design.md │ │ (interno) │ │ (FIN) │
|
|
200
|
+
│ • tasks.md │ │ │ └─────────────────┘
|
|
201
|
+
└────────┬────────┘ └──────┬───────┘
|
|
202
|
+
│ │
|
|
203
|
+
▼ │
|
|
204
|
+
┌─────────────────┐ │
|
|
205
|
+
│ REVISAR │ │
|
|
206
|
+
│ artefactos │ │
|
|
207
|
+
│ (aprobacion │ │
|
|
208
|
+
│ humana) │ │
|
|
209
|
+
└────────┬────────┘ │
|
|
210
|
+
│ │
|
|
211
|
+
▼ │
|
|
212
|
+
┌─────────────────┐ │
|
|
213
|
+
│ /refacil:apply │ │
|
|
214
|
+
│ Implementa │ │
|
|
215
|
+
│ tasks │ │
|
|
216
|
+
└────────┬────────┘ │
|
|
217
|
+
│ │
|
|
218
|
+
▼ │
|
|
219
|
+
┌─────────────────┐ │
|
|
220
|
+
│ /refacil:test │ │
|
|
221
|
+
│ Tests unitarios │ │
|
|
222
|
+
│ + edge cases │ │
|
|
223
|
+
└────────┬────────┘ │
|
|
224
|
+
│ │
|
|
225
|
+
▼ │
|
|
226
|
+
┌─────────────────┐ │
|
|
227
|
+
│ /refacil:verify │ │
|
|
228
|
+
│ ¿Cumple specs? │ │
|
|
229
|
+
│ (max 2 rondas │ │
|
|
230
|
+
│ autofix) │ │
|
|
231
|
+
└────────┬────────┘ │
|
|
232
|
+
│ │
|
|
233
|
+
└────────┬────────┘
|
|
234
|
+
▼
|
|
235
|
+
┌─────────────────┐
|
|
236
|
+
│ /refacil:review │
|
|
237
|
+
│ Checklist │──► genera .review-passed
|
|
238
|
+
│ calidad │ (JSON con veredicto)
|
|
239
|
+
└────────┬────────┘
|
|
240
|
+
▼
|
|
241
|
+
┌─────────────────┐
|
|
242
|
+
│/refacil:archive │
|
|
243
|
+
│ Mueve a archive/│
|
|
244
|
+
│ Sincroniza specs│
|
|
245
|
+
│ (bug → fix-*/ │
|
|
246
|
+
│ spec OpenSpec) │
|
|
247
|
+
└────────┬────────┘
|
|
248
|
+
▼
|
|
249
|
+
┌─────────────────┐
|
|
250
|
+
│/refacil:up-code │
|
|
251
|
+
│ commit + push │
|
|
252
|
+
│ + PR │
|
|
253
|
+
└────────┬────────┘
|
|
254
|
+
▼
|
|
255
|
+
┌─────────────────┐
|
|
256
|
+
│ PR creado │
|
|
257
|
+
│ (FIN) │
|
|
258
|
+
└─────────────────┘
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Gate de review en el push
|
|
262
|
+
|
|
263
|
+
Vista del mecanismo de dos capas que protege `git push`:
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
┌──────────────────────────────┐
|
|
267
|
+
│ Dev ejecuta /refacil:up-code │
|
|
268
|
+
│ o git push manual │
|
|
269
|
+
└────────────────┬─────────────┘
|
|
270
|
+
│
|
|
271
|
+
┌──────────────────────┴──────────────────────┐
|
|
272
|
+
│ Via /refacil:up-code │ git push directo
|
|
273
|
+
▼ ▼
|
|
274
|
+
┌─────────────────────────┐ ┌───────────────────────────┐
|
|
275
|
+
│ up-code detecta │ │ Hook check-review │
|
|
276
|
+
│ .review-passed faltante │ │ (PreToolUse en Bash) │
|
|
277
|
+
│ │ │ │
|
|
278
|
+
│ INVOCA /refacil:review │ │ Verifica .review-passed │
|
|
279
|
+
│ automaticamente │ │ en openspec/changes/* │
|
|
280
|
+
└────────────┬────────────┘ └────────────┬───────────────┘
|
|
281
|
+
│ │
|
|
282
|
+
▼ ▼
|
|
283
|
+
┌──────────────┐ ┌─────────────────┐
|
|
284
|
+
│ Review OK? │ │ Falta alguno? │
|
|
285
|
+
└──┬────────┬──┘ └──┬───────────┬──┘
|
|
286
|
+
SI│ NO│ SI│ NO│
|
|
287
|
+
▼ ▼ ▼ ▼
|
|
288
|
+
┌─────────┐ ┌────────────┐ ┌─────────────┐ ┌────────┐
|
|
289
|
+
│ push OK │ │ informa │ │ block + │ │ allow │
|
|
290
|
+
│ │ │ correccion │ │ instruccion │ │ push │
|
|
291
|
+
│ │ │ no pushea │ │ a ejecutar │ │ │
|
|
292
|
+
│ │ │ │ │ /refacil: │ │ │
|
|
293
|
+
│ │ │ │ │ review │ │ │
|
|
294
|
+
└─────────┘ └────────────┘ └─────────────┘ └────────┘
|
|
295
|
+
```
|
|
296
|
+
|
|
158
297
|
## Reglas metodologicas transversales
|
|
159
298
|
|
|
160
299
|
Para mantener consistencia entre todas las skills, el paquete define un contrato metodologico unico en `skills/prereqs/METHODOLOGY-CONTRACT.md`:
|
|
@@ -188,22 +327,36 @@ El paquete instala hooks en `.claude/settings.json` durante `init` y `update`:
|
|
|
188
327
|
|
|
189
328
|
| Hook | Evento | Que hace |
|
|
190
329
|
|------|--------|----------|
|
|
191
|
-
| `check-update` | `SessionStart` | Verifica si hay nueva version del paquete en npm y la instala automaticamente |
|
|
192
|
-
| `check-review` | `PreToolUse` (Bash) | Intercepta `git push` y verifica que exista `.review-passed` en cada cambio activo de `openspec/changes/`. Si falta,
|
|
330
|
+
| `check-update` | `SessionStart` | Verifica si hay nueva version del paquete en npm y la instala automaticamente. Tambien **sincroniza el bloque `compact-guidance`** en `AGENTS.md` (ver [Eficiencia de tokens](#eficiencia-de-tokens-bloque-auto-gestionado-en-agentsmd)). |
|
|
331
|
+
| `check-review` | `PreToolUse` (Bash) | Intercepta `git push` y verifica que exista `.review-passed` en cada cambio activo de `openspec/changes/`. Si falta, **bloquea el push** y emite instrucciones para ejecutar `/refacil:review`. El hook no invoca skills por si mismo. |
|
|
193
332
|
|
|
194
333
|
#### Flujo del hook de review
|
|
195
334
|
|
|
335
|
+
El hook unicamente decide `allow` o `block`. La ejecucion automatica de `/refacil:review` la realiza `/refacil:up-code`, no el hook.
|
|
336
|
+
|
|
196
337
|
```
|
|
197
|
-
/refacil:up-code
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
338
|
+
git push (manual o via /refacil:up-code)
|
|
339
|
+
│
|
|
340
|
+
▼
|
|
341
|
+
Hook check-review se dispara
|
|
342
|
+
│
|
|
343
|
+
▼
|
|
344
|
+
Busca carpetas activas en openspec/changes/ (excluye archive/)
|
|
345
|
+
│
|
|
346
|
+
▼
|
|
347
|
+
¿Todas tienen .review-passed?
|
|
348
|
+
│
|
|
349
|
+
├─ SI ──► allow → el push procede
|
|
350
|
+
│
|
|
351
|
+
└─ NO ──► block → emite mensaje instructivo:
|
|
352
|
+
• 1 pendiente → sugiere "/refacil:review <cambio>"
|
|
353
|
+
• N pendientes → lista cambios y pide seleccionar uno
|
|
354
|
+
|
|
355
|
+
Capa adicional cuando se usa /refacil:up-code:
|
|
356
|
+
/refacil:up-code detecta el faltante ANTES de llamar a git push,
|
|
357
|
+
invoca /refacil:review y solo entonces intenta el push.
|
|
358
|
+
• Si el review APRUEBA → genera .review-passed → push procede
|
|
359
|
+
• Si requiere CORRECCIONES → informa al usuario, no pushea
|
|
207
360
|
```
|
|
208
361
|
|
|
209
362
|
#### Evidencia de review
|
|
@@ -225,6 +378,43 @@ openspec/changes/fix-session-timeout-redis/
|
|
|
225
378
|
|
|
226
379
|
El archivo `.review-passed` contiene: veredicto, fecha, resumen, cantidad de hallazgos y si hubo blockers.
|
|
227
380
|
|
|
381
|
+
### Eficiencia de tokens (bloque auto-gestionado en AGENTS.md)
|
|
382
|
+
|
|
383
|
+
La metodologia SDD-AI genera consumo elevado de contexto (artefactos, specs, prompts de skills). Para compensarlo, `refacil-sdd-ai` mantiene un bloque de guia de eficiencia de tokens dentro de `AGENTS.md` que instruye a la IA sobre como pedir salidas compactas (Read con offset/limit, `git log --oneline`, tests solo con failures, etc.).
|
|
384
|
+
|
|
385
|
+
**Caracteristicas**:
|
|
386
|
+
- Delimitado por marcadores HTML: `<!-- refacil-sdd-ai:compact-guidance:start -->` y `<!-- refacil-sdd-ai:compact-guidance:end -->`
|
|
387
|
+
- Fuente de verdad: `templates/compact-guidance.md` dentro del paquete
|
|
388
|
+
- Se sincroniza automaticamente en tres momentos:
|
|
389
|
+
1. `refacil-sdd-ai init` (al instalar)
|
|
390
|
+
2. `refacil-sdd-ai update` (al actualizar manualmente)
|
|
391
|
+
3. Hook `check-update` en cada `SessionStart` (garantiza que repos ya instalados reciban las guias nuevas sin intervencion manual)
|
|
392
|
+
- Si `AGENTS.md` aun no existe (el usuario no ha corrido `/refacil:setup`), la sincronizacion no hace nada — no se crea el archivo a espaldas del usuario
|
|
393
|
+
- `refacil-sdd-ai clean` remueve el bloque de forma limpia
|
|
394
|
+
|
|
395
|
+
> **IMPORTANTE**: No edites manualmente el contenido entre los marcadores. Cualquier cambio se sobrescribira en la proxima sesion. Si tienes sugerencias sobre reglas de eficiencia, proponlas al paquete (`templates/compact-guidance.md`).
|
|
396
|
+
|
|
397
|
+
**Flujo del refresh automatico**:
|
|
398
|
+
|
|
399
|
+
```
|
|
400
|
+
Nueva sesion de Claude Code
|
|
401
|
+
│
|
|
402
|
+
▼
|
|
403
|
+
Hook SessionStart → ejecuta "refacil-sdd-ai check-update"
|
|
404
|
+
│
|
|
405
|
+
├─► syncCompactGuidance()
|
|
406
|
+
│ │
|
|
407
|
+
│ ├─ AGENTS.md no existe → skip (sin ruido)
|
|
408
|
+
│ ├─ sin marcadores → append del bloque al final
|
|
409
|
+
│ ├─ con marcadores → reemplaza contenido entre ellos
|
|
410
|
+
│ └─ contenido identico → no-op (no ensucia git status)
|
|
411
|
+
│
|
|
412
|
+
└─► chequeo de version npm
|
|
413
|
+
│
|
|
414
|
+
└─ si hay version nueva → npm update -g + refacil-sdd-ai update
|
|
415
|
+
(que vuelve a sincronizar el bloque)
|
|
416
|
+
```
|
|
417
|
+
|
|
228
418
|
## Como funciona
|
|
229
419
|
|
|
230
420
|
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`
|
|
@@ -240,6 +430,7 @@ refacil-sdd-ai init → Skills en .claude/ y .cursor/
|
|
|
240
430
|
|
|
241
431
|
/refacil:setup → OpenSpec instalado
|
|
242
432
|
AGENTS.md generado (analisis automatico del repo)
|
|
433
|
+
+ bloque compact-guidance inyectado automaticamente
|
|
243
434
|
|
|
244
435
|
/refacil:propose → Artefactos en openspec/changes/
|
|
245
436
|
/refacil:apply → Codigo implementado
|
|
@@ -258,10 +449,11 @@ refacil-sdd-ai init → Skills en .claude/ y .cursor/
|
|
|
258
449
|
.claude/skills/refacil-*/ # Claude Code (refacil-prereqs incluye OPENSPEC-DELTAS.md)
|
|
259
450
|
.claude/settings.json # Hooks automaticos (check-update + check-review)
|
|
260
451
|
.cursor/skills/refacil-*/ # Cursor — copia equivalente
|
|
261
|
-
|
|
452
|
+
.claude/skills/refacil-setup/troubleshooting.md # guia incluida en refacil-setup si falla install/PATH
|
|
262
453
|
CLAUDE.md # Claude Code — apunta a AGENTS.md
|
|
263
454
|
.cursorrules # Cursor — apunta a AGENTS.md
|
|
264
455
|
AGENTS.md # Generado por /refacil:setup (NO por el CLI)
|
|
456
|
+
# Incluye bloque compact-guidance auto-gestionado por el hook SessionStart
|
|
265
457
|
openspec/ # Generado por /refacil:setup via OpenSpec
|
|
266
458
|
```
|
|
267
459
|
|
package/bin/cli.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
const path = require('path');
|
|
5
|
+
const {
|
|
6
|
+
syncCompactGuidance,
|
|
7
|
+
removeCompactGuidance,
|
|
8
|
+
} = require('../lib/compact-guidance');
|
|
5
9
|
|
|
6
10
|
const SKILLS = [
|
|
7
11
|
'setup',
|
|
@@ -64,44 +68,47 @@ function extractSddSection(templateContent) {
|
|
|
64
68
|
return templateContent.substring(idx);
|
|
65
69
|
}
|
|
66
70
|
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
function readMethodologyGuide() {
|
|
72
|
+
return fs.readFileSync(
|
|
73
|
+
path.join(packageRoot, 'templates', 'methodology-guide.md'),
|
|
74
|
+
'utf8',
|
|
75
|
+
);
|
|
76
|
+
}
|
|
70
77
|
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
function writeGuideFile(destPath, header, label) {
|
|
79
|
+
const guide = readMethodologyGuide();
|
|
80
|
+
const content = `# ${header}\n\n${guide}`;
|
|
81
|
+
|
|
82
|
+
if (fs.existsSync(destPath)) {
|
|
83
|
+
const existing = fs.readFileSync(destPath, 'utf8');
|
|
73
84
|
if (existing.includes(SDD_SECTION_MARKER)) {
|
|
74
|
-
console.log(
|
|
85
|
+
console.log(` ${label} ya tiene la seccion SDD-AI. Sin cambios.`);
|
|
75
86
|
return false;
|
|
76
87
|
}
|
|
77
|
-
const sddSection = extractSddSection(
|
|
78
|
-
fs.writeFileSync(
|
|
79
|
-
console.log(
|
|
88
|
+
const sddSection = extractSddSection(guide);
|
|
89
|
+
fs.writeFileSync(destPath, existing.trimEnd() + '\n\n' + sddSection + '\n');
|
|
90
|
+
console.log(` ${label} existente — seccion SDD-AI agregada al final.`);
|
|
80
91
|
return true;
|
|
81
92
|
}
|
|
82
93
|
|
|
83
|
-
fs.writeFileSync(
|
|
94
|
+
fs.writeFileSync(destPath, content);
|
|
84
95
|
return true;
|
|
85
96
|
}
|
|
86
97
|
|
|
87
|
-
function
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
console.log(' .cursorrules ya tiene la seccion SDD-AI. Sin cambios.');
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
const sddSection = extractSddSection(template);
|
|
98
|
-
fs.writeFileSync(dest, existing.trimEnd() + '\n\n' + sddSection + '\n');
|
|
99
|
-
console.log(' .cursorrules existente — seccion SDD-AI agregada al final.');
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
98
|
+
function createClaudeMd() {
|
|
99
|
+
return writeGuideFile(
|
|
100
|
+
path.join(projectRoot, 'CLAUDE.md'),
|
|
101
|
+
'CLAUDE.md',
|
|
102
|
+
'CLAUDE.md',
|
|
103
|
+
);
|
|
104
|
+
}
|
|
102
105
|
|
|
103
|
-
|
|
104
|
-
return
|
|
106
|
+
function createCursorRules() {
|
|
107
|
+
return writeGuideFile(
|
|
108
|
+
path.join(projectRoot, '.cursorrules'),
|
|
109
|
+
'Cursor Rules',
|
|
110
|
+
'.cursorrules',
|
|
111
|
+
);
|
|
105
112
|
}
|
|
106
113
|
|
|
107
114
|
function removeSkills() {
|
|
@@ -245,6 +252,15 @@ function checkUpdate() {
|
|
|
245
252
|
const { execSync } = require('child_process');
|
|
246
253
|
const localVersion = require(path.join(packageRoot, 'package.json')).version;
|
|
247
254
|
|
|
255
|
+
// Always ensure AGENTS.md has current compact-guidance block (silent unless error)
|
|
256
|
+
try {
|
|
257
|
+
syncCompactGuidance(projectRoot, packageRoot);
|
|
258
|
+
} catch (err) {
|
|
259
|
+
process.stderr.write(
|
|
260
|
+
`[refacil-sdd-ai] No se pudo sincronizar compact-guidance: ${err.message}\n`,
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
248
264
|
try {
|
|
249
265
|
const latest = execSync('npm view refacil-sdd-ai version', {
|
|
250
266
|
encoding: 'utf8',
|
|
@@ -319,8 +335,7 @@ function checkReview() {
|
|
|
319
335
|
const reason =
|
|
320
336
|
missing.length === 1
|
|
321
337
|
? `[refacil-sdd-ai] Review pendiente para: ${names}. ` +
|
|
322
|
-
'
|
|
323
|
-
'Informa al usuario que el review se esta ejecutando automaticamente antes de subir el codigo. ' +
|
|
338
|
+
'Deten el push y ejecuta /refacil:review sobre ese cambio antes de subir codigo. ' +
|
|
324
339
|
'Si el review aprueba, reintenta el git push. ' +
|
|
325
340
|
'Si el review requiere correcciones, informa los hallazgos al usuario y NO reintentar el push.'
|
|
326
341
|
: `[refacil-sdd-ai] Hay multiples cambios sin review aprobado: ${names}. ` +
|
|
@@ -366,6 +381,18 @@ function init() {
|
|
|
366
381
|
console.log(' Hook check-update agregado a .claude/settings.json');
|
|
367
382
|
}
|
|
368
383
|
|
|
384
|
+
// Sync compact-guidance block in AGENTS.md (if it exists)
|
|
385
|
+
try {
|
|
386
|
+
const result = syncCompactGuidance(projectRoot, packageRoot);
|
|
387
|
+
if (result.status === 'appended') {
|
|
388
|
+
console.log(' Bloque compact-guidance agregado a AGENTS.md');
|
|
389
|
+
} else if (result.status === 'replaced') {
|
|
390
|
+
console.log(' Bloque compact-guidance actualizado en AGENTS.md');
|
|
391
|
+
}
|
|
392
|
+
} catch (err) {
|
|
393
|
+
console.error(` Advertencia: no se pudo sincronizar compact-guidance: ${err.message}`);
|
|
394
|
+
}
|
|
395
|
+
|
|
369
396
|
console.log('\n Siguientes pasos:\n');
|
|
370
397
|
console.log(' 1. REINICIA tu sesion de Claude Code o Cursor');
|
|
371
398
|
console.log(' (las skills nuevas no se detectan hasta reiniciar)\n');
|
|
@@ -386,6 +413,18 @@ function update() {
|
|
|
386
413
|
console.log(' Hook check-update agregado a .claude/settings.json');
|
|
387
414
|
}
|
|
388
415
|
|
|
416
|
+
// Sync compact-guidance block in AGENTS.md
|
|
417
|
+
try {
|
|
418
|
+
const result = syncCompactGuidance(projectRoot, packageRoot);
|
|
419
|
+
if (result.status === 'appended') {
|
|
420
|
+
console.log(' Bloque compact-guidance agregado a AGENTS.md');
|
|
421
|
+
} else if (result.status === 'replaced') {
|
|
422
|
+
console.log(' Bloque compact-guidance actualizado en AGENTS.md');
|
|
423
|
+
}
|
|
424
|
+
} catch (err) {
|
|
425
|
+
console.error(` Advertencia: no se pudo sincronizar compact-guidance: ${err.message}`);
|
|
426
|
+
}
|
|
427
|
+
|
|
389
428
|
console.log('\n REINICIA tu sesion de Claude Code o Cursor para aplicar los cambios.\n');
|
|
390
429
|
}
|
|
391
430
|
|
|
@@ -398,6 +437,17 @@ function clean() {
|
|
|
398
437
|
} else {
|
|
399
438
|
console.log(' No se encontraron hooks SDD-AI para remover.');
|
|
400
439
|
}
|
|
440
|
+
|
|
441
|
+
// Remove compact-guidance block from AGENTS.md if present
|
|
442
|
+
try {
|
|
443
|
+
const result = removeCompactGuidance(projectRoot);
|
|
444
|
+
if (result.status === 'removed') {
|
|
445
|
+
console.log(' Bloque compact-guidance removido de AGENTS.md');
|
|
446
|
+
}
|
|
447
|
+
} catch (err) {
|
|
448
|
+
console.error(` Advertencia: no se pudo limpiar compact-guidance: ${err.message}`);
|
|
449
|
+
}
|
|
450
|
+
|
|
401
451
|
console.log(' AGENTS.md, CLAUDE.md y .cursorrules no fueron eliminados.');
|
|
402
452
|
console.log('\n Nota: Los comandos opsx:* de OpenSpec no se eliminan.');
|
|
403
453
|
console.log(' Para eliminar OpenSpec: rm -rf openspec/ .claude/commands/opsx .cursor/commands/opsx\n');
|
|
@@ -410,7 +460,7 @@ function help() {
|
|
|
410
460
|
Comandos:
|
|
411
461
|
init Instala skills en .claude/ y .cursor/, crea CLAUDE.md y .cursorrules
|
|
412
462
|
update Re-copia skills (para actualizar a nueva version del paquete)
|
|
413
|
-
check-update Verifica si hay una version mas reciente en npm
|
|
463
|
+
check-update Verifica si hay una version mas reciente en npm y sincroniza compact-guidance en AGENTS.md
|
|
414
464
|
check-review Verifica que el review se haya completado (usado por hook PreToolUse)
|
|
415
465
|
clean Elimina skills y remueve hooks SDD-AI de .claude/settings.json
|
|
416
466
|
help Muestra esta ayuda
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const MARKER_START = '<!-- refacil-sdd-ai:compact-guidance:start -->';
|
|
5
|
+
const MARKER_END = '<!-- refacil-sdd-ai:compact-guidance:end -->';
|
|
6
|
+
|
|
7
|
+
function readTemplate(packageRoot) {
|
|
8
|
+
const tplPath = path.join(packageRoot, 'templates', 'compact-guidance.md');
|
|
9
|
+
return fs.readFileSync(tplPath, 'utf8').trimEnd();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function buildBlock(templateContent) {
|
|
13
|
+
return `${MARKER_START}\n${templateContent}\n${MARKER_END}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function syncCompactGuidance(projectRoot, packageRoot) {
|
|
17
|
+
const agentsPath = path.join(projectRoot, 'AGENTS.md');
|
|
18
|
+
if (!fs.existsSync(agentsPath)) {
|
|
19
|
+
return { status: 'skipped-no-agents-md' };
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const template = readTemplate(packageRoot);
|
|
23
|
+
const block = buildBlock(template);
|
|
24
|
+
const existing = fs.readFileSync(agentsPath, 'utf8');
|
|
25
|
+
|
|
26
|
+
const startIdx = existing.indexOf(MARKER_START);
|
|
27
|
+
const endIdx = existing.indexOf(MARKER_END);
|
|
28
|
+
|
|
29
|
+
let next;
|
|
30
|
+
let action;
|
|
31
|
+
|
|
32
|
+
if (startIdx === -1 || endIdx === -1) {
|
|
33
|
+
next = existing.trimEnd() + '\n\n' + block + '\n';
|
|
34
|
+
action = 'appended';
|
|
35
|
+
} else {
|
|
36
|
+
const before = existing.substring(0, startIdx);
|
|
37
|
+
const after = existing.substring(endIdx + MARKER_END.length);
|
|
38
|
+
next = before + block + after;
|
|
39
|
+
action = 'replaced';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (next === existing) {
|
|
43
|
+
return { status: 'unchanged' };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
fs.writeFileSync(agentsPath, next);
|
|
47
|
+
return { status: action };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function removeCompactGuidance(projectRoot) {
|
|
51
|
+
const agentsPath = path.join(projectRoot, 'AGENTS.md');
|
|
52
|
+
if (!fs.existsSync(agentsPath)) {
|
|
53
|
+
return { status: 'skipped-no-agents-md' };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const existing = fs.readFileSync(agentsPath, 'utf8');
|
|
57
|
+
const startIdx = existing.indexOf(MARKER_START);
|
|
58
|
+
const endIdx = existing.indexOf(MARKER_END);
|
|
59
|
+
|
|
60
|
+
if (startIdx === -1 || endIdx === -1) {
|
|
61
|
+
return { status: 'not-present' };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const before = existing.substring(0, startIdx).trimEnd();
|
|
65
|
+
const after = existing.substring(endIdx + MARKER_END.length);
|
|
66
|
+
const next = (before + '\n' + after.replace(/^\s+/, '')).trimEnd() + '\n';
|
|
67
|
+
|
|
68
|
+
fs.writeFileSync(agentsPath, next);
|
|
69
|
+
return { status: 'removed' };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
module.exports = {
|
|
73
|
+
syncCompactGuidance,
|
|
74
|
+
removeCompactGuidance,
|
|
75
|
+
MARKER_START,
|
|
76
|
+
MARKER_END,
|
|
77
|
+
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "refacil-sdd-ai",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.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"
|
|
7
7
|
},
|
|
8
8
|
"files": [
|
|
9
9
|
"bin/",
|
|
10
|
+
"lib/",
|
|
10
11
|
"skills/",
|
|
11
12
|
"templates/",
|
|
12
13
|
"config/",
|
package/skills/apply/SKILL.md
CHANGED
|
@@ -8,10 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Este comando envuelve la funcionalidad de OpenSpec apply y agrega las convenciones del equipo.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
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 `openspec`** antes de continuar.
|
|
14
|
-
Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` para reglas transversales del flujo.
|
|
11
|
+
**Prerequisitos**: perfil `openspec` de `refacil-prereqs/SKILL.md` + reglas de `METHODOLOGY-CONTRACT.md`.
|
|
15
12
|
|
|
16
13
|
## Instrucciones
|
|
17
14
|
|
|
@@ -79,7 +76,6 @@ Al terminar la implementacion de OpenSpec, agrega este resumen:
|
|
|
79
76
|
|
|
80
77
|
## Reglas
|
|
81
78
|
|
|
82
|
-
- NUNCA implementar codigo sin proposal, design, tasks y **especificacion** (`specs.md` y/o `specs/**/*.md` segun la tabla del Paso 0)
|
|
83
79
|
- NUNCA generar artefactos SDD desde este comando — eso es responsabilidad exclusiva de `/refacil:propose`
|
|
84
|
-
-
|
|
80
|
+
- Antes de implementar, cumplir las precondiciones del Paso 0 (artefactos completos) y del Paso 1 (rama de trabajo valida)
|
|
85
81
|
- Si `openspec/changes/` no tiene cambios activos o estan incompletos, informar y redirigir a `/refacil:propose`
|
package/skills/archive/SKILL.md
CHANGED
|
@@ -8,10 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Este comando envuelve la funcionalidad de OpenSpec archive (que internamente llama a sync-specs) y agrega verificaciones previas del equipo.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
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 `openspec`** antes de continuar.
|
|
14
|
-
Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` para reglas transversales del flujo.
|
|
11
|
+
**Prerequisitos**: perfil `openspec` de `refacil-prereqs/SKILL.md` + reglas de `METHODOLOGY-CONTRACT.md`.
|
|
15
12
|
|
|
16
13
|
## Instrucciones
|
|
17
14
|
|
package/skills/bug/SKILL.md
CHANGED
|
@@ -8,10 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Eres un asistente especializado en investigacion y correccion de bugs. Guias al desarrollador por un flujo estructurado paso a paso.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` para reglas transversales del flujo.
|
|
11
|
+
**Prerequisitos**: perfil `agents` de `refacil-prereqs/SKILL.md` + reglas de `METHODOLOGY-CONTRACT.md`.
|
|
15
12
|
|
|
16
13
|
## Instrucciones
|
|
17
14
|
|
|
@@ -29,52 +26,22 @@ Este flujo crea evidencia en `openspec/changes/`. Antes de continuar:
|
|
|
29
26
|
|
|
30
27
|
### Paso 1: Describir el bug
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
1. **Que esta pasando?** — Comportamiento actual (el error)
|
|
35
|
-
2. **Que deberia pasar?** — Comportamiento esperado
|
|
36
|
-
3. **Pasos para reproducir** — Como llegar al error
|
|
37
|
-
4. **Evidencia** — Logs, screenshots, stack traces (pedir que los peguen)
|
|
38
|
-
5. **Desde cuando ocurre?** — Siempre, desde un deploy, desde un cambio especifico
|
|
39
|
-
6. **Severidad** — Critico (bloquea produccion), Alto, Medio, Bajo
|
|
40
|
-
|
|
41
|
-
### Paso 2: Investigar la causa raiz
|
|
42
|
-
|
|
43
|
-
Con la informacion del paso 1:
|
|
29
|
+
Si `$ARGUMENTS` no los trae, pregunta al usuario: comportamiento actual, esperado, pasos de reproduccion, evidencia (logs/stack traces), cuando empezo a ocurrir, severidad (Critico/Alto/Medio/Bajo).
|
|
44
30
|
|
|
45
|
-
|
|
46
|
-
- Busca las funciones/archivos mencionados en los logs o stack traces
|
|
47
|
-
- Busca el flujo de datos del escenario que falla
|
|
48
|
-
- Revisa commits recientes si el bug es nuevo (`git log --oneline -20`)
|
|
31
|
+
### Paso 2: Investigar causa raiz
|
|
49
32
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
3. **Formular hipotesis**:
|
|
56
|
-
- Presenta al usuario 1-3 hipotesis de causa raiz
|
|
57
|
-
- Para cada una, muestra el archivo y linea sospechosa
|
|
58
|
-
- Pide al usuario que confirme o descarte
|
|
33
|
+
- Busca en codebase los simbolos/archivos de logs o stack traces.
|
|
34
|
+
- Traza el flujo desde entrada (controller/endpoint) hasta el punto de falla.
|
|
35
|
+
- Revisa commits recientes si el bug es nuevo: `git log --oneline -20`.
|
|
36
|
+
- Presenta al usuario 1-3 hipotesis con archivo y linea sospechosa; pide que confirme o descarte.
|
|
59
37
|
|
|
60
38
|
### Paso 3: Diagnosticar
|
|
61
39
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
1. **Confirmar la causa raiz**: Muestra el codigo exacto que causa el bug
|
|
65
|
-
2. **Explicar por que falla**: Que condicion o caso no esta manejado
|
|
66
|
-
3. **Evaluar impacto**: Que mas podria estar afectado
|
|
40
|
+
Con la hipotesis confirmada: muestra el codigo exacto que falla, explica que condicion no se maneja, evalua impacto en otras zonas.
|
|
67
41
|
|
|
68
42
|
### Paso 4: Proponer correccion
|
|
69
43
|
|
|
70
|
-
Presenta
|
|
71
|
-
|
|
72
|
-
1. **Cambio minimo**: La correccion mas pequeña posible que resuelve el bug
|
|
73
|
-
2. **Archivos a modificar**: Lista con descripcion del cambio
|
|
74
|
-
3. **Riesgos**: Que podria romperse con el fix
|
|
75
|
-
4. **Alternativas**: Si hay mas de una forma de corregirlo
|
|
76
|
-
|
|
77
|
-
Espera aprobacion del usuario antes de implementar.
|
|
44
|
+
Presenta: cambio minimo, archivos a modificar, riesgos, alternativas (si existen). Espera aprobacion antes de implementar.
|
|
78
45
|
|
|
79
46
|
### Paso 5: Validar rama de trabajo (antes de escribir codigo)
|
|
80
47
|
|
package/skills/explore/SKILL.md
CHANGED
|
@@ -8,9 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Este comando envuelve la funcionalidad de OpenSpec explore y agrega contexto del proyecto.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
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 `openspec`** antes de continuar (incluye el uso continuo de `AGENTS.md` durante la exploracion, segun ese archivo).
|
|
11
|
+
**Prerequisitos**: perfil `openspec` de `refacil-prereqs/SKILL.md` — usa `AGENTS.md` como contexto activo durante toda la exploracion.
|
|
14
12
|
|
|
15
13
|
## Instrucciones
|
|
16
14
|
|
package/skills/prereqs/SKILL.md
CHANGED
|
@@ -4,39 +4,30 @@ description: Referencia interna — prerequisitos SDD-AI compartidos por el rest
|
|
|
4
4
|
user-invocable: false
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Prerequisitos SDD-AI
|
|
7
|
+
# Prerequisitos SDD-AI
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Metodologia identica en Claude Code (`.claude/skills/refacil-*`) y Cursor (`.cursor/skills/refacil-*`). Usa la ruta del IDE abierto.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
Ademas, lee y aplica `METHODOLOGY-CONTRACT.md` (misma carpeta) para reglas transversales: estados del flujo, politica de ramas, tests multi-stack y modo de salida.
|
|
11
|
+
Reglas transversales (estados, ramas, tests, salida): `METHODOLOGY-CONTRACT.md` en esta misma carpeta.
|
|
13
12
|
|
|
14
|
-
## Perfil `openspec`
|
|
13
|
+
## Perfil `openspec`
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
Una skill pide este perfil cuando usa OpenSpec y necesita `AGENTS.md`. Estas validaciones son obligatorias en cada ejecucion de skill que declare este perfil.
|
|
17
16
|
|
|
18
|
-
1.
|
|
17
|
+
1. Verifica comando OpenSpec: `openspec --version 2>&1`. Si falla: *"OpenSpec no esta instalado o no esta en PATH. Ejecuta `/refacil:setup`"* y **detente**.
|
|
18
|
+
2. Verifica `openspec/` en la raiz del repo. Si falta: *"OpenSpec no esta inicializado en este repo. Ejecuta `/refacil:setup`"* y **detente**.
|
|
19
|
+
3. Lee `AGENTS.md` de la raiz. Si falta: *"No se encontro AGENTS.md. Ejecuta `/refacil:setup`"* y **detente**.
|
|
20
|
+
4. Si un comando de OpenSpec falla despues, consulta `.claude/skills/refacil-setup/troubleshooting.md`.
|
|
21
|
+
5. Si `AGENTS.md` incluye bloque `compact-guidance`, aplica esas reglas de eficiencia de tokens en toda la ejecucion.
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
Caso especial: en `refacil:explore`, `AGENTS.md` es contexto activo durante toda la exploracion.
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
## Perfil `agents`
|
|
23
26
|
|
|
24
|
-
|
|
27
|
+
Solo requiere `AGENTS.md`. Si existe, leelo y aplica `compact-guidance` si esta presente. Si falta: continua con baseline generico y avisa al usuario: *"No se encontro AGENTS.md; ejecuta `/refacil:setup` para reglas del proyecto."*
|
|
25
28
|
|
|
26
|
-
##
|
|
29
|
+
## OPENSPEC-DELTAS.md
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
Convenciones Refacil al delegar a skills `openspec-*`: ver `OPENSPEC-DELTAS.md` (misma carpeta), leer junto a la skill OpenSpec que se invoque.
|
|
29
32
|
|
|
30
|
-
Si
|
|
31
|
-
Si NO existe, informa al usuario: "No se encontro AGENTS.md. Continuare con baseline generico; para reglas del proyecto ejecuta `/refacil:setup`." y continua.
|
|
32
|
-
|
|
33
|
-
## Ubicacion de este archivo
|
|
34
|
-
|
|
35
|
-
En el repo del proyecto (elige segun herramienta):
|
|
36
|
-
|
|
37
|
-
- Claude Code: `.claude/skills/refacil-prereqs/SKILL.md`
|
|
38
|
-
- Cursor: `.cursor/skills/refacil-prereqs/SKILL.md`
|
|
39
|
-
|
|
40
|
-
En la **misma carpeta** esta `OPENSPEC-DELTAS.md`: convenciones Refacil al delegar en skills `openspec-*` (leer junto a la skill OpenSpec indicada).
|
|
41
|
-
|
|
42
|
-
Si ninguna existe, ejecuta `refacil-sdd-ai update` (o `init`).
|
|
33
|
+
Si faltan estos archivos, ejecuta `refacil-sdd-ai update` (o `init`).
|
package/skills/propose/SKILL.md
CHANGED
|
@@ -8,9 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Este comando envuelve la funcionalidad de OpenSpec fast-forward (ff) y agrega las convenciones del equipo.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
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 `openspec`** antes de continuar.
|
|
11
|
+
**Prerequisitos**: perfil `openspec` de `refacil-prereqs/SKILL.md` + reglas de `METHODOLOGY-CONTRACT.md`.
|
|
14
12
|
|
|
15
13
|
## Instrucciones
|
|
16
14
|
|
package/skills/review/SKILL.md
CHANGED
|
@@ -8,12 +8,9 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Eres un reviewer exigente pero constructivo que evalua el codigo contra el checklist de calidad del equipo.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
**Prerequisitos**: perfil `agents` de `refacil-prereqs/SKILL.md` + modo de salida de `METHODOLOGY-CONTRACT.md`.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` y aplica el modo de salida definido ahi.
|
|
15
|
-
|
|
16
|
-
### Cargar checklists
|
|
13
|
+
## Checklists a cargar
|
|
17
14
|
|
|
18
15
|
1. **Siempre** lee el checklist general: [checklist.md](checklist.md)
|
|
19
16
|
2. **Detecta el tipo de proyecto** inspeccionando dependencias, `AGENTS.md`, o la estructura del repo:
|
|
@@ -77,62 +74,27 @@ Usa severidad para priorizar correcciones, no para inflar el reporte.
|
|
|
77
74
|
|
|
78
75
|
### Paso 4: Reporte
|
|
79
76
|
|
|
77
|
+
Por defecto, usa salida **concisa** (segun `METHODOLOGY-CONTRACT.md`):
|
|
78
|
+
|
|
80
79
|
```
|
|
81
80
|
=== Review Report ===
|
|
82
|
-
|
|
83
81
|
VEREDICTO: APROBADO | APROBADO CON OBSERVACIONES | REQUIERE CORRECCIONES
|
|
84
82
|
BLOCKERS: [si/no]
|
|
85
83
|
|
|
86
|
-
## Hallazgos priorizados (solo FAIL)
|
|
84
|
+
## Hallazgos priorizados (solo FAIL, maximo 5)
|
|
87
85
|
1. [CRITICO|ALTO|MEDIO|BAJO] [seccion/item] — [problema]
|
|
88
86
|
- Evidencia: [archivo/rango o comportamiento]
|
|
89
87
|
- Correccion sugerida: [accion concreta]
|
|
90
88
|
|
|
91
|
-
## Checklist General
|
|
92
|
-
- Alcance y foco: [PASS/FAIL/N/A]
|
|
93
|
-
- Conformidad con Spec: [PASS/FAIL/N/A]
|
|
94
|
-
- Calidad de Codigo: [PASS/FAIL/N/A]
|
|
95
|
-
- Arquitectura: [PASS/FAIL/N/A]
|
|
96
|
-
- Manejo de errores: [PASS/FAIL/N/A]
|
|
97
|
-
- Testing: [PASS/FAIL/N/A]
|
|
98
|
-
- Seguridad: [PASS/FAIL/N/A]
|
|
99
|
-
- Dependencias: [PASS/FAIL/N/A]
|
|
100
|
-
- Mantenibilidad y observabilidad: [PASS/FAIL/N/A]
|
|
101
|
-
- Git y Deploy: [PASS/FAIL/N/A]
|
|
102
|
-
- Reglas del proyecto (AGENTS.md): [PASS/FAIL/N/A]
|
|
103
|
-
|
|
104
|
-
## Checklist Backend (si aplica)
|
|
105
|
-
- Validacion de entrada: [PASS/FAIL/N/A]
|
|
106
|
-
- Contratos de API: [PASS/FAIL/N/A]
|
|
107
|
-
- Manejo de errores: [PASS/FAIL/N/A]
|
|
108
|
-
- Arquitectura y patrones: [PASS/FAIL/N/A]
|
|
109
|
-
- Concurrencia y atomicidad: [PASS/FAIL/N/A]
|
|
110
|
-
- Consultas a BD: [PASS/FAIL/N/A]
|
|
111
|
-
- Caching: [PASS/FAIL/N/A]
|
|
112
|
-
- Resiliencia y conexiones: [PASS/FAIL/N/A]
|
|
113
|
-
- Colas y mensajeria: [PASS/FAIL/N/A]
|
|
114
|
-
- Performance: [PASS/FAIL/N/A]
|
|
115
|
-
- Logging: [PASS/FAIL/N/A]
|
|
116
|
-
- Testing backend: [PASS/FAIL/N/A]
|
|
117
|
-
|
|
118
|
-
## Checklist Frontend (si aplica)
|
|
119
|
-
- Componentes y estructura: [PASS/FAIL/N/A]
|
|
120
|
-
- Estado y datos: [PASS/FAIL/N/A]
|
|
121
|
-
- Manejo de errores en UI: [PASS/FAIL/N/A]
|
|
122
|
-
- Integracion con APIs: [PASS/FAIL/N/A]
|
|
123
|
-
- Validacion de formularios: [PASS/FAIL/N/A]
|
|
124
|
-
- Ruteo y navegacion: [PASS/FAIL/N/A]
|
|
125
|
-
- Consistencia visual: [PASS/FAIL/N/A]
|
|
126
|
-
- Performance frontend: [PASS/FAIL/N/A]
|
|
127
|
-
- Accesibilidad: [PASS/FAIL/N/A]
|
|
128
|
-
- Seguridad frontend: [PASS/FAIL/N/A]
|
|
129
|
-
- Testing frontend: [PASS/FAIL/N/A]
|
|
130
|
-
|
|
131
89
|
## Correcciones minimas para aprobar
|
|
132
90
|
1. [item accionable]
|
|
133
91
|
2. [item accionable]
|
|
92
|
+
|
|
93
|
+
Siguiente paso: [/refacil:archive | /refacil:verify]
|
|
134
94
|
```
|
|
135
95
|
|
|
96
|
+
Si el usuario pide modo **detallado**, agrega tras el bloque conciso una seccion por cada checklist cargado (`checklist.md`, `checklist-back.md`, `checklist-front.md` segun aplique) con cada item y su estado `[PASS/FAIL/N/A]`. No inventes items; usa literalmente los de los archivos. Marca N/A si un item no aplica.
|
|
97
|
+
|
|
136
98
|
### Paso 5: Marcador de review (obligatorio si APROBADO)
|
|
137
99
|
|
|
138
100
|
Si el veredicto es **APROBADO** o **APROBADO CON OBSERVACIONES**, crea un archivo marcador en el directorio del cambio activo:
|
package/skills/setup/SKILL.md
CHANGED
|
@@ -64,6 +64,12 @@ Analiza el repo y genera `AGENTS.md` (espanol, terminos tecnicos en ingles). Si
|
|
|
64
64
|
|
|
65
65
|
**6.4** — Muestra el resultado; si el usuario aprueba, escribe en la raiz.
|
|
66
66
|
|
|
67
|
+
**6.5 Eficiencia de tokens (hook + bloque auto-gestionado)**:
|
|
68
|
+
- Explica al usuario que `refacil-sdd-ai` mantiene en `AGENTS.md` un bloque `compact-guidance` para reducir consumo de contexto.
|
|
69
|
+
- Ese bloque se sincroniza automaticamente por el hook `check-update` en cada `SessionStart` (y tambien en `init`/`update`).
|
|
70
|
+
- Si `AGENTS.md` aun no existe, la sincronizacion se omite sin error.
|
|
71
|
+
- Indica que no debe editar manualmente el contenido entre marcadores `compact-guidance` porque se sobrescribe.
|
|
72
|
+
|
|
67
73
|
### Paso 7: Verificar skills
|
|
68
74
|
|
|
69
75
|
- OpenSpec: 10 carpetas bajo `.claude/skills/` y `.cursor/skills/`: `openspec-apply-change`, `openspec-archive-change`, `openspec-bulk-archive-change`, `openspec-continue-change`, `openspec-explore`, `openspec-ff-change`, `openspec-new-change`, `openspec-onboard`, `openspec-sync-specs`, `openspec-verify-change`. Si falta alguna: sugerir `openspec init --tools claude,cursor` o `openspec config list`.
|
package/skills/test/SKILL.md
CHANGED
|
@@ -8,34 +8,20 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Eres un asistente de testing que genera pruebas unitarias de alta calidad, adaptandose al stack tecnologico del proyecto.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
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 `openspec`** antes de continuar.
|
|
11
|
+
**Prerequisitos**: perfil `openspec` de `refacil-prereqs/SKILL.md` + comando de tests segun `METHODOLOGY-CONTRACT.md §3`.
|
|
14
12
|
|
|
15
13
|
### Detectar stack tecnologico
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
1. **Lenguaje**: Lee `package.json`, `pom.xml`, `build.gradle`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `Gemfile`, o los archivos fuente para determinar el lenguaje principal.
|
|
20
|
-
|
|
21
|
-
2. **Framework de testing**: Busca la configuracion de tests existente:
|
|
22
|
-
- JavaScript/TypeScript: `jest.config.*`, `vitest.config.*`, `.mocharc.*`, `karma.conf.*`, seccion `jest` en `package.json`
|
|
23
|
-
- Python: `pytest.ini`, `pyproject.toml` (seccion `[tool.pytest]`), `setup.cfg`
|
|
24
|
-
- Java/Kotlin: `pom.xml` (JUnit/Mockito), `build.gradle` (dependencias de test)
|
|
25
|
-
- Go: archivos `_test.go` existentes
|
|
26
|
-
- Rust: archivos con `#[cfg(test)]`
|
|
27
|
-
- Otro: busca archivos de test existentes para inferir patron
|
|
28
|
-
|
|
29
|
-
3. **Patrones existentes**: Busca tests existentes en el proyecto (`*.spec.*`, `*.test.*`, `test_*`, `*_test.*`) y analiza:
|
|
30
|
-
- Estructura de archivos (donde se ubican los tests)
|
|
31
|
-
- Convencion de nombrado
|
|
32
|
-
- Como se hacen los mocks/stubs
|
|
33
|
-
- Framework de assertions usado
|
|
34
|
-
- Setup/teardown patterns
|
|
15
|
+
NO asumir stack. Antes de generar tests, detecta:
|
|
35
16
|
|
|
36
|
-
|
|
17
|
+
| Fuente | Que buscar |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Lenguaje | `package.json`, `pom.xml`, `build.gradle`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `Gemfile` |
|
|
20
|
+
| Framework de tests | JS/TS: `jest.config.*`, `vitest.config.*`, `.mocharc.*`, campo `jest` en `package.json`. Python: `pytest.ini`, `[tool.pytest]` en `pyproject.toml`. Java: `pom.xml`/`build.gradle`. Go: `*_test.go`. Rust: `#[cfg(test)]` |
|
|
21
|
+
| Patrones del proyecto | Tests existentes (`*.spec.*`, `*.test.*`, `test_*`, `*_test.*`): ubicacion, nombrado, mocks, assertions, setup/teardown |
|
|
22
|
+
| Comando de ejecucion | `METHODOLOGY-CONTRACT.md §3` |
|
|
37
23
|
|
|
38
|
-
Si existe
|
|
24
|
+
Si existe `testing-patterns.md` junto a esta skill, usalo como referencia secundaria. Los patrones reales del proyecto siempre tienen prioridad.
|
|
39
25
|
|
|
40
26
|
## Instrucciones
|
|
41
27
|
|
|
@@ -88,6 +74,7 @@ Si el usuario pasa un archivo: `/refacil:test src/mi-archivo.ext`
|
|
|
88
74
|
## Reglas
|
|
89
75
|
|
|
90
76
|
- **NUNCA hardcodear un stack** — siempre detectar del proyecto real
|
|
77
|
+
- Resolver y ejecutar el comando de tests segun `METHODOLOGY-CONTRACT.md` §3
|
|
91
78
|
- Cada criterio de aceptacion (CA-XX) debe tener al menos 1 test
|
|
92
79
|
- Cada criterio de rechazo (CR-XX) debe tener al menos 1 test
|
|
93
80
|
- Coverage minimo del 80% en archivos nuevos
|
package/skills/up-code/SKILL.md
CHANGED
|
@@ -7,13 +7,9 @@ user-invocable: true
|
|
|
7
7
|
# refacil:up-code — Integrar Codigo y Publicar Cambios
|
|
8
8
|
|
|
9
9
|
Sube los cambios al repositorio remoto y genera el PR para integracion.
|
|
10
|
-
|
|
11
|
-
NUNCA se hacen ajustes directos en `master` o `main`.
|
|
10
|
+
Aplica la politica de ramas e integracion definida en `refacil-prereqs/METHODOLOGY-CONTRACT.md` (sin excepciones).
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
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.
|
|
16
|
-
Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` para reglas transversales del flujo.
|
|
12
|
+
**Prerequisitos**: perfil `agents` de `refacil-prereqs/SKILL.md` + reglas de `METHODOLOGY-CONTRACT.md` (politica de ramas aplica sin excepciones).
|
|
17
13
|
|
|
18
14
|
## Instrucciones
|
|
19
15
|
|
|
@@ -21,7 +17,7 @@ Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` para reglas transversales del
|
|
|
21
17
|
|
|
22
18
|
Ejecuta `git branch --show-current` para obtener el nombre de la rama.
|
|
23
19
|
|
|
24
|
-
- Si la rama actual es protegida (
|
|
20
|
+
- Si la rama actual es protegida (segun `METHODOLOGY-CONTRACT.md`), **detente** e informa al usuario:
|
|
25
21
|
```
|
|
26
22
|
No se puede subir codigo desde una rama protegida ([nombre]).
|
|
27
23
|
La validacion de rama se hace en /refacil:apply o /refacil:bug antes de escribir codigo.
|
|
@@ -103,7 +99,6 @@ A que rama quieres crear el PR? (recomendado: testing)
|
|
|
103
99
|
|
|
104
100
|
## Reglas
|
|
105
101
|
|
|
106
|
-
-
|
|
107
|
-
- Si la rama actual es protegida, **detener** — la validacion de rama se hace en `/refacil:apply` o `/refacil:bug`, no aqui
|
|
108
|
-
- Toda integracion a cualquier rama protegida requiere PR
|
|
102
|
+
- Respetar estrictamente la politica de ramas protegidas e integracion por PR del `METHODOLOGY-CONTRACT.md`
|
|
103
|
+
- Si la rama actual es protegida, **detener** — la validacion/cambio de rama se hace en `/refacil:apply` o `/refacil:bug`, no aqui
|
|
109
104
|
- No forzar push (--force) a menos que el usuario lo pida explicitamente
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -8,10 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
Este comando envuelve la funcionalidad de OpenSpec verify y agrega verificacion de tests.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
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 `openspec`** antes de continuar.
|
|
14
|
-
Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` para reglas transversales del flujo.
|
|
11
|
+
**Prerequisitos**: perfil `openspec` de `refacil-prereqs/SKILL.md` + reglas de `METHODOLOGY-CONTRACT.md`.
|
|
15
12
|
|
|
16
13
|
## Instrucciones
|
|
17
14
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- AUTO-GENERADO por refacil-sdd-ai. No edites entre los marcadores; el contenido se refresca en cada sesion. -->
|
|
2
|
+
|
|
3
|
+
## Eficiencia de tokens
|
|
4
|
+
|
|
5
|
+
Reglas para minimizar el consumo de contexto al trabajar en este repositorio.
|
|
6
|
+
|
|
7
|
+
**Lectura de archivos**
|
|
8
|
+
- Usa `Read` con `offset` y `limit` cuando conozcas la zona relevante del archivo.
|
|
9
|
+
- No leas archivos de mas de 500 lineas completos; segmenta por rango.
|
|
10
|
+
- Para descubrir estructura del repo: usa `Glob` en lugar de `ls -R` o `find`.
|
|
11
|
+
- No releas el archivo completo si ya leiste el bloque relevante; continua desde ese contexto.
|
|
12
|
+
- Antes de leer un archivo largo, ubica simbolos con busqueda y luego lee solo rangos candidatos.
|
|
13
|
+
|
|
14
|
+
**Busqueda**
|
|
15
|
+
- Usa `Grep` con `head_limit` en vez de dump crudo.
|
|
16
|
+
- Cuando solo necesites ubicaciones, usa `output_mode: "files_with_matches"`.
|
|
17
|
+
- Acota siempre con `glob` o `type` para no escanear de mas.
|
|
18
|
+
|
|
19
|
+
**Git (via Bash)**
|
|
20
|
+
- Historial: `git log --oneline -20` por defecto; amplia solo si es insuficiente.
|
|
21
|
+
- Diffs: empieza con `git diff --stat`; pide el diff completo solo del archivo que vas a tocar.
|
|
22
|
+
- Status: `git status -s` (short format).
|
|
23
|
+
- Show: `git show --stat` antes del full.
|
|
24
|
+
|
|
25
|
+
**Tests**
|
|
26
|
+
- Reporta solo failures; no enumeres los passes en el output visible.
|
|
27
|
+
- Si el runner tiene modo silencioso o summary (`jest --silent --reporters=summary`, `pytest -q`), usalo.
|
|
28
|
+
- Si el runner es verboso por defecto, redirige: `2>&1 | tail -80`.
|
|
29
|
+
|
|
30
|
+
**Logs y errores**
|
|
31
|
+
- No pegues stack traces enteros; extrae solo el frame relevante con el mensaje.
|
|
32
|
+
- Resume logs repetidos: "(N ocurrencias de <mensaje>)".
|
|
33
|
+
- Para archivos de log: `tail -100` o filtra por nivel ERROR/WARN.
|
|
34
|
+
|
|
35
|
+
**Build y lint**
|
|
36
|
+
- `tsc`, `eslint`, `biome`: agrupa errores por archivo o por regla; no enumeres linea por linea.
|
|
37
|
+
- Construccion exitosa: confirma con una sola linea, no pegues el output completo.
|
|
38
|
+
- Si hay muchos errores similares: muestra un ejemplo y el conteo.
|
|
39
|
+
|
|
40
|
+
**Docker y contenedores**
|
|
41
|
+
- `docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"`.
|
|
42
|
+
- `docker logs --tail 100` siempre; nunca logs completos.
|
|
43
|
+
|
|
44
|
+
**Regla general**
|
|
45
|
+
Cuando dudes entre verbosidad y concision, elige concision. El usuario puede pedir detalle bajo demanda.
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Las instrucciones completas del proyecto estan en [AGENTS.md](AGENTS.md).
|
|
4
|
-
Si AGENTS.md no existe, ejecuta `/refacil:setup` para generarlo automaticamente.
|
|
1
|
+
Instrucciones completas del proyecto: ver `AGENTS.md`. Si falta, ejecuta `/refacil:setup`.
|
|
5
2
|
|
|
6
3
|
## Metodologia SDD-AI (Refacil)
|
|
7
4
|
|
|
8
|
-
|
|
5
|
+
Skills identicas en `.claude/skills/refacil-*/` (Claude Code) y `.cursor/skills/refacil-*/` (Cursor). Instaladas por `refacil-sdd-ai init`.
|
|
9
6
|
|
|
10
7
|
| Comando | Descripcion |
|
|
11
8
|
|---------|-------------|
|
|
@@ -18,7 +15,14 @@ Este proyecto usa la metodologia SDD-AI en **Claude Code** y **Cursor** con el m
|
|
|
18
15
|
| `/refacil:verify` | Validar implementacion vs specs |
|
|
19
16
|
| `/refacil:review` | Review con checklist de calidad |
|
|
20
17
|
| `/refacil:archive` | Archivar cambio completado |
|
|
21
|
-
| `/refacil:up-code` | Subir codigo
|
|
18
|
+
| `/refacil:up-code` | Subir codigo y crear PR |
|
|
22
19
|
| `/refacil:bug` | Flujo guiado de bugfix |
|
|
23
20
|
|
|
24
21
|
Flujo: `setup` → `propose` → `apply` → `test` → `verify` → `review` → `archive` → `up-code`
|
|
22
|
+
|
|
23
|
+
## Eficiencia de tokens (automatica)
|
|
24
|
+
|
|
25
|
+
- El hook `check-update` en `SessionStart` sincroniza el bloque `compact-guidance` en `AGENTS.md`.
|
|
26
|
+
- El bloque define reglas de salida compacta (lectura por rango, busqueda acotada, tests/logs resumidos).
|
|
27
|
+
- Si `AGENTS.md` aun no existe, la sincronizacion se omite sin error.
|
|
28
|
+
- No editar manualmente el contenido entre marcadores `compact-guidance`; se sobreescribe automaticamente.
|
package/templates/cursorrules.md
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Cursor Rules
|
|
2
|
-
|
|
3
|
-
Las instrucciones completas del proyecto estan en AGENTS.md.
|
|
4
|
-
Si AGENTS.md no existe, ejecuta /refacil:setup para generarlo automaticamente.
|
|
5
|
-
|
|
6
|
-
## Metodologia SDD-AI (Refacil)
|
|
7
|
-
|
|
8
|
-
Metodologia equivalente en Claude Code (`.claude/skills/refacil-*/`) y Cursor (`.cursor/skills/refacil-*/`). Comandos (en este IDE, bajo `.cursor/skills/refacil-*/`):
|
|
9
|
-
|
|
10
|
-
- /refacil:setup — Instalar OpenSpec y generar AGENTS.md
|
|
11
|
-
- /refacil:guide — Guia interactiva
|
|
12
|
-
- /refacil:explore — Explorar codebase
|
|
13
|
-
- /refacil:propose — Crear propuesta de cambio
|
|
14
|
-
- /refacil:apply — Implementar tasks
|
|
15
|
-
- /refacil:test — Generar tests unitarios
|
|
16
|
-
- /refacil:verify — Validar vs specs
|
|
17
|
-
- /refacil:review — Review con checklist
|
|
18
|
-
- /refacil:archive — Archivar cambio
|
|
19
|
-
- /refacil:up-code — Subir codigo a rama de desarrollo
|
|
20
|
-
- /refacil:bug — Flujo guiado de bugfix
|
|
21
|
-
|
|
22
|
-
Flujo: setup → propose → apply → test → verify → review → archive → up-code
|