@saulwade/swl-ses 1.8.0 → 2.0.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.
Files changed (135) hide show
  1. package/CLAUDE.md +8 -8
  2. package/README.md +13 -13
  3. package/agentes/accesibilidad-wcag-swl.md +3 -3
  4. package/agentes/auto-evolucion-swl.md +908 -908
  5. package/agentes/disenador-ui-swl.md +6 -5
  6. package/agentes/frontend-angular-swl.md +2 -2
  7. package/agentes/frontend-css-swl.md +2 -2
  8. package/agentes/frontend-react-swl.md +4 -4
  9. package/agentes/frontend-swl.md +6 -6
  10. package/agentes/investigador-ux-swl.md +5 -5
  11. package/agentes/orquestador-swl.md +96 -8
  12. package/agentes/perfilador-usuario-swl.md +308 -308
  13. package/agentes/producto-prd-swl.md +1 -1
  14. package/agentes/red-team-swl.md +218 -218
  15. package/agentes/revisor-codigo-swl.md +34 -10
  16. package/agentes/revisor-seguridad-swl.md +7 -0
  17. package/agentes/tdd-qa-swl.md +39 -2
  18. package/comandos/swl/actualizar.md +1 -1
  19. package/comandos/swl/aprender.md +2 -2
  20. package/comandos/swl/aprobar-plan.md +152 -0
  21. package/comandos/swl/autoresearch.md +102 -6
  22. package/comandos/swl/ayuda.md +3 -3
  23. package/comandos/swl/discutir-fase.md +20 -2
  24. package/comandos/swl/ejecutar-fase.md +53 -6
  25. package/comandos/swl/evolucionar.md +1 -1
  26. package/comandos/swl/inbox.md +1 -1
  27. package/comandos/swl/instalar.md +1 -1
  28. package/comandos/swl/nemesis.md +42 -1
  29. package/comandos/swl/planear-fase.md +25 -1
  30. package/comandos/swl/plugins.md +1 -1
  31. package/comandos/swl/predecir.md +139 -0
  32. package/comandos/swl/release.md +1 -1
  33. package/comandos/swl/status.md +279 -0
  34. package/comandos/swl/verificar.md +75 -7
  35. package/habilidades/ai-runtime-security/SKILL.md +1 -1
  36. package/habilidades/angular-moderno/SKILL.md +44 -1
  37. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
  38. package/habilidades/autoresearch/SKILL.md +15 -1
  39. package/habilidades/benchmark-memoria/SKILL.md +1 -1
  40. package/habilidades/calidad-contract-testing/SKILL.md +165 -0
  41. package/habilidades/calidad-mutation-testing/SKILL.md +170 -0
  42. package/habilidades/changelog-generator/SKILL.md +9 -2
  43. package/habilidades/changelog-generator/scripts/parse-commits.js +12 -1
  44. package/habilidades/checklist-seguridad/SKILL.md +29 -1
  45. package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -0
  46. package/habilidades/css-moderno/SKILL.md +3 -1
  47. package/habilidades/diagrama-arquitectura/SKILL.md +1 -1
  48. package/habilidades/drift-detection/SKILL.md +179 -179
  49. package/habilidades/ejecutar-fase/SKILL.md +64 -14
  50. package/habilidades/estructura-proyecto-claude/SKILL.md +17 -14
  51. package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +34 -23
  52. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +70 -53
  53. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -77
  54. package/habilidades/extractor-de-aprendizajes/SKILL.md +9 -5
  55. package/habilidades/fastapi-experto/SKILL.md +56 -5
  56. package/habilidades/harness-claude-code/SKILL.md +10 -7
  57. package/{reglas/harness-claude-code.md → habilidades/harness-claude-code/recursos/disciplina-harness-regla.md} +2 -2
  58. package/habilidades/instalar-sistema/SKILL.md +3 -3
  59. package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +1 -1
  60. package/habilidades/patrones-python/SKILL.md +8 -5
  61. package/habilidades/perfil-usuario/SKILL.md +200 -200
  62. package/habilidades/planear-fase/SKILL.md +25 -4
  63. package/habilidades/proceso-ddia-fundamentos/SKILL.md +1 -1
  64. package/habilidades/proceso-ddia-streaming/SKILL.md +4 -4
  65. package/habilidades/proceso-debate-adversarial/SKILL.md +164 -0
  66. package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -0
  67. package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -0
  68. package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -0
  69. package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -0
  70. package/habilidades/protocolo-revision-swl/SKILL.md +1 -1
  71. package/habilidades/seguridad-skills-ia/SKILL.md +1 -1
  72. package/habilidades/swl-claudemd/SKILL.md +50 -210
  73. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -0
  74. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -0
  75. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -0
  76. package/habilidades/swl-dashboard/SKILL.md +9 -9
  77. package/habilidades/swl-revisar-impacto/SKILL.md +1 -1
  78. package/habilidades/tdd-workflow/SKILL.md +58 -5
  79. package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -0
  80. package/habilidades/validacion-ci-sistema/SKILL.md +3 -3
  81. package/hooks/calidad-pre-commit.js +340 -3
  82. package/hooks/ciclo-evolucion-subagente.js +26 -0
  83. package/hooks/ciclo-evolucion.js +26 -0
  84. package/hooks/contexto-iteracion.js +144 -0
  85. package/hooks/extraccion-aprendizajes.js +13 -0
  86. package/hooks/lib/ciclo-evolucion.js +47 -0
  87. package/hooks/{auto-evolucion.js → lib/etapa-auto-evolucion.js} +701 -700
  88. package/hooks/{metricas-evolucion.js → lib/etapa-metricas.js} +388 -376
  89. package/hooks/{actualizar-perfil-usuario.js → lib/etapa-perfil-usuario.js} +376 -364
  90. package/hooks/lib/evolution-tracker.js +24 -3
  91. package/hooks/lib/loop-telemetry.js +321 -0
  92. package/hooks/notificacion-telegram.js +11 -3
  93. package/hooks/spec-gate.js +211 -0
  94. package/hooks/tdd-gate.js +241 -0
  95. package/hooks/validar-intent-spec.js +30 -10
  96. package/llms.txt +29 -0
  97. package/manifiestos/hooks-config.json +36 -18
  98. package/manifiestos/modulos.json +23 -14
  99. package/manifiestos/skills-lock.json +100 -72
  100. package/package.json +4 -3
  101. package/plugin.json +9 -10
  102. package/reglas/accesibilidad.md +10 -0
  103. package/reglas/api-diseno.md +9 -0
  104. package/reglas/arquitectura.evolved.json +7 -0
  105. package/reglas/arquitectura.md +65 -0
  106. package/reglas/auditorias-documentales-estructurales.md +7 -0
  107. package/reglas/cloud-infra.md +8 -0
  108. package/reglas/fragmentos-compartidos.md +5 -0
  109. package/reglas/gobernanza.md +4 -4
  110. package/reglas/hooks.md +6 -0
  111. package/reglas/intent-engineering.md +4 -0
  112. package/reglas/markitdown.md +8 -0
  113. package/reglas/memoria-consolidada.md +1 -1
  114. package/reglas/patrones.md +6 -0
  115. package/reglas/registro-componentes-nuevos.md +10 -1
  116. package/reglas/seguridad-agentes.md +1 -1
  117. package/reglas/seguridad.evolved.json +7 -0
  118. package/reglas/seguridad.md +144 -0
  119. package/reglas/skills-estandar.md +6 -0
  120. package/reglas/testing.md +7 -0
  121. package/reglas/tests-cleanup.md +4 -0
  122. package/reglas/usar-sistema-swl.md +1 -1
  123. package/scripts/generar-inventario.js +64 -1
  124. package/scripts/instalador.js +32 -2
  125. package/scripts/lib/gitignore-manifest.js +29 -1
  126. package/scripts/lib/plan-lock.js +275 -0
  127. package/scripts/migrar-fase-dominio.js +0 -1
  128. package/scripts/smoke-test.js +24 -2
  129. package/scripts/verificar-trazabilidad.js +292 -0
  130. package/agentes/ux-disenador-swl.md +0 -503
  131. package/comandos/swl/dashboard.md +0 -146
  132. package/comandos/swl/evolucion-estado.md +0 -191
  133. package/comandos/swl/metricas.md +0 -342
  134. package/comandos/swl/salud.md +0 -481
  135. package/reglas/verificar-citas-temporales.md +0 -139
@@ -0,0 +1,152 @@
1
+ ---
2
+ name: swl:aprobar-plan
3
+ description: Aprueba el PLAN.md de una fase y lo firma con un lock SHA256 (gate G1 de SDD). Transiciona el frontmatter de estado borrador a aprobado y escribe .planning/locks/<plan>.lock. Es la única vía válida de aprobación — ejecutar-fase verifica este lock antes de implementar y detiene la ejecución si el plan fue mutado tras la firma.
4
+ allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob"]
5
+ ---
6
+
7
+ # /swl:aprobar-plan <n> — Aprobar y firmar el plan de una fase (Gate G1)
8
+
9
+ Eres el guardián del gate G1 del enforcement SDD. Tu trabajo es transicionar un
10
+ PLAN de `borrador` a `aprobado` Y firmarlo con un lock SHA256, de modo que
11
+ cualquier mutación posterior del plan sea detectable por `/swl:ejecutar-fase`.
12
+
13
+ Este comando es la **única vía documentada de aprobación**. Editar el frontmatter
14
+ a mano (`estado: aprobado`) deja el plan en modo legacy (cláusula de gracia D-05):
15
+ se ejecuta con advertencia pero sin protección de integridad. Usar este comando
16
+ es lo que activa el gate real.
17
+
18
+ ## Uso
19
+
20
+ ```
21
+ /swl:aprobar-plan 9
22
+ ```
23
+
24
+ El argumento `<n>` es el número de la fase cuyo PLAN se aprueba.
25
+
26
+ ## Paso 1 — Localizar el PLAN
27
+
28
+ Resuelve la ruta `.planning/fases/0N-PLAN.md` (N con cero a la izquierda si N < 10).
29
+
30
+ - Si no existe: detente con "No existe el PLAN de la fase N. Ejecuta `/swl:planear-fase N` primero."
31
+ - Lee el archivo completo.
32
+
33
+ ## Paso 2 — Validar el estado actual del frontmatter
34
+
35
+ Lee el campo `estado:` del frontmatter:
36
+
37
+ - Si `estado: borrador` → continúa al Paso 3 (caso normal).
38
+ - Si `estado: aprobado` → ya está aprobado. Verifica si existe el lock:
39
+ ```bash
40
+ node -e "const {verificarPlan}=require('./scripts/lib/plan-lock'); console.log(JSON.stringify(verificarPlan('.planning/fases/0N-PLAN.md')))"
41
+ ```
42
+ - Si `modo: "firmado"` → informa "El plan ya está aprobado y firmado." y termina.
43
+ - Si `modo: "legacy"` (aprobado sin lock) → pregunta al usuario: "El plan está
44
+ aprobado pero sin firmar (modo legacy). ¿Lo firmo ahora para activar el gate
45
+ G1?" Si confirma, salta al Paso 4 (firmar sin re-transicionar).
46
+ - Si `modo: "mutado"` → el plan cambió tras una firma previa. Informa el
47
+ `hashEsperado` vs `hashActual` y pregunta si re-aprobar (re-firmar el estado
48
+ actual). Procede solo con confirmación explícita.
49
+ - Si no hay campo `estado` → detente: "El PLAN no tiene campo `estado` en el
50
+ frontmatter. Revisa que sea un plan válido generado por `/swl:planear-fase`."
51
+
52
+ ## Paso 2.5 — Validar la matriz REQ×T (trazabilidad G4)
53
+
54
+ Lee `.planning/fases/0N-CONTEXTO.md` y extrae los IDs `REQ-NN:` de la sección de
55
+ criterios de aceptación.
56
+
57
+ - **CONTEXTO sin REQ-IDs** (fases legacy 01-09): advertencia informativa
58
+ ("CONTEXTO sin REQ-IDs — trazabilidad no exigible, gracia legacy") y continúa.
59
+ - **CONTEXTO con REQ-IDs**: verifica que el PLAN cubra TODOS:
60
+ ```bash
61
+ node scripts/verificar-trazabilidad.js --fase=N --solo-plan
62
+ ```
63
+ - Exit 0 → continúa al Paso 3.
64
+ - Exit 1 (REQ huérfanos) → **RECHAZA la aprobación**. Lista los REQ sin tarea y
65
+ remite a `/swl:planear-fase N` para cubrirlos (o a retirar el REQ del CONTEXTO
66
+ con marca "RETIRADO — razón"). NO firmes un plan con REQ huérfanos.
67
+
68
+ ## Paso 3 — Confirmar con el usuario antes de aprobar
69
+
70
+ NUNCA apruebes sin confirmación explícita. Presenta un resumen breve del plan
71
+ (número de slices, tareas, slices HITL) y pregunta:
72
+
73
+ ```
74
+ El plan de la fase N tiene [X] slices y [Y] tareas ([Z] HITL).
75
+ ¿Confirmas la aprobación? Al aprobar se firma con SHA256 y queda inmutable:
76
+ cualquier edición posterior detendrá /swl:ejecutar-fase.
77
+ ```
78
+
79
+ Espera respuesta afirmativa. Si el usuario pide cambios, NO apruebes — remítelo
80
+ a `/swl:planear-fase N` para refinar.
81
+
82
+ ## Paso 4 — Transicionar y firmar
83
+
84
+ 1. **Transicionar** (omitir si el plan ya estaba `aprobado` en modo legacy):
85
+ edita el frontmatter `estado: borrador` → `estado: aprobado` y agrega
86
+ `aprobadoPor: usuario (<nombre>) — <fecha>, via /swl:aprobar-plan`.
87
+
88
+ 2. **Firmar** — escribe el lock SHA256:
89
+ ```bash
90
+ node -e "const {firmarPlan}=require('./scripts/lib/plan-lock'); const r=firmarPlan('.planning/fases/0N-PLAN.md'); console.log(JSON.stringify(r))"
91
+ ```
92
+ Verifica que el resultado sea `ok: true` y que exista
93
+ `.planning/locks/0N-PLAN.md.lock`.
94
+
95
+ 3. **Verificar** la firma de inmediato:
96
+ ```bash
97
+ node -e "const {verificarPlan}=require('./scripts/lib/plan-lock'); console.log(JSON.stringify(verificarPlan('.planning/fases/0N-PLAN.md')))"
98
+ ```
99
+ Debe retornar `modo: "firmado"`, `ok: true`.
100
+
101
+ 4. **Marcar la fase como activa** (gate G0 — `hooks/spec-gate.js` consume este
102
+ archivo): escribe `.planning/locks/fase-activa.json` con el sha256 devuelto
103
+ por `firmarPlan`:
104
+ ```bash
105
+ node -e "
106
+ const {atomicWriteJSON} = require('./hooks/lib/atomic-write');
107
+ const {verificarPlan} = require('./scripts/lib/plan-lock');
108
+ const v = verificarPlan('.planning/fases/0N-PLAN.md');
109
+ atomicWriteJSON('.planning/locks/fase-activa.json', {
110
+ numero: N,
111
+ planPath: '.planning/fases/0N-PLAN.md',
112
+ sha256: v.hashEsperado,
113
+ aprobadoEn: new Date().toISOString(),
114
+ aprobadoPor: 'usuario via /swl:aprobar-plan'
115
+ });
116
+ console.log('fase activa: 0N');
117
+ "
118
+ ```
119
+ Este archivo es runtime local (gitignored — a diferencia del `.lock`, que SÍ
120
+ se versiona como evidencia). `/swl:ejecutar-fase` lo elimina al cerrar la fase.
121
+ Si se re-firma un plan (re-aprobación tras mutación), re-escribir también
122
+ fase-activa.json para que el hash quede alineado.
123
+
124
+ ## Paso 5 — Reporte
125
+
126
+ ```
127
+ Plan de la fase N aprobado y firmado (gate G1 activo).
128
+
129
+ estado: borrador -> aprobado
130
+ lock: .planning/locks/0N-PLAN.md.lock
131
+ fase activa: .planning/locks/fase-activa.json (gate G0 cubierto)
132
+ sha256: <hash corto>
133
+
134
+ Cualquier edición del PLAN tras esta firma detendrá /swl:ejecutar-fase con un
135
+ mensaje de "plan mutado tras aprobación". Para cambiar el plan: edítalo y vuelve
136
+ a ejecutar /swl:aprobar-plan N.
137
+
138
+ Próximo paso: /swl:ejecutar-fase N
139
+ ```
140
+
141
+ ## Reglas de comportamiento
142
+
143
+ - NUNCA apruebes un plan sin confirmación explícita del usuario.
144
+ - NUNCA modifiques el contenido del plan al aprobarlo — solo el campo `estado`
145
+ del frontmatter y la línea `aprobadoPor`. El cuerpo es lo que se firma.
146
+ - El lock vive en `.planning/locks/` y SÍ se versiona en git (es evidencia de
147
+ aprobación, parte del audit trail de SDD).
148
+ - Si el usuario quiere cambiar el plan después de aprobado, el flujo correcto es
149
+ editar el PLAN y re-ejecutar `/swl:aprobar-plan N` (re-firma). NUNCA editar el
150
+ lock a mano.
151
+ - El número de versión del release que publique esta fase lo decide el usuario
152
+ (regla CLAUDE.md) — este comando no toca versiones.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: swl:autoresearch
3
- description: Ejecuta el loop de auto-mejora iterativa Autoresearch sobre un skill o agente. Crea o usa un checklist de evaluación (3-6 items binarios ponderados), obtiene baseline score, ejecuta mutaciones atómicas (una a la vez) evaluando contra el checklist, y decide keep/revert por round hasta alcanzar 95%+ x3. Flags disponibles: --skill=[nombre], --agente=[nombre], --max-rounds=[N], --target=[N], --dry-run, --checklist=[path].
3
+ description: Ejecuta el loop de auto-mejora iterativa Autoresearch sobre un skill, un agente, o (modo --codigo) sobre código del proyecto contra una métrica arbitraria. Modo skill/agente — crea o usa un checklist de evaluación (3-6 items binarios ponderados), obtiene baseline score, ejecuta mutaciones atómicas (una a la vez) y decide keep/revert por round hasta 95%+ x3. Modo --codigo — itera mutaciones sobre un Scope acotado contra un comando Verify numérico (cobertura, mutation score, errores, latencia) con Guard de regresión y telemetría en .planning/loops/. Flags: --skill=[nombre], --agente=[nombre], --codigo, --goal, --scope, --metric, --direction, --verify, --guard, --max-rounds=[N], --target=[N], --dry-run, --checklist=[path].
4
4
  allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
5
5
  ---
6
6
 
@@ -22,13 +22,20 @@ Este comando es distinto a `/swl:evolucionar`: donde evolucionar analiza evidenc
22
22
  ```
23
23
  --skill=[nombre] Skill a mejorar (busca en habilidades/[nombre]/SKILL.md)
24
24
  --agente=[nombre] Agente a mejorar (busca en agentes/[nombre].md)
25
- --max-rounds=[N] Máximo de iteraciones del loop (default: 10)
26
- --target=[N] Score objetivo en % (default: 95)
27
- --dry-run Analizar y crear checklist sin ejecutar mutaciones
28
- --checklist=[path] Ruta a checklist existente
25
+ --codigo Modo código: itera sobre código del proyecto contra una métrica (ver sección "Modo --codigo")
26
+ --goal="..." (--codigo) Meta textual del loop
27
+ --scope="glob" (--codigo) Archivos que el loop PUEDE modificar (glob acotado)
28
+ --metric="..." (--codigo) Qué mide la métrica (ej: "mutation score de src/pagos")
29
+ --direction=[dir] (--codigo) higher_is_better | lower_is_better
30
+ --verify="cmd" (--codigo) Comando shell cuya salida contiene el número de la métrica
31
+ --guard="cmd" (--codigo) Comando que debe pasar (exit 0) para aceptar una mutación
32
+ --max-rounds=[N] Máximo de iteraciones del loop (default: 10 skill/agente, 15 código)
33
+ --target=[N] Score objetivo (default: 95% en skills; en código lo define el usuario)
34
+ --dry-run Analizar y derivar configuración sin ejecutar mutaciones
35
+ --checklist=[path] Ruta a checklist existente (solo modo skill/agente)
29
36
  ```
30
37
 
31
- **Nota**: Se debe pasar `--skill` o `--agente`, no ambos. Si no se pasa ninguno, preguntar al usuario.
38
+ **Nota**: Se debe pasar `--skill`, `--agente` o `--codigo` (excluyentes). Si no se pasa ninguno, preguntar al usuario.
32
39
 
33
40
  ## Paso 0 — Parseo de flags y carga de habilidades
34
41
 
@@ -168,3 +175,92 @@ Si el score mejoró respecto al baseline:
168
175
  - Si después de 3 rounds sin mejora, preguntar al usuario si continuar o parar
169
176
  - El caso de prueba NO cambia durante el loop
170
177
  - Mantener log completo del loop para auditoría
178
+
179
+ ---
180
+
181
+ ## Modo `--codigo` — Loop métrico sobre código del proyecto
182
+
183
+ Generaliza el loop a **código del usuario**: la misma disciplina (mutación
184
+ atómica → medir → keep/revert) pero la evaluación es un **comando Verify
185
+ numérico** en lugar de un checklist. Patrón adoptado del análisis de
186
+ autoresearch v2.1 (loop core), adaptado a las reglas SWL (HITL, git-workflow,
187
+ telemetría en `.planning/loops/`).
188
+
189
+ Métricas típicas: mutation score (cargar `Skill("calidad-mutation-testing")`),
190
+ cobertura de tests, conteo de errores de tsc/lint (lower_is_better), latencia
191
+ p95 de un benchmark, bundle size, tiempo de suite.
192
+
193
+ ### Paso C0 — Derivar y aprobar la configuración (HITL obligatorio)
194
+
195
+ Completar con el usuario los campos faltantes y presentar el bloque para
196
+ aprobación explícita ANTES de la primera mutación:
197
+
198
+ ```
199
+ === Autoresearch --codigo — Configuración ===
200
+ Goal: [meta textual]
201
+ Scope: [glob de archivos que el loop PUEDE tocar]
202
+ Metric: [qué mide] | Direction: [higher|lower]_is_better
203
+ Verify: [comando shell]
204
+ Guard: [comando shell o "(ninguno)"]
205
+ Target: [valor objetivo o "(mejora máxima en N rounds)"]
206
+ Rounds: [N, default 15]
207
+ ```
208
+
209
+ **Safety screen del Verify/Guard (bloqueante)**: rechazar comandos que
210
+ contengan `rm -rf`, `curl|sh`/`wget|sh`, `sudo`, `git push`, `--force`,
211
+ redirecciones a archivos fuera del repo, o credenciales inline. El Verify se
212
+ ejecuta una vez en dry-run para confirmar que produce un número parseable —
213
+ si no, corregir el comando antes de iterar.
214
+
215
+ **Guard por default**: si el proyecto tiene suite de tests, el Guard es la
216
+ suite (`npm test` / `pytest`). Iterar sin Guard solo si el usuario lo aprueba
217
+ explícitamente — una métrica que sube con la suite rota no es mejora.
218
+
219
+ Si `--dry-run`: terminar aquí mostrando la configuración derivada.
220
+
221
+ ### Paso C1 — Baseline y telemetría
222
+
223
+ ```bash
224
+ node -e "const lt=require('./hooks/lib/loop-telemetry');const r=lt.iniciarCorrida({tipo:'autoresearch',direccion:'[direction]',config:{goal:'[goal]',scope:'[scope]',verify:'[verify]',guard:'[guard]'}});console.log(r.dir)"
225
+ ```
226
+
227
+ Correr Verify, extraer la métrica, registrar la iteración 0 (`estado:
228
+ baseline`). Si el baseline ya cumple el target, terminar: no hay loop que correr.
229
+
230
+ ### Paso C2 — El loop
231
+
232
+ Por cada round (hasta `--max-rounds`, default 15):
233
+
234
+ 1. **Revisar memoria**: últimas filas del TSV + `git log --oneline -10` — qué
235
+ funcionó, qué se revirtió. No repetir mutaciones ya revertidas.
236
+ 2. **UNA mutación atómica** dentro del Scope. Archivos fuera del Scope son
237
+ intocables — si la mejora "necesita" tocar otro archivo, pausar y
238
+ preguntar al usuario (anti-proxy-goal-drift).
239
+ 3. **Medir**: correr Verify → métrica nueva; correr Guard.
240
+ 4. **Decidir**:
241
+ - Métrica mejora Y Guard pasa → **keep**: commit `experiment(autoresearch): [descripción]`.
242
+ - Métrica no mejora O Guard falla → **revert**: descartar los cambios del
243
+ working tree (`git checkout -- [archivos tocados]`). NUNCA reescribir
244
+ historia para revertir — solo se commitea lo que se conserva.
245
+ - Verify truena → estado `crash`: descartar cambios, registrar, continuar.
246
+ 5. **Registrar** la iteración con `registrarIteracion` (métrica, delta, estado, descripción).
247
+ 6. **Condiciones de salida**: target alcanzado → ÉXITO; `detectarPlateau`
248
+ sobre las últimas 3 filas → PLATEAU (parar, no quemar rounds sin mejora);
249
+ 3 reverts consecutivos → ESTANCAMIENTO (preguntar al usuario);
250
+ max rounds → ACOTADO.
251
+
252
+ ### Paso C3 — Cierre
253
+
254
+ 1. Escribir handoff: `escribirHandoff(dir, {source: 'swl:autoresearch', status: [COMPLETO|PLATEAU|ACOTADO|INTERRUMPIDO], config})`.
255
+ 2. Reporte final con trayectoria (`analizarTrayectoria`): rounds, keep/revert,
256
+ métrica inicial → final, mayor salto, y los commits `experiment(...)` generados.
257
+ 3. Ofrecer al usuario squash de los commits experimentales en un commit
258
+ semántico final (`git-workflow.md § Squash antes de merge`).
259
+
260
+ ### Reglas adicionales del modo `--codigo`
261
+
262
+ - NUNCA `git push` desde el loop — los commits experimentales son locales.
263
+ - NUNCA tocar archivos fuera del Scope aprobado.
264
+ - NUNCA continuar tras plateau "por si acaso" — el plateau ES la señal de salida.
265
+ - El hook `contexto-iteracion.js` inyecta el estado del loop en sesiones
266
+ largas; no releer el TSV completo en cada round (las últimas 3 filas bastan).
@@ -44,7 +44,7 @@ Formato: tabla compacta con nombre, descripción corta y flags principales.
44
44
  | `/swl:revisar [stack\|archivo]` | Revisión de código por tecnología (auto-detect) |
45
45
  | `/swl:revisar-impacto` | Análisis de blast radius y risk score |
46
46
  | `/swl:evaluar-skill [nombre]` | Evaluación PluginEval de 2 capas con badge |
47
- | `/swl:salud` | Diagnóstico de integridad del sistema |
47
+ | `/swl:status salud` | Diagnóstico de integridad del sistema |
48
48
  | `/swl:auditar-deps` | Auditoría de dependencias (CVEs) |
49
49
 
50
50
  #### Aprendizaje y evolución
@@ -70,8 +70,8 @@ Formato: tabla compacta con nombre, descripción corta y flags principales.
70
70
 
71
71
  | Comando | Descripción |
72
72
  |---------|------------|
73
- | `/swl:metricas [resumen\|detalle]` | Métricas de sesión (tokens, costo) |
74
- | `/swl:dashboard [today\|stats]` | Dashboard histórico multi-sesión |
73
+ | `/swl:status metricas [resumen\|detalle]` | Métricas de sesión (tokens, costo) |
74
+ | `/swl:status dashboard [today\|stats]` | Dashboard histórico multi-sesión |
75
75
  | `/swl:mcp-status` | Estado de servidores MCP conectados |
76
76
 
77
77
  #### Instalación y sistema
@@ -178,6 +178,12 @@ Espera confirmación. Si hay correcciones, ajusta y presenta el resumen nuevamen
178
178
 
179
179
  Una vez confirmado, crea `.planning/fases/0N-CONTEXTO.md` (donde N es el número de fase con cero a la izquierda si N < 10, ej: `01-CONTEXTO.md`, `02-CONTEXTO.md`).
180
180
 
181
+ **TDD es default ON** (gate G2, decisión D-07 vNext): NO preguntes "¿quieres TDD?".
182
+ La fase se ejecuta con ciclo RED→GREEN→REFACTOR y evidencia en telemetría salvo que
183
+ el usuario pida desactivarlo explícitamente. Si lo desactiva: exige la razón, regístrala
184
+ en el campo `**TDD**` del CONTEXTO y anota la excepción en `.planning/AUDITORIA.md`
185
+ (el opt-out se declara y registra — nunca es silencioso).
186
+
181
187
  Estructura del archivo:
182
188
 
183
189
  ```markdown
@@ -187,6 +193,8 @@ Estructura del archivo:
187
193
  **Fase**: N de M (total de fases en el roadmap)
188
194
  **Fecha de discusión**: [fecha actual]
189
195
  **Estado**: Listo para planear
196
+ **TDD**: on <!-- default. Si el usuario lo desactiva: `off — razón: [...]` + entry en AUDITORIA.md -->
197
+
190
198
 
191
199
  ## Objetivo de la fase
192
200
  [descripción clara del objetivo]
@@ -209,8 +217,18 @@ Estructura del archivo:
209
217
  ## Pantallas / vistas (si aplica)
210
218
  [descripción de pantallas]
211
219
 
212
- ## Criterios de aceptación
213
- [lista medible de criterios]
220
+ ## Criterios de aceptación (REQ)
221
+ [criterios binarios y verificables con ID estable REQ-NN — trazabilidad G4:
222
+ - **REQ-01**: [criterio binario verificable]
223
+ - **REQ-02**: [criterio binario verificable]
224
+ Un REQ emitido NUNCA se renumera ni se reusa: si un criterio se descarta, marcarlo
225
+ "RETIRADO — razón" conservando el número. planear-fase exige que cada tarea T-NN
226
+ declare qué REQ verifica (matriz REQ×T) y aprobar-plan rechaza planes con REQ
227
+ huérfanos. verificar-trazabilidad.js valida la cadena REQ→T→commit→test al cierre.
228
+ Método de verificación: por default cada REQ exige un test con marker
229
+ `verifica: REQ-NN`; los REQ satisfechos por prosa/docs/configuración llevan la
230
+ anotación `(verificación: inspección)` en el criterio — exigen tarea y commit
231
+ pero no test automatizado.]
214
232
 
215
233
  ## Riesgos identificados
216
234
  [lista con nivel de impacto: ALTO/MEDIO/BAJO]
@@ -18,6 +18,7 @@ Eres el coordinador de ejecución SWL. Orquestas la implementación real del có
18
18
  ```
19
19
  /swl:ejecutar-fase 1 # modo default — oleadas paralelas
20
20
  /swl:ejecutar-fase 2 --iterative # modo iterativo — 1 tarea, review per-task, auto-debug
21
+ /swl:ejecutar-fase 3 --sin-verify # omite el verify automático del cierre (desviación registrada)
21
22
  ```
22
23
 
23
24
  ### Cuándo usar `--iterative` (modo opt-in)
@@ -48,7 +49,7 @@ Si NO hay `--iterative`, carga el flujo default:
48
49
  Skill("ejecutar-fase")
49
50
  ```
50
51
 
51
- El skill define el protocolo completo de ejecución por tarea (leer > verificar dependencias > implementar > verificar > commit > actualizar ESTADO.md), el formato de commit atómico, las 3 reglas de desviación (menor/moderada/mayor), el manejo de tareas HITL, TDD opcional, el formato de ESTADO.md y el checklist de cierre de fase.
52
+ El skill define el protocolo completo de ejecución por tarea (leer > verificar dependencias > implementar > verificar > commit > actualizar ESTADO.md), el formato de commit atómico, las 3 reglas de desviación (menor/moderada/mayor), el manejo de tareas HITL, TDD por default con evidencia RED en telemetría de loops (opt-out solo si el CONTEXTO declara `**TDD**: off` con razón — gate G2, ADR-0035), el formato de ESTADO.md y el checklist de cierre de fase.
52
53
 
53
54
  Luego carga habilidades específicas del stack detectado en PLAN.md o PROYECTO.md:
54
55
  - Backend Python: `Skill("fastapi-experto")`, `Skill("patrones-python")`
@@ -75,10 +76,33 @@ Verifica en orden:
75
76
  5. **Requirement Freeze**: verifica que el frontmatter del PLAN.md contenga
76
77
  `estado: aprobado`. Si contiene `estado: borrador` o no tiene campo `estado`:
77
78
  - DETENER ejecución
78
- - Reportar: "El PLAN.md no está aprobado. Ejecuta `/swl:planear-fase N` y
79
- confirma el plan antes de ejecutar."
79
+ - Reportar: "El PLAN.md no está aprobado. Ejecuta `/swl:aprobar-plan N` para
80
+ aprobarlo y firmarlo antes de ejecutar."
80
81
  - NO proceder sin aprobación explícita del usuario
81
82
 
83
+ 6. **Gate G1 — verificación de integridad del plan firmado**: tras confirmar
84
+ `estado: aprobado`, recomputa el hash del PLAN y compáralo contra su lock:
85
+ ```bash
86
+ node -e "const {verificarPlan}=require('./scripts/lib/plan-lock'); console.log(JSON.stringify(verificarPlan('.planning/fases/0N-PLAN.md')))"
87
+ ```
88
+ Interpreta el resultado:
89
+ - `ok: true, modo: "firmado"` → el plan no fue mutado tras su aprobación.
90
+ Continúa con normalidad.
91
+ - `ok: true, modo: "legacy"` → plan aprobado SIN lock (creado antes de la
92
+ Fase 09, cláusula de gracia D-05). Muestra una **advertencia visible** al
93
+ usuario: "Plan en modo legacy (sin firma SHA256). Se ejecuta sin
94
+ verificación de integridad. Para firmarlo: `/swl:aprobar-plan N`." y
95
+ continúa.
96
+ - `ok: false, modo: "mutado"` → **DETENER ejecución**. El plan cambió tras la
97
+ firma. Reporta `hashEsperado` y `hashActual` y di: "El PLAN fue modificado
98
+ después de su aprobación. Revisa los cambios y vuelve a aprobarlo con
99
+ `/swl:aprobar-plan N` antes de ejecutar." NO proceder.
100
+ - `ok: false` con cualquier otro modo (`lock-corrupto`, `sin-firmar`,
101
+ `no-existe`) → DETENER y reportar el `motivo` exacto.
102
+
103
+ Repite esta verificación al inicio de cada slice (el plan no debe mutar
104
+ durante la ejecución — Requirement Freeze).
105
+
82
106
  Lee los tres archivos completos. Verifica estado de Git (`git status`, `git log --oneline -5`). Si hay cambios no commiteados, pregunta cómo proceder.
83
107
 
84
108
  **Nota sobre Requirement Freeze**: una vez que el plan está aprobado y la ejecución
@@ -147,7 +171,30 @@ Al completar todos los slices, genera `.planning/fases/0N-RESUMEN.md` con: slice
147
171
 
148
172
  Marca fase completada en HOJA-RUTA.md con fecha. Actualiza ESTADO.md con estado general.
149
173
 
150
- ## Paso 8 Reporte final
174
+ **Liberar la fase activa** (gate G0): elimina `.planning/locks/fase-activa.json` —
175
+ la fase ya no está en ejecución y `hooks/spec-gate.js` debe volver a advertir si se
176
+ escribe código sin una nueva fase aprobada:
177
+
178
+ ```bash
179
+ node -e "const fs=require('fs'); const p='.planning/locks/fase-activa.json'; if(fs.existsSync(p)){fs.unlinkSync(p); console.log('fase activa liberada')} else {console.log('sin fase activa que liberar')}"
180
+ ```
181
+
182
+ NO eliminar el `.lock` del plan (`0N-PLAN.md.lock`) — ese es evidencia de
183
+ aprobación versionada, no runtime.
184
+
185
+ ## Paso 8 — Verificación automática y reporte final
186
+
187
+ **Verify automático (gate G4)**: tras generar RESUMEN.md y liberar la fase activa,
188
+ invoca `/swl:verificar --until-converge` automáticamente — el cierre de fase ya no
189
+ es un paso manual recomendado, es parte del flujo.
190
+
191
+ - Opt-out: si el usuario invocó `/swl:ejecutar-fase N --sin-verify`, omite la
192
+ verificación y registra la desviación en el RESUMEN.md ("verificación diferida
193
+ por --sin-verify — razón: [la que dé el usuario]").
194
+ - Si la verificación converge (Señal A): el VERIFICACION.md queda generado y el
195
+ reporte final lo incluye.
196
+ - Si NO converge (Señal B/C) o queda abortada: reportar el estado del loop al
197
+ usuario — la fase NO se declara verificada.
151
198
 
152
199
  ```
153
200
  Fase N — [nombre] completada.
@@ -156,13 +203,13 @@ Slices implementados: [N de N]
156
203
  Commits creados: [N]
157
204
  Tests pasando: [N de N]
158
205
  Desviaciones del plan: [N, o "ninguna"]
206
+ Verificación: [convergió en pasada K | diferida por --sin-verify | NO convergió — ver detalle]
159
207
 
160
208
  Archivos generados:
161
209
  - .planning/fases/0N-RESUMEN.md
210
+ - .planning/fases/0N-VERIFICACION.md (verify automático)
162
211
  - .planning/ESTADO.md (actualizado)
163
212
  - .planning/HOJA-RUTA.md (actualizado)
164
-
165
- Próximo paso recomendado: /swl:verificar
166
213
  ```
167
214
 
168
215
  ## Reglas de comportamiento
@@ -215,7 +215,7 @@ score_after = (evals_pass / evals_total) * 100 × factor_peso
215
215
  | `score_baseline - 5 <= score_after < score_baseline` | **Requiere revisión humana** — reportar diferencia; usuario decide si acepta la regresión menor o revierte |
216
216
 
217
217
  Los 3 casos registran evento en `.planning/evolution/evoluciones.jsonl` para el
218
- dashboard `/swl:evolucion-estado`.
218
+ dashboard `/swl:status evolucion`.
219
219
 
220
220
  ### Regla de oro
221
221
 
@@ -43,7 +43,7 @@ Por cada comando en la cola, decidir:
43
43
  | Tipo de contenido | Acción |
44
44
  |-------------------|--------|
45
45
  | Instrucción de trabajo clara ("arregla el bug X", "ejecuta pruebas") | Procesar como prompt del usuario. Ejecutar la tarea siguiendo el flujo normal SWL. |
46
- | Slash command (`/swl:salud`, `/swl:metricas`, etc.) | Invocar ese comando directamente. |
46
+ | Slash command (`/swl:status salud`, `/swl:status metricas`, etc.) | Invocar ese comando directamente. |
47
47
  | Pregunta/consulta ("¿cómo va X?", "estado del release") | Responder con la información solicitada. Enviar respuesta al gateway si aplica. |
48
48
  | Feedback/corrección ("no uses Y", "prefiero Z") | Escribir a `.planning/evolution/feedback-queue.jsonl` con tipo correspondiente y marcar como procesado. |
49
49
  | Contenido ambiguo o sospechoso | Marcar como descartado con razón registrada. |
@@ -185,7 +185,7 @@ Doctor: <resultado>
185
185
  Siguiente paso:
186
186
  /swl:nuevo-proyecto → si es un proyecto nuevo
187
187
  /swl:mapear-codebase → si ya hay código existente
188
- /swl:salud → para diagnóstico profundo del sistema
188
+ /swl:status salud → para diagnóstico profundo del sistema
189
189
  ```
190
190
 
191
191
  Si la instalación fue local, menciona: "Para instalar SWL en otro proyecto, abre Claude Code en ese proyecto y ejecuta `/swl:instalar` nuevamente."
@@ -8,7 +8,7 @@ description: >
8
8
  automático para scope > 1500 LOC o > 5 archivos en módulos distintos.
9
9
  Persiste hallazgos en .planning/audit/findings/iter-N/.
10
10
  allowed-tools: [Read, Grep, Glob, Bash, Write, Agent, Skill]
11
- argument-hint: "[--remediar] [--pass1 | --pass2 | --continue] [--modulo <ruta>] [--redistribuir] [--reset-plan]"
11
+ argument-hint: "[--remediar] [--pass1 | --pass2 | --continue] [--modulo <ruta>] [--redistribuir] [--reset-plan] [--cross-model]"
12
12
  ---
13
13
 
14
14
  # /swl:nemesis — Auditoría iterativa con remediación opt-in
@@ -54,6 +54,29 @@ y el ciclo continúa hasta convergencia o agotar el guardrail de 3 iteraciones.
54
54
  | Acotar módulo | `--modulo <ruta>` | Limita el scope a un archivo o subdirectorio específico. Se combina con cualquier otro flag. |
55
55
  | Forzar redistribución | `--redistribuir` | Activa `Skill("nemesis-redistribuir")` aunque scope sea menor al umbral. |
56
56
  | Reset del plan | `--reset-plan` | Regenera `nemesis-plan.json` desde cero (descarta plan previo). |
57
+ | **Revisión cross-modelo** | `--cross-model` | Opt-in: rutea la evaluación a un reviewer en OTRO modelo (vía MCP, p.ej. `gemini-review`/`codex-review`) para combatir *self-preferential bias*. Degrada al reviewer same-model si no hay MCP configurado (anuncia la degradación). Combina con `--remediar`. Ver `Skill("proceso-dynamic-workflows") § Revisión cross-modelo`. |
58
+
59
+ ## Revisión cross-modelo (`--cross-model`)
60
+
61
+ El reviewer adversarial en el MISMO modelo aún arrastra *self-preferential bias*
62
+ (uno de los 3 modos de falla nombrados en el blog oficial de dynamic workflows).
63
+ `--cross-model` hace que la evaluación la emita un modelo DISTINTO al ejecutor:
64
+
65
+ - **Wiring (opt-in, ligero)**: si hay un MCP reviewer configurado (patrón ARIS
66
+ `gemini-review`/`codex-review`: expone `review`/`review_reply`, devuelve JSON con
67
+ `threadId` + `response`), el paso de evaluación se rutea a ese MCP. swl-ses NO
68
+ embebe el servidor — lo provee el usuario con su API key del otro modelo.
69
+ - **Degradación explícita** (regla `arreglar-al-detectar.md` / no-fallback-silencioso):
70
+ si el MCP no está disponible, NO falla — usa el reviewer same-model y **anuncia**
71
+ "cross-model solicitado pero MCP ausente → degradado a same-model".
72
+ - **Reviewer memory + debate** (de ARIS `auto-review-loop`): el reviewer externo
73
+ arrastra sospechas entre iteraciones (un `threadId`); el ejecutor puede rebatir,
74
+ el reviewer falla el veredicto final — *"it can drive, never acquit"*.
75
+ - **Trazabilidad**: el JSON del reviewer (`threadId`, `response`, score) se persiste
76
+ junto a `evaluacion.json` en `.planning/audit/findings/iter-N/` → veredicto
77
+ independiente auditable.
78
+
79
+ Detalle del patrón: `Skill("proceso-dynamic-workflows") § Revisión cross-modelo`.
57
80
 
58
81
  ## Flujo completo con `--remediar`
59
82
 
@@ -207,6 +230,24 @@ Estructura de salida bajo `.planning/audit/findings/`:
207
230
 
208
231
  Cada `evaluacion.json` sigue el schema `nemesis-evaluacion-json` v1.0.0.
209
232
 
233
+ ### Telemetría de loop (obligatoria con `--remediar`)
234
+
235
+ En modo `--remediar`, además de los `iter-N/` el comando registra la
236
+ trayectoria en el formato estándar de telemetría de loops
237
+ (`hooks/lib/loop-telemetry.js`). Esto habilita: inyección de estado por el
238
+ hook `contexto-iteracion.js` durante las ejecuciones largas (8-30 turnos),
239
+ detección de plateau, y lectura de la corrida por `/swl:status metricas`.
240
+
241
+ - Al iniciar iter-1: `iniciarCorrida({tipo: 'nemesis', direccion: 'lower_is_better', config: {modulo, maxIter: 3}})`.
242
+ - Tras cada iteración: `registrarIteracion(dir, {iteracion: N, metrica: criticos+altos, delta, estado: 'keep', descripcion: 'iter N: status=<status>, X criticos, Y altos'})`.
243
+ - Al cerrar (PASS, FAIL o Recovery Catalog): `escribirHandoff(dir, {source: 'swl:nemesis', status, findings: <hallazgos residuales con archivo_linea>, config})`.
244
+ Mapeo de status: PASS → `COMPLETO`, max iteraciones → `ACOTADO`, Recovery
245
+ Catalog/escalada → `INTERRUMPIDO`.
246
+
247
+ El `handoff.json` resultante es consumible por una corrida posterior de
248
+ `/swl:verificar --until-converge` o por el orquestador (los `findings`
249
+ traen `archivo_linea` verificable según `verificar-citas-normativas.md § Familia 2`).
250
+
210
251
  ## Cómo interpretar el reporte
211
252
 
212
253
  ### Severidades
@@ -146,7 +146,12 @@ El agente planificador-swl debe generar el plan con esta estructura exacta:
146
146
  ...
147
147
 
148
148
  ## Modelos y esquemas de datos
149
- [tablas, campos, tipos, constraints — si la fase introduce datos nuevos]
149
+ [tablas, campos, tipos, constraints — si la fase introduce datos nuevos.
150
+ Los schemas declarados aquí (Pydantic/Zod/JSON Schema/OpenAPI) son **contrato
151
+ verificable**, parte de la spec: la tarea que los implementa se verifica con
152
+ contract testing (`Skill("calidad-contract-testing")`), no solo con tests
153
+ unitarios. Declarar el schema con la estrictez de la promesa real (requeridos
154
+ marcados, sin campos extra implícitos).]
150
155
 
151
156
  ## Endpoints a implementar
152
157
  | Método | Ruta | Descripción | Roles permitidos |
@@ -161,10 +166,28 @@ El agente planificador-swl debe generar el plan con esta estructura exacta:
161
166
  ## Tests requeridos
162
167
  [lista de tests que deben existir al finalizar la fase]
163
168
 
169
+ ## Escenarios Gherkin (opt-in — solo si la fase tiene criterios de aceptación de negocio)
170
+ [Si el CONTEXTO.md/PRD trae criterios de aceptación con reglas de negocio
171
+ distinguibles, convertirlos en escenarios Given–When–Then siguiendo
172
+ `habilidades/tdd-workflow/recursos/gherkin-bdd.md` y presentarlos al usuario
173
+ para validación ANTES de aprobar el plan. Cada escenario validado se referencia
174
+ desde la tarea que lo implementa (será su test RED). Omitir esta sección en
175
+ fases técnicas puras — Gherkin sin lector de negocio es ceremonia.]
176
+
164
177
  ## Riesgos y mitigaciones
165
178
  | Riesgo | Impacto | Probabilidad | Mitigación |
166
179
  |--------|---------|-------------|-----------|
167
180
 
181
+ ## Matriz REQ×T (obligatoria si el CONTEXTO tiene criterios REQ-NN)
182
+ [tabla REQ → tareas que lo verifican. Cada tarea declara `**Verifica REQ**: REQ-XX`.
183
+ Todo REQ sin tarea = plan NO apto para aprobación (aprobar-plan lo rechaza).
184
+ La convención de cierre de cadena: commits con footer `Refs: REQ-NN` y tests con
185
+ marker `# verifica: REQ-NN` (Python) / `// verifica: REQ-NN` (JS/TS) — validada
186
+ por `scripts/verificar-trazabilidad.js`. Omitir solo en CONTEXTOs legacy sin REQ-IDs.]
187
+
188
+ | REQ | Tareas que lo verifican |
189
+ |-----|------------------------|
190
+
168
191
  ## Criterios de aceptación de la fase
169
192
  [copia del CONTEXTO.md, verificados contra el plan]
170
193
 
@@ -182,6 +205,7 @@ Una vez que el agente planificador-swl produce el PLAN.md, ejecuta una revisión
182
205
  - [ ] ¿El orden de implementación respeta las dependencias (BD → service → endpoint → frontend)?
183
206
  - [ ] ¿Hay criterios de verificación para cada slice?
184
207
  - [ ] ¿Los criterios de aceptación de la fase están cubiertos por los slices?
208
+ - [ ] Si el CONTEXTO tiene REQ-IDs: ¿la matriz REQ×T cubre TODOS los REQ (cero huérfanos)?
185
209
  - [ ] ¿Los riesgos ALTO del CONTEXTO.md están mitigados en el plan?
186
210
  - [ ] ¿Hay tests especificados para cada área crítica?
187
211
  - [ ] ¿Hay tareas HITL claramente marcadas?
@@ -122,7 +122,7 @@ echo "Plugin <nombre> v<version> instalado en _userland/plugins/<nombre>/"
122
122
  echo "Componentes: agentes=$(count), skills=$(count), reglas=$(count), hooks=$(count)"
123
123
  ```
124
124
 
125
- Indicar al usuario que ejecute `/swl:salud` para verificar integridad global.
125
+ Indicar al usuario que ejecute `/swl:status salud` para verificar integridad global.
126
126
 
127
127
  ---
128
128