refacil-sdd-ai 4.1.2 → 4.1.4
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/agents/auditor.md
CHANGED
|
@@ -64,10 +64,11 @@ SCOPE_ERROR: <razon>
|
|
|
64
64
|
```
|
|
65
65
|
El main agent se encargara de clarificar con el usuario.
|
|
66
66
|
|
|
67
|
-
### Paso 1: Recopilar archivos
|
|
67
|
+
### Paso 1: Recopilar archivos y separar scope bloqueante de contexto preexistente
|
|
68
68
|
|
|
69
69
|
- Si hay artefactos de OpenSpec en el scope (`proposal.md`, `design.md`, `specs/`, `tasks.md`), leelos primero para entender la intencion.
|
|
70
|
-
- Identifica
|
|
70
|
+
- Identifica los archivos del cambio con `git diff --name-only HEAD` (si hay commits) y `git status --porcelain` (si hay cambios sin commitear). La union de ambos es el **scope bloqueante** — problemas ahi SI bloquean.
|
|
71
|
+
- Archivos que lees como contexto pero que NO aparecen en ese listado son **contexto preexistente** — problemas ahi NO bloquean.
|
|
71
72
|
- Lee cada archivo relevante.
|
|
72
73
|
|
|
73
74
|
### Paso 2: Evaluar contra checklist
|
|
@@ -79,6 +80,8 @@ Para CADA item del checklist cargado, evalua:
|
|
|
79
80
|
|
|
80
81
|
Se especifico. No des PASS generico — justifica brevemente.
|
|
81
82
|
|
|
83
|
+
Para cada FAIL, anota si el codigo afectado pertenece al **scope bloqueante** (archivo modificado en este cambio) o es **preexistente** (ya estaba asi antes). Esa distincion determina si bloquea o es opcional.
|
|
84
|
+
|
|
82
85
|
### Paso 3: Clasificar severidad en cada FAIL
|
|
83
86
|
|
|
84
87
|
- **CRITICO**: Riesgo de seguridad, datos, o incumplimiento de spec.
|
|
@@ -90,19 +93,38 @@ Usa severidad para priorizar, no para inflar el reporte.
|
|
|
90
93
|
|
|
91
94
|
### Paso 4: Emitir reporte + bloque JSON
|
|
92
95
|
|
|
96
|
+
El veredicto y `blockers` se determinan **exclusivamente** por hallazgos en el scope bloqueante (codigo nuevo/modificado):
|
|
97
|
+
- **APROBADO**: No hay FAILs CRITICO/ALTO en codigo nuevo.
|
|
98
|
+
- **APROBADO CON OBSERVACIONES**: Solo FAILs MEDIO/BAJO en codigo nuevo.
|
|
99
|
+
- **REQUIERE CORRECCIONES**: Al menos un FAIL CRITICO/ALTO en codigo nuevo.
|
|
100
|
+
|
|
93
101
|
Tu respuesta final DEBE tener exactamente esta estructura:
|
|
94
102
|
|
|
95
103
|
```
|
|
96
104
|
=== Review Report ===
|
|
97
105
|
VEREDICTO: APROBADO | APROBADO CON OBSERVACIONES | REQUIERE CORRECCIONES
|
|
98
106
|
BLOCKERS: si | no
|
|
107
|
+
(veredicto y blockers solo reflejan el codigo introducido en este cambio)
|
|
99
108
|
|
|
100
|
-
## Hallazgos
|
|
109
|
+
## Hallazgos en codigo nuevo (maximo 5, priorizados)
|
|
101
110
|
1. [CRITICO|ALTO|MEDIO|BAJO] [seccion/item] — [problema]
|
|
102
111
|
- Evidencia: [archivo:linea o comportamiento]
|
|
103
112
|
- Correccion sugerida: [accion concreta]
|
|
104
113
|
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Deuda preexistente encontrada — opcional, no bloquea
|
|
117
|
+
|
|
118
|
+
> Estos problemas ya existian antes de este cambio. No son bloqueantes para el review actual.
|
|
119
|
+
> Son tuya decision: si te toma poco tiempo, resolverlos aqui deja el repo en mejor estado del que lo encontraste — y eso suma. Si no, puedes crear una tarea aparte para atacarlos con foco.
|
|
120
|
+
|
|
121
|
+
1. [CRITICO|ALTO|MEDIO|BAJO] [seccion/item] — [problema en archivo:linea]
|
|
122
|
+
- Correccion sugerida: [accion concreta]
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
105
126
|
## Correcciones minimas para aprobar
|
|
127
|
+
(solo issues del scope bloqueante)
|
|
106
128
|
1. [item accionable]
|
|
107
129
|
2. [item accionable]
|
|
108
130
|
|
|
@@ -114,8 +136,9 @@ Siguiente paso: [/refacil:archive | /refacil:verify]
|
|
|
114
136
|
"date": "<fecha ISO actual — obtenla con: date -u +%Y-%m-%dT%H:%M:%SZ>",
|
|
115
137
|
"changeName": "<nombre-cambio o null si no es un cambio activo>",
|
|
116
138
|
"summary": "<resumen de 1 linea>",
|
|
117
|
-
"failCount": <numero entero de FAILs
|
|
118
|
-
"
|
|
139
|
+
"failCount": <numero entero de FAILs en codigo NUEVO>,
|
|
140
|
+
"preexistingCount": <numero entero de FAILs preexistentes encontrados>,
|
|
141
|
+
"blockers": <true|false — solo codigo nuevo>
|
|
119
142
|
}
|
|
120
143
|
```
|
|
121
144
|
```
|
|
@@ -124,6 +147,7 @@ Siguiente paso: [/refacil:archive | /refacil:verify]
|
|
|
124
147
|
- Usa el fence literal ` ```refacil-review-result ` (no ` ```json `) para que el wrapper lo parsee sin ambiguedad.
|
|
125
148
|
- Emitelo SIEMPRE, incluso si el veredicto es `REQUIERE CORRECCIONES`. El wrapper decide si escribir `.review-passed` o no segun el `verdict`.
|
|
126
149
|
- El `date` debe ser timestamp ISO real. Corre `date -u +%Y-%m-%dT%H:%M:%SZ` via Bash si no estas seguro.
|
|
150
|
+
- Si no hay deuda preexistente, omite esa seccion del reporte (no la incluyas vacia).
|
|
127
151
|
|
|
128
152
|
### Paso 5: Modo detallado (opcional)
|
|
129
153
|
|
|
@@ -133,10 +157,12 @@ Si el main agent indica `mode: detailed`, despues del reporte conciso y ANTES de
|
|
|
133
157
|
|
|
134
158
|
- Ser constructivo: no solo decir que falla, sino como corregirlo.
|
|
135
159
|
- No ser excesivamente estricto con N/A — si no aplica, marcarlo.
|
|
136
|
-
- Si todo es PASS, felicitar brevemente y sugerir `/refacil:archive`.
|
|
137
|
-
- Si hay FAILs
|
|
160
|
+
- Si todo es PASS en codigo nuevo, felicitar brevemente y sugerir `/refacil:archive`.
|
|
161
|
+
- Si hay FAILs CRITICOS/ALTOS en codigo nuevo, marcar como bloqueantes y sugerir `/refacil:verify`.
|
|
138
162
|
- No reportar ruido: evita listar mejoras cosmeticas como bloqueantes.
|
|
139
|
-
- Si hay demasiados hallazgos, prioriza los 5 de mayor impacto primero.
|
|
163
|
+
- Si hay demasiados hallazgos en codigo nuevo, prioriza los 5 de mayor impacto primero.
|
|
164
|
+
- La deuda preexistente se lista completa (sin limite de 5) pero siempre marcada como opcional.
|
|
165
|
+
- El tono para la deuda preexistente debe ser motivador, no culpante — el dev no la introdujo, pero puede ser el heroe que la elimina.
|
|
140
166
|
- Usa modo **conciso** por defecto.
|
|
141
167
|
|
|
142
168
|
## Compatibilidad cross-platform
|
package/package.json
CHANGED
|
@@ -108,3 +108,8 @@ Si el usuario no pide detalle, usa modo conciso.
|
|
|
108
108
|
- **`.review-passed`** y cualquier archivo cuyo nombre empiece por **`.`** son **ocultos** en muchos entornos: en shell, **`ls` sin `-a` / `-la` no los lista** — no concluyas que no existen por eso (evita falsos negativos en prereqs, review, verify, `up-code` y archive).
|
|
109
109
|
- **Preferido**: herramienta **`Glob`** (patron bajo `openspec/changes/<nombre>/`), **`Read`** sobre la ruta exacta `openspec/changes/<nombre>/.review-passed`, o Bash **`test -f`** / **`[ -f ... ]`** sobre esa ruta.
|
|
110
110
|
- Si el usuario dice que el archivo existe y tu comprobacion lo nego, **re-verifica** con uno de los metodos anteriores antes de insistir.
|
|
111
|
+
|
|
112
|
+
## 9) Identificador de carpeta bajo `openspec/changes/<cambio>/`
|
|
113
|
+
|
|
114
|
+
- El **nombre de la carpeta** del cambio activo es el identificador que usa el CLI de OpenSpec (`openspec status --change`, flujos de archive, etc.).
|
|
115
|
+
- **Debe empezar con una letra ASCII** `[a-zA-Z]`. Si el primer caracter es un digito u otro simbolo, el CLI rechaza el nombre (p. ej. `Invalid change name: Change name must start with a letter`).
|
|
@@ -10,6 +10,7 @@ Lee este archivo **ademas** de la skill `openspec-*` que indique el comando `ref
|
|
|
10
10
|
|
|
11
11
|
## propose — `openspec-propose`
|
|
12
12
|
|
|
13
|
+
- **Nombre de carpeta del cambio** (`openspec/changes/<nombre>/`): cumplir **`METHODOLOGY-CONTRACT.md` §9** — el primer caracter **debe** ser letra ASCII; **prohibido** crear el cambio con nombre que empiece por digito (incluye prefijos tipo `YYYY-MM-DD-...`). El CLI OpenSpec falla con esos nombres (`openspec status --change`, etc.). Fijar o validar el slug **antes** de generar artefactos.
|
|
13
14
|
- Criterios de aceptacion: formato **Dado / Cuando / Entonces**.
|
|
14
15
|
- Incluir **criterios de rechazo** (edge cases) en specs.
|
|
15
16
|
- Tasks con estimacion de esfuerzo **S / M / L**.
|
package/skills/propose/SKILL.md
CHANGED
|
@@ -21,6 +21,16 @@ Si el usuario NO proporciono suficiente contexto en $ARGUMENTS, preguntale:
|
|
|
21
21
|
|
|
22
22
|
Si $ARGUMENTS ya es claro, no preguntes de nuevo.
|
|
23
23
|
|
|
24
|
+
### Paso 1.5: Identificador de carpeta del cambio (bloqueante — CLI OpenSpec)
|
|
25
|
+
|
|
26
|
+
El directorio `openspec/changes/<nombre>/` **no puede** usar un `<nombre>` cuyo **primer caracter no sea una letra ASCII** `[a-zA-Z]` — ver **`refacil-prereqs/METHODOLOGY-CONTRACT.md` §9**. Nombres como `2026-04-17-exponer-algo` hacen fallar `openspec status --change` y otros comandos.
|
|
27
|
+
|
|
28
|
+
**Antes del Paso 2:**
|
|
29
|
+
|
|
30
|
+
1. Acuerda o deriva el **slug final** del cambio (kebab-case: `feat-...`, `exponer-...`, `imp-...`, etc.). Fecha o ticket no van al **inicio** del nombre.
|
|
31
|
+
2. Si el usuario o OpenSpec proponen un nombre invalido, **corrigelo** (p. ej. prefijo `feat-` o `change-`) o pide al usuario el slug; **no** crees la carpeta ni delegues propose hasta tener un nombre valido.
|
|
32
|
+
3. Pasa ese nombre valido al flujo OpenSpec (argumento explicito, contexto o convencion que use `openspec-propose`) para que los artefactos queden bajo `openspec/changes/<nombre-valido>/`.
|
|
33
|
+
|
|
24
34
|
### Paso 2: Delegar a OpenSpec ff (fast-forward)
|
|
25
35
|
|
|
26
36
|
1. Lee `openspec-propose/SKILL.md` en `.claude/skills/` o `.cursor/skills/`.
|
|
@@ -78,6 +88,7 @@ Quieres que continue con /refacil:apply?
|
|
|
78
88
|
|
|
79
89
|
## Reglas
|
|
80
90
|
|
|
91
|
+
- **Nombre de carpeta del cambio**: cumplir siempre **§9** del contrato metodologico (primer caracter letra ASCII; nunca iniciar con digito).
|
|
81
92
|
- **NUNCA escribir, modificar o generar codigo fuente** en esta fase — solo artefactos SDD: `proposal.md`, `design.md`, `tasks.md`, y especificacion en `specs.md` y/o `specs/**/*.md` (convencion OpenSpec)
|
|
82
93
|
- Aunque el usuario pase una descripcion completa y detallada en $ARGUMENTS, la salida es EXCLUSIVAMENTE artefactos de planificacion
|
|
83
94
|
- Si el usuario pide que tambien implemente, responder: "La implementacion se hace con `/refacil:apply` despues de aprobar los artefactos."
|
package/skills/review/SKILL.md
CHANGED
|
@@ -66,8 +66,9 @@ Siguiente paso:
|
|
|
66
66
|
"date": "<ISO>",
|
|
67
67
|
"changeName": "<nombre-cambio o null>",
|
|
68
68
|
"summary": "<resumen 1 linea>",
|
|
69
|
-
"failCount": <int>,
|
|
70
|
-
"
|
|
69
|
+
"failCount": <int — solo FAILs en codigo nuevo>,
|
|
70
|
+
"preexistingCount": <int — FAILs en codigo preexistente, no bloqueantes>,
|
|
71
|
+
"blockers": <bool — solo codigo nuevo>
|
|
71
72
|
}
|
|
72
73
|
```
|
|
73
74
|
```
|
|
@@ -89,7 +90,8 @@ Parsea el bloque ` ```refacil-review-result ` del sub-agente. Si `verdict` es **
|
|
|
89
90
|
"date": "<ISO>",
|
|
90
91
|
"changeName": "<nombre-cambio>",
|
|
91
92
|
"summary": "<resumen 1 linea>",
|
|
92
|
-
"failCount": <int>,
|
|
93
|
+
"failCount": <int — solo FAILs en codigo nuevo>,
|
|
94
|
+
"preexistingCount": <int — FAILs preexistentes, no bloqueantes>,
|
|
93
95
|
"blockers": false
|
|
94
96
|
}
|
|
95
97
|
```
|