@saulwade/swl-ses 2.2.4 → 2.3.1
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 +48 -7
- package/README.md +3 -3
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +908 -908
- package/agentes/backend-api-swl.md +472 -472
- package/agentes/backend-csharp-swl.md +420 -420
- package/agentes/backend-go-swl.md +390 -390
- package/agentes/backend-java-swl.md +281 -281
- package/agentes/backend-node-swl.md +479 -479
- package/agentes/backend-python-swl.md +605 -605
- package/agentes/backend-rust-swl.md +364 -364
- package/agentes/backend-workers-swl.md +482 -482
- package/agentes/cloud-infra-swl.md +509 -509
- package/agentes/consolidador-swl.md +541 -541
- package/agentes/datos-swl.md +605 -605
- package/agentes/depurador-swl.md +352 -352
- package/agentes/devops-ci-swl.md +400 -400
- package/agentes/disenador-ui-swl.md +569 -569
- package/agentes/documentador-swl.md +345 -345
- package/agentes/frontend-angular-swl.md +621 -621
- package/agentes/frontend-css-swl.md +716 -716
- package/agentes/frontend-react-swl.md +692 -692
- package/agentes/frontend-swl.md +496 -496
- package/agentes/frontend-tailwind-swl.md +826 -826
- package/agentes/gh-fix-ci-swl.md +2 -2
- package/agentes/implementador-swl.md +328 -328
- package/agentes/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- package/agentes/llm-apps-swl.md +278 -278
- package/agentes/migrador-swl.md +442 -442
- package/agentes/mobile-android-swl.md +511 -511
- package/agentes/mobile-cross-swl.md +541 -541
- package/agentes/mobile-ios-swl.md +502 -502
- package/agentes/mobile-testing-swl.md +302 -302
- package/agentes/nemesis-auditor-swl.md +285 -285
- package/agentes/notificador-swl.md +918 -918
- package/agentes/observabilidad-swl.md +438 -438
- package/agentes/orquestador-swl.md +1026 -1026
- package/agentes/pagos-swl.md +310 -310
- package/agentes/perfilador-usuario-swl.md +321 -321
- package/agentes/planificador-swl.md +399 -399
- package/agentes/producto-prd-swl.md +589 -589
- package/agentes/red-team-swl.md +1 -1
- package/agentes/release-manager-swl.md +590 -590
- package/agentes/rendimiento-swl.md +713 -713
- package/agentes/resolutor-build-swl.md +245 -245
- package/agentes/revisor-angular-swl.md +278 -278
- package/agentes/revisor-codigo-swl.md +505 -505
- package/agentes/revisor-csharp-swl.md +264 -264
- package/agentes/revisor-go-swl.md +259 -259
- package/agentes/revisor-java-swl.md +257 -257
- package/agentes/revisor-kotlin-swl.md +273 -273
- package/agentes/revisor-nextjs-swl.md +281 -281
- package/agentes/revisor-php-swl.md +271 -271
- package/agentes/revisor-react-swl.md +278 -278
- package/agentes/revisor-rust-swl.md +346 -346
- package/agentes/revisor-seguridad-swl.md +399 -399
- package/agentes/revisor-swift-swl.md +268 -268
- package/agentes/revisor-typescript-swl.md +346 -346
- package/agentes/sre-swl.md +291 -291
- package/agentes/tdd-qa-swl.md +393 -393
- package/comandos/swl/aprobar-plan.md +146 -141
- package/comandos/swl/briefing.md +119 -119
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/predecir.md +139 -139
- package/comandos/swl/release.md +30 -8
- package/comandos/swl/sesiones.md +1 -1
- package/comandos/swl/status.md +343 -333
- package/gateway/agent-executor.js +1 -1
- package/gateway/lib/event-channel.js +191 -191
- package/habilidades/agent-deep-links/SKILL.md +148 -148
- package/habilidades/agentes-como-servicio/SKILL.md +2 -2
- package/habilidades/angular-moderno/SKILL.md +20 -1
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
- package/habilidades/backend-async-postgres-testing/SKILL.md +215 -215
- package/habilidades/backend-error-design/SKILL.md +221 -221
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/benchmark-memoria/SKILL.md +186 -186
- package/habilidades/calidad-anti-patrones-universales/SKILL.md +368 -368
- package/habilidades/calidad-contract-testing/SKILL.md +165 -165
- package/habilidades/calidad-mutation-testing/SKILL.md +170 -170
- package/habilidades/changelog-generator/scripts/parse-commits.js +367 -367
- package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
- package/habilidades/contenedores-docker/SKILL.md +3 -1
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/drift-detection/SKILL.md +179 -179
- package/habilidades/ejecutar-fase/SKILL.md +564 -541
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +1 -1
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
- package/habilidades/eval-framework/SKILL.md +212 -212
- package/habilidades/extractor-de-aprendizajes/SKILL.md +3 -3
- package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
- package/habilidades/harness-claude-code/recursos/disciplina-harness-regla.md +252 -252
- package/habilidades/legacy-code-rescue/SKILL.md +267 -267
- package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
- package/habilidades/perfil-usuario/SKILL.md +200 -200
- package/habilidades/planear-fase/SKILL.md +15 -1
- package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -255
- package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
- package/habilidades/proceso-debate-adversarial/SKILL.md +191 -164
- package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -105
- package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
- package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -138
- package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
- package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
- package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
- package/habilidades/proceso-modular-split/SKILL.md +256 -256
- package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +2 -2
- package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
- package/habilidades/structured-outputs/SKILL.md +2 -2
- package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
- package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
- package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
- package/habilidades/swl-dashboard/SKILL.md +2 -2
- package/habilidades/tdd-workflow/SKILL.md +33 -1
- package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
- package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +1 -1
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +1 -1
- package/hooks/captura-acciones-post.js +151 -0
- package/hooks/captura-acciones-session.js +155 -0
- package/hooks/ciclo-evolucion-subagente.js +26 -26
- package/hooks/ciclo-evolucion.js +26 -26
- package/hooks/claudemd-bloat-detector.js +161 -161
- package/hooks/claudemd-duplicacion-detector.js +170 -170
- package/hooks/contexto-iteracion.js +144 -144
- package/hooks/guardrail-modelo.js +1 -1
- package/hooks/lib/agent-routing.js +107 -107
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/autonomia.js +208 -208
- package/hooks/lib/briefing.js +512 -474
- package/hooks/lib/captura-acciones.js +392 -0
- package/hooks/lib/ciclo-evolucion.js +47 -47
- package/hooks/lib/deep-links.js +185 -185
- package/hooks/lib/error-classifier.js +308 -308
- package/hooks/lib/etapa-auto-evolucion.js +701 -701
- package/hooks/lib/etapa-metricas.js +388 -388
- package/hooks/lib/etapa-perfil-usuario.js +376 -376
- package/hooks/lib/loop-telemetry.js +321 -321
- package/hooks/lib/merkle-audit.js +96 -96
- package/hooks/lib/model-router.js +2 -2
- package/hooks/lib/propose-step.js +358 -358
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/rate-limit-tracker.js +253 -253
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/security-net.js +201 -201
- package/hooks/lib/skill-auditor.js +588 -588
- package/hooks/lib/sync-status.js +228 -228
- package/hooks/lib/taint-tracker.js +107 -107
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/token-estimator.js +1 -0
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/lib/usage-model.js +1 -1
- package/hooks/linea-estado.js +2 -0
- package/hooks/registro-turnos.js +209 -209
- package/hooks/session-briefing.js +98 -98
- package/hooks/spec-gate.js +211 -211
- package/hooks/sugerir-regenerar-inventario.js +170 -170
- package/hooks/tdd-gate.js +241 -241
- package/hooks/telemetria-skill-routing.js +100 -100
- package/hooks/validar-formato-post-subagente.js +140 -140
- package/hooks/validar-intent-spec.js +242 -242
- package/hooks/validar-memoria-hook.js +218 -218
- package/hooks/validar-planning-paths.js +134 -134
- package/instintos/autonomia.yaml +27 -27
- package/instintos/prompt-appendices.yaml +57 -57
- package/llms.txt +2 -2
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/canonical-hashes.json +2291 -1637
- package/manifiestos/hooks-config.json +18 -0
- package/manifiestos/modulos.json +4 -0
- package/manifiestos/planning-paths.json +44 -44
- package/manifiestos/skills-lock.json +1282 -1282
- package/package.json +2 -2
- package/plantillas/auditor-veto-template.md +105 -105
- package/plantillas/github-workflows/README.md +47 -47
- package/plantillas/github-workflows/release-please.yml +44 -44
- package/plantillas/github-workflows/swl-ci.yml +107 -107
- package/plantillas/github-workflows/swl-security.yml +51 -51
- package/plugin.json +2 -2
- package/reglas/accesibilidad.md +10 -10
- package/reglas/analisis-previo-tareas-grandes.md +172 -172
- package/reglas/api-diseno.md +9 -9
- package/reglas/arreglar-al-detectar.md +240 -240
- package/reglas/auditorias-documentales-estructurales.md +7 -7
- package/reglas/cloud-infra.md +8 -8
- package/reglas/consultar-vault-primero.md +195 -195
- package/reglas/debatir-antes-de-aceptar.md +158 -158
- package/reglas/fragmentos-compartidos.md +183 -183
- package/reglas/hooks.md +6 -6
- package/reglas/intent-engineering.md +218 -218
- package/reglas/markitdown.md +8 -8
- package/reglas/memoria-consolidada.md +41 -0
- package/reglas/monitor-ci.md +309 -309
- package/reglas/patrones.md +6 -6
- package/reglas/seguridad-agentes.md +66 -0
- package/reglas/sesiones-paralelas.md +180 -180
- package/reglas/sin-duplicacion-reglas-globales.md +182 -182
- package/reglas/skills-estandar.md +6 -6
- package/reglas/testing.md +7 -7
- package/reglas/tests-cleanup.md +224 -224
- package/reglas/usar-code-review-graph.md +155 -155
- package/reglas/usar-context7.md +226 -226
- package/reglas/verificar-citas-normativas.md +548 -548
- package/schemas/agent-frontmatter.schema.json +3 -3
- package/schemas/agent-message.schema.json +73 -73
- package/schemas/agent-output-implementacion.schema.json +114 -114
- package/schemas/agent-output-planificacion.schema.json +150 -150
- package/schemas/agent-output-review.schema.json +98 -98
- package/schemas/diary-entry.schema.json +112 -112
- package/schemas/hook-profiles.schema.json +54 -54
- package/schemas/hooks-config.schema.json +89 -89
- package/schemas/instinct.schema.json +161 -152
- package/schemas/modulos.schema.json +38 -38
- package/schemas/perfiles.schema.json +36 -36
- package/schemas/plugin.schema.json +77 -77
- package/schemas/skill-evals.schema.json +119 -119
- package/schemas/skill-frontmatter.schema.json +245 -245
- package/scripts/audit-tools/audit-history.js +330 -330
- package/scripts/audit-tools/bundle-tracker.js +290 -290
- package/scripts/audit-tools/canary-monitor.js +352 -352
- package/scripts/audit-tools/code-profiler.js +605 -605
- package/scripts/audit-tools/dep-doctor.js +320 -320
- package/scripts/audit-tools/env-validator.js +206 -206
- package/scripts/audit-tools/lib/fs-walk.js +48 -48
- package/scripts/audit-tools/lib/output.js +23 -23
- package/scripts/audit-tools/migration-checker.js +392 -392
- package/scripts/audit-tools/pentest-scanner.js +1436 -1436
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/bootstrap-instintos.js +25 -7
- package/scripts/cli/aprobar-plan.js +73 -73
- package/scripts/cli/briefing.js +23 -23
- package/scripts/cli/ciclo-evolucion.js +26 -26
- package/scripts/cli/configurar-ci.js +40 -40
- package/scripts/cli/derivar-feature-list.js +25 -25
- package/scripts/cli/detectar-host.js +27 -27
- package/scripts/cli/diary-entry.js +69 -69
- package/scripts/cli/execution-state.js +18 -18
- package/scripts/cli/gateway-notify.js +41 -41
- package/scripts/cli/liberar-fase.js +42 -42
- package/scripts/cli/loop-telemetry.js +125 -125
- package/scripts/cli/mark-evolved.js +56 -56
- package/scripts/cli/metricas-dora.js +26 -26
- package/scripts/cli/near-duplicate.js +55 -55
- package/scripts/cli/notificaciones.js +123 -123
- package/scripts/cli/propose-step.js +29 -29
- package/scripts/cli/schedule-parse.js +19 -19
- package/scripts/cli/sugerir-modelo.js +20 -20
- package/scripts/cli/verificar-plan.js +36 -36
- package/scripts/cli/verificar-trazabilidad.js +35 -35
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/field-report.js +199 -199
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-matriz-lenguajes.js +271 -271
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/auditar-invocaciones-comandos.js +104 -104
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/ci-reader.js +193 -193
- package/scripts/lib/claude-sessions.js +1 -0
- package/scripts/lib/configurar-ci.js +380 -380
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-host-swl.js +175 -175
- package/scripts/lib/detectar-stack-detallado.js +307 -307
- package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
- package/scripts/lib/detector-reglas-duplicadas.js +220 -220
- package/scripts/lib/diary-entry.js +234 -234
- package/scripts/lib/eval-metrics-store.js +218 -218
- package/scripts/lib/eval-quality.js +171 -171
- package/scripts/lib/eval-schemas.js +144 -144
- package/scripts/lib/eval-self-correct.js +106 -106
- package/scripts/lib/eval-validator.js +185 -185
- package/scripts/lib/evidencia-release.js +322 -322
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/gate-hooks-requires.js +249 -249
- package/scripts/lib/gate-licencias.js +212 -212
- package/scripts/lib/git-metricas.js +257 -257
- package/scripts/lib/gitignore-manifest.js +44 -11
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/metricas-dora.js +204 -204
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/plan-lock.js +275 -275
- package/scripts/lib/pr-analyzer.js +399 -399
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/reglas-globales-conocidas.json +180 -180
- package/scripts/lib/resolver-plan-fase.js +37 -37
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/schema-version.js +164 -164
- package/scripts/lib/scoring-instintos.js +277 -277
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/lib/skill-metrics.js +41 -1
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/lib/tool-cost-analyzer.js +1 -0
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/migrar-csv-a-array.js +168 -168
- package/scripts/migrar-fase-dominio.js +200 -200
- package/scripts/publicar.js +497 -497
- package/scripts/run-eval.js +141 -141
- package/scripts/tui/componentes/selector-multi.js +189 -189
- package/scripts/tui/componentes/selector-unico.js +158 -158
- package/scripts/tui/ejecutores.js +375 -375
- package/scripts/tui/index.js +162 -162
- package/scripts/tui/lib/colores.js +129 -129
- package/scripts/tui/lib/render.js +264 -264
- package/scripts/tui/lib/teclas.js +113 -113
- package/scripts/tui/pantallas/inspect.js +173 -173
- package/scripts/tui/pantallas/install-wizard.js +334 -334
- package/scripts/tui/pantallas/menu-principal.js +52 -52
- package/scripts/tui/pantallas/progreso.js +274 -274
- package/scripts/tui/pantallas/resumen.js +132 -132
- package/scripts/tui/pantallas/uninstall-wizard.js +208 -208
- package/scripts/tui/pantallas/update-wizard.js +232 -232
- package/scripts/tui/pantallas/welcome.js +187 -187
- package/scripts/validar-userland-vacio.js +110 -110
- package/scripts/verificar-trazabilidad.js +329 -298
|
@@ -1,141 +1,146 @@
|
|
|
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
|
-
> **Invocación cross-scope** (ver `@docs/invocacion-cli-cross-scope.md`): las
|
|
19
|
-
> partes deterministas del gate viven en subcomandos del CLI. Resuélvelos así:
|
|
20
|
-
> si existe `./scripts/cli/<sub>.js` (repo madre) usa `node scripts/cli/<sub>.js`;
|
|
21
|
-
> si `command -v swl-ses` responde usa `swl-ses <sub>`; si no,
|
|
22
|
-
> `npx -y @saulwade/swl-ses@latest <sub>`. Abajo escribo la forma `swl-ses <sub>`
|
|
23
|
-
> como canónica. NUNCA uses `node -e "require('./scripts/lib/...')"` — esa ruta no
|
|
24
|
-
> existe en proyectos downstream.
|
|
25
|
-
|
|
26
|
-
## Uso
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
/swl:aprobar-plan 9
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
El argumento `<n>` es el número de la fase cuyo PLAN se aprueba.
|
|
33
|
-
|
|
34
|
-
## Paso 1 — Localizar el PLAN
|
|
35
|
-
|
|
36
|
-
Resuelve la ruta `.planning/fases/0N-PLAN.md` (N con cero a la izquierda si N < 10).
|
|
37
|
-
|
|
38
|
-
- Si no existe: detente con "No existe el PLAN de la fase N. Ejecuta `/swl:planear-fase N` primero."
|
|
39
|
-
- Lee el archivo completo.
|
|
40
|
-
|
|
41
|
-
## Paso 2 — Validar el estado actual del frontmatter
|
|
42
|
-
|
|
43
|
-
Lee el campo `estado:` del frontmatter:
|
|
44
|
-
|
|
45
|
-
- Si `estado: borrador` → continúa al Paso 3 (caso normal).
|
|
46
|
-
- Si `estado: aprobado` → ya está aprobado. Verifica si existe el lock:
|
|
47
|
-
```bash
|
|
48
|
-
swl-ses verificar-plan --fase=N
|
|
49
|
-
```
|
|
50
|
-
- Si `modo: "firmado"` → informa "El plan ya está aprobado y firmado." y termina.
|
|
51
|
-
- Si `modo: "legacy"` (aprobado sin lock) → pregunta al usuario: "El plan está
|
|
52
|
-
aprobado pero sin firmar (modo legacy). ¿Lo firmo ahora para activar el gate
|
|
53
|
-
G1?" Si confirma, salta al Paso 4 (firmar sin re-transicionar).
|
|
54
|
-
- Si `modo: "mutado"` → el plan cambió tras una firma previa. Informa el
|
|
55
|
-
`hashEsperado` vs `hashActual` y pregunta si re-aprobar (re-firmar el estado
|
|
56
|
-
actual). Procede solo con confirmación explícita.
|
|
57
|
-
- Si no hay campo `estado` → detente: "El PLAN no tiene campo `estado` en el
|
|
58
|
-
frontmatter. Revisa que sea un plan válido generado por `/swl:planear-fase`."
|
|
59
|
-
|
|
60
|
-
## Paso 2.5 — Validar la matriz REQ×T (trazabilidad G4)
|
|
61
|
-
|
|
62
|
-
Lee `.planning/fases/0N-CONTEXTO.md` y extrae los IDs `REQ-NN:` (fases 01-11) o
|
|
63
|
-
`REQ-<fase>-NN:` (namespaceados, fases ≥12) de la sección de criterios de
|
|
64
|
-
aceptación. `verificar-trazabilidad.js` reconoce ambos formatos.
|
|
65
|
-
|
|
66
|
-
- **CONTEXTO sin REQ-IDs** (fases legacy 01-09): advertencia informativa
|
|
67
|
-
("CONTEXTO sin REQ-IDs — trazabilidad no exigible, gracia legacy") y continúa.
|
|
68
|
-
- **CONTEXTO con REQ-IDs**: verifica que el PLAN cubra TODOS:
|
|
69
|
-
```bash
|
|
70
|
-
swl-ses verificar-trazabilidad --fase=N --solo-plan
|
|
71
|
-
```
|
|
72
|
-
- Exit 0 → continúa al Paso 3.
|
|
73
|
-
- Exit 1 (REQ huérfanos) → **RECHAZA la aprobación**. Lista los REQ sin tarea y
|
|
74
|
-
remite a `/swl:planear-fase N` para cubrirlos (o a retirar el REQ del CONTEXTO
|
|
75
|
-
con marca "RETIRADO — razón"). NO firmes un plan con REQ huérfanos.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
- El
|
|
141
|
-
|
|
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
|
+
> **Invocación cross-scope** (ver `@docs/invocacion-cli-cross-scope.md`): las
|
|
19
|
+
> partes deterministas del gate viven en subcomandos del CLI. Resuélvelos así:
|
|
20
|
+
> si existe `./scripts/cli/<sub>.js` (repo madre) usa `node scripts/cli/<sub>.js`;
|
|
21
|
+
> si `command -v swl-ses` responde usa `swl-ses <sub>`; si no,
|
|
22
|
+
> `npx -y @saulwade/swl-ses@latest <sub>`. Abajo escribo la forma `swl-ses <sub>`
|
|
23
|
+
> como canónica. NUNCA uses `node -e "require('./scripts/lib/...')"` — esa ruta no
|
|
24
|
+
> existe en proyectos downstream.
|
|
25
|
+
|
|
26
|
+
## Uso
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
/swl:aprobar-plan 9
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
El argumento `<n>` es el número de la fase cuyo PLAN se aprueba.
|
|
33
|
+
|
|
34
|
+
## Paso 1 — Localizar el PLAN
|
|
35
|
+
|
|
36
|
+
Resuelve la ruta `.planning/fases/0N-PLAN.md` (N con cero a la izquierda si N < 10).
|
|
37
|
+
|
|
38
|
+
- Si no existe: detente con "No existe el PLAN de la fase N. Ejecuta `/swl:planear-fase N` primero."
|
|
39
|
+
- Lee el archivo completo.
|
|
40
|
+
|
|
41
|
+
## Paso 2 — Validar el estado actual del frontmatter
|
|
42
|
+
|
|
43
|
+
Lee el campo `estado:` del frontmatter:
|
|
44
|
+
|
|
45
|
+
- Si `estado: borrador` → continúa al Paso 3 (caso normal).
|
|
46
|
+
- Si `estado: aprobado` → ya está aprobado. Verifica si existe el lock:
|
|
47
|
+
```bash
|
|
48
|
+
swl-ses verificar-plan --fase=N
|
|
49
|
+
```
|
|
50
|
+
- Si `modo: "firmado"` → informa "El plan ya está aprobado y firmado." y termina.
|
|
51
|
+
- Si `modo: "legacy"` (aprobado sin lock) → pregunta al usuario: "El plan está
|
|
52
|
+
aprobado pero sin firmar (modo legacy). ¿Lo firmo ahora para activar el gate
|
|
53
|
+
G1?" Si confirma, salta al Paso 4 (firmar sin re-transicionar).
|
|
54
|
+
- Si `modo: "mutado"` → el plan cambió tras una firma previa. Informa el
|
|
55
|
+
`hashEsperado` vs `hashActual` y pregunta si re-aprobar (re-firmar el estado
|
|
56
|
+
actual). Procede solo con confirmación explícita.
|
|
57
|
+
- Si no hay campo `estado` → detente: "El PLAN no tiene campo `estado` en el
|
|
58
|
+
frontmatter. Revisa que sea un plan válido generado por `/swl:planear-fase`."
|
|
59
|
+
|
|
60
|
+
## Paso 2.5 — Validar la matriz REQ×T (trazabilidad G4)
|
|
61
|
+
|
|
62
|
+
Lee `.planning/fases/0N-CONTEXTO.md` y extrae los IDs `REQ-NN:` (fases 01-11) o
|
|
63
|
+
`REQ-<fase>-NN:` (namespaceados, fases ≥12) de la sección de criterios de
|
|
64
|
+
aceptación. `verificar-trazabilidad.js` reconoce ambos formatos.
|
|
65
|
+
|
|
66
|
+
- **CONTEXTO sin REQ-IDs** (fases legacy 01-09): advertencia informativa
|
|
67
|
+
("CONTEXTO sin REQ-IDs — trazabilidad no exigible, gracia legacy") y continúa.
|
|
68
|
+
- **CONTEXTO con REQ-IDs**: verifica que el PLAN cubra TODOS:
|
|
69
|
+
```bash
|
|
70
|
+
swl-ses verificar-trazabilidad --fase=N --solo-plan
|
|
71
|
+
```
|
|
72
|
+
- Exit 0 → continúa al Paso 3.
|
|
73
|
+
- Exit 1 (REQ huérfanos) → **RECHAZA la aprobación**. Lista los REQ sin tarea y
|
|
74
|
+
remite a `/swl:planear-fase N` para cubrirlos (o a retirar el REQ del CONTEXTO
|
|
75
|
+
con marca "RETIRADO — razón"). NO firmes un plan con REQ huérfanos.
|
|
76
|
+
- **WARN "headers de tarea malformados"** (warn-only, no cambia el exit): si el
|
|
77
|
+
reporte lista headers como `#### T-01 — ...`, son la **causa silenciosa** de
|
|
78
|
+
REQ huérfanos. El parser de la matriz exige `### T-NN:` (2-4 `#`, dos puntos
|
|
79
|
+
tras el ID; nunca em-dash). Corrige el separador en el PLAN y re-ejecuta antes
|
|
80
|
+
de aprobar — un header con `—` deja la tarea invisible aunque declare su REQ.
|
|
81
|
+
|
|
82
|
+
## Paso 3 — Confirmar con el usuario antes de aprobar
|
|
83
|
+
|
|
84
|
+
NUNCA apruebes sin confirmación explícita. Presenta un resumen breve del plan
|
|
85
|
+
(número de slices, tareas, slices HITL) y pregunta:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
El plan de la fase N tiene [X] slices y [Y] tareas ([Z] HITL).
|
|
89
|
+
¿Confirmas la aprobación? Al aprobar se firma con SHA256 y queda inmutable:
|
|
90
|
+
cualquier edición posterior detendrá /swl:ejecutar-fase.
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Espera respuesta afirmativa. Si el usuario pide cambios, NO apruebes — remítelo
|
|
94
|
+
a `/swl:planear-fase N` para refinar.
|
|
95
|
+
|
|
96
|
+
## Paso 4 — Transicionar y firmar
|
|
97
|
+
|
|
98
|
+
1. **Transicionar** (omitir si el plan ya estaba `aprobado` en modo legacy):
|
|
99
|
+
edita el frontmatter `estado: borrador` → `estado: aprobado` y agrega
|
|
100
|
+
`aprobadoPor: usuario (<nombre>) — <fecha>, via /swl:aprobar-plan`.
|
|
101
|
+
|
|
102
|
+
2. **Firmar y marcar la fase activa** — un solo subcomando hace las tres
|
|
103
|
+
operaciones deterministas: firma SHA256 → `.planning/locks/0N-PLAN.md.lock`,
|
|
104
|
+
verifica la firma, y escribe `.planning/locks/fase-activa.json` (gate G0 que
|
|
105
|
+
consume `hooks/spec-gate.js`):
|
|
106
|
+
```bash
|
|
107
|
+
swl-ses aprobar-plan --fase=N
|
|
108
|
+
```
|
|
109
|
+
Verifica en la salida JSON que `ok: true` y `modo: "firmado"`. Si reporta
|
|
110
|
+
error de firma, **NO continúes** — revisa el `motivo`.
|
|
111
|
+
|
|
112
|
+
El `.lock` SÍ se versiona en git (evidencia de aprobación, parte del audit
|
|
113
|
+
trail SDD). El `fase-activa.json` es runtime local (gitignored);
|
|
114
|
+
`/swl:ejecutar-fase` lo elimina al cerrar la fase. Re-ejecutar
|
|
115
|
+
`swl-ses aprobar-plan --fase=N` tras una re-aprobación (plan mutado) realinea
|
|
116
|
+
lock y fase-activa automáticamente.
|
|
117
|
+
|
|
118
|
+
## Paso 5 — Reporte
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
Plan de la fase N aprobado y firmado (gate G1 activo).
|
|
122
|
+
|
|
123
|
+
estado: borrador -> aprobado
|
|
124
|
+
lock: .planning/locks/0N-PLAN.md.lock
|
|
125
|
+
fase activa: .planning/locks/fase-activa.json (gate G0 cubierto)
|
|
126
|
+
sha256: <hash corto>
|
|
127
|
+
|
|
128
|
+
Cualquier edición del PLAN tras esta firma detendrá /swl:ejecutar-fase con un
|
|
129
|
+
mensaje de "plan mutado tras aprobación". Para cambiar el plan: edítalo y vuelve
|
|
130
|
+
a ejecutar /swl:aprobar-plan N.
|
|
131
|
+
|
|
132
|
+
Próximo paso: /swl:ejecutar-fase N
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Reglas de comportamiento
|
|
136
|
+
|
|
137
|
+
- NUNCA apruebes un plan sin confirmación explícita del usuario.
|
|
138
|
+
- NUNCA modifiques el contenido del plan al aprobarlo — solo el campo `estado`
|
|
139
|
+
del frontmatter y la línea `aprobadoPor`. El cuerpo es lo que se firma.
|
|
140
|
+
- El lock vive en `.planning/locks/` y SÍ se versiona en git (es evidencia de
|
|
141
|
+
aprobación, parte del audit trail de SDD).
|
|
142
|
+
- Si el usuario quiere cambiar el plan después de aprobado, el flujo correcto es
|
|
143
|
+
editar el PLAN y re-ejecutar `/swl:aprobar-plan N` (re-firma). NUNCA editar el
|
|
144
|
+
lock a mano.
|
|
145
|
+
- El número de versión del release que publique esta fase lo decide el usuario
|
|
146
|
+
(regla CLAUDE.md) — este comando no toca versiones.
|
package/comandos/swl/briefing.md
CHANGED
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:briefing
|
|
3
|
-
description: Briefing proactivo del proyecto bajo demanda. Re-presenta las señales baratas del hook SessionStart (ADRs Propuestos con reevaluación vencida, deuda con trigger por fecha cumplido, nudges sin accionar, gates en calibración, retoma pendiente) y agrega el análisis profundo opt-in que el hook no puede pagar: audit de dependencias del proyecto destino, cobertura vs umbral, hubs del grafo tocados sin revisión, drift de feature-list, y triggers de deuda en prosa libre. Cargar cuando el usuario pide "¿qué hay pendiente?", "¿qué riesgos hay?", "ponme al día", o cuando el digest de sesión sugiere el análisis completo por volumen de señales.
|
|
4
|
-
allowed_tools: ["Read", "Bash", "Glob", "Grep"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:briefing — Briefing proactivo bajo demanda
|
|
8
|
-
|
|
9
|
-
Análisis no solicitado del estado del proyecto destino (Fase 12, ADR-0036). El
|
|
10
|
-
hook `session-briefing.js` da el digest barato al abrir sesión; este comando es
|
|
11
|
-
el nivel profundo: re-presenta esas señales Y agrega las que cuestan (deps, grafo,
|
|
12
|
-
cobertura) con degradación funcional si la herramienta no está instalada.
|
|
13
|
-
|
|
14
|
-
Principio rector: **proponer es barato y siempre permitido; actuar requiere
|
|
15
|
-
autorización del usuario**. Este comando solo propone y analiza — nunca aplica
|
|
16
|
-
cambios sin que el usuario los pida.
|
|
17
|
-
|
|
18
|
-
## Uso
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
/swl:briefing # señales baratas + análisis profundo completo
|
|
22
|
-
/swl:briefing rapido # solo las 5 señales del hook (sin deps/grafo/cobertura)
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Paso 1 — Señales baratas (mismas del hook)
|
|
26
|
-
|
|
27
|
-
Ejecuta los recolectores de filesystem y presenta el digest sin tope de 5 (aquí
|
|
28
|
-
sí caben todas, no hay presupuesto de latencia de arranque):
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
# Subcomando del CLI (resuelve cross-scope; ver docs/invocacion-cli-cross-scope.md)
|
|
32
|
-
swl-ses briefing
|
|
33
|
-
# fallback: npx -y @saulwade/swl-ses@latest briefing
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Las 5 categorías: `adr-vencido`, `deuda-trigger`, `nudges-pendientes`,
|
|
37
|
-
`gate-calibracion`, `continue-here`. Si `rapido`, terminar aquí.
|
|
38
|
-
|
|
39
|
-
## Paso 2 — Análisis profundo (opt-in, con degradación)
|
|
40
|
-
|
|
41
|
-
Para cada herramienta, **validar antes de invocar** (patrón "validar antes de
|
|
42
|
-
invocar"): si no está disponible, reportar "no disponible, omitido" y continuar —
|
|
43
|
-
nunca fallar el briefing por una herramienta ausente.
|
|
44
|
-
|
|
45
|
-
### 2.1 — Audit de dependencias del proyecto destino
|
|
46
|
-
|
|
47
|
-
Detectar el ecosistema y correr el audit nativo:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# Node
|
|
51
|
-
[ -f package.json ] && npm audit --omit=dev 2>/dev/null | tail -5
|
|
52
|
-
# Python
|
|
53
|
-
[ -f requirements.txt -o -f pyproject.toml ] && (command -v pip-audit >/dev/null && pip-audit 2>/dev/null | tail -5 || echo "pip-audit no instalado — omitido")
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Reportar CVEs HIGH/CRITICAL con la acción concreta (`npm audit fix`, bump de
|
|
57
|
-
versión). Sin lockfile o sin gestor → omitir.
|
|
58
|
-
|
|
59
|
-
### 2.2 — Cobertura vs umbral
|
|
60
|
-
|
|
61
|
-
Si el proyecto define cobertura, comparar contra el umbral del proyecto (80% por
|
|
62
|
-
defecto). Si no hay reporte reciente, indicar el comando para generarlo en vez de
|
|
63
|
-
correrlo (puede ser caro):
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
Para medir cobertura: <runner del proyecto> --coverage
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### 2.3 — Hubs del grafo tocados sin revisión
|
|
70
|
-
|
|
71
|
-
Si el MCP `code-review-graph` está disponible (tools `mcp__code-review-graph__*`
|
|
72
|
-
registradas o deferred), consultar los nodos hub modificados en los últimos N
|
|
73
|
-
commits sin revisión asociada. Si no está disponible → omitir con nota.
|
|
74
|
-
|
|
75
|
-
### 2.4 — Drift de feature-list
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
swl-ses derivar-feature-list --check 2>/dev/null; echo "exit: $?"
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Exit 2 → reportar que `HOJA-RUTA.md` y `feature-list.json` divergieron, con la
|
|
82
|
-
acción `swl-ses derivar-feature-list` para regenerar.
|
|
83
|
-
|
|
84
|
-
### 2.5 — Deuda con trigger en prosa libre
|
|
85
|
-
|
|
86
|
-
El hook solo evalúa triggers verificables por fecha (D-16). Aquí, leer
|
|
87
|
-
`.planning/DEUDA-TECNICA.md` y evaluar con criterio los triggers en prosa
|
|
88
|
-
("≥2 clientes reportan", "p95 > 60s documentado") contra el estado real del
|
|
89
|
-
proyecto. Reportar los que parezcan cumplidos para revisión del usuario.
|
|
90
|
-
|
|
91
|
-
## Paso 3 — Presentación y telemetría
|
|
92
|
-
|
|
93
|
-
Presenta el briefing agrupado por prioridad (continue-here → gates → deuda →
|
|
94
|
-
ADRs → nudges → hallazgos profundos). Cada ítem con su acción ejecutable.
|
|
95
|
-
|
|
96
|
-
Tras presentar, el usuario decide qué accionar. NO ejecutar acciones de mutación
|
|
97
|
-
(cerrar deuda, promover gates, aplicar fixes) sin que el usuario lo pida — este
|
|
98
|
-
comando es propositivo (separación PROPONER/ACTUAR, ADR-0037 pendiente).
|
|
99
|
-
|
|
100
|
-
Si el usuario acciona una señal en esta sesión (ejecuta el comando sugerido), esa
|
|
101
|
-
resolución la captura la telemetría de aceptación del hook en la siguiente sesión
|
|
102
|
-
(la señal desaparece del recolector → cuenta como "actuada", D-18).
|
|
103
|
-
|
|
104
|
-
## Cuándo NO usar este comando
|
|
105
|
-
|
|
106
|
-
- En cada turno de una sesión: el briefing es por sesión, no por mensaje. El hook
|
|
107
|
-
ya cubre el inicio; este comando es para cuando el usuario pide el detalle.
|
|
108
|
-
- Para aplicar las acciones propuestas: este comando propone, no ejecuta. Usar el
|
|
109
|
-
comando concreto de cada señal (`/swl:evolucion-estado`, `/swl:verificar`, etc.).
|
|
110
|
-
- En proyectos sin `.planning/`: no hay señales que recolectar.
|
|
111
|
-
|
|
112
|
-
## Gotchas
|
|
113
|
-
|
|
114
|
-
- **Herramienta ausente ≠ error**: si `npm audit`, `pip-audit` o el grafo no están,
|
|
115
|
-
el briefing los omite con nota y sigue. Nunca abortar por una dependencia opt-in.
|
|
116
|
-
- **No re-listar lo que el hook ya mostró hoy**: el hook aplica dedupe diario; este
|
|
117
|
-
comando ignora el dedupe a propósito (lo invoca el usuario, quiere ver todo).
|
|
118
|
-
- **`code-review-graph` deferred ≠ ausente**: si las tools aparecen como deferred,
|
|
119
|
-
cargar su schema con `ToolSearch` antes de concluir que no está disponible.
|
|
1
|
+
---
|
|
2
|
+
name: swl:briefing
|
|
3
|
+
description: Briefing proactivo del proyecto bajo demanda. Re-presenta las señales baratas del hook SessionStart (ADRs Propuestos con reevaluación vencida, deuda con trigger por fecha cumplido, nudges sin accionar, gates en calibración, retoma pendiente) y agrega el análisis profundo opt-in que el hook no puede pagar: audit de dependencias del proyecto destino, cobertura vs umbral, hubs del grafo tocados sin revisión, drift de feature-list, y triggers de deuda en prosa libre. Cargar cuando el usuario pide "¿qué hay pendiente?", "¿qué riesgos hay?", "ponme al día", o cuando el digest de sesión sugiere el análisis completo por volumen de señales.
|
|
4
|
+
allowed_tools: ["Read", "Bash", "Glob", "Grep"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:briefing — Briefing proactivo bajo demanda
|
|
8
|
+
|
|
9
|
+
Análisis no solicitado del estado del proyecto destino (Fase 12, ADR-0036). El
|
|
10
|
+
hook `session-briefing.js` da el digest barato al abrir sesión; este comando es
|
|
11
|
+
el nivel profundo: re-presenta esas señales Y agrega las que cuestan (deps, grafo,
|
|
12
|
+
cobertura) con degradación funcional si la herramienta no está instalada.
|
|
13
|
+
|
|
14
|
+
Principio rector: **proponer es barato y siempre permitido; actuar requiere
|
|
15
|
+
autorización del usuario**. Este comando solo propone y analiza — nunca aplica
|
|
16
|
+
cambios sin que el usuario los pida.
|
|
17
|
+
|
|
18
|
+
## Uso
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/swl:briefing # señales baratas + análisis profundo completo
|
|
22
|
+
/swl:briefing rapido # solo las 5 señales del hook (sin deps/grafo/cobertura)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Paso 1 — Señales baratas (mismas del hook)
|
|
26
|
+
|
|
27
|
+
Ejecuta los recolectores de filesystem y presenta el digest sin tope de 5 (aquí
|
|
28
|
+
sí caben todas, no hay presupuesto de latencia de arranque):
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Subcomando del CLI (resuelve cross-scope; ver docs/invocacion-cli-cross-scope.md)
|
|
32
|
+
swl-ses briefing
|
|
33
|
+
# fallback: npx -y @saulwade/swl-ses@latest briefing
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Las 5 categorías: `adr-vencido`, `deuda-trigger`, `nudges-pendientes`,
|
|
37
|
+
`gate-calibracion`, `continue-here`. Si `rapido`, terminar aquí.
|
|
38
|
+
|
|
39
|
+
## Paso 2 — Análisis profundo (opt-in, con degradación)
|
|
40
|
+
|
|
41
|
+
Para cada herramienta, **validar antes de invocar** (patrón "validar antes de
|
|
42
|
+
invocar"): si no está disponible, reportar "no disponible, omitido" y continuar —
|
|
43
|
+
nunca fallar el briefing por una herramienta ausente.
|
|
44
|
+
|
|
45
|
+
### 2.1 — Audit de dependencias del proyecto destino
|
|
46
|
+
|
|
47
|
+
Detectar el ecosistema y correr el audit nativo:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Node
|
|
51
|
+
[ -f package.json ] && npm audit --omit=dev 2>/dev/null | tail -5
|
|
52
|
+
# Python
|
|
53
|
+
[ -f requirements.txt -o -f pyproject.toml ] && (command -v pip-audit >/dev/null && pip-audit 2>/dev/null | tail -5 || echo "pip-audit no instalado — omitido")
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Reportar CVEs HIGH/CRITICAL con la acción concreta (`npm audit fix`, bump de
|
|
57
|
+
versión). Sin lockfile o sin gestor → omitir.
|
|
58
|
+
|
|
59
|
+
### 2.2 — Cobertura vs umbral
|
|
60
|
+
|
|
61
|
+
Si el proyecto define cobertura, comparar contra el umbral del proyecto (80% por
|
|
62
|
+
defecto). Si no hay reporte reciente, indicar el comando para generarlo en vez de
|
|
63
|
+
correrlo (puede ser caro):
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Para medir cobertura: <runner del proyecto> --coverage
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 2.3 — Hubs del grafo tocados sin revisión
|
|
70
|
+
|
|
71
|
+
Si el MCP `code-review-graph` está disponible (tools `mcp__code-review-graph__*`
|
|
72
|
+
registradas o deferred), consultar los nodos hub modificados en los últimos N
|
|
73
|
+
commits sin revisión asociada. Si no está disponible → omitir con nota.
|
|
74
|
+
|
|
75
|
+
### 2.4 — Drift de feature-list
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
swl-ses derivar-feature-list --check 2>/dev/null; echo "exit: $?"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Exit 2 → reportar que `HOJA-RUTA.md` y `feature-list.json` divergieron, con la
|
|
82
|
+
acción `swl-ses derivar-feature-list` para regenerar.
|
|
83
|
+
|
|
84
|
+
### 2.5 — Deuda con trigger en prosa libre
|
|
85
|
+
|
|
86
|
+
El hook solo evalúa triggers verificables por fecha (D-16). Aquí, leer
|
|
87
|
+
`.planning/DEUDA-TECNICA.md` y evaluar con criterio los triggers en prosa
|
|
88
|
+
("≥2 clientes reportan", "p95 > 60s documentado") contra el estado real del
|
|
89
|
+
proyecto. Reportar los que parezcan cumplidos para revisión del usuario.
|
|
90
|
+
|
|
91
|
+
## Paso 3 — Presentación y telemetría
|
|
92
|
+
|
|
93
|
+
Presenta el briefing agrupado por prioridad (continue-here → gates → deuda →
|
|
94
|
+
ADRs → nudges → hallazgos profundos). Cada ítem con su acción ejecutable.
|
|
95
|
+
|
|
96
|
+
Tras presentar, el usuario decide qué accionar. NO ejecutar acciones de mutación
|
|
97
|
+
(cerrar deuda, promover gates, aplicar fixes) sin que el usuario lo pida — este
|
|
98
|
+
comando es propositivo (separación PROPONER/ACTUAR, ADR-0037 pendiente).
|
|
99
|
+
|
|
100
|
+
Si el usuario acciona una señal en esta sesión (ejecuta el comando sugerido), esa
|
|
101
|
+
resolución la captura la telemetría de aceptación del hook en la siguiente sesión
|
|
102
|
+
(la señal desaparece del recolector → cuenta como "actuada", D-18).
|
|
103
|
+
|
|
104
|
+
## Cuándo NO usar este comando
|
|
105
|
+
|
|
106
|
+
- En cada turno de una sesión: el briefing es por sesión, no por mensaje. El hook
|
|
107
|
+
ya cubre el inicio; este comando es para cuando el usuario pide el detalle.
|
|
108
|
+
- Para aplicar las acciones propuestas: este comando propone, no ejecuta. Usar el
|
|
109
|
+
comando concreto de cada señal (`/swl:evolucion-estado`, `/swl:verificar`, etc.).
|
|
110
|
+
- En proyectos sin `.planning/`: no hay señales que recolectar.
|
|
111
|
+
|
|
112
|
+
## Gotchas
|
|
113
|
+
|
|
114
|
+
- **Herramienta ausente ≠ error**: si `npm audit`, `pip-audit` o el grafo no están,
|
|
115
|
+
el briefing los omite con nota y sigue. Nunca abortar por una dependencia opt-in.
|
|
116
|
+
- **No re-listar lo que el hook ya mostró hoy**: el hook aplica dedupe diario; este
|
|
117
|
+
comando ignora el dedupe a propósito (lo invoca el usuario, quiere ver todo).
|
|
118
|
+
- **`code-review-graph` deferred ≠ ausente**: si las tools aparecen como deferred,
|
|
119
|
+
cargar su schema con `ToolSearch` antes de concluir que no está disponible.
|