@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.
Files changed (325) hide show
  1. package/CLAUDE.md +48 -7
  2. package/README.md +3 -3
  3. package/agentes/accesibilidad-wcag-swl.md +690 -690
  4. package/agentes/arquitecto-swl.md +267 -267
  5. package/agentes/auto-evolucion-swl.md +908 -908
  6. package/agentes/backend-api-swl.md +472 -472
  7. package/agentes/backend-csharp-swl.md +420 -420
  8. package/agentes/backend-go-swl.md +390 -390
  9. package/agentes/backend-java-swl.md +281 -281
  10. package/agentes/backend-node-swl.md +479 -479
  11. package/agentes/backend-python-swl.md +605 -605
  12. package/agentes/backend-rust-swl.md +364 -364
  13. package/agentes/backend-workers-swl.md +482 -482
  14. package/agentes/cloud-infra-swl.md +509 -509
  15. package/agentes/consolidador-swl.md +541 -541
  16. package/agentes/datos-swl.md +605 -605
  17. package/agentes/depurador-swl.md +352 -352
  18. package/agentes/devops-ci-swl.md +400 -400
  19. package/agentes/disenador-ui-swl.md +569 -569
  20. package/agentes/documentador-swl.md +345 -345
  21. package/agentes/frontend-angular-swl.md +621 -621
  22. package/agentes/frontend-css-swl.md +716 -716
  23. package/agentes/frontend-react-swl.md +692 -692
  24. package/agentes/frontend-swl.md +496 -496
  25. package/agentes/frontend-tailwind-swl.md +826 -826
  26. package/agentes/gh-fix-ci-swl.md +2 -2
  27. package/agentes/implementador-swl.md +328 -328
  28. package/agentes/investigador-swl.md +432 -432
  29. package/agentes/investigador-ux-swl.md +505 -505
  30. package/agentes/llm-apps-swl.md +278 -278
  31. package/agentes/migrador-swl.md +442 -442
  32. package/agentes/mobile-android-swl.md +511 -511
  33. package/agentes/mobile-cross-swl.md +541 -541
  34. package/agentes/mobile-ios-swl.md +502 -502
  35. package/agentes/mobile-testing-swl.md +302 -302
  36. package/agentes/nemesis-auditor-swl.md +285 -285
  37. package/agentes/notificador-swl.md +918 -918
  38. package/agentes/observabilidad-swl.md +438 -438
  39. package/agentes/orquestador-swl.md +1026 -1026
  40. package/agentes/pagos-swl.md +310 -310
  41. package/agentes/perfilador-usuario-swl.md +321 -321
  42. package/agentes/planificador-swl.md +399 -399
  43. package/agentes/producto-prd-swl.md +589 -589
  44. package/agentes/red-team-swl.md +1 -1
  45. package/agentes/release-manager-swl.md +590 -590
  46. package/agentes/rendimiento-swl.md +713 -713
  47. package/agentes/resolutor-build-swl.md +245 -245
  48. package/agentes/revisor-angular-swl.md +278 -278
  49. package/agentes/revisor-codigo-swl.md +505 -505
  50. package/agentes/revisor-csharp-swl.md +264 -264
  51. package/agentes/revisor-go-swl.md +259 -259
  52. package/agentes/revisor-java-swl.md +257 -257
  53. package/agentes/revisor-kotlin-swl.md +273 -273
  54. package/agentes/revisor-nextjs-swl.md +281 -281
  55. package/agentes/revisor-php-swl.md +271 -271
  56. package/agentes/revisor-react-swl.md +278 -278
  57. package/agentes/revisor-rust-swl.md +346 -346
  58. package/agentes/revisor-seguridad-swl.md +399 -399
  59. package/agentes/revisor-swift-swl.md +268 -268
  60. package/agentes/revisor-typescript-swl.md +346 -346
  61. package/agentes/sre-swl.md +291 -291
  62. package/agentes/tdd-qa-swl.md +393 -393
  63. package/comandos/swl/aprobar-plan.md +146 -141
  64. package/comandos/swl/briefing.md +119 -119
  65. package/comandos/swl/contribuir.md +233 -233
  66. package/comandos/swl/predecir.md +139 -139
  67. package/comandos/swl/release.md +30 -8
  68. package/comandos/swl/sesiones.md +1 -1
  69. package/comandos/swl/status.md +343 -333
  70. package/gateway/agent-executor.js +1 -1
  71. package/gateway/lib/event-channel.js +191 -191
  72. package/habilidades/agent-deep-links/SKILL.md +148 -148
  73. package/habilidades/agentes-como-servicio/SKILL.md +2 -2
  74. package/habilidades/angular-moderno/SKILL.md +20 -1
  75. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
  76. package/habilidades/backend-async-postgres-testing/SKILL.md +215 -215
  77. package/habilidades/backend-error-design/SKILL.md +221 -221
  78. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  79. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  80. package/habilidades/calidad-anti-patrones-universales/SKILL.md +368 -368
  81. package/habilidades/calidad-contract-testing/SKILL.md +165 -165
  82. package/habilidades/calidad-mutation-testing/SKILL.md +170 -170
  83. package/habilidades/changelog-generator/scripts/parse-commits.js +367 -367
  84. package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
  85. package/habilidades/contenedores-docker/SKILL.md +3 -1
  86. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  87. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  88. package/habilidades/drift-detection/SKILL.md +179 -179
  89. package/habilidades/ejecutar-fase/SKILL.md +564 -541
  90. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  91. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +1 -1
  92. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
  93. package/habilidades/eval-framework/SKILL.md +212 -212
  94. package/habilidades/extractor-de-aprendizajes/SKILL.md +3 -3
  95. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  96. package/habilidades/harness-claude-code/recursos/disciplina-harness-regla.md +252 -252
  97. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  98. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  99. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  100. package/habilidades/perfil-usuario/SKILL.md +200 -200
  101. package/habilidades/planear-fase/SKILL.md +15 -1
  102. package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
  103. package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -255
  104. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
  105. package/habilidades/proceso-debate-adversarial/SKILL.md +191 -164
  106. package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -105
  107. package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
  108. package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -138
  109. package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
  110. package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
  111. package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
  112. package/habilidades/proceso-modular-split/SKILL.md +256 -256
  113. package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +2 -2
  114. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  115. package/habilidades/structured-outputs/SKILL.md +2 -2
  116. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
  117. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
  118. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
  119. package/habilidades/swl-dashboard/SKILL.md +2 -2
  120. package/habilidades/tdd-workflow/SKILL.md +33 -1
  121. package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
  122. package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +1 -1
  123. package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +1 -1
  124. package/hooks/captura-acciones-post.js +151 -0
  125. package/hooks/captura-acciones-session.js +155 -0
  126. package/hooks/ciclo-evolucion-subagente.js +26 -26
  127. package/hooks/ciclo-evolucion.js +26 -26
  128. package/hooks/claudemd-bloat-detector.js +161 -161
  129. package/hooks/claudemd-duplicacion-detector.js +170 -170
  130. package/hooks/contexto-iteracion.js +144 -144
  131. package/hooks/guardrail-modelo.js +1 -1
  132. package/hooks/lib/agent-routing.js +107 -107
  133. package/hooks/lib/auto-consolidator.js +335 -335
  134. package/hooks/lib/autonomia.js +208 -208
  135. package/hooks/lib/briefing.js +512 -474
  136. package/hooks/lib/captura-acciones.js +392 -0
  137. package/hooks/lib/ciclo-evolucion.js +47 -47
  138. package/hooks/lib/deep-links.js +185 -185
  139. package/hooks/lib/error-classifier.js +308 -308
  140. package/hooks/lib/etapa-auto-evolucion.js +701 -701
  141. package/hooks/lib/etapa-metricas.js +388 -388
  142. package/hooks/lib/etapa-perfil-usuario.js +376 -376
  143. package/hooks/lib/loop-telemetry.js +321 -321
  144. package/hooks/lib/merkle-audit.js +96 -96
  145. package/hooks/lib/model-router.js +2 -2
  146. package/hooks/lib/propose-step.js +358 -358
  147. package/hooks/lib/provenance-tracker.js +191 -191
  148. package/hooks/lib/rate-limit-tracker.js +253 -253
  149. package/hooks/lib/resource-quota.js +122 -122
  150. package/hooks/lib/retry-jitter.js +165 -165
  151. package/hooks/lib/security-net.js +201 -201
  152. package/hooks/lib/skill-auditor.js +588 -588
  153. package/hooks/lib/sync-status.js +228 -228
  154. package/hooks/lib/taint-tracker.js +107 -107
  155. package/hooks/lib/text-similarity.js +241 -241
  156. package/hooks/lib/token-estimator.js +1 -0
  157. package/hooks/lib/toon-compressor.js +245 -245
  158. package/hooks/lib/usage-model.js +1 -1
  159. package/hooks/linea-estado.js +2 -0
  160. package/hooks/registro-turnos.js +209 -209
  161. package/hooks/session-briefing.js +98 -98
  162. package/hooks/spec-gate.js +211 -211
  163. package/hooks/sugerir-regenerar-inventario.js +170 -170
  164. package/hooks/tdd-gate.js +241 -241
  165. package/hooks/telemetria-skill-routing.js +100 -100
  166. package/hooks/validar-formato-post-subagente.js +140 -140
  167. package/hooks/validar-intent-spec.js +242 -242
  168. package/hooks/validar-memoria-hook.js +218 -218
  169. package/hooks/validar-planning-paths.js +134 -134
  170. package/instintos/autonomia.yaml +27 -27
  171. package/instintos/prompt-appendices.yaml +57 -57
  172. package/llms.txt +2 -2
  173. package/manifiestos/agent-output-schemas.json +57 -57
  174. package/manifiestos/canonical-hashes.json +2291 -1637
  175. package/manifiestos/hooks-config.json +18 -0
  176. package/manifiestos/modulos.json +4 -0
  177. package/manifiestos/planning-paths.json +44 -44
  178. package/manifiestos/skills-lock.json +1282 -1282
  179. package/package.json +2 -2
  180. package/plantillas/auditor-veto-template.md +105 -105
  181. package/plantillas/github-workflows/README.md +47 -47
  182. package/plantillas/github-workflows/release-please.yml +44 -44
  183. package/plantillas/github-workflows/swl-ci.yml +107 -107
  184. package/plantillas/github-workflows/swl-security.yml +51 -51
  185. package/plugin.json +2 -2
  186. package/reglas/accesibilidad.md +10 -10
  187. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  188. package/reglas/api-diseno.md +9 -9
  189. package/reglas/arreglar-al-detectar.md +240 -240
  190. package/reglas/auditorias-documentales-estructurales.md +7 -7
  191. package/reglas/cloud-infra.md +8 -8
  192. package/reglas/consultar-vault-primero.md +195 -195
  193. package/reglas/debatir-antes-de-aceptar.md +158 -158
  194. package/reglas/fragmentos-compartidos.md +183 -183
  195. package/reglas/hooks.md +6 -6
  196. package/reglas/intent-engineering.md +218 -218
  197. package/reglas/markitdown.md +8 -8
  198. package/reglas/memoria-consolidada.md +41 -0
  199. package/reglas/monitor-ci.md +309 -309
  200. package/reglas/patrones.md +6 -6
  201. package/reglas/seguridad-agentes.md +66 -0
  202. package/reglas/sesiones-paralelas.md +180 -180
  203. package/reglas/sin-duplicacion-reglas-globales.md +182 -182
  204. package/reglas/skills-estandar.md +6 -6
  205. package/reglas/testing.md +7 -7
  206. package/reglas/tests-cleanup.md +224 -224
  207. package/reglas/usar-code-review-graph.md +155 -155
  208. package/reglas/usar-context7.md +226 -226
  209. package/reglas/verificar-citas-normativas.md +548 -548
  210. package/schemas/agent-frontmatter.schema.json +3 -3
  211. package/schemas/agent-message.schema.json +73 -73
  212. package/schemas/agent-output-implementacion.schema.json +114 -114
  213. package/schemas/agent-output-planificacion.schema.json +150 -150
  214. package/schemas/agent-output-review.schema.json +98 -98
  215. package/schemas/diary-entry.schema.json +112 -112
  216. package/schemas/hook-profiles.schema.json +54 -54
  217. package/schemas/hooks-config.schema.json +89 -89
  218. package/schemas/instinct.schema.json +161 -152
  219. package/schemas/modulos.schema.json +38 -38
  220. package/schemas/perfiles.schema.json +36 -36
  221. package/schemas/plugin.schema.json +77 -77
  222. package/schemas/skill-evals.schema.json +119 -119
  223. package/schemas/skill-frontmatter.schema.json +245 -245
  224. package/scripts/audit-tools/audit-history.js +330 -330
  225. package/scripts/audit-tools/bundle-tracker.js +290 -290
  226. package/scripts/audit-tools/canary-monitor.js +352 -352
  227. package/scripts/audit-tools/code-profiler.js +605 -605
  228. package/scripts/audit-tools/dep-doctor.js +320 -320
  229. package/scripts/audit-tools/env-validator.js +206 -206
  230. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  231. package/scripts/audit-tools/lib/output.js +23 -23
  232. package/scripts/audit-tools/migration-checker.js +392 -392
  233. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  234. package/scripts/benchmark-memoria.js +167 -167
  235. package/scripts/bootstrap-instintos.js +25 -7
  236. package/scripts/cli/aprobar-plan.js +73 -73
  237. package/scripts/cli/briefing.js +23 -23
  238. package/scripts/cli/ciclo-evolucion.js +26 -26
  239. package/scripts/cli/configurar-ci.js +40 -40
  240. package/scripts/cli/derivar-feature-list.js +25 -25
  241. package/scripts/cli/detectar-host.js +27 -27
  242. package/scripts/cli/diary-entry.js +69 -69
  243. package/scripts/cli/execution-state.js +18 -18
  244. package/scripts/cli/gateway-notify.js +41 -41
  245. package/scripts/cli/liberar-fase.js +42 -42
  246. package/scripts/cli/loop-telemetry.js +125 -125
  247. package/scripts/cli/mark-evolved.js +56 -56
  248. package/scripts/cli/metricas-dora.js +26 -26
  249. package/scripts/cli/near-duplicate.js +55 -55
  250. package/scripts/cli/notificaciones.js +123 -123
  251. package/scripts/cli/propose-step.js +29 -29
  252. package/scripts/cli/schedule-parse.js +19 -19
  253. package/scripts/cli/sugerir-modelo.js +20 -20
  254. package/scripts/cli/verificar-plan.js +36 -36
  255. package/scripts/cli/verificar-trazabilidad.js +35 -35
  256. package/scripts/configurar-branch-protection.js +418 -418
  257. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  258. package/scripts/field-report.js +199 -199
  259. package/scripts/generar-checklists-consolidados.js +273 -273
  260. package/scripts/generar-matriz-lenguajes.js +271 -271
  261. package/scripts/lib/artefactos-python.js +43 -43
  262. package/scripts/lib/auditar-invocaciones-comandos.js +104 -104
  263. package/scripts/lib/benchmark-metrics.js +160 -160
  264. package/scripts/lib/budget-enforcer.js +252 -252
  265. package/scripts/lib/ci-reader.js +193 -193
  266. package/scripts/lib/claude-sessions.js +1 -0
  267. package/scripts/lib/configurar-ci.js +380 -380
  268. package/scripts/lib/contadores-inventario.js +217 -217
  269. package/scripts/lib/detectar-host-swl.js +175 -175
  270. package/scripts/lib/detectar-stack-detallado.js +307 -307
  271. package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
  272. package/scripts/lib/detector-reglas-duplicadas.js +220 -220
  273. package/scripts/lib/diary-entry.js +234 -234
  274. package/scripts/lib/eval-metrics-store.js +218 -218
  275. package/scripts/lib/eval-quality.js +171 -171
  276. package/scripts/lib/eval-schemas.js +144 -144
  277. package/scripts/lib/eval-self-correct.js +106 -106
  278. package/scripts/lib/eval-validator.js +185 -185
  279. package/scripts/lib/evidencia-release.js +322 -322
  280. package/scripts/lib/expandir-targets.js +71 -71
  281. package/scripts/lib/gate-hooks-requires.js +249 -249
  282. package/scripts/lib/gate-licencias.js +212 -212
  283. package/scripts/lib/git-metricas.js +257 -257
  284. package/scripts/lib/gitignore-manifest.js +44 -11
  285. package/scripts/lib/jaccard-similarity.js +98 -98
  286. package/scripts/lib/longmemeval-runner.js +125 -125
  287. package/scripts/lib/metricas-dora.js +204 -204
  288. package/scripts/lib/npm-version.js +261 -261
  289. package/scripts/lib/paquetes-conocidos.js +50 -50
  290. package/scripts/lib/plan-lock.js +275 -275
  291. package/scripts/lib/pr-analyzer.js +399 -399
  292. package/scripts/lib/prompt-builder.js +264 -264
  293. package/scripts/lib/reglas-globales-conocidas.json +180 -180
  294. package/scripts/lib/resolver-plan-fase.js +37 -37
  295. package/scripts/lib/rrf-fusion.js +175 -175
  296. package/scripts/lib/schema-version.js +164 -164
  297. package/scripts/lib/scoring-instintos.js +277 -277
  298. package/scripts/lib/semantic-search.js +252 -252
  299. package/scripts/lib/skill-metrics.js +41 -1
  300. package/scripts/lib/toml-merge.js +204 -204
  301. package/scripts/lib/tool-cost-analyzer.js +1 -0
  302. package/scripts/limpiar-artefactos-python.js +131 -131
  303. package/scripts/mcp-server/auth.js +105 -105
  304. package/scripts/mcp-server/cache.js +106 -106
  305. package/scripts/migrar-csv-a-array.js +168 -168
  306. package/scripts/migrar-fase-dominio.js +200 -200
  307. package/scripts/publicar.js +497 -497
  308. package/scripts/run-eval.js +141 -141
  309. package/scripts/tui/componentes/selector-multi.js +189 -189
  310. package/scripts/tui/componentes/selector-unico.js +158 -158
  311. package/scripts/tui/ejecutores.js +375 -375
  312. package/scripts/tui/index.js +162 -162
  313. package/scripts/tui/lib/colores.js +129 -129
  314. package/scripts/tui/lib/render.js +264 -264
  315. package/scripts/tui/lib/teclas.js +113 -113
  316. package/scripts/tui/pantallas/inspect.js +173 -173
  317. package/scripts/tui/pantallas/install-wizard.js +334 -334
  318. package/scripts/tui/pantallas/menu-principal.js +52 -52
  319. package/scripts/tui/pantallas/progreso.js +274 -274
  320. package/scripts/tui/pantallas/resumen.js +132 -132
  321. package/scripts/tui/pantallas/uninstall-wizard.js +208 -208
  322. package/scripts/tui/pantallas/update-wizard.js +232 -232
  323. package/scripts/tui/pantallas/welcome.js +187 -187
  324. package/scripts/validar-userland-vacio.js +110 -110
  325. 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
- ## Paso 3Confirmar con el usuario antes de aprobar
78
-
79
- NUNCA apruebes sin confirmación explícita. Presenta un resumen breve del plan
80
- (número de slices, tareas, slices HITL) y pregunta:
81
-
82
- ```
83
- El plan de la fase N tiene [X] slices y [Y] tareas ([Z] HITL).
84
- ¿Confirmas la aprobación? Al aprobar se firma con SHA256 y queda inmutable:
85
- cualquier edición posterior detendrá /swl:ejecutar-fase.
86
- ```
87
-
88
- Espera respuesta afirmativa. Si el usuario pide cambios, NO apruebes remítelo
89
- a `/swl:planear-fase N` para refinar.
90
-
91
- ## Paso 4 — Transicionar y firmar
92
-
93
- 1. **Transicionar** (omitir si el plan ya estaba `aprobado` en modo legacy):
94
- edita el frontmatter `estado: borrador` `estado: aprobado` y agrega
95
- `aprobadoPor: usuario (<nombre>) — <fecha>, via /swl:aprobar-plan`.
96
-
97
- 2. **Firmar y marcar la fase activa** — un solo subcomando hace las tres
98
- operaciones deterministas: firma SHA256 `.planning/locks/0N-PLAN.md.lock`,
99
- verifica la firma, y escribe `.planning/locks/fase-activa.json` (gate G0 que
100
- consume `hooks/spec-gate.js`):
101
- ```bash
102
- swl-ses aprobar-plan --fase=N
103
- ```
104
- Verifica en la salida JSON que `ok: true` y `modo: "firmado"`. Si reporta
105
- error de firma, **NO continúes** — revisa el `motivo`.
106
-
107
- El `.lock` SÍ se versiona en git (evidencia de aprobación, parte del audit
108
- trail SDD). El `fase-activa.json` es runtime local (gitignored);
109
- `/swl:ejecutar-fase` lo elimina al cerrar la fase. Re-ejecutar
110
- `swl-ses aprobar-plan --fase=N` tras una re-aprobación (plan mutado) realinea
111
- lock y fase-activa automáticamente.
112
-
113
- ## Paso 5 Reporte
114
-
115
- ```
116
- Plan de la fase N aprobado y firmado (gate G1 activo).
117
-
118
- estado: borrador -> aprobado
119
- lock: .planning/locks/0N-PLAN.md.lock
120
- fase activa: .planning/locks/fase-activa.json (gate G0 cubierto)
121
- sha256: <hash corto>
122
-
123
- Cualquier edición del PLAN tras esta firma detendrá /swl:ejecutar-fase con un
124
- mensaje de "plan mutado tras aprobación". Para cambiar el plan: edítalo y vuelve
125
- a ejecutar /swl:aprobar-plan N.
126
-
127
- Próximo paso: /swl:ejecutar-fase N
128
- ```
129
-
130
- ## Reglas de comportamiento
131
-
132
- - NUNCA apruebes un plan sin confirmación explícita del usuario.
133
- - NUNCA modifiques el contenido del plan al aprobarlo — solo el campo `estado`
134
- del frontmatter y la línea `aprobadoPor`. El cuerpo es lo que se firma.
135
- - El lock vive en `.planning/locks/` y SÍ se versiona en git (es evidencia de
136
- aprobación, parte del audit trail de SDD).
137
- - Si el usuario quiere cambiar el plan después de aprobado, el flujo correcto es
138
- editar el PLAN y re-ejecutar `/swl:aprobar-plan N` (re-firma). NUNCA editar el
139
- lock a mano.
140
- - El número de versión del release que publique esta fase lo decide el usuario
141
- (regla CLAUDE.md) este comando no toca versiones.
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 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.
@@ -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.