refacil-sdd-ai 2.1.8 → 2.1.9
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 +38 -11
- package/bin/cli.js +60 -7
- package/package.json +1 -1
- package/skills/apply/SKILL.md +4 -3
- package/skills/archive/SKILL.md +90 -14
- package/skills/bug/SKILL.md +23 -17
- package/skills/guide/SKILL.md +3 -3
- package/skills/prereqs/METHODOLOGY-CONTRACT.md +42 -5
- package/skills/review/SKILL.md +12 -0
- package/skills/up-code/SKILL.md +45 -35
- package/skills/verify/SKILL.md +3 -2
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ refacil-sdd-ai init # Instalar skills, hooks y crear configs en el repo
|
|
|
53
53
|
refacil-sdd-ai update # Actualizar skills y hooks a la ultima version
|
|
54
54
|
refacil-sdd-ai check-update # Verifica si hay una version mas reciente en npm (usado por hook)
|
|
55
55
|
refacil-sdd-ai check-review # Verifica que el review se haya completado (usado por hook)
|
|
56
|
-
refacil-sdd-ai clean # Eliminar skills del repo
|
|
56
|
+
refacil-sdd-ai clean # Eliminar skills y remover hooks SDD-AI del repo
|
|
57
57
|
refacil-sdd-ai help # Ver ayuda
|
|
58
58
|
```
|
|
59
59
|
|
|
@@ -72,7 +72,7 @@ Una vez instalado, estos comandos estan disponibles en Claude Code y Cursor:
|
|
|
72
72
|
| `/refacil:verify` | Validar implementacion vs specs (con opcion de aplicar correcciones) |
|
|
73
73
|
| `/refacil:review` | Review con checklist de calidad del equipo |
|
|
74
74
|
| `/refacil:archive` | Archivar cambio completado |
|
|
75
|
-
| `/refacil:up-code` |
|
|
75
|
+
| `/refacil:up-code` | Integrar codigo (destino por defecto `testing`) y gestionar PR cuando aplique |
|
|
76
76
|
| `/refacil:bug` | Flujo guiado completo para investigar y corregir bugs |
|
|
77
77
|
|
|
78
78
|
## Uso rapido (guia de decision)
|
|
@@ -86,7 +86,7 @@ Si no tienes claro que comando usar, aplica esta regla simple:
|
|
|
86
86
|
- Quiero validar cumplimiento contra spec -> `/refacil:verify`
|
|
87
87
|
- Quiero evaluacion de calidad tecnica -> `/refacil:review`
|
|
88
88
|
- Ya termine y quiero cerrar el cambio en OpenSpec -> `/refacil:archive`
|
|
89
|
-
- Quiero
|
|
89
|
+
- Quiero integrar cambios (a `testing` o con PR a otra rama) -> `/refacil:up-code`
|
|
90
90
|
- Tengo un error en produccion o bug funcional -> `/refacil:bug`
|
|
91
91
|
|
|
92
92
|
## Flujo minimo recomendado (equipo)
|
|
@@ -101,9 +101,11 @@ Para mantener trazabilidad y calidad sin pasos innecesarios:
|
|
|
101
101
|
6. `/refacil:archive`
|
|
102
102
|
7. `/refacil:up-code`
|
|
103
103
|
|
|
104
|
-
Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar con `/refacil:review` → `/refacil:up-code`.
|
|
104
|
+
Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar con `/refacil:review` → `/refacil:archive` → `/refacil:up-code`.
|
|
105
105
|
|
|
106
106
|
> **Nota**: `/refacil:up-code` verifica automaticamente que el review se haya completado. Si no se ejecuto `/refacil:review`, lo lanza automaticamente antes del push como medida de seguridad.
|
|
107
|
+
>
|
|
108
|
+
> Politica de integracion: la rama objetivo por defecto es `testing` mediante PR. Para cualquier otra rama protegida tambien se requiere PR. No hay integraciones directas a ramas protegidas.
|
|
107
109
|
|
|
108
110
|
## Flujos de trabajo
|
|
109
111
|
|
|
@@ -125,15 +127,28 @@ Si es bugfix, puedes iniciar con `/refacil:bug` y luego continuar con `/refacil:
|
|
|
125
127
|
### Bug fix
|
|
126
128
|
|
|
127
129
|
```
|
|
130
|
+
/refacil:setup
|
|
131
|
+
# → Precondicion si el repo aun no tiene openspec/ (solo la primera vez)
|
|
128
132
|
/refacil:bug "descripcion del error"
|
|
129
133
|
# → Investiga, implementa fix, genera tests de regresion
|
|
130
|
-
# → Crea trazabilidad en openspec/changes/fix-[
|
|
131
|
-
# →
|
|
134
|
+
# → Crea trazabilidad en openspec/changes/fix-[descripcion-corta]/summary.md
|
|
135
|
+
# → Nombre siempre descriptivo (sin IDs de ticket)
|
|
132
136
|
/refacil:review
|
|
137
|
+
# → Evalua calidad del fix, crea .review-passed si aprueba
|
|
138
|
+
/refacil:archive
|
|
139
|
+
# → Archiva el fix SIN pasar por OpenSpec (evita error por falta de artefactos completos)
|
|
140
|
+
# → Mueve carpeta a openspec/changes/archive/[fecha]-[nombre]/
|
|
141
|
+
# → Crea spec individual en openspec/specs/fix-[nombre]/spec.md
|
|
142
|
+
# en formato OpenSpec estandar (Purpose/Requirements/Scenario)
|
|
143
|
+
# → Crea openspec/specs/fix-[nombre]/review.yaml con metadata del review
|
|
133
144
|
/refacil:up-code
|
|
134
145
|
```
|
|
135
146
|
|
|
136
147
|
> **Nota**: En una misma rama pueden corregirse multiples bugs. Cada uno genera su propia carpeta `fix-*` con su trazabilidad independiente.
|
|
148
|
+
>
|
|
149
|
+
> **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.
|
|
150
|
+
>
|
|
151
|
+
> En cambios regulares (feature/mejora) que se archivan con OpenSpec, Refacil tambien persiste la metadata del `.review-passed` en `review.yaml` dentro de cada spec afectado (o en `openspec/specs/review-metadata.yaml` si no hay mapeo preciso).
|
|
137
152
|
|
|
138
153
|
### Explorar codigo
|
|
139
154
|
|
|
@@ -148,9 +163,17 @@ Para mantener consistencia entre todas las skills, el paquete define un contrato
|
|
|
148
163
|
- Estados del flujo (Ready for Propose/Apply/Verify/Review/Archive/Merge)
|
|
149
164
|
- Politica de `AGENTS.md` por perfil (`openspec` vs `agents`)
|
|
150
165
|
- Resolucion de comando de tests multi-stack (sin hardcodear `npm test`)
|
|
151
|
-
- Politica unificada de ramas protegidas
|
|
166
|
+
- Politica unificada de ramas protegidas, creacion de ramas e integracion por `testing`
|
|
152
167
|
- Modo de salida estandar: `conciso` por defecto, `detallado` bajo demanda
|
|
153
168
|
|
|
169
|
+
### Politica de ramas (resumen)
|
|
170
|
+
|
|
171
|
+
- Toda rama nueva de trabajo (`feature/*`, `fix/*`, `hotfix/*`, etc.) se crea desde `develop` o `dev` actualizado.
|
|
172
|
+
- Excepcion para repos nuevos: si no existe `develop`/`dev`, se permite usar temporalmente `main` o `master` como rama base.
|
|
173
|
+
- La integracion por defecto de features/bugs es hacia `testing` mediante PR.
|
|
174
|
+
- Toda integracion a ramas protegidas (`testing`, `develop`, `dev`, `main`, `master`, `qa`) requiere PR.
|
|
175
|
+
- NUNCA se hacen ajustes directos en `master` o `main`.
|
|
176
|
+
|
|
154
177
|
### Checkpoints de estado (DoR/DoD)
|
|
155
178
|
|
|
156
179
|
Antes de avanzar de etapa, valida estos estados:
|
|
@@ -159,7 +182,7 @@ Antes de avanzar de etapa, valida estos estados:
|
|
|
159
182
|
- `READY_FOR_VERIFY`: implementacion terminada y enfocada al alcance
|
|
160
183
|
- `READY_FOR_REVIEW`: verify ejecutado y bloqueantes tratados
|
|
161
184
|
- `READY_FOR_ARCHIVE`: cambio funcionalmente cerrado + review aprobado (`.review-passed`)
|
|
162
|
-
- `READY_FOR_MERGE`: review aprobado (`.review-passed`)
|
|
185
|
+
- `READY_FOR_MERGE`: review aprobado (`.review-passed`) y PR creado hacia la rama destino protegida
|
|
163
186
|
|
|
164
187
|
### Hooks automaticos
|
|
165
188
|
|
|
@@ -178,9 +201,11 @@ El paquete instala hooks en `.claude/settings.json` durante `init` y `update`:
|
|
|
178
201
|
→ Busca carpetas en openspec/changes/ (excluye archive/)
|
|
179
202
|
→ ¿Todas tienen .review-passed?
|
|
180
203
|
SI → permite el push
|
|
181
|
-
NO → bloquea y ejecuta /refacil:review automaticamente
|
|
204
|
+
NO y hay 1 pendiente → bloquea y ejecuta /refacil:review <cambio> automaticamente
|
|
182
205
|
→ Si APROBADO: crea .review-passed, reintenta push
|
|
183
206
|
→ Si REQUIERE CORRECCIONES: informa al usuario, no pushea
|
|
207
|
+
NO y hay multiples pendientes → bloquea y pide seleccionar cambio explicito
|
|
208
|
+
→ luego ejecutar /refacil:review <cambio-seleccionado>
|
|
184
209
|
```
|
|
185
210
|
|
|
186
211
|
#### Evidencia de review
|
|
@@ -195,7 +220,7 @@ openspec/changes/mi-feature/
|
|
|
195
220
|
├── specs.md
|
|
196
221
|
└── .review-passed ← evidencia de review aprobado (JSON)
|
|
197
222
|
|
|
198
|
-
openspec/changes/fix-
|
|
223
|
+
openspec/changes/fix-session-timeout-redis/
|
|
199
224
|
├── summary.md ← trazabilidad del bug fix
|
|
200
225
|
└── .review-passed ← evidencia de review aprobado (JSON)
|
|
201
226
|
```
|
|
@@ -224,7 +249,8 @@ refacil-sdd-ai init → Skills en .claude/ y .cursor/
|
|
|
224
249
|
/refacil:verify → Validacion PASS/FAIL (puede aplicar fixes con aprobacion)
|
|
225
250
|
/refacil:review → Review con checklist + .review-passed si aprueba
|
|
226
251
|
/refacil:bug → Fix + trazabilidad en openspec/changes/fix-*/summary.md
|
|
227
|
-
/refacil:archive → Cambio archivado
|
|
252
|
+
/refacil:archive → Cambio archivado + specs sincronizadas
|
|
253
|
+
(bugs: crea openspec/specs/fix-*/spec.md OpenSpec + review.yaml)
|
|
228
254
|
/refacil:up-code → Verifica review (si falta lo ejecuta) + push a rama
|
|
229
255
|
```
|
|
230
256
|
|
|
@@ -246,6 +272,7 @@ openspec/ # Generado por /refacil:setup via OpenSpec
|
|
|
246
272
|
```bash
|
|
247
273
|
# Eliminar skills del repo actual
|
|
248
274
|
refacil-sdd-ai clean
|
|
275
|
+
# (tambien remueve hooks SDD-AI de .claude/settings.json)
|
|
249
276
|
|
|
250
277
|
# Desinstalar paquete global (opcional)
|
|
251
278
|
npm uninstall -g refacil-sdd-ai
|
package/bin/cli.js
CHANGED
|
@@ -197,6 +197,48 @@ function installHook() {
|
|
|
197
197
|
return true;
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
+
function uninstallHook() {
|
|
201
|
+
const settingsPath = path.join(projectRoot, '.claude', 'settings.json');
|
|
202
|
+
if (!fs.existsSync(settingsPath)) return false;
|
|
203
|
+
|
|
204
|
+
let settings;
|
|
205
|
+
try {
|
|
206
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
207
|
+
} catch (_) {
|
|
208
|
+
console.log(' No se pudieron remover hooks: .claude/settings.json invalido.');
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (!settings.hooks) return false;
|
|
213
|
+
|
|
214
|
+
let changed = false;
|
|
215
|
+
|
|
216
|
+
if (Array.isArray(settings.hooks.SessionStart)) {
|
|
217
|
+
const original = settings.hooks.SessionStart.length;
|
|
218
|
+
settings.hooks.SessionStart = settings.hooks.SessionStart.filter(
|
|
219
|
+
(h) => h._sdd !== true,
|
|
220
|
+
);
|
|
221
|
+
if (settings.hooks.SessionStart.length !== original) changed = true;
|
|
222
|
+
if (settings.hooks.SessionStart.length === 0) delete settings.hooks.SessionStart;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
if (Array.isArray(settings.hooks.PreToolUse)) {
|
|
226
|
+
const original = settings.hooks.PreToolUse.length;
|
|
227
|
+
settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter(
|
|
228
|
+
(h) => h._sdd_review !== true,
|
|
229
|
+
);
|
|
230
|
+
if (settings.hooks.PreToolUse.length !== original) changed = true;
|
|
231
|
+
if (settings.hooks.PreToolUse.length === 0) delete settings.hooks.PreToolUse;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (Object.keys(settings.hooks).length === 0) delete settings.hooks;
|
|
235
|
+
|
|
236
|
+
if (!changed) return false;
|
|
237
|
+
|
|
238
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
|
|
200
242
|
// --- Check update ---
|
|
201
243
|
|
|
202
244
|
function checkUpdate() {
|
|
@@ -274,15 +316,21 @@ function checkReview() {
|
|
|
274
316
|
|
|
275
317
|
if (missing.length > 0) {
|
|
276
318
|
const names = missing.map((e) => e.name).join(', ');
|
|
319
|
+
const reason =
|
|
320
|
+
missing.length === 1
|
|
321
|
+
? `[refacil-sdd-ai] Review pendiente para: ${names}. ` +
|
|
322
|
+
'Ejecuta /refacil:review automaticamente ahora sobre ese cambio pendiente. ' +
|
|
323
|
+
'Informa al usuario que el review se esta ejecutando automaticamente antes de subir el codigo. ' +
|
|
324
|
+
'Si el review aprueba, reintenta el git push. ' +
|
|
325
|
+
'Si el review requiere correcciones, informa los hallazgos al usuario y NO reintentar el push.'
|
|
326
|
+
: `[refacil-sdd-ai] Hay multiples cambios sin review aprobado: ${names}. ` +
|
|
327
|
+
'Deten el push y pide al usuario seleccionar explicitamente que cambio quiere subir. ' +
|
|
328
|
+
'Luego ejecuta /refacil:review <nombre-cambio> para ese cambio especifico y reintenta el push. ' +
|
|
329
|
+
'No ejecutes review automatico sin seleccion cuando hay mas de un cambio pendiente.';
|
|
277
330
|
console.log(
|
|
278
331
|
JSON.stringify({
|
|
279
332
|
decision: 'block',
|
|
280
|
-
reason
|
|
281
|
-
`[refacil-sdd-ai] Review pendiente para: ${names}. ` +
|
|
282
|
-
'Ejecuta la skill /refacil:review automaticamente ahora sobre los cambios pendientes. ' +
|
|
283
|
-
'Informa al usuario que el review se esta ejecutando automaticamente antes de subir el codigo. ' +
|
|
284
|
-
'Si el review aprueba, reintenta el git push. ' +
|
|
285
|
-
'Si el review requiere correcciones, informa los hallazgos al usuario y NO reintentar el push.',
|
|
333
|
+
reason,
|
|
286
334
|
}),
|
|
287
335
|
);
|
|
288
336
|
}
|
|
@@ -345,6 +393,11 @@ function clean() {
|
|
|
345
393
|
console.log('\n refacil-sdd-ai: Eliminando skills...\n');
|
|
346
394
|
const count = removeSkills();
|
|
347
395
|
console.log(` ${count} skills eliminadas de .claude/skills/ y .cursor/skills/`);
|
|
396
|
+
if (uninstallHook()) {
|
|
397
|
+
console.log(' Hooks SDD-AI removidos de .claude/settings.json');
|
|
398
|
+
} else {
|
|
399
|
+
console.log(' No se encontraron hooks SDD-AI para remover.');
|
|
400
|
+
}
|
|
348
401
|
console.log(' AGENTS.md, CLAUDE.md y .cursorrules no fueron eliminados.');
|
|
349
402
|
console.log('\n Nota: Los comandos opsx:* de OpenSpec no se eliminan.');
|
|
350
403
|
console.log(' Para eliminar OpenSpec: rm -rf openspec/ .claude/commands/opsx .cursor/commands/opsx\n');
|
|
@@ -359,7 +412,7 @@ function help() {
|
|
|
359
412
|
update Re-copia skills (para actualizar a nueva version del paquete)
|
|
360
413
|
check-update Verifica si hay una version mas reciente en npm
|
|
361
414
|
check-review Verifica que el review se haya completado (usado por hook PreToolUse)
|
|
362
|
-
clean Elimina skills de .claude/
|
|
415
|
+
clean Elimina skills y remueve hooks SDD-AI de .claude/settings.json
|
|
363
416
|
help Muestra esta ayuda
|
|
364
417
|
|
|
365
418
|
Flujo completo:
|
package/package.json
CHANGED
package/skills/apply/SKILL.md
CHANGED
|
@@ -44,15 +44,16 @@ OpenSpec a veces solo genera el arbol `specs/**/*.md`; eso **cumple** la fila de
|
|
|
44
44
|
|
|
45
45
|
**IMPORTANTE**: Este comando NUNCA genera artefactos SDD. Si no existen, el usuario debe usar `/refacil:propose`.
|
|
46
46
|
|
|
47
|
-
### Paso 1: Validar rama de trabajo
|
|
47
|
+
### Paso 1: Validar rama de trabajo (bloqueante — antes de escribir cualquier linea de codigo)
|
|
48
48
|
|
|
49
49
|
Ejecuta `git branch --show-current` para obtener la rama actual.
|
|
50
50
|
|
|
51
51
|
Aplica la **Politica de ramas protegidas y creacion de rama** definida en `refacil-prereqs/METHODOLOGY-CONTRACT.md`.
|
|
52
52
|
|
|
53
|
-
- Si la rama actual es protegida
|
|
53
|
+
- **Si la rama actual es protegida**: ejecutar el protocolo completo de creacion de rama **antes de continuar**. No escribir ni una linea de codigo hasta estar en una rama de trabajo.
|
|
54
54
|
- Para `refacil:apply`, el prefijo sugerido de rama es `feature/`.
|
|
55
|
-
- Si la rama actual ya es de trabajo (feature
|
|
55
|
+
- Si la rama actual ya es de trabajo (`feature/*`, `fix/*`, `hotfix/*`, `refactor/*`, etc.), continuar sin interrumpir.
|
|
56
|
+
- Si el usuario no aprueba la creacion/cambio de rama, **detener**. No continuar con la implementacion.
|
|
56
57
|
|
|
57
58
|
### Paso 2: Delegar a OpenSpec apply
|
|
58
59
|
|
package/skills/archive/SKILL.md
CHANGED
|
@@ -25,32 +25,107 @@ Antes de archivar, verifica que el cambio esta realmente completo:
|
|
|
25
25
|
|
|
26
26
|
3. **Sin archivos pendientes**: Ejecuta `git status` y verifica si hay cambios sin commitear relacionados al feature. Si los hay, sugiere hacer commit antes de archivar.
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
4. **Review aprobado (bloqueante)**: Verifica que existe el archivo `.review-passed` en la carpeta del cambio (`openspec/changes/[nombre-cambio]/.review-passed`). Si NO existe, **detener el archivado** e informar al usuario:
|
|
29
|
+
```
|
|
30
|
+
No se puede archivar: el cambio no tiene review aprobado.
|
|
31
|
+
Ejecuta /refacil:review primero.
|
|
32
|
+
```
|
|
33
|
+
Esta verificacion es **obligatoria y bloqueante** — no se puede saltar.
|
|
29
34
|
|
|
30
|
-
|
|
35
|
+
Si alguna de las verificaciones 1-3 falla, informa al usuario pero permite que decida si continuar.
|
|
36
|
+
Si la verificacion 4 falla, el archivado no puede continuar.
|
|
37
|
+
|
|
38
|
+
### Paso 2: Determinar tipo de cambio
|
|
39
|
+
|
|
40
|
+
Inspecciona la carpeta del cambio en `openspec/changes/`:
|
|
41
|
+
|
|
42
|
+
- **Es un bug fix** si el nombre de la carpeta empieza con `fix-` (creado por `refacil:bug`).
|
|
43
|
+
- **Es un cambio regular** en cualquier otro caso (creado por `refacil:propose`).
|
|
44
|
+
|
|
45
|
+
Segun el tipo, sigue el paso correspondiente:
|
|
46
|
+
|
|
47
|
+
### Paso 2A: Bug fix → Archivado manual (sin OpenSpec)
|
|
48
|
+
|
|
49
|
+
Los bug fixes solo contienen `summary.md` (y opcionalmente `.review-passed`), no tienen los artefactos completos que OpenSpec espera. Por eso se archivan **sin delegar a OpenSpec**.
|
|
50
|
+
|
|
51
|
+
1. **Mover a archive**: Mueve la carpeta completa del fix a `openspec/changes/archive/[fecha-ISO]-[nombre-fix]/`
|
|
52
|
+
|
|
53
|
+
2. **Documentar en specs**: Lee el `summary.md` y el `.review-passed` del fix, y crea un spec individual para el bug en `openspec/specs/[nombre-descriptivo]/spec.md`.
|
|
54
|
+
|
|
55
|
+
**Nombre de la carpeta en specs**: Usa una descripcion corta y clara del bug en kebab-case (ej. `fix-session-timeout-redis`, `fix-null-pointer-payment-callback`). **NO uses IDs de tickets** (REF-123, JIRA-456, etc.) — el nombre debe ser descriptivo para que `/refacil:explore` pueda encontrar y entender el fix sin contexto externo.
|
|
56
|
+
|
|
57
|
+
Contenido del `spec.md` (formato OpenSpec estandar):
|
|
58
|
+
```markdown
|
|
59
|
+
# [nombre-descriptivo] Specification
|
|
60
|
+
|
|
61
|
+
## Purpose
|
|
62
|
+
Corregir [descripcion clara del bug] para restaurar el comportamiento esperado sin introducir regresiones.
|
|
63
|
+
|
|
64
|
+
## Requirements
|
|
65
|
+
### Requirement: [comportamiento esperado principal]
|
|
66
|
+
El sistema SHALL [comportamiento correcto despues del fix].
|
|
67
|
+
|
|
68
|
+
#### Scenario: Bug corregido en condicion original
|
|
69
|
+
- **WHEN** [condicion que antes fallaba]
|
|
70
|
+
- **THEN** el sistema SHALL [resultado esperado]
|
|
71
|
+
|
|
72
|
+
#### Scenario: Flujo normal permanece estable
|
|
73
|
+
- **WHEN** [condicion normal]
|
|
74
|
+
- **THEN** el sistema SHALL [comportamiento normal sin regresion]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
3. **Persistir metadata de review separada**: crea `openspec/specs/[nombre-descriptivo]/review.yaml` con los campos de `.review-passed`:
|
|
78
|
+
```yaml
|
|
79
|
+
verdict: APROBADO|APROBADO CON OBSERVACIONES
|
|
80
|
+
date: 2026-04-10T00:00:00.000Z
|
|
81
|
+
changeName: fix-...
|
|
82
|
+
summary: "..."
|
|
83
|
+
failCount: 0
|
|
84
|
+
blockers: false
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
4. Continua al **Paso 3**.
|
|
88
|
+
|
|
89
|
+
### Paso 2B: Cambio regular → Delegar a OpenSpec archive
|
|
31
90
|
|
|
32
91
|
1. Lee `openspec-archive-change/SKILL.md` en `.claude/skills/` o `.cursor/skills/`.
|
|
33
92
|
2. Lee `OPENSPEC-DELTAS.md` en `refacil-prereqs` (seccion **archive**).
|
|
34
93
|
3. Sigue OpenSpec con argumento **$ARGUMENTS** (sync de specs segun deltas).
|
|
35
94
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
95
|
+
4. **Verificar sincronizacion**: Despues de que OpenSpec archive, verifica que `openspec/specs/` fue actualizada:
|
|
96
|
+
- Revisa si hay archivos nuevos o modificados en `openspec/specs/`
|
|
97
|
+
- Si la sincronizacion no ocurrio (OpenSpec la salto o fallo), ejecuta manualmente:
|
|
98
|
+
- Lee la especificacion del cambio archivado: `specs.md` si existe **y** todos los `.md` bajo `specs/` de esa carpeta (misma regla que `refacil:apply`)
|
|
99
|
+
- Busca el spec principal relevante en `openspec/specs/`
|
|
100
|
+
- Si existe, integra los cambios (ADDED → agregar, MODIFIED → actualizar, REMOVED → eliminar)
|
|
101
|
+
- Si NO existe, crea un spec principal nuevo con nombre descriptivo
|
|
102
|
+
|
|
103
|
+
5. **Persistir evidencia de review en specs (obligatorio)**:
|
|
104
|
+
- Lee `openspec/changes/[nombre-cambio]/.review-passed` **antes** de mover/archivar (o desde la ruta archivada si ya fue movido).
|
|
105
|
+
- Toma sus campos (`verdict`, `date`, `summary`, `failCount`, `blockers`, `changeName`).
|
|
106
|
+
- Crea/actualiza `review.yaml` en cada carpeta de spec afectada (`openspec/specs/<spec-name>/review.yaml`).
|
|
107
|
+
- Formato de `review.yaml`:
|
|
108
|
+
```yaml
|
|
109
|
+
verdict: APROBADO|APROBADO CON OBSERVACIONES
|
|
110
|
+
date: 2026-04-10T00:00:00.000Z
|
|
111
|
+
changeName: nombre-del-cambio
|
|
112
|
+
summary: "..."
|
|
113
|
+
failCount: 0
|
|
114
|
+
blockers: false
|
|
115
|
+
```
|
|
116
|
+
- Si el cambio sincroniza multiples specs, crea/actualiza `review.yaml` en cada una.
|
|
117
|
+
- Si no se puede determinar con precision los specs afectados, crea/actualiza `openspec/specs/review-metadata.yaml` con un registro por cambio.
|
|
118
|
+
|
|
119
|
+
6. Continua al **Paso 3**.
|
|
46
120
|
|
|
47
121
|
El objetivo es que `openspec/specs/` documente como funciona el sistema HOY.
|
|
48
122
|
|
|
49
|
-
### Paso
|
|
123
|
+
### Paso 3: Confirmar
|
|
50
124
|
|
|
51
125
|
```
|
|
52
126
|
=== Cambio archivado ===
|
|
53
127
|
Cambio: [nombre]
|
|
128
|
+
Tipo: [Bug fix | Cambio regular]
|
|
54
129
|
Ubicacion: openspec/changes/archive/[fecha]-[nombre]/
|
|
55
130
|
Specs sincronizadas: SI
|
|
56
131
|
Tests: PASS
|
|
@@ -58,7 +133,7 @@ El objetivo es que `openspec/specs/` documente como funciona el sistema HOY.
|
|
|
58
133
|
El cambio ha sido completado y archivado exitosamente.
|
|
59
134
|
```
|
|
60
135
|
|
|
61
|
-
### Paso
|
|
136
|
+
### Paso 4: Recomendar subir codigo
|
|
62
137
|
|
|
63
138
|
Despues de confirmar el archivado, recomienda al usuario subir los cambios al remoto:
|
|
64
139
|
|
|
@@ -70,5 +145,6 @@ Tip: Ejecuta /refacil:up-code para subir los cambios a tu rama de desarrollo.
|
|
|
70
145
|
|
|
71
146
|
- Siempre verificar completitud antes de archivar
|
|
72
147
|
- La sincronizacion de specs es OBLIGATORIA en la metodologia Refacil
|
|
148
|
+
- La metadata de `.review-passed` debe persistirse separada en YAML (`review.yaml`) dentro de cada carpeta de spec
|
|
73
149
|
- No eliminar artefactos, solo moverlos a archive/ para trazabilidad
|
|
74
150
|
- Usa modo de salida **conciso** por defecto y **detallado** solo si el usuario lo pide (ver `METHODOLOGY-CONTRACT.md`)
|
package/skills/bug/SKILL.md
CHANGED
|
@@ -15,6 +15,18 @@ Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` para reglas transversales del
|
|
|
15
15
|
|
|
16
16
|
## Instrucciones
|
|
17
17
|
|
|
18
|
+
### Paso 0: Verificar prerequisito de trazabilidad
|
|
19
|
+
|
|
20
|
+
Este flujo crea evidencia en `openspec/changes/`. Antes de continuar:
|
|
21
|
+
|
|
22
|
+
1. Verifica si existe la carpeta `openspec/` en la raiz del repo.
|
|
23
|
+
2. Si NO existe, deten el flujo y muestra:
|
|
24
|
+
```
|
|
25
|
+
Este flujo de bugfix requiere OpenSpec inicializado para guardar trazabilidad.
|
|
26
|
+
Ejecuta /refacil:setup y vuelve a correr /refacil:bug.
|
|
27
|
+
```
|
|
28
|
+
3. Si existe, continua al Paso 1.
|
|
29
|
+
|
|
18
30
|
### Paso 1: Describir el bug
|
|
19
31
|
|
|
20
32
|
Preguntale al usuario (si no lo proporciono en $ARGUMENTS):
|
|
@@ -90,24 +102,17 @@ Genera tests que:
|
|
|
90
102
|
2. **Verifican el fix**: El mismo test pasa CON el fix
|
|
91
103
|
3. **Verifican no regresion**: Tests del flujo normal siguen pasando
|
|
92
104
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('should still [comportamiento normal] when [condicion normal]', () => {
|
|
101
|
-
// Este test verifica que no se rompio nada
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
```
|
|
105
|
+
Detecta el stack y framework de testing del proyecto siguiendo `METHODOLOGY-CONTRACT.md` §3 y los patrones existentes (ubicacion, nombrado, mocks, assertions). Genera los tests con la estructura y convenciones reales del proyecto.
|
|
106
|
+
|
|
107
|
+
Cada test de regresion debe cubrir:
|
|
108
|
+
- **Caso del bug**: `should [comportamiento correcto] when [condicion que antes fallaba]`
|
|
109
|
+
- **Caso normal**: `should still [comportamiento normal] when [condicion normal]`
|
|
105
110
|
|
|
106
111
|
### Paso 8: Crear trazabilidad del fix (obligatorio)
|
|
107
112
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
-
|
|
113
|
+
Genera un nombre de carpeta **siempre descriptivo**: `fix-[descripcion-corta]` (maximo 3-4 palabras en kebab-case, ej. `fix-session-timeout-redis`, `fix-null-pointer-payment`).
|
|
114
|
+
|
|
115
|
+
**No uses IDs de tickets** (REF-123, JIRA-456, etc.) en el nombre de carpeta — el nombre debe ser descriptivo para que sirva como insumo legible en `/refacil:explore` y en `openspec/specs/`.
|
|
111
116
|
|
|
112
117
|
**No uses el nombre de la rama** como nombre de carpeta — en una misma rama pueden corregirse multiples bugs, cada uno con su propia carpeta fix.
|
|
113
118
|
|
|
@@ -144,8 +149,9 @@ Este archivo es obligatorio para la trazabilidad del fix y permite que el hook d
|
|
|
144
149
|
[comando-test]: PASS
|
|
145
150
|
|
|
146
151
|
Siguientes pasos:
|
|
147
|
-
1. /refacil:review — Review del fix (obligatorio antes de
|
|
148
|
-
2. /refacil:
|
|
152
|
+
1. /refacil:review — Review del fix (obligatorio antes de archivar)
|
|
153
|
+
2. /refacil:archive — Archiva el fix y documenta en openspec/specs/fix-[nombre]/spec.md (OpenSpec) + review.yaml
|
|
154
|
+
3. /refacil:up-code — Subir los cambios a tu rama de desarrollo
|
|
149
155
|
```
|
|
150
156
|
|
|
151
157
|
## Reglas
|
package/skills/guide/SKILL.md
CHANGED
|
@@ -18,15 +18,15 @@ Eres un guia **breve**: eliges el siguiente comando; el detalle de cada flujo es
|
|
|
18
18
|
## Menu
|
|
19
19
|
|
|
20
20
|
1. Feature nuevo → `/refacil:propose` → `/refacil:apply` → `/refacil:test` → `/refacil:verify` → `/refacil:review` → `/refacil:archive` → `/refacil:up-code`
|
|
21
|
-
2. Bug → `/refacil:bug` → `/refacil:review` → `/refacil:up-code`
|
|
21
|
+
2. Bug → (`/refacil:setup` si falta `openspec/`) → `/refacil:bug` → `/refacil:review` → `/refacil:archive` → `/refacil:up-code`
|
|
22
22
|
3. Explorar → `/refacil:explore`
|
|
23
23
|
4. Tests → `/refacil:test`
|
|
24
24
|
5. Validar implementacion → `/refacil:verify`
|
|
25
25
|
6. Review de calidad → `/refacil:review`
|
|
26
|
-
7. Subir codigo → `/refacil:up-code`
|
|
26
|
+
7. Subir codigo y crear PR → `/refacil:up-code`
|
|
27
27
|
8. Configurar repo → `refacil-sdd-ai init` (global + por repo) y `/refacil:setup`
|
|
28
28
|
|
|
29
|
-
> **Nota**: `/refacil:up-code` verifica
|
|
29
|
+
> **Nota**: `/refacil:up-code` verifica que el review este aprobado (`.review-passed`). Si falta y hay un solo cambio pendiente, lanza `/refacil:review` automaticamente (sin re-ejecutar si no hay cambios nuevos). Si hay multiples cambios sin review, pide seleccion explicita. Toda integracion a ramas protegidas (incluyendo `testing`) requiere PR. Nunca se hacen ajustes directos en `master` o `main`. La validacion de rama se hace en `/refacil:apply` o `/refacil:bug`, no en `up-code`.
|
|
30
30
|
|
|
31
31
|
## Tips (una linea por herramienta)
|
|
32
32
|
|
|
@@ -7,9 +7,10 @@ Este archivo centraliza reglas transversales para evitar duplicacion e inconsist
|
|
|
7
7
|
- **READY_FOR_PROPOSE**: problema entendido (objetivo, alcance, restricciones) y contexto minimo del repo.
|
|
8
8
|
- **READY_FOR_APPLY**: artefactos SDD completos (`proposal.md`, `design.md`, `tasks.md`, especificacion en `specs.md` y/o `specs/**/*.md`) y aprobacion explicita del usuario.
|
|
9
9
|
- **READY_FOR_VERIFY**: implementacion terminada, sin cambios fuera de alcance.
|
|
10
|
-
- **READY_FOR_REVIEW**: verify ejecutado
|
|
10
|
+
- **READY_FOR_REVIEW**: para cambios regulares (propose), verify ejecutado e issues criticos resueltos o aceptados por el usuario. Para bug fixes, la implementacion y tests de regresion estan completos (los bugs no pasan por verify).
|
|
11
11
|
- **READY_FOR_ARCHIVE**: review aprobado (`.review-passed` existe), tasks completas o excepciones aprobadas, cambio funcionalmente cerrado.
|
|
12
|
-
- **READY_FOR_MERGE**: review aprobado (`.review-passed` existe)
|
|
12
|
+
- **READY_FOR_MERGE**: review aprobado (`.review-passed` existe) e integracion lista: PR creado para la rama destino. `/refacil:up-code` verifica automaticamente el review antes del push — si falta, lo ejecuta.
|
|
13
|
+
- Si existen multiples cambios activos sin review, se debe seleccionar explicitamente el cambio objetivo antes de ejecutar review/push.
|
|
13
14
|
|
|
14
15
|
## 2) Politica AGENTS.md
|
|
15
16
|
|
|
@@ -33,13 +34,36 @@ Coverage (si aplica): detectar comando del proyecto (`test:cov`, `coverage`, `py
|
|
|
33
34
|
|
|
34
35
|
## 4) Politica de ramas protegidas y creacion de rama
|
|
35
36
|
|
|
36
|
-
Ramas protegidas: `master`, `main`, `develop`, `dev`, `testing`, `qa`.
|
|
37
|
+
Ramas protegidas (nunca desarrollar directamente en ellas): `master`, `main`, `develop`, `dev`, `testing`, `qa`.
|
|
38
|
+
|
|
39
|
+
Regla critica:
|
|
40
|
+
- **NUNCA** hacer cambios directos en ramas protegidas.
|
|
41
|
+
- Toda integracion a ramas protegidas se hace mediante PR, sin excepciones (incluye `testing`).
|
|
42
|
+
|
|
43
|
+
### Creacion de ramas de trabajo
|
|
44
|
+
|
|
45
|
+
- Regla general: toda rama nueva de trabajo (`feature/*`, `fix/*`, `hotfix/*`, `refactor/*`, etc.) debe crearse desde `develop` o `dev` actualizado.
|
|
46
|
+
- Excepcion para repos nuevos: si aun no existe `develop` ni `dev`, se permite crear temporalmente desde `main` o `master`.
|
|
47
|
+
- Si se usa la excepcion, recomendar crear `develop`/`dev` y adoptar ese flujo como estandar del repo.
|
|
48
|
+
- **NUNCA** crear ramas de trabajo desde `testing`, `qa` ni desde otras ramas de feature/bug.
|
|
49
|
+
|
|
50
|
+
### Integracion
|
|
51
|
+
|
|
52
|
+
- Toda integracion a cualquier rama protegida requiere **PR**.
|
|
53
|
+
- No hay excepciones: `testing`, `develop`, `main`, `master`, `qa`, `release/*` — todas requieren PR.
|
|
54
|
+
- Recomendar al usuario crear PR a `testing` para que los cambios esten disponibles en el entorno de pruebas.
|
|
55
|
+
|
|
56
|
+
### Protocolo cuando la rama actual es protegida
|
|
57
|
+
|
|
58
|
+
Si la rama actual es protegida y se necesita escribir codigo:
|
|
37
59
|
|
|
38
|
-
Si la rama actual es protegida:
|
|
39
60
|
1. Informar y pedir identificador de tarea (Jira u otro).
|
|
40
61
|
2. Verificar working directory limpio (`git status --porcelain`).
|
|
41
62
|
3. Si hay cambios sin commitear, pedir aprobacion para `git stash push -m "stash-automatico-refacil"`.
|
|
42
|
-
4. Detectar base
|
|
63
|
+
4. Detectar rama base para crear rama de trabajo:
|
|
64
|
+
- Preferir `develop`, luego `dev`.
|
|
65
|
+
- Solo si no existen (repo nuevo), usar `main` o `master` como excepcion temporal.
|
|
66
|
+
- Cambiar y actualizar (`git pull origin <base>`). Si ninguna existe, detener.
|
|
43
67
|
5. Crear rama de trabajo:
|
|
44
68
|
- Feature: `feature/<ID>`
|
|
45
69
|
- Bugfix: `fix/<ID>`
|
|
@@ -55,3 +79,16 @@ Modo por defecto: **conciso**.
|
|
|
55
79
|
- **Detallado**: reporte completo por seccion.
|
|
56
80
|
|
|
57
81
|
Si el usuario no pide detalle, usa modo conciso.
|
|
82
|
+
|
|
83
|
+
## 6) Scope de review y push
|
|
84
|
+
|
|
85
|
+
- `up-code` y `check-review` solo deben auto-ejecutar review cuando hay un unico cambio pendiente.
|
|
86
|
+
- Si hay multiples cambios pendientes de review, bloquear y pedir seleccion explicita de `nombre-cambio`.
|
|
87
|
+
- `review` no debe correr en modo masivo por defecto cuando hay multiples cambios activos sin alcance explicito.
|
|
88
|
+
|
|
89
|
+
## 7) Persistencia de evidencia de review
|
|
90
|
+
|
|
91
|
+
- `archive` requiere `.review-passed` como precondicion bloqueante.
|
|
92
|
+
- Al archivar cambios regulares (via OpenSpec), la metadata de `.review-passed` debe persistirse en `openspec/specs/`.
|
|
93
|
+
- El formato recomendado es `review.yaml` dentro de cada carpeta de spec afectada.
|
|
94
|
+
- Si no se puede mapear de forma confiable a specs concretos, registrar la evidencia en `openspec/specs/review-metadata.yaml`.
|
package/skills/review/SKILL.md
CHANGED
|
@@ -31,10 +31,22 @@ Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` y aplica el modo de salida de
|
|
|
31
31
|
1) Argumento del usuario (`$ARGUMENTS`)
|
|
32
32
|
2) Cambio activo en `openspec/changes/`
|
|
33
33
|
3) Cambios no commiteados (`git diff`)
|
|
34
|
+
- Si hay multiples cambios activos en `openspec/changes/` y no hay `$ARGUMENTS`, **detente** y pide al usuario seleccionar explicitamente cual cambio revisar.
|
|
35
|
+
- No ejecutes review masivo por defecto cuando hay multiples cambios activos.
|
|
36
|
+
|
|
37
|
+
**Review ya aprobado**: Si el cambio objetivo ya tiene `.review-passed`, verifica si hay cambios posteriores al review:
|
|
38
|
+
1. Lee la `date` del `.review-passed`.
|
|
39
|
+
2. Compara con `git log --since="[date]" --oneline` y `git status --porcelain` para detectar commits o archivos modificados despues del review.
|
|
40
|
+
3. **Si hay cambios nuevos**: elimina el `.review-passed` anterior y re-ejecuta el review completo para evaluar el estado actual.
|
|
41
|
+
4. **Si NO hay cambios nuevos**: informa al usuario y no re-ejecutes:
|
|
42
|
+
```
|
|
43
|
+
El cambio [nombre] ya tiene review aprobado ([verdict] — [date]) y no hay cambios posteriores.
|
|
44
|
+
```
|
|
34
45
|
|
|
35
46
|
### Paso 1: Identificar que revisar
|
|
36
47
|
|
|
37
48
|
Si hay un cambio activo en `openspec/changes/`, usalo como referencia.
|
|
49
|
+
Si hay multiples cambios y el usuario ya selecciono uno, revisa solo ese cambio.
|
|
38
50
|
Si el usuario paso un argumento ($ARGUMENTS), revisa ese archivo o carpeta especifica.
|
|
39
51
|
Si no hay cambio activo ni argumento, revisa los cambios no commiteados (git diff).
|
|
40
52
|
|
package/skills/up-code/SKILL.md
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: refacil:up-code
|
|
3
|
-
description: Subir codigo
|
|
3
|
+
description: Subir codigo y crear PR para integracion — git add, commit, push y PR a la rama destino
|
|
4
4
|
user-invocable: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# refacil:up-code —
|
|
7
|
+
# refacil:up-code — Integrar Codigo y Publicar Cambios
|
|
8
8
|
|
|
9
|
-
Sube los cambios al repositorio remoto
|
|
9
|
+
Sube los cambios al repositorio remoto y genera el PR para integracion.
|
|
10
|
+
Toda integracion a ramas protegidas requiere PR — sin excepciones (incluye `testing`).
|
|
11
|
+
NUNCA se hacen ajustes directos en `master` o `main`.
|
|
10
12
|
|
|
11
13
|
## Antes de empezar
|
|
12
14
|
|
|
@@ -15,42 +17,48 @@ Lee `METHODOLOGY-CONTRACT.md` en `refacil-prereqs` para reglas transversales del
|
|
|
15
17
|
|
|
16
18
|
## Instrucciones
|
|
17
19
|
|
|
18
|
-
### Paso 1: Detectar rama actual
|
|
20
|
+
### Paso 1: Detectar y validar rama actual
|
|
19
21
|
|
|
20
22
|
Ejecuta `git branch --show-current` para obtener el nombre de la rama.
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
- Si la rama actual es protegida (`master`, `main`, `develop`, `dev`, `testing`, `qa`), **detente** e informa al usuario:
|
|
25
|
+
```
|
|
26
|
+
No se puede subir codigo desde una rama protegida ([nombre]).
|
|
27
|
+
La validacion de rama se hace en /refacil:apply o /refacil:bug antes de escribir codigo.
|
|
28
|
+
Cambia a tu rama de trabajo (feature/*, fix/*, etc.) y vuelve a ejecutar /refacil:up-code.
|
|
29
|
+
```
|
|
30
|
+
- Si la rama es de trabajo (`feature/*`, `fix/*`, `hotfix/*`, `refactor/*`, etc.), continua.
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
- Si la rama actual es protegida, ejecutar ese protocolo completo antes de continuar.
|
|
27
|
-
- Para `refacil:up-code`, el prefijo sugerido de rama es `feature/` (o `fix/` si el cambio es bugfix).
|
|
28
|
-
- Si el usuario no aprueba la creacion/cambio de rama, detener. No continuar con commit/push.
|
|
29
|
-
|
|
30
|
-
### Paso 3: Verificar review (obligatorio)
|
|
32
|
+
### Paso 2: Verificar review (obligatorio)
|
|
31
33
|
|
|
32
34
|
Antes de continuar, verifica si hay cambios activos en `openspec/changes/` (excluir carpeta `archive/`).
|
|
33
35
|
|
|
34
36
|
Si hay cambios activos:
|
|
35
|
-
1. Para cada carpeta activa, verifica si existe el archivo `.review-passed
|
|
36
|
-
2. Si **todas** tienen `.review-passed` → continua al paso
|
|
37
|
-
3. Si **
|
|
38
|
-
- Informa al usuario
|
|
39
|
-
- Ejecuta `/refacil:review
|
|
40
|
-
- Si el review aprueba (crea `.review-passed`) → continua al paso
|
|
41
|
-
- Si el review requiere correcciones → detente e informa los hallazgos al usuario
|
|
37
|
+
1. Para cada carpeta activa, verifica si existe el archivo `.review-passed`.
|
|
38
|
+
2. Si **todas** tienen `.review-passed` → continua al paso 3.
|
|
39
|
+
3. Si hay **una sola** carpeta sin `.review-passed`:
|
|
40
|
+
- Informa al usuario cual es.
|
|
41
|
+
- Ejecuta `/refacil:review <nombre-cambio>` automaticamente sobre ese cambio.
|
|
42
|
+
- Si el review aprueba (crea `.review-passed`) → continua al paso 3.
|
|
43
|
+
- Si el review requiere correcciones → detente e informa los hallazgos al usuario.
|
|
44
|
+
4. Si hay **multiples** carpetas sin `.review-passed`:
|
|
45
|
+
- Deten el flujo y pide al usuario seleccionar explicitamente que cambio quiere subir.
|
|
46
|
+
- Ejecuta `/refacil:review <nombre-cambio-seleccionado>` solo para ese cambio.
|
|
47
|
+
- No ejecutes review automatico masivo en este caso.
|
|
48
|
+
|
|
49
|
+
**IMPORTANTE**: `/refacil:review` verifica internamente si `.review-passed` existe y si hay cambios posteriores. Solo re-ejecuta si detecta cambios nuevos despues del ultimo review aprobado.
|
|
42
50
|
|
|
43
|
-
Si no hay carpeta `openspec/changes/` o no hay cambios activos → continua al paso
|
|
51
|
+
Si no hay carpeta `openspec/changes/` o no hay cambios activos → continua al paso 3 (no hay nada que revisar).
|
|
44
52
|
|
|
45
|
-
### Paso
|
|
53
|
+
### Paso 3: Verificar cambios pendientes
|
|
46
54
|
|
|
47
55
|
Ejecuta `git status` para verificar si hay cambios para subir.
|
|
48
56
|
|
|
49
57
|
- Si no hay cambios pendientes ni commits sin push, informa al usuario y detente.
|
|
50
|
-
- Si hay cambios sin commitear, continua al paso
|
|
51
|
-
- Si solo hay commits sin push (nada que commitear), salta directo al paso
|
|
58
|
+
- Si hay cambios sin commitear, continua al paso 4.
|
|
59
|
+
- Si solo hay commits sin push (nada que commitear), salta directo al paso 5.
|
|
52
60
|
|
|
53
|
-
### Paso
|
|
61
|
+
### Paso 4: Commit de cambios
|
|
54
62
|
|
|
55
63
|
1. Ejecuta `git status --short` y muestra al usuario la lista de archivos detectados.
|
|
56
64
|
2. Pide confirmacion explicita antes de stagear todo.
|
|
@@ -60,11 +68,11 @@ Ejecuta `git status` para verificar si hay cambios para subir.
|
|
|
60
68
|
6. Si no se proporciono mensaje, genera uno descriptivo basado en los cambios detectados con `git diff --staged --stat`.
|
|
61
69
|
7. Ejecuta `git commit -m "[mensaje]"`.
|
|
62
70
|
|
|
63
|
-
### Paso
|
|
71
|
+
### Paso 5: Push a remoto
|
|
64
72
|
|
|
65
73
|
Ejecuta `git push -u origin [rama-actual]` para subir los cambios.
|
|
66
74
|
|
|
67
|
-
### Paso
|
|
75
|
+
### Paso 6: Confirmar y crear PR
|
|
68
76
|
|
|
69
77
|
1. Muestra el resumen del push:
|
|
70
78
|
```
|
|
@@ -74,26 +82,28 @@ Ejecuta `git push -u origin [rama-actual]` para subir los cambios.
|
|
|
74
82
|
Remote: origin/[nombre-rama]
|
|
75
83
|
```
|
|
76
84
|
|
|
77
|
-
2. **Pregunta al usuario**
|
|
85
|
+
2. **Pregunta al usuario** a que rama quiere crear el PR. Sugiere `testing` como destino por defecto para validacion funcional:
|
|
78
86
|
```
|
|
79
|
-
|
|
87
|
+
A que rama quieres crear el PR? (recomendado: testing)
|
|
80
88
|
```
|
|
81
89
|
|
|
82
|
-
3.
|
|
90
|
+
3. Obtén la URL del repositorio remoto con `git remote get-url origin` y determina el hosting para generar el link correcto:
|
|
83
91
|
- **GitHub** (url contiene `github.com`): `https://github.com/[owner]/[repo]/compare/[rama-destino]...[rama-actual]?expand=1`
|
|
84
92
|
- **Bitbucket** (url contiene `bitbucket.org`): `https://bitbucket.org/[workspace]/[repo]/pull-requests/new?source=[rama-actual]&dest=[rama-destino]`
|
|
85
93
|
- Si no se puede determinar el hosting, muestra ambos formatos para que el usuario elija.
|
|
94
|
+
- Nota: para URLs SSH (`git@github.com:owner/repo.git` o `git@bitbucket.org:workspace/repo.git`), extrae owner/workspace y repo del path tras el `:`.
|
|
86
95
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
4. Muestra el link al usuario:
|
|
96
|
+
4. Muestra el link al usuario y recomienda PR a `testing`:
|
|
90
97
|
```
|
|
91
98
|
Crea tu PR aqui: [link]
|
|
99
|
+
|
|
100
|
+
Tip: Se recomienda PR a testing para habilitar pruebas integradas
|
|
101
|
+
antes de promover a otras ramas protegidas.
|
|
92
102
|
```
|
|
93
103
|
|
|
94
104
|
## Reglas
|
|
95
105
|
|
|
96
|
-
- NUNCA hacer push a ramas protegidas: master, main, develop, dev, testing, qa
|
|
97
|
-
- Si
|
|
98
|
-
-
|
|
106
|
+
- NUNCA hacer push directo a ramas protegidas: master, main, develop, dev, testing, qa
|
|
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
|
|
99
109
|
- No forzar push (--force) a menos que el usuario lo pida explicitamente
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -88,8 +88,9 @@ Lista los issues para que el usuario los corrija manualmente. Sugiere ejecutar `
|
|
|
88
88
|
|
|
89
89
|
## Reglas
|
|
90
90
|
|
|
91
|
-
-
|
|
92
|
-
- Las correcciones SOLO se aplican en el Paso 4, despues
|
|
91
|
+
- **verify NUNCA modifica codigo por cuenta propia** — los Pasos 1-3 son solo analisis y reporte
|
|
92
|
+
- Las correcciones SOLO se aplican en el Paso 4, **despues** de presentar el reporte completo y recibir aprobacion explicita del usuario
|
|
93
|
+
- Sin aprobacion explicita, verify termina en el reporte — no toca ningun archivo
|
|
93
94
|
- Las correcciones deben ser quirurgicas: solo lo necesario para resolver los issues reportados
|
|
94
95
|
- Ser estricto con los criterios de la spec
|
|
95
96
|
- Si algo no esta en la spec pero parece necesario, mencionarlo como SUGGESTION (observacion), no como CRITICAL/WARNING
|