@saulwade/swl-ses 1.9.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.
- package/CLAUDE.md +8 -8
- package/README.md +12 -12
- package/agentes/accesibilidad-wcag-swl.md +3 -3
- package/agentes/auto-evolucion-swl.md +908 -908
- package/agentes/disenador-ui-swl.md +6 -5
- package/agentes/frontend-angular-swl.md +2 -2
- package/agentes/frontend-css-swl.md +2 -2
- package/agentes/frontend-react-swl.md +4 -4
- package/agentes/frontend-swl.md +6 -6
- package/agentes/investigador-ux-swl.md +5 -5
- package/agentes/orquestador-swl.md +7 -7
- package/agentes/perfilador-usuario-swl.md +308 -308
- package/agentes/producto-prd-swl.md +1 -1
- package/agentes/red-team-swl.md +218 -218
- package/agentes/tdd-qa-swl.md +17 -1
- package/comandos/swl/actualizar.md +1 -1
- package/comandos/swl/aprender.md +2 -2
- package/comandos/swl/aprobar-plan.md +152 -0
- package/comandos/swl/ayuda.md +3 -3
- package/comandos/swl/discutir-fase.md +20 -2
- package/comandos/swl/ejecutar-fase.md +53 -6
- package/comandos/swl/evolucionar.md +1 -1
- package/comandos/swl/inbox.md +1 -1
- package/comandos/swl/instalar.md +1 -1
- package/comandos/swl/nemesis.md +1 -1
- package/comandos/swl/planear-fase.md +17 -1
- package/comandos/swl/plugins.md +1 -1
- package/comandos/swl/release.md +1 -1
- package/comandos/swl/status.md +279 -0
- package/comandos/swl/verificar.md +26 -1
- package/habilidades/ai-runtime-security/SKILL.md +1 -1
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
- package/habilidades/benchmark-memoria/SKILL.md +1 -1
- package/habilidades/calidad-contract-testing/SKILL.md +165 -0
- package/habilidades/changelog-generator/SKILL.md +9 -2
- package/habilidades/changelog-generator/scripts/parse-commits.js +11 -1
- package/habilidades/diagrama-arquitectura/SKILL.md +1 -1
- package/habilidades/drift-detection/SKILL.md +179 -179
- package/habilidades/ejecutar-fase/SKILL.md +64 -14
- package/habilidades/estructura-proyecto-claude/SKILL.md +17 -14
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +34 -23
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +70 -53
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -77
- package/habilidades/extractor-de-aprendizajes/SKILL.md +9 -5
- package/habilidades/harness-claude-code/SKILL.md +10 -7
- package/{reglas/harness-claude-code.md → habilidades/harness-claude-code/recursos/disciplina-harness-regla.md} +2 -2
- package/habilidades/instalar-sistema/SKILL.md +3 -3
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +1 -1
- package/habilidades/perfil-usuario/SKILL.md +200 -200
- package/habilidades/planear-fase/SKILL.md +25 -4
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +1 -1
- package/habilidades/proceso-ddia-streaming/SKILL.md +4 -4
- package/habilidades/proceso-debate-adversarial/SKILL.md +2 -2
- package/habilidades/protocolo-revision-swl/SKILL.md +1 -1
- package/habilidades/seguridad-skills-ia/SKILL.md +1 -1
- package/habilidades/swl-claudemd/SKILL.md +50 -210
- package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -0
- package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -0
- package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -0
- package/habilidades/swl-dashboard/SKILL.md +9 -9
- package/habilidades/swl-revisar-impacto/SKILL.md +1 -1
- package/habilidades/tdd-workflow/SKILL.md +45 -5
- package/habilidades/validacion-ci-sistema/SKILL.md +3 -3
- package/hooks/calidad-pre-commit.js +340 -3
- package/hooks/ciclo-evolucion-subagente.js +26 -0
- package/hooks/ciclo-evolucion.js +26 -0
- package/hooks/extraccion-aprendizajes.js +13 -0
- package/hooks/lib/ciclo-evolucion.js +47 -0
- package/hooks/{auto-evolucion.js → lib/etapa-auto-evolucion.js} +701 -700
- package/hooks/{metricas-evolucion.js → lib/etapa-metricas.js} +388 -376
- package/hooks/{actualizar-perfil-usuario.js → lib/etapa-perfil-usuario.js} +376 -364
- package/hooks/lib/evolution-tracker.js +24 -3
- package/hooks/spec-gate.js +211 -0
- package/hooks/tdd-gate.js +241 -0
- package/hooks/validar-intent-spec.js +30 -10
- package/llms.txt +6 -6
- package/manifiestos/hooks-config.json +26 -17
- package/manifiestos/modulos.json +17 -14
- package/manifiestos/skills-lock.json +63 -56
- package/package.json +2 -2
- package/plugin.json +6 -10
- package/reglas/accesibilidad.md +10 -0
- package/reglas/api-diseno.md +9 -0
- package/reglas/auditorias-documentales-estructurales.md +7 -0
- package/reglas/cloud-infra.md +8 -0
- package/reglas/fragmentos-compartidos.md +5 -0
- package/reglas/gobernanza.md +4 -4
- package/reglas/hooks.md +6 -0
- package/reglas/intent-engineering.md +4 -0
- package/reglas/markitdown.md +8 -0
- package/reglas/memoria-consolidada.md +1 -1
- package/reglas/patrones.md +6 -0
- package/reglas/registro-componentes-nuevos.md +10 -1
- package/reglas/seguridad-agentes.md +1 -1
- package/reglas/skills-estandar.md +6 -0
- package/reglas/testing.md +7 -0
- package/reglas/tests-cleanup.md +4 -0
- package/reglas/usar-sistema-swl.md +1 -1
- package/scripts/lib/gitignore-manifest.js +29 -1
- package/scripts/lib/plan-lock.js +275 -0
- package/scripts/migrar-fase-dominio.js +0 -1
- package/scripts/verificar-trazabilidad.js +292 -0
- package/agentes/ux-disenador-swl.md +0 -503
- package/comandos/swl/dashboard.md +0 -146
- package/comandos/swl/evolucion-estado.md +0 -191
- package/comandos/swl/metricas.md +0 -376
- package/comandos/swl/salud.md +0 -481
- package/reglas/verificar-citas-temporales.md +0 -139
package/comandos/swl/ayuda.md
CHANGED
|
@@ -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
|
-
[
|
|
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
|
|
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:
|
|
79
|
-
|
|
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
|
-
|
|
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
|
|
218
|
+
dashboard `/swl:status evolucion`.
|
|
219
219
|
|
|
220
220
|
### Regla de oro
|
|
221
221
|
|
package/comandos/swl/inbox.md
CHANGED
|
@@ -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. |
|
package/comandos/swl/instalar.md
CHANGED
|
@@ -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."
|
package/comandos/swl/nemesis.md
CHANGED
|
@@ -236,7 +236,7 @@ En modo `--remediar`, además de los `iter-N/` el comando registra la
|
|
|
236
236
|
trayectoria en el formato estándar de telemetría de loops
|
|
237
237
|
(`hooks/lib/loop-telemetry.js`). Esto habilita: inyección de estado por el
|
|
238
238
|
hook `contexto-iteracion.js` durante las ejecuciones largas (8-30 turnos),
|
|
239
|
-
detección de plateau, y lectura de la corrida por `/swl:metricas`.
|
|
239
|
+
detección de plateau, y lectura de la corrida por `/swl:status metricas`.
|
|
240
240
|
|
|
241
241
|
- Al iniciar iter-1: `iniciarCorrida({tipo: 'nemesis', direccion: 'lower_is_better', config: {modulo, maxIter: 3}})`.
|
|
242
242
|
- Tras cada iteración: `registrarIteracion(dir, {iteracion: N, metrica: criticos+altos, delta, estado: 'keep', descripcion: 'iter N: status=<status>, X criticos, Y altos'})`.
|
|
@@ -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 |
|
|
@@ -173,6 +178,16 @@ fases técnicas puras — Gherkin sin lector de negocio es ceremonia.]
|
|
|
173
178
|
| Riesgo | Impacto | Probabilidad | Mitigación |
|
|
174
179
|
|--------|---------|-------------|-----------|
|
|
175
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
|
+
|
|
176
191
|
## Criterios de aceptación de la fase
|
|
177
192
|
[copia del CONTEXTO.md, verificados contra el plan]
|
|
178
193
|
|
|
@@ -190,6 +205,7 @@ Una vez que el agente planificador-swl produce el PLAN.md, ejecuta una revisión
|
|
|
190
205
|
- [ ] ¿El orden de implementación respeta las dependencias (BD → service → endpoint → frontend)?
|
|
191
206
|
- [ ] ¿Hay criterios de verificación para cada slice?
|
|
192
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)?
|
|
193
209
|
- [ ] ¿Los riesgos ALTO del CONTEXTO.md están mitigados en el plan?
|
|
194
210
|
- [ ] ¿Hay tests especificados para cada área crítica?
|
|
195
211
|
- [ ] ¿Hay tareas HITL claramente marcadas?
|
package/comandos/swl/plugins.md
CHANGED
|
@@ -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
|
|
package/comandos/swl/release.md
CHANGED
|
@@ -167,7 +167,7 @@ node scripts/generar-skills-lock.js
|
|
|
167
167
|
git add manifiestos/skills-lock.json
|
|
168
168
|
```
|
|
169
169
|
|
|
170
|
-
El lock contiene SHA256 de cada SKILL.md y permite que `/swl:salud` detecte
|
|
170
|
+
El lock contiene SHA256 de cada SKILL.md y permite que `/swl:status salud` detecte
|
|
171
171
|
drift silencioso entre releases. Si el lock no cambió respecto al anterior,
|
|
172
172
|
el commit lo refleja como no-op (idempotente). El archivo es pequeño (~37KB)
|
|
173
173
|
y debe versionarse.
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swl:status
|
|
3
|
+
description: Comando unificado de observabilidad del sistema y la sesión. Enruta a subcomandos [salud | metricas | loops | evolucion | historico | dashboard] que reportan salud del sistema SWL, métricas de la sesión actual, trayectorias de loops iterativos, estado del ciclo de auto-evolución y dashboard histórico multi-sesión. Reemplaza los comandos previos /swl:salud, /swl:metricas, /swl:dashboard y /swl:evolucion-estado (fusionados en este desde la Fase 09).
|
|
4
|
+
allowed_tools: ["Read", "Write", "Bash", "Glob", "Grep"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:status <subcomando> — Observabilidad unificada
|
|
8
|
+
|
|
9
|
+
Punto único de observabilidad de swl-ses. Fusiona los cuatro comandos previos de
|
|
10
|
+
diagnóstico en un router con subcomandos. Cada subcomando delega exactamente en
|
|
11
|
+
la misma lógica (skill o script) que usaba el comando original — sin pérdida de
|
|
12
|
+
funcionalidad ni de flags.
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/swl:status salud — Diagnóstico de salud del sistema SWL (genera SALUD.md)
|
|
18
|
+
/swl:status metricas — Métricas de la sesión actual (tokens, costo, herramientas)
|
|
19
|
+
/swl:status metricas detalle — Desglose completo por herramienta, agente y timeline
|
|
20
|
+
/swl:status metricas fases — Progreso de fases del proyecto (desde feature-list.json)
|
|
21
|
+
/swl:status loops — Trayectorias de loops iterativos (.planning/loops/)
|
|
22
|
+
/swl:status evolucion — Estado del ciclo de auto-evolución (health_score, nudges…)
|
|
23
|
+
/swl:status evolucion --json — JSON crudo de metricas.json (para pipes)
|
|
24
|
+
/swl:status evolucion --dias=N — Regenera métricas con ventana de N días (default 14)
|
|
25
|
+
/swl:status evolucion --regenerar — Fuerza recomputo del hook ciclo-evolucion.js (etapa métricas)
|
|
26
|
+
/swl:status historico — Dashboard histórico multi-sesión (web, auto-puerto)
|
|
27
|
+
/swl:status dashboard — Alias de historico
|
|
28
|
+
/swl:status dashboard --port 9090 — Fuerza puerto específico del dashboard
|
|
29
|
+
/swl:status dashboard today — Resumen de consumo del día (terminal)
|
|
30
|
+
/swl:status dashboard stats — Estadísticas históricas all-time (terminal)
|
|
31
|
+
/swl:status dashboard scan — Sincroniza JSONL → SQLite sin abrir el dashboard
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Sin subcomando: pide al usuario cuál quiere, o muestra `salud` + `metricas`
|
|
35
|
+
como vista por defecto si el contexto lo sugiere.
|
|
36
|
+
|
|
37
|
+
## Tabla de enrutamiento (delegación 1:1)
|
|
38
|
+
|
|
39
|
+
| Subcomando | Delega en | Origen previo |
|
|
40
|
+
|------------|-----------|---------------|
|
|
41
|
+
| `salud` | `Skill("validacion-ci-sistema")` | `/swl:salud` |
|
|
42
|
+
| `metricas` (+ `detalle`, `fases`) | scripts de métricas de sesión + `derivar-feature-list.js` | `/swl:metricas` |
|
|
43
|
+
| `loops` | `hooks/lib/loop-telemetry.js` | `/swl:metricas loops` |
|
|
44
|
+
| `evolucion` | `hooks/ciclo-evolucion.js` (etapa métricas) + `.planning/evolution/metricas.json` | `/swl:evolucion-estado` |
|
|
45
|
+
| `historico` / `dashboard` | `Skill("swl-dashboard")` | `/swl:dashboard` |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Subcomando: `salud`
|
|
50
|
+
|
|
51
|
+
Diagnóstico de salud del sistema SWL con **verificaciones deterministas**
|
|
52
|
+
(conteos, existencia de campos, sintaxis). Genera `SALUD.md` con score objetivo.
|
|
53
|
+
**Solo lectura** — no modifica nada salvo `SALUD.md`. Para corregir problemas,
|
|
54
|
+
usar `/swl:evolucionar`.
|
|
55
|
+
|
|
56
|
+
**Carga**: `Skill("validacion-ci-sistema")` — contiene las reglas de validación
|
|
57
|
+
por componente (agentes, skills, hooks, comandos, reglas), la tabla de exit codes
|
|
58
|
+
y el checklist de integridad. Toda la lógica de verificación vive en el skill.
|
|
59
|
+
|
|
60
|
+
**Cuándo usar**: antes de iniciar proyecto nuevo, tras modificar agentes/skills
|
|
61
|
+
manualmente, tras merge/pull, o como mantenimiento mensual.
|
|
62
|
+
|
|
63
|
+
**Score global ponderado**:
|
|
64
|
+
```
|
|
65
|
+
Score = agentes×0.30 + skills×0.25 + comandos×0.20 + reglas×0.15 + hooks×0.10
|
|
66
|
+
90-100 Excelente · 75-89 Saludable · 60-74 Funcional · <60 Crítico
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Pasos siempre activos**: inventario determinista, detección de tier del proyecto
|
|
70
|
+
(Simple <500 / Standard 500-5000 / Complex >5000 archivos), diagnóstico de los 5
|
|
71
|
+
componentes, y calidad de `CLAUDE.md` (ADR-0016):
|
|
72
|
+
```bash
|
|
73
|
+
npx -y @saulwade/swl-ses@latest audit-claudemd --json
|
|
74
|
+
```
|
|
75
|
+
Umbrales ajustables: `SWL_CLAUDEMD_MAX_LINES` (default 200),
|
|
76
|
+
`SWL_CLAUDEMD_MAX_BULLET_CHARS` (default 1000).
|
|
77
|
+
|
|
78
|
+
**Auditorías opt-in** (cada una se activa con su variable de entorno; si no está
|
|
79
|
+
definida, el paso se omite sin afectar el score — diseño zero-config):
|
|
80
|
+
|
|
81
|
+
| Variable | Qué audita | Comando |
|
|
82
|
+
|----------|-----------|---------|
|
|
83
|
+
| `SWL_AUDIT_SKILLS=1` | Prompt injection, secretos, URLs sospechosas y estructura en SKILL.md | `bash scripts/audit-skills.sh` (requiere `uv`) |
|
|
84
|
+
| `SWL_AUDIT_FRAMEWORKS=1` | Cobertura de NIST CSF/AI RMF, MITRE ATLAS/ATT&CK, D3FEND en skills de seguridad | `npx -y @saulwade/swl-ses@latest audit-coverage-frameworks --resumen` |
|
|
85
|
+
| `SWL_AUDIT_AGENTES=1` | Agentes sin Exclusion Clause o Gotchas (anti agent-hijacking) | `npx -y @saulwade/swl-ses@latest audit-agents-gaps --resumen` |
|
|
86
|
+
|
|
87
|
+
**Verificación de drift de skills** (si existe `manifiestos/skills-lock.json`):
|
|
88
|
+
```bash
|
|
89
|
+
npx -y @saulwade/swl-ses@latest generate-skills-lock --check
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Smoke test de MCP** (si hay servers en `.claude/settings.json` o configs globales):
|
|
93
|
+
```bash
|
|
94
|
+
python scripts/mcp-orchestrator.py status --json 2>/dev/null
|
|
95
|
+
```
|
|
96
|
+
Detecta drift de apiKeys (`40101`), binarios faltantes y `"env": {}` que rompe la
|
|
97
|
+
herencia de variables — antes de que fallen en uso interactivo.
|
|
98
|
+
|
|
99
|
+
Formato de salida enriquecido vía `scripts/lib/health-row.js` (barras Unicode;
|
|
100
|
+
respeta `NO_COLOR` y `SWL_ASCII_SIMPLE=1`). Genera `SALUD.md` con los datos
|
|
101
|
+
exactos de los scripts — sin ajustar el score "porque parece sano".
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Subcomando: `metricas`
|
|
106
|
+
|
|
107
|
+
Métricas acumuladas de la **sesión actual**: tokens, costo estimado USD, tool
|
|
108
|
+
calls y distribución por herramienta, más el estado del presupuesto configurado.
|
|
109
|
+
|
|
110
|
+
**Fuentes de datos**:
|
|
111
|
+
```bash
|
|
112
|
+
# 1. Bridge de tracking de la sesión (generado por el hook de costos)
|
|
113
|
+
ls /tmp/swl-costs-*.json 2>/dev/null | sort -t- -k3 -n | tail -1
|
|
114
|
+
# 2. Métricas persistidas del proyecto
|
|
115
|
+
cat .planning/METRICAS.md 2>/dev/null || echo "(sin métricas previas)"
|
|
116
|
+
# 3. Presupuesto configurado
|
|
117
|
+
node -e "const c=require('./manifiestos/hooks-config.json').costBudget||{}; console.log('maxUsd:',c.maxUsd??'no configurado','| maxTokens:',c.maxTokens??'no configurado','| alertAt:',c.alertAt??'no configurado')"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Construir el resumen con: tool calls totales, tokens, costo estimado, modelo
|
|
121
|
+
predominante, estado de presupuesto (`OK`/`ALERTA`/`EXCEDIDO`) y top 5
|
|
122
|
+
herramientas por costo. Si el estado es ALERTA (≥ `alertAt`), sugerir
|
|
123
|
+
`/swl:compactar`. Si EXCEDIDO, recomendar revisar `manifiestos/hooks-config.json`.
|
|
124
|
+
|
|
125
|
+
### `metricas detalle`
|
|
126
|
+
|
|
127
|
+
Desglose completo: tabla por herramienta (calls, tokens entrada/salida, costo),
|
|
128
|
+
desglose por agente SWL desde `costePorAgente` del bridge, comparativa histórica
|
|
129
|
+
contra `~/.claude/usage.db` (últimos 30 días) y timeline de actividad por bloques
|
|
130
|
+
de 5 minutos.
|
|
131
|
+
|
|
132
|
+
### `metricas fases`
|
|
133
|
+
|
|
134
|
+
Progreso de fases del proyecto. Regenera primero el JSON derivado de
|
|
135
|
+
`HOJA-RUTA.md` (fuente de verdad) y lo lee:
|
|
136
|
+
```bash
|
|
137
|
+
node scripts/derivar-feature-list.js
|
|
138
|
+
cat .planning/feature-list.json
|
|
139
|
+
```
|
|
140
|
+
Reporta totales por estado canónico (`completado`, `en_progreso`, `pendiente`,
|
|
141
|
+
`bloqueado`, `spec_listo`), lista de fases con marca visual y artefactos
|
|
142
|
+
presentes (`[PLAN]`/`[RESUMEN]`), y timestamp de generación. Detección de drift:
|
|
143
|
+
`node scripts/derivar-feature-list.js --check` (exit 2 si drift).
|
|
144
|
+
|
|
145
|
+
### Notas de precisión
|
|
146
|
+
|
|
147
|
+
Los costos son estimaciones según precios publicados de la API de Anthropic. El
|
|
148
|
+
real varía por modelo efectivo, caché de prompt y región/plan. Para costos
|
|
149
|
+
exactos, el dashboard de Anthropic Console.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Subcomando: `loops`
|
|
154
|
+
|
|
155
|
+
Trayectorias de loops iterativos registradas por `hooks/lib/loop-telemetry.js`
|
|
156
|
+
en `.planning/loops/`:
|
|
157
|
+
```bash
|
|
158
|
+
node -e "
|
|
159
|
+
const fs = require('fs'), path = require('path');
|
|
160
|
+
const lt = require('./hooks/lib/loop-telemetry');
|
|
161
|
+
const base = path.join(process.cwd(), lt.DIR_LOOPS);
|
|
162
|
+
let dirs = [];
|
|
163
|
+
try { dirs = fs.readdirSync(base).map(d => path.join(base, d)).filter(d => fs.statSync(d).isDirectory()); } catch {}
|
|
164
|
+
if (dirs.length === 0) { console.log('(sin corridas de loops registradas)'); process.exit(0); }
|
|
165
|
+
for (const dir of dirs.sort().slice(-10)) {
|
|
166
|
+
try {
|
|
167
|
+
const t = lt.analizarTrayectoria(dir);
|
|
168
|
+
const h = lt.leerHandoff(dir);
|
|
169
|
+
console.log(path.basename(dir) + ' | iters: ' + t.totalIteraciones +
|
|
170
|
+
' | keep/revert: ' + t.keeps + '/' + t.reverts +
|
|
171
|
+
' | métrica: ' + t.metricaInicial + ' → ' + t.metricaFinal +
|
|
172
|
+
' | plateau: ' + (t.plateau ? 'SÍ' : 'no') +
|
|
173
|
+
' | status: ' + (h ? h.status : 'en curso'));
|
|
174
|
+
} catch (e) { console.log(path.basename(dir) + ' | (ilegible: ' + e.message + ')'); }
|
|
175
|
+
}
|
|
176
|
+
"
|
|
177
|
+
```
|
|
178
|
+
Reportar en tabla: corrida, iteraciones, keep/revert rate, métrica inicial →
|
|
179
|
+
final, plateau y status. Si una corrida activa muestra plateau, sugerir cerrarla
|
|
180
|
+
— iterar sin mejora quema tokens.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Subcomando: `evolucion`
|
|
185
|
+
|
|
186
|
+
Estado del ciclo de auto-evolución en la ventana reciente (default 14 días).
|
|
187
|
+
Responde con datos a "¿el sistema está aprendiendo?".
|
|
188
|
+
|
|
189
|
+
**Flags**: `--json` (emite el JSON crudo de `metricas.json`), `--dias=N`
|
|
190
|
+
(ventana de N días), `--regenerar` (fuerza recomputo del hook).
|
|
191
|
+
|
|
192
|
+
**Paso 0 — métricas frescas** (si `--regenerar` o `metricas.json` > 24h):
|
|
193
|
+
```bash
|
|
194
|
+
echo '{}' | node hooks/ciclo-evolucion.js
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Paso 1 — cargar**:
|
|
198
|
+
```bash
|
|
199
|
+
cat .planning/evolution/metricas.json
|
|
200
|
+
```
|
|
201
|
+
Si no existe, ejecutar el regenerado; si sigue sin existir, reportar que el ciclo
|
|
202
|
+
no ha corrido aún.
|
|
203
|
+
|
|
204
|
+
**Dashboard** (formato humano) con secciones: health_score + badge, NUDGES
|
|
205
|
+
(emitidos/accionados/pendientes por tipo), INSTINTOS (proyecto/global/perfil),
|
|
206
|
+
AGENTES (runs/fallos/tasa), EVOLUCIONES (aplicadas/revertidas/rollback ratio),
|
|
207
|
+
CALIDAD CONDUCTUAL (fallos por tipo, reintentos, latencia), ALERTAS PERSISTENTES
|
|
208
|
+
y KERNEL (gobernanza: política evolvable, último ADR kernel, ratio
|
|
209
|
+
`evolvable=false`/total).
|
|
210
|
+
|
|
211
|
+
**Badges**: ≥90 🏆 Óptimo · ≥75 🥇 Saludable · ≥60 🥈 Parcial · ≥40 🥉 Esqueleto
|
|
212
|
+
· <40 ⚠️ Dormido.
|
|
213
|
+
|
|
214
|
+
**Recomendaciones contextuales** (máx 3, al final): bootstrap de instintos si
|
|
215
|
+
`instintos.proyecto==0` y `aprendizajes>10`; revisar alertas si `tasaAccion<0.3`;
|
|
216
|
+
candidatos a `/swl:evolucionar` si `tasaExito<70`; etc.
|
|
217
|
+
|
|
218
|
+
**Anti-substitution**: el archivo de métricas es **siempre**
|
|
219
|
+
`.planning/evolution/metricas.json` (nunca `.planning/metricas.json` ni variantes);
|
|
220
|
+
el hook que regenera es **siempre** `hooks/ciclo-evolucion.js` (etapa métricas, Fase 11); para forzar
|
|
221
|
+
regen usar el pipe `echo '{}' | node ...`, nunca `require()` directo.
|
|
222
|
+
|
|
223
|
+
**Response discipline**: con `--json`, la respuesta es el contenido crudo del
|
|
224
|
+
archivo, sin prosa.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Subcomando: `historico` / `dashboard`
|
|
229
|
+
|
|
230
|
+
Dashboard histórico multi-sesión vía `claude-usage` (vendored). Complementa
|
|
231
|
+
`metricas` (sesión actual) con perspectiva multi-sesión y gráficos interactivos.
|
|
232
|
+
|
|
233
|
+
**Carga**: `Skill("swl-dashboard")` con el subcomando indicado:
|
|
234
|
+
- (vacío) o `historico` → dashboard web (auto-detecta puerto: 8888, 9090, 9191…)
|
|
235
|
+
- `--port N` → fuerza un puerto
|
|
236
|
+
- `today` → resumen del día en terminal
|
|
237
|
+
- `stats` → estadísticas históricas all-time en terminal
|
|
238
|
+
- `scan` → solo sincroniza JSONL → SQLite sin abrir el dashboard
|
|
239
|
+
|
|
240
|
+
### Integración con Mission Control (opt-in)
|
|
241
|
+
|
|
242
|
+
Dashboard web externo para orquestación de flotas de agentes. **Completamente
|
|
243
|
+
opcional** — el dashboard local funciona igual sin configurarlo.
|
|
244
|
+
|
|
245
|
+
| Variable | Descripción | Ejemplo |
|
|
246
|
+
|----------|-------------|---------|
|
|
247
|
+
| `SWL_MC_URL` | URL base de la instancia de MC | `http://localhost:3000` |
|
|
248
|
+
| `SWL_MC_TOKEN` | API key de MC (si hay auth) | `mc-key-abc123` |
|
|
249
|
+
|
|
250
|
+
- Con `SWL_MC_URL` definida: el comando detecta MC (vía `scripts/lib/mc-client.js`)
|
|
251
|
+
y ofrece redirigir al panel web. Si MC no responde en 2s, fallback graceful al
|
|
252
|
+
dashboard local con mensaje informativo (sin crash ni degradación silenciosa).
|
|
253
|
+
- Sin `SWL_MC_URL`: dashboard local sin cambios (zero-config).
|
|
254
|
+
|
|
255
|
+
Instalar MC (opcional): `git clone https://github.com/builderzlabs/mission-control`
|
|
256
|
+
→ `docker compose up` (requiere Node ≥22, pnpm; genera su API key al primer
|
|
257
|
+
arranque). MC expone además un **servidor MCP con ~49 tools** (agentes, memoria,
|
|
258
|
+
soul, tareas, sesiones, tokens/costos, skills, cron, runs/evals). swl-ses **NO**
|
|
259
|
+
modifica `.claude/settings.json` automáticamente — el registro del MCP es manual.
|
|
260
|
+
|
|
261
|
+
**Seguridad**: el MCP de MC incluye tools de **escritura** (`mc_create_task`,
|
|
262
|
+
`mc_write_memory`, `mc_write_soul`…). Antes de activarlo, evaluar exposición de
|
|
263
|
+
red, permisos mínimos de la API key y confianza en los agentes que lo invocarán.
|
|
264
|
+
La regla `seguridad-agentes.md` recomienda documentarlo en
|
|
265
|
+
`.planning/MCP_REGISTRY.md`.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Reglas de comportamiento
|
|
270
|
+
|
|
271
|
+
- `salud` y `evolucion` son **solo lectura** (salvo que `salud` genera `SALUD.md`).
|
|
272
|
+
Para corregir, usar `/swl:evolucionar`.
|
|
273
|
+
- Las verificaciones de `salud` son scripts deterministas — no usar juicio
|
|
274
|
+
subjetivo ni ajustar scores "porque parece sano".
|
|
275
|
+
- Los reportes opt-in de auditoría (`SWL_AUDIT_SKILLS`, `SWL_AUDIT_FRAMEWORKS`,
|
|
276
|
+
`SWL_AUDIT_AGENTES`) nunca bloquean el diagnóstico: si fallan (red,
|
|
277
|
+
dependencia, paquete no publicado), el flujo continúa.
|
|
278
|
+
- Respetar `--json` como salida cruda sin prosa donde aplique (`evolucion`).
|
|
279
|
+
- No reintroducir los comandos eliminados: este comando los reemplaza.
|
|
@@ -409,7 +409,7 @@ Además del estado estructurado de 4.6.5, cada corrida del loop registra su
|
|
|
409
409
|
trayectoria en el formato estándar de telemetría de loops
|
|
410
410
|
(`hooks/lib/loop-telemetry.js`), que habilita: inyección de estado por el hook
|
|
411
411
|
`contexto-iteracion.js` (anti-context-rot en sesiones largas), detección de
|
|
412
|
-
plateau, y lectura por `/swl:metricas`.
|
|
412
|
+
plateau, y lectura por `/swl:status metricas`.
|
|
413
413
|
|
|
414
414
|
Al iniciar el loop (antes de la pasada 1):
|
|
415
415
|
|
|
@@ -494,6 +494,31 @@ Sin `--until-converge`, el comportamiento del comando es idéntico al actual: un
|
|
|
494
494
|
|
|
495
495
|
## Paso 5 — Verificación de criterios de aceptación
|
|
496
496
|
|
|
497
|
+
### 5.0 — Trazabilidad REQ→T→commit→test (si el CONTEXTO tiene REQ-IDs)
|
|
498
|
+
|
|
499
|
+
Si la sección de criterios del CONTEXTO usa IDs `REQ-NN:` (formato Fase 10+),
|
|
500
|
+
ejecuta el validador de cadena ANTES de la verificación criterio por criterio:
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
node scripts/verificar-trazabilidad.js --fase=N
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
- Exit 0 → cadena completa; adjunta la tabla REQ→tareas/commits/tests al VERIFICACION.md.
|
|
507
|
+
- Exit 1 → **cada REQ huérfano es hallazgo CRÍTICO** (requisito sin implementar,
|
|
508
|
+
sin commit trazable o sin test que lo verifique). Listarlos en el VERIFICACION.md
|
|
509
|
+
con la dirección del gap (sin tarea / sin commit / sin test).
|
|
510
|
+
- Exit 2 → error de invocación; reportar sin bloquear el resto de la verificación.
|
|
511
|
+
|
|
512
|
+
En CONTEXTOs legacy sin REQ-IDs el script sale 0 con nota — continuar normal.
|
|
513
|
+
|
|
514
|
+
### 5.0b — Contract testing (si la fase declaró schemas en el PLAN)
|
|
515
|
+
|
|
516
|
+
Si el PLAN declara schemas (Pydantic/Zod/JSON Schema/OpenAPI) o la fase expone
|
|
517
|
+
una API consumida por otro componente, cargar `Skill("calidad-contract-testing")`
|
|
518
|
+
y verificar que la implementación honra el contrato (schema-based con
|
|
519
|
+
schemathesis/Dredd contra la API real, o validación de forma con el modelo en
|
|
520
|
+
el test de integración). Cada violación de contrato = hallazgo CRÍTICO.
|
|
521
|
+
|
|
497
522
|
Lee los criterios de aceptación del `.planning/fases/0N-CONTEXTO.md` y verifica cada uno:
|
|
498
523
|
|
|
499
524
|
Para cada criterio:
|
|
@@ -141,7 +141,7 @@ Checklist para cualquier aplicación LLM en producción:
|
|
|
141
141
|
| Tiempo | Estático (pre-incorporación) | Dinámico (runtime) |
|
|
142
142
|
| Objetivo | Artefactos (SKILL.md, scripts) | Sesiones del agente en producción |
|
|
143
143
|
| Amenazas cubiertas | Supply chain, credenciales hardcodeadas, autonomy abuse declarada | Prompt injection directo/indirecto, context poisoning, tool abuse en runtime |
|
|
144
|
-
| Cuándo ejecuta | `/swl:crear-skill`, `/swl:plugins install`, `/swl:salud` | Durante cada request del agente en producción |
|
|
144
|
+
| Cuándo ejecuta | `/swl:crear-skill`, `/swl:plugins install`, `/swl:status salud` | Durante cada request del agente en producción |
|
|
145
145
|
| Herramientas recomendadas | Grep, SAST sobre SKILL.md | Regex + heurístico + clasificador + guardrails |
|
|
146
146
|
|
|
147
147
|
Ambos skills son necesarios. Ninguno reemplaza al otro.
|