@saulwade/swl-ses 2.5.3 → 2.6.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 (214) hide show
  1. package/CLAUDE.md +9 -9
  2. package/README.md +37 -37
  3. package/agentes/_intent-spec.md +73 -73
  4. package/agentes/_propose-step.md +90 -90
  5. package/agentes/accesibilidad-wcag-swl.md +690 -690
  6. package/agentes/arquitecto-swl.md +267 -267
  7. package/agentes/auto-evolucion-swl.md +932 -908
  8. package/agentes/backend-csharp-swl.md +420 -420
  9. package/agentes/backend-go-swl.md +390 -390
  10. package/agentes/backend-java-swl.md +281 -281
  11. package/agentes/backend-rust-swl.md +364 -364
  12. package/agentes/backend-workers-swl.md +482 -482
  13. package/agentes/cloud-infra-swl.md +509 -509
  14. package/agentes/consolidador-swl.md +541 -541
  15. package/agentes/depurador-swl.md +352 -352
  16. package/agentes/devops-ci-swl.md +400 -400
  17. package/agentes/disenador-ui-swl.md +569 -569
  18. package/agentes/documentador-swl.md +345 -345
  19. package/agentes/frontend-angular-swl.md +621 -621
  20. package/agentes/frontend-css-swl.md +716 -716
  21. package/agentes/frontend-react-swl.md +692 -692
  22. package/agentes/frontend-swl.md +496 -496
  23. package/agentes/frontend-tailwind-swl.md +826 -826
  24. package/agentes/investigador-swl.md +432 -432
  25. package/agentes/investigador-ux-swl.md +505 -505
  26. package/agentes/migrador-swl.md +442 -442
  27. package/agentes/mobile-android-swl.md +511 -511
  28. package/agentes/mobile-cross-swl.md +541 -541
  29. package/agentes/mobile-ios-swl.md +502 -502
  30. package/agentes/mobile-testing-swl.md +302 -302
  31. package/agentes/nemesis-auditor-swl.md +285 -285
  32. package/agentes/observabilidad-swl.md +438 -438
  33. package/agentes/pagos-swl.md +310 -310
  34. package/agentes/perfilador-usuario-swl.md +321 -321
  35. package/agentes/planificador-swl.md +399 -399
  36. package/agentes/producto-prd-swl.md +589 -589
  37. package/agentes/red-team-swl.md +218 -218
  38. package/agentes/release-manager-swl.md +590 -590
  39. package/agentes/rendimiento-swl.md +713 -713
  40. package/agentes/revisor-angular-swl.md +278 -278
  41. package/agentes/revisor-csharp-swl.md +264 -264
  42. package/agentes/revisor-go-swl.md +259 -259
  43. package/agentes/revisor-java-swl.md +257 -257
  44. package/agentes/revisor-kotlin-swl.md +273 -273
  45. package/agentes/revisor-nextjs-swl.md +281 -281
  46. package/agentes/revisor-php-swl.md +271 -271
  47. package/agentes/revisor-react-swl.md +278 -278
  48. package/agentes/revisor-rust-swl.md +346 -346
  49. package/agentes/revisor-seguridad-swl.md +399 -399
  50. package/agentes/revisor-swift-swl.md +268 -268
  51. package/agentes/revisor-typescript-swl.md +346 -346
  52. package/agentes/tdd-qa-swl.md +393 -393
  53. package/bin/swl-ses.js +32 -7
  54. package/comandos/swl/actualizar.md +3 -3
  55. package/comandos/swl/aprender.md +13 -0
  56. package/comandos/swl/deuda-codigo.md +97 -97
  57. package/comandos/swl/evaluar-skill.md +18 -3
  58. package/comandos/swl/evolucion-continua.md +73 -0
  59. package/comandos/swl/evolucionar.md +13 -0
  60. package/comandos/swl/instalar.md +4 -4
  61. package/comandos/swl/notificaciones.md +1 -1
  62. package/comandos/swl/status.md +2 -2
  63. package/gateway/cron/jobs.example.json +12 -0
  64. package/habilidades/auto-evolucion-protocolo/SKILL.md +19 -1
  65. package/habilidades/autoresearch/SKILL.md +3 -2
  66. package/habilidades/backend-async-postgres-testing/SKILL.md +2 -1
  67. package/habilidades/benchmark-memoria/SKILL.md +7 -7
  68. package/habilidades/changelog-generator/SKILL.md +1 -1
  69. package/habilidades/changelog-generator/scripts/parse-commits.js +2 -1
  70. package/habilidades/checkpoints-verificacion/SKILL.md +6 -0
  71. package/habilidades/compactacion-contexto/SKILL.md +2 -1
  72. package/habilidades/contenedores-docker/SKILL.md +4 -2
  73. package/habilidades/context-builder/SKILL.md +4 -0
  74. package/habilidades/doubt-driven-review/SKILL.md +17 -1
  75. package/habilidades/drift-detection/SKILL.md +6 -1
  76. package/habilidades/ejecutar-fase/SKILL.md +6 -6
  77. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  78. package/habilidades/eval-framework/SKILL.md +8 -3
  79. package/habilidades/extractor-de-aprendizajes/SKILL.md +8 -2
  80. package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
  81. package/habilidades/harness-claude-code/SKILL.md +7 -3
  82. package/habilidades/infra-github-actions/SKILL.md +4 -3
  83. package/habilidades/instalar-sistema/SKILL.md +5 -1
  84. package/habilidades/memoria-busqueda/SKILL.md +31 -39
  85. package/habilidades/planear-fase/SKILL.md +9 -1
  86. package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
  87. package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
  88. package/habilidades/proceso-ddia-fundamentos/SKILL.md +3 -2
  89. package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
  90. package/habilidades/release-semver/SKILL.md +2 -2
  91. package/habilidades/swl-claudemd/SKILL.md +6 -7
  92. package/habilidades/swl-dashboard/SKILL.md +11 -43
  93. package/habilidades/tdd-workflow/SKILL.md +12 -7
  94. package/habilidades/validacion-ci-sistema/SKILL.md +1 -1
  95. package/hooks/agente-lifecycle.js +2 -1
  96. package/hooks/aiisms-detector.js +13 -4
  97. package/hooks/audit-trail.js +2 -1
  98. package/hooks/auto-consolidacion.js +2 -1
  99. package/hooks/captura-acciones-post.js +2 -1
  100. package/hooks/captura-acciones-session.js +2 -1
  101. package/hooks/captura-feedback-usuario.js +3 -2
  102. package/hooks/claudemd-bloat-detector.js +12 -3
  103. package/hooks/claudemd-duplicacion-detector.js +13 -3
  104. package/hooks/contexto-iteracion.js +2 -1
  105. package/hooks/contexto-subagente.js +68 -68
  106. package/hooks/degradacion-instintos.js +2 -1
  107. package/hooks/extraccion-aprendizajes.js +109 -15
  108. package/hooks/grafo-contexto.js +2 -1
  109. package/hooks/guardrail-modelo.js +2 -1
  110. package/hooks/inbox-aviso.js +2 -1
  111. package/hooks/inyeccion-contexto.js +2 -1
  112. package/hooks/lib/agent-matcher.js +2 -1
  113. package/hooks/lib/agent-routing.js +2 -1
  114. package/hooks/lib/autonomia.js +5 -3
  115. package/hooks/lib/captura-acciones.js +2 -1
  116. package/hooks/lib/consolidation-lock.js +21 -10
  117. package/hooks/lib/etapa-auto-evolucion.js +10 -4
  118. package/hooks/lib/etapa-metricas.js +2 -1
  119. package/hooks/lib/etapa-perfil-usuario.js +20 -4
  120. package/hooks/lib/evolution-tracker.js +2 -1
  121. package/hooks/lib/gateway-notify.js +17 -3
  122. package/hooks/lib/loop-telemetry.js +5 -4
  123. package/hooks/lib/mcp-health.js +2 -1
  124. package/hooks/lib/memory-search.js +4 -0
  125. package/hooks/lib/merkle-audit.js +58 -6
  126. package/hooks/lib/notificacion-formato.js +58 -0
  127. package/hooks/lib/nudge-tracker.js +2 -1
  128. package/hooks/lib/otlp-exporter.js +2 -1
  129. package/hooks/lib/propose-step.js +3 -2
  130. package/hooks/lib/raiz-proyecto.js +127 -0
  131. package/hooks/lib/run-log.js +2 -1
  132. package/hooks/lib/singleton-guard.js +225 -27
  133. package/hooks/lib/telegram-cliente.js +28 -11
  134. package/hooks/notificacion-telegram.js +13 -3
  135. package/hooks/preservar-estado-pre-compact.js +2 -1
  136. package/hooks/proteccion-rutas.js +59 -3
  137. package/hooks/registro-turnos.js +2 -1
  138. package/hooks/resumen-sesion.js +2 -1
  139. package/hooks/risk-scoring.js +2 -1
  140. package/hooks/rotar-audit-auto.js +46 -20
  141. package/hooks/session-briefing.js +127 -1
  142. package/hooks/spec-gate.js +2 -1
  143. package/hooks/sugerir-contribuir.js +6 -3
  144. package/hooks/sugerir-regenerar-inventario.js +3 -2
  145. package/hooks/tdd-gate.js +2 -1
  146. package/hooks/telemetria-agentes.js +2 -1
  147. package/hooks/telemetria-skill-routing.js +2 -1
  148. package/hooks/tracking-costos.js +4 -3
  149. package/hooks/validar-formato-post-subagente.js +2 -1
  150. package/hooks/validar-intent-spec.js +2 -1
  151. package/hooks/validar-memoria-hook.js +13 -3
  152. package/hooks/validar-planning-paths.js +2 -1
  153. package/instintos/perfil-usuario.yaml +506 -3
  154. package/instintos/proyecto.yaml +78 -0
  155. package/llms.txt +29 -29
  156. package/manifiestos/canonical-hashes.json +5588 -4925
  157. package/manifiestos/hooks-config.json +469 -469
  158. package/manifiestos/invariantes-criticos.json +30 -30
  159. package/manifiestos/modulos.json +1429 -1423
  160. package/manifiestos/planning-paths.json +1 -0
  161. package/manifiestos/skills-lock.json +1275 -1275
  162. package/package.json +94 -95
  163. package/plugin.json +369 -369
  164. package/scripts/actualizar.js +3 -0
  165. package/scripts/auditar-clases-conocidas.js +134 -106
  166. package/scripts/benchmark-memoria.js +1 -0
  167. package/scripts/bootstrap-instintos.js +85 -14
  168. package/scripts/canario-hooks.js +166 -166
  169. package/scripts/cli/autonomia.js +23 -0
  170. package/scripts/cli/benchmark-memoria.js +37 -0
  171. package/scripts/cli/ciclo-autonomo.js +73 -0
  172. package/scripts/cli/ciclo-fase-b.js +102 -0
  173. package/scripts/cli/guardrail-metrics.js +39 -0
  174. package/scripts/cli/loop-telemetry.js +4 -2
  175. package/scripts/cli/memoria-search.js +69 -0
  176. package/scripts/cli/nudge-accionar.js +39 -0
  177. package/scripts/cli/run-eval.js +38 -0
  178. package/scripts/cli/run-skill-evals.js +13 -2
  179. package/scripts/derivar-feature-list.js +15 -14
  180. package/scripts/desinstalar.js +11 -0
  181. package/scripts/doctor.js +50 -13
  182. package/scripts/evidencia-valor.js +101 -101
  183. package/scripts/field-report.js +16 -16
  184. package/scripts/instalador.js +98 -7
  185. package/scripts/lib/activar-hooks-proyecto.js +116 -104
  186. package/scripts/lib/auditar-invocaciones-comandos.js +96 -6
  187. package/scripts/lib/ciclo-autonomo/candidatos.js +174 -0
  188. package/scripts/lib/ciclo-autonomo/config.js +165 -0
  189. package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -0
  190. package/scripts/lib/ciclo-autonomo/fallback.js +77 -0
  191. package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -0
  192. package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -0
  193. package/scripts/lib/ciclo-autonomo/index.js +301 -0
  194. package/scripts/lib/ciclo-autonomo/lock.js +124 -0
  195. package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -0
  196. package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -0
  197. package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -0
  198. package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -0
  199. package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -0
  200. package/scripts/lib/estado.js +9 -0
  201. package/scripts/lib/evidencia-valor.js +228 -228
  202. package/scripts/lib/expandir-targets.js +71 -71
  203. package/scripts/lib/gitignore-manifest.js +8 -1
  204. package/scripts/lib/hooks-settings.js +45 -0
  205. package/scripts/lib/limpiar-basura-global.js +161 -0
  206. package/scripts/lib/toml-merge.js +204 -204
  207. package/scripts/mcp-server/auth.js +105 -105
  208. package/scripts/mcp-server/cache.js +106 -106
  209. package/scripts/rotar-audit-logs.js +48 -2
  210. package/scripts/run-eval.js +1 -0
  211. package/scripts/run-skill-evals.js +287 -8
  212. package/scripts/smoke-test.js +16 -8
  213. package/scripts/tui/pantallas/install-wizard.js +69 -13
  214. package/scripts/validar.js +40 -1
@@ -1,85 +1,85 @@
1
- # Variables residuales post-refactor son code smell
2
-
3
- Recurso de `prevencion-sobreingenieria`. Extraído del SKILL.md en v1.3.0 para
4
- respetar el límite de 300 líneas; el contenido es normativo sin cambios.
5
-
6
- ## Regla
7
-
8
- Variables asignadas pero no usadas (F841 en ruff/flake8) **post-refactor** son
9
- casi siempre residuos de una versión anterior del código que el refactor no
10
- limpió. Se parecen a "variables temporales del desarrollador" pero delatan un
11
- refactor incompleto — la lógica que las usaba se movió o eliminó, pero las
12
- asignaciones quedaron.
13
-
14
- ## Por qué son peligrosas
15
-
16
- - **Confunden al próximo lector**: asumirá que la variable se usa más abajo.
17
- - **Inflan el diff cognitivo** del refactor real.
18
- - **Ocultan bugs sutiles**: el valor asignado puede tener side effects (llamada
19
- a función costosa o con efecto en estado) que ya no aporta nada al flujo.
20
- - **Invalidan la métrica de cobertura**: líneas "cubiertas" por tests que en
21
- realidad no afectan el resultado.
22
-
23
- ## Patrón operativo
24
-
25
- Después de **cualquier refactor** que modifique el flujo de una función (extraer
26
- método, inlinear función, cambiar el shape de un return), correr:
27
-
28
- ```bash
29
- ruff check --select=F841 ruta/al/modulo.py
30
- # o para todo el proyecto
31
- ruff check --select=F841 .
32
- ```
33
-
34
- Cada F841 detectado post-refactor es candidato 1 de 2:
35
-
36
- 1. **Variable muerta** (caso común post-refactor): eliminarla.
37
- 2. **Variable viva pero mal nombrada** (caso raro): si el valor se usa como
38
- side effect intencional (ej: evaluar una propiedad para cachear), renombrar
39
- con prefijo `_` y comentar el propósito.
40
-
41
- ## Anti-patrón típico
42
-
43
- ```python
44
- # Antes del refactor: había un if que usaba exito_key
45
- def procesar(data):
46
- exito, exito_key = intentar(data)
47
- if exito_key == "via_rapida":
48
- return procesar_rapido(data)
49
- return procesar_normal(data, exito_key)
50
-
51
-
52
- # Después de refactor que eliminó la rama "via_rapida"
53
- def procesar(data):
54
- exito, exito_key = intentar(data) # ← F841: exito_key asignado, no usado
55
- return procesar_normal(data) # ← también exito residual
56
- ```
57
-
58
- ## Patrón canónico
59
-
60
- ```python
61
- # Post-refactor limpio
62
- def procesar(data):
63
- _ = intentar(data) # si el side effect de intentar() importa
64
- return procesar_normal(data)
65
-
66
- # o mejor: si ni siquiera el side effect importa
67
- def procesar(data):
68
- return procesar_normal(data)
69
- ```
70
-
71
- ## Reglas
72
-
73
- - **Gate pre-commit**: agregar `ruff check --select=F841` al pre-commit hook del proyecto. No bloquea en un repo grande donde F841 preexiste, pero sí bloquea en los archivos modificados por el commit actual.
74
- - **Revisión explícita post-refactor grande**: tras extraer 5+ métodos o mover 5+ bloques, correr `ruff --select=F401,F841` sobre los archivos tocados.
75
- - **NO silenciar con `# noqa: F841` sin justificación** — la excepción legítima (side effect intencional con nombre `_`) es tan rara que vale la pena documentarla; silenciar sin comentario es ocultar deuda.
76
- - **Incluir en checklist de PR**: "F841 limpio en archivos tocados" como item explícito.
77
-
78
- ## Aplicabilidad
79
-
80
- Detectable en:
81
-
82
- - Python: `ruff --select=F841`, `flake8 --select=F841`.
83
- - TypeScript/JavaScript: `eslint --rule 'no-unused-vars: error'`.
84
- - Go: el compilador lo hace obligatorio (`declared but not used`).
85
- - Rust: warning `unused_variables`, promovido a error con `#![deny(unused_variables)]`.
1
+ # Variables residuales post-refactor son code smell
2
+
3
+ Recurso de `prevencion-sobreingenieria`. Extraído del SKILL.md en v1.3.0 para
4
+ respetar el límite de 300 líneas; el contenido es normativo sin cambios.
5
+
6
+ ## Regla
7
+
8
+ Variables asignadas pero no usadas (F841 en ruff/flake8) **post-refactor** son
9
+ casi siempre residuos de una versión anterior del código que el refactor no
10
+ limpió. Se parecen a "variables temporales del desarrollador" pero delatan un
11
+ refactor incompleto — la lógica que las usaba se movió o eliminó, pero las
12
+ asignaciones quedaron.
13
+
14
+ ## Por qué son peligrosas
15
+
16
+ - **Confunden al próximo lector**: asumirá que la variable se usa más abajo.
17
+ - **Inflan el diff cognitivo** del refactor real.
18
+ - **Ocultan bugs sutiles**: el valor asignado puede tener side effects (llamada
19
+ a función costosa o con efecto en estado) que ya no aporta nada al flujo.
20
+ - **Invalidan la métrica de cobertura**: líneas "cubiertas" por tests que en
21
+ realidad no afectan el resultado.
22
+
23
+ ## Patrón operativo
24
+
25
+ Después de **cualquier refactor** que modifique el flujo de una función (extraer
26
+ método, inlinear función, cambiar el shape de un return), correr:
27
+
28
+ ```bash
29
+ ruff check --select=F841 ruta/al/modulo.py
30
+ # o para todo el proyecto
31
+ ruff check --select=F841 .
32
+ ```
33
+
34
+ Cada F841 detectado post-refactor es candidato 1 de 2:
35
+
36
+ 1. **Variable muerta** (caso común post-refactor): eliminarla.
37
+ 2. **Variable viva pero mal nombrada** (caso raro): si el valor se usa como
38
+ side effect intencional (ej: evaluar una propiedad para cachear), renombrar
39
+ con prefijo `_` y comentar el propósito.
40
+
41
+ ## Anti-patrón típico
42
+
43
+ ```python
44
+ # Antes del refactor: había un if que usaba exito_key
45
+ def procesar(data):
46
+ exito, exito_key = intentar(data)
47
+ if exito_key == "via_rapida":
48
+ return procesar_rapido(data)
49
+ return procesar_normal(data, exito_key)
50
+
51
+
52
+ # Después de refactor que eliminó la rama "via_rapida"
53
+ def procesar(data):
54
+ exito, exito_key = intentar(data) # ← F841: exito_key asignado, no usado
55
+ return procesar_normal(data) # ← también exito residual
56
+ ```
57
+
58
+ ## Patrón canónico
59
+
60
+ ```python
61
+ # Post-refactor limpio
62
+ def procesar(data):
63
+ _ = intentar(data) # si el side effect de intentar() importa
64
+ return procesar_normal(data)
65
+
66
+ # o mejor: si ni siquiera el side effect importa
67
+ def procesar(data):
68
+ return procesar_normal(data)
69
+ ```
70
+
71
+ ## Reglas
72
+
73
+ - **Gate pre-commit**: agregar `ruff check --select=F841` al pre-commit hook del proyecto. No bloquea en un repo grande donde F841 preexiste, pero sí bloquea en los archivos modificados por el commit actual.
74
+ - **Revisión explícita post-refactor grande**: tras extraer 5+ métodos o mover 5+ bloques, correr `ruff --select=F401,F841` sobre los archivos tocados.
75
+ - **NO silenciar con `# noqa: F841` sin justificación** — la excepción legítima (side effect intencional con nombre `_`) es tan rara que vale la pena documentarla; silenciar sin comentario es ocultar deuda.
76
+ - **Incluir en checklist de PR**: "F841 limpio en archivos tocados" como item explícito.
77
+
78
+ ## Aplicabilidad
79
+
80
+ Detectable en:
81
+
82
+ - Python: `ruff --select=F841`, `flake8 --select=F841`.
83
+ - TypeScript/JavaScript: `eslint --rule 'no-unused-vars: error'`.
84
+ - Go: el compilador lo hace obligatorio (`declared but not used`).
85
+ - Rust: warning `unused_variables`, promovido a error con `#![deny(unused_variables)]`.
@@ -175,8 +175,9 @@ SWL tiene 14 archivos `schemas/*.schema.json`. Reglas operativas:
175
175
 
176
176
  ### Detección de breaking changes
177
177
 
178
- Helper `scripts/lib/schema-version.js` (creado en F4) implementa estas
179
- reglas. Uso esperado:
178
+ Helper `scripts/lib/schema-version.js` (creado en F4, layout del repo madre;
179
+ en instalaciones destino vive aplanado junto a los hooks) implementa estas
180
+ reglas. Referencia de API — uso esperado:
180
181
 
181
182
  ```js
182
183
  const { verificarCompatibilidad } = require('./scripts/lib/schema-version');
@@ -1,147 +1,147 @@
1
- ---
2
- name: proceso-ingenieria-requerimientos
3
- description: >
4
- Checklist de calidad de requerimientos basado en ingeniería de
5
- requerimientos clásica (investigación académica del autor, 2003; refs
6
- ZAVE94 y RE'01): las 8 características del buen requerimiento (correcto,
7
- necesario, conciso, libre de implementación, factible, priorizable, no
8
- ambiguo, verificable), la heurística "una verificación = un requerimiento",
9
- la metadata de soporte por REQ (IDUR, padre, fuente, razón, riesgo, estado)
10
- y la jerarquía de verificación (inspección < demostración < prueba).
11
- Cargar al congelar REQs en /swl:discutir-fase (Bloque 5), al redactar
12
- criterios de aceptación en un PRD (producto-prd-swl), o al auditar la
13
- calidad de un CONTEXTO.md/REQUISITOS.md existente.
14
- version: "1.0.0"
15
- herramientasPermitidas: [Read]
16
- evolvable: true
17
- exclusiones:
18
- - "No cargar para descomponer REQs en tareas — eso es planificador-swl con el REQ ya congelado."
19
- - "No cargar para verificar la CADENA REQ→tarea→commit→test — eso es el gate G4 de /swl:verificar; este skill mejora la calidad del REQ ANTES de que exista la cadena."
20
- - "No cargar para decisiones de arquitectura — un ADR documenta el CÓMO se decide; este skill vigila que el REQ diga el QUÉ sin contaminarse de cómo."
21
- ---
22
- # Ingeniería de requerimientos — checklist de calidad por REQ
23
-
24
- Un requerimiento mal escrito se propaga: el plan lo descompone mal, el test
25
- lo verifica mal y el gate G4 valida una cadena correcta sobre un contenido
26
- incorrecto. Este skill se aplica a **cada REQ individual antes de congelarlo**
27
- (cierre de `discutir-fase`, redacción de PRD), no a la cadena posterior.
28
-
29
- > La IR "funciona como el puente entre la necesidad que tienen los usuarios
30
- > del mundo real [...] y las capacidades y oportunidades que brinda la
31
- > tecnología" (RE'01). El REQ es ese puente: si el puente está torcido, todo
32
- > lo que cruza llega torcido.
33
-
34
- ## Cuándo cargar
35
-
36
- - Al cerrar el **Bloque 5** de `discutir-fase` (criterios de aceptación),
37
- antes de escribir los `REQ-<fase>-NN` al CONTEXTO.md.
38
- - Al redactar criterios de aceptación e historias en un PRD.
39
- - Al auditar un CONTEXTO.md o REQUISITOS.md existente (¿por qué esta fase
40
- divergió? — a menudo el REQ era ambiguo desde el origen).
41
-
42
- ## Las 8 características — checklist con prueba operativa
43
-
44
- Aplicar a CADA requerimiento. Un REQ que falla una característica se
45
- reescribe antes de congelar, no después de implementar.
46
-
47
- | # | Característica | Prueba operativa |
48
- |---|---|---|
49
- | 1 | **Correcto** | Solo el usuario (o su sustituto cercano) determina si es correcto — validarlo con él en la entrevista. "Probablemente es lo que querían" = adivinar, no elicitar. |
50
- | 2 | **Necesario** | Rastrear a una fuente con autoridad (petición del usuario, REQ padre, estándar, regulación). Prueba: *¿si lo elimino, qué necesidad queda sin resolver?* Sin respuesta = *gold plating* — fuera. |
51
- | 3 | **Conciso** | Dice QUÉ debe hacerse y solo eso. Explicaciones, racional y análisis van en la metadata `Razón`, no en el enunciado. |
52
- | 4 | **Libre de implementación** | Dice qué, no cómo. Regla de cascada: *"el diseño de un nivel es el requerimiento del nivel inferior"* — la solución elegida (ADR) genera los REQs del siguiente nivel, sin fijar el diseño de ese nivel. Excepción legítima: requerimientos de interface. |
53
- | 5 | **Factible** | Chequeo de realidad técnica y de costo contra el sistema y su ambiente conocidos. Valores numéricos sospechosos se retan con física/límites del stack (el radar no ve más allá del horizonte). `/swl:predecir --abogado-diablo` es el retador formal. |
54
- | 6 | **Priorizable** | Prioridad asignada = f(valor al cliente, costo relativo, riesgo técnico). Si todo es igual de importante, no se puede reaccionar a recortes ni imprevistos. |
55
- | 7 | **No ambiguo** | Todos los lectores llegan a UNA interpretación. Palabras prohibidas en el enunciado: *fácil, simple, rápido, eficiente, varios, mejorado, robusto, flexible, amigable, maximizar, minimizar, soportar*. Cada una se reemplaza por un valor medible o se elimina. |
56
- | 8 | **Verificable** | Enunciado en términos mensurables con tolerancias ("105 ± 0.5", "p95 < N ms", "0 hallazgos CRÍTICOS"). Un REQ no verificable convierte la aceptación en cuestión de opinión. No consistente/no factible/ambiguo ⇒ no verificable. |
57
-
58
- ## Heurística de concisión: una verificación = un requerimiento
59
-
60
- ¿La alarma visual y la audible son uno o dos REQs? **Se decide por cómo se
61
- verificará**: si una sola prueba/demostración las verifica juntas, son UN
62
- requerimiento; si exigen verificaciones separadas, son DOS. Ni párrafos con
63
- múltiples REQs escondidos, ni multiplicar REQs sin razón — cada REQ se
64
- administra y verifica, y eso cuesta.
65
-
66
- ## Tipos técnicos (y su relación de verificación)
67
-
68
- - **Funcional** — cualitativo: qué hace ("detectar blancos"). Se verifica por
69
- la SUMA de sus requerimientos de desempeño asociados.
70
- - **Desempeño** — cuantitativo y comprobable individualmente ("detectar 0.1 m²
71
- a >20 km con Pd ≥ 0.9"). Usualmente varios por cada funcional.
72
- - **Restricción de diseño** — límites bajo los que debe existir (peso, tamaño,
73
- ambiente, stack impuesto).
74
- - **Interface** — cómo interactúa con sistemas externos o entre subsistemas;
75
- la excepción documentada a "libre de implementación".
76
-
77
- ## Metadata de soporte por REQ
78
-
79
- El REQ es un objeto de primera clase con metadata, no una línea suelta:
80
-
81
- | Atributo | En swl-ses | Regla |
82
- |---|---|---|
83
- | **IDUR** | `REQ-<fase>-NN` (namespaceado) | Único, jamás reutilizado |
84
- | **Padre** | `padre: REQ-<fase>-MM` (opcional) | Para REQs derivados de uno de nivel superior — da trazabilidad vertical |
85
- | **Fuente** | quién/qué lo pidió (usuario en entrevista, PRD §, estándar, regla) | Sin fuente identificable → aplica prueba de "necesario" |
86
- | **Razón** | 1 línea de racional o puntero (análisis, ADR, supuesto del Bloque 4) | Aquí vive lo que "conciso" echó del enunciado |
87
- | **Riesgo** | alto/medio/bajo + por qué | Alimenta la priorización del plan |
88
- | **Estado** | `PENDIENTE → definido → aprobado (gate G1) → verificado (gate G4) → borrado` | Mapa del ciclo PSD/PSR/Definido/Aprobado/Verificado/Borrado clásico; REQs `PENDIENTE` bloquean el cierre de la discusión |
89
-
90
- ## Jerarquía de verificación (al declarar CÓMO se verificará cada REQ)
91
-
92
- **Inspección** (mirar/medir el artefacto) < **demostración** (observar la
93
- operación con instrumentación mínima — p. ej. medir MTTR reparando fallas
94
- inducidas) < **prueba** (instrumentada por completo — la más confiable y la
95
- más cara) — con **análisis** como soporte barato (modelos validados contra
96
- pruebas previas). Elegir el método MÁS BARATO que realmente verifique el
97
- REQ; declarar el método junto al criterio de aceptación.
98
-
99
- ## Dos escalas de priorización (usar una, explícita)
100
-
101
- - **Alto / Medio / Bajo** — crítico de misión para la próxima liberación /
102
- necesario eventualmente / mejora si los recursos lo permiten.
103
- - **Esencial / Condicional / Opcional** — el producto no es aceptable sin él /
104
- mejora pero el producto es aceptable sin ella / puede o no valer la pena.
105
- - MoSCoW (del PRD) mapea: Must≈Esencial, Should/Could≈Condicional,
106
- Won't≈fuera. Declarar QUÉ escala se usa; nunca mezclar dos en el mismo doc.
107
-
108
- ## Por qué la elicitación falla (y qué hace el cuestionario al respecto)
109
-
110
- Restricciones clásicas que el entrevistador debe asumir como default:
111
- **conocimiento tácito** (la gente no sabe describir lo que hace — pedir
112
- ejemplos concretos, no definiciones), **distribución del conocimiento**
113
- (fuentes múltiples en conflicto — los conflictos se registran como decisiones
114
- del Bloque 4, no se resuelven en silencio), **observación limitada** y
115
- **parcialidad** (el resultado afecta al informante). Es la razón por la que
116
- `discutir-fase` pregunta supuestos explícitos y registra decisiones con
117
- estado en vez de asumir consenso.
118
-
119
- ## Cuándo NO cargar
120
-
121
- - REQs ya congelados con plan aprobado (gate G1) — re-litigar el REQ ahí es
122
- cambio de scope: pasa por re-planificación, no por este checklist.
123
- - Tareas técnicas triviales sin REQs formales (fix puntual, typo).
124
- - Verificación post-implementación — eso es `/swl:verificar` (G4).
125
-
126
- ## Gotchas / Errores comunes no obvios
127
-
128
- - **Checklist aplicado al documento y no al requerimiento**: las 8
129
- características se evalúan POR REQ individual; un CONTEXTO.md "en general
130
- claro" puede contener 2 REQs ambiguos que revientan la fase.
131
- - **"Verificable" confundido con "tiene test"**: verificable es una propiedad
132
- del ENUNCIADO (términos mensurables), previa al test. G4 valida que el test
133
- exista; este skill valida que el enunciado sea testeable.
134
- - **Racional dentro del enunciado**: si el REQ explica por qué, mezcla dos
135
- atributos — mover el porqué a `Razón` y dejar el enunciado conciso.
136
- - **Funcional "verificado" directamente**: un funcional sin desempeños
137
- asociados se "verifica" con opinión. Todo funcional no trivial necesita al
138
- menos un desempeño cuantitativo asociado.
139
-
140
- ---
141
-
142
- **Origen**: investigación académica de Saúl Wade, *"Ingeniería de
143
- requerimientos"* (Wade Inc., ~2003; referencias [ZAVE94] y [RE'01 CfP]),
144
- absorbida al sistema el 2026-07-08 (v2.5.1). El documento fuente vive en
145
- `temp/` del repo madre (material de referencia, no distribuido); este skill
146
- es su destilado operativo con el mapeo a los mecanismos SWL (gates G1/G4,
147
- cuestionario de discutir-fase, MoSCoW del PRD).
1
+ ---
2
+ name: proceso-ingenieria-requerimientos
3
+ description: >
4
+ Checklist de calidad de requerimientos basado en ingeniería de
5
+ requerimientos clásica (investigación académica del autor, 2003; refs
6
+ ZAVE94 y RE'01): las 8 características del buen requerimiento (correcto,
7
+ necesario, conciso, libre de implementación, factible, priorizable, no
8
+ ambiguo, verificable), la heurística "una verificación = un requerimiento",
9
+ la metadata de soporte por REQ (IDUR, padre, fuente, razón, riesgo, estado)
10
+ y la jerarquía de verificación (inspección < demostración < prueba).
11
+ Cargar al congelar REQs en /swl:discutir-fase (Bloque 5), al redactar
12
+ criterios de aceptación en un PRD (producto-prd-swl), o al auditar la
13
+ calidad de un CONTEXTO.md/REQUISITOS.md existente.
14
+ version: "1.0.0"
15
+ herramientasPermitidas: [Read]
16
+ evolvable: true
17
+ exclusiones:
18
+ - "No cargar para descomponer REQs en tareas — eso es planificador-swl con el REQ ya congelado."
19
+ - "No cargar para verificar la CADENA REQ→tarea→commit→test — eso es el gate G4 de /swl:verificar; este skill mejora la calidad del REQ ANTES de que exista la cadena."
20
+ - "No cargar para decisiones de arquitectura — un ADR documenta el CÓMO se decide; este skill vigila que el REQ diga el QUÉ sin contaminarse de cómo."
21
+ ---
22
+ # Ingeniería de requerimientos — checklist de calidad por REQ
23
+
24
+ Un requerimiento mal escrito se propaga: el plan lo descompone mal, el test
25
+ lo verifica mal y el gate G4 valida una cadena correcta sobre un contenido
26
+ incorrecto. Este skill se aplica a **cada REQ individual antes de congelarlo**
27
+ (cierre de `discutir-fase`, redacción de PRD), no a la cadena posterior.
28
+
29
+ > La IR "funciona como el puente entre la necesidad que tienen los usuarios
30
+ > del mundo real [...] y las capacidades y oportunidades que brinda la
31
+ > tecnología" (RE'01). El REQ es ese puente: si el puente está torcido, todo
32
+ > lo que cruza llega torcido.
33
+
34
+ ## Cuándo cargar
35
+
36
+ - Al cerrar el **Bloque 5** de `discutir-fase` (criterios de aceptación),
37
+ antes de escribir los `REQ-<fase>-NN` al CONTEXTO.md.
38
+ - Al redactar criterios de aceptación e historias en un PRD.
39
+ - Al auditar un CONTEXTO.md o REQUISITOS.md existente (¿por qué esta fase
40
+ divergió? — a menudo el REQ era ambiguo desde el origen).
41
+
42
+ ## Las 8 características — checklist con prueba operativa
43
+
44
+ Aplicar a CADA requerimiento. Un REQ que falla una característica se
45
+ reescribe antes de congelar, no después de implementar.
46
+
47
+ | # | Característica | Prueba operativa |
48
+ |---|---|---|
49
+ | 1 | **Correcto** | Solo el usuario (o su sustituto cercano) determina si es correcto — validarlo con él en la entrevista. "Probablemente es lo que querían" = adivinar, no elicitar. |
50
+ | 2 | **Necesario** | Rastrear a una fuente con autoridad (petición del usuario, REQ padre, estándar, regulación). Prueba: *¿si lo elimino, qué necesidad queda sin resolver?* Sin respuesta = *gold plating* — fuera. |
51
+ | 3 | **Conciso** | Dice QUÉ debe hacerse y solo eso. Explicaciones, racional y análisis van en la metadata `Razón`, no en el enunciado. |
52
+ | 4 | **Libre de implementación** | Dice qué, no cómo. Regla de cascada: *"el diseño de un nivel es el requerimiento del nivel inferior"* — la solución elegida (ADR) genera los REQs del siguiente nivel, sin fijar el diseño de ese nivel. Excepción legítima: requerimientos de interface. |
53
+ | 5 | **Factible** | Chequeo de realidad técnica y de costo contra el sistema y su ambiente conocidos. Valores numéricos sospechosos se retan con física/límites del stack (el radar no ve más allá del horizonte). `/swl:predecir --abogado-diablo` es el retador formal. |
54
+ | 6 | **Priorizable** | Prioridad asignada = f(valor al cliente, costo relativo, riesgo técnico). Si todo es igual de importante, no se puede reaccionar a recortes ni imprevistos. |
55
+ | 7 | **No ambiguo** | Todos los lectores llegan a UNA interpretación. Palabras prohibidas en el enunciado: *fácil, simple, rápido, eficiente, varios, mejorado, robusto, flexible, amigable, maximizar, minimizar, soportar*. Cada una se reemplaza por un valor medible o se elimina. |
56
+ | 8 | **Verificable** | Enunciado en términos mensurables con tolerancias ("105 ± 0.5", "p95 < N ms", "0 hallazgos CRÍTICOS"). Un REQ no verificable convierte la aceptación en cuestión de opinión. No consistente/no factible/ambiguo ⇒ no verificable. |
57
+
58
+ ## Heurística de concisión: una verificación = un requerimiento
59
+
60
+ ¿La alarma visual y la audible son uno o dos REQs? **Se decide por cómo se
61
+ verificará**: si una sola prueba/demostración las verifica juntas, son UN
62
+ requerimiento; si exigen verificaciones separadas, son DOS. Ni párrafos con
63
+ múltiples REQs escondidos, ni multiplicar REQs sin razón — cada REQ se
64
+ administra y verifica, y eso cuesta.
65
+
66
+ ## Tipos técnicos (y su relación de verificación)
67
+
68
+ - **Funcional** — cualitativo: qué hace ("detectar blancos"). Se verifica por
69
+ la SUMA de sus requerimientos de desempeño asociados.
70
+ - **Desempeño** — cuantitativo y comprobable individualmente ("detectar 0.1 m²
71
+ a >20 km con Pd ≥ 0.9"). Usualmente varios por cada funcional.
72
+ - **Restricción de diseño** — límites bajo los que debe existir (peso, tamaño,
73
+ ambiente, stack impuesto).
74
+ - **Interface** — cómo interactúa con sistemas externos o entre subsistemas;
75
+ la excepción documentada a "libre de implementación".
76
+
77
+ ## Metadata de soporte por REQ
78
+
79
+ El REQ es un objeto de primera clase con metadata, no una línea suelta:
80
+
81
+ | Atributo | En swl-ses | Regla |
82
+ |---|---|---|
83
+ | **IDUR** | `REQ-<fase>-NN` (namespaceado) | Único, jamás reutilizado |
84
+ | **Padre** | `padre: REQ-<fase>-MM` (opcional) | Para REQs derivados de uno de nivel superior — da trazabilidad vertical |
85
+ | **Fuente** | quién/qué lo pidió (usuario en entrevista, PRD §, estándar, regla) | Sin fuente identificable → aplica prueba de "necesario" |
86
+ | **Razón** | 1 línea de racional o puntero (análisis, ADR, supuesto del Bloque 4) | Aquí vive lo que "conciso" echó del enunciado |
87
+ | **Riesgo** | alto/medio/bajo + por qué | Alimenta la priorización del plan |
88
+ | **Estado** | `PENDIENTE → definido → aprobado (gate G1) → verificado (gate G4) → borrado` | Mapa del ciclo PSD/PSR/Definido/Aprobado/Verificado/Borrado clásico; REQs `PENDIENTE` bloquean el cierre de la discusión |
89
+
90
+ ## Jerarquía de verificación (al declarar CÓMO se verificará cada REQ)
91
+
92
+ **Inspección** (mirar/medir el artefacto) < **demostración** (observar la
93
+ operación con instrumentación mínima — p. ej. medir MTTR reparando fallas
94
+ inducidas) < **prueba** (instrumentada por completo — la más confiable y la
95
+ más cara) — con **análisis** como soporte barato (modelos validados contra
96
+ pruebas previas). Elegir el método MÁS BARATO que realmente verifique el
97
+ REQ; declarar el método junto al criterio de aceptación.
98
+
99
+ ## Dos escalas de priorización (usar una, explícita)
100
+
101
+ - **Alto / Medio / Bajo** — crítico de misión para la próxima liberación /
102
+ necesario eventualmente / mejora si los recursos lo permiten.
103
+ - **Esencial / Condicional / Opcional** — el producto no es aceptable sin él /
104
+ mejora pero el producto es aceptable sin ella / puede o no valer la pena.
105
+ - MoSCoW (del PRD) mapea: Must≈Esencial, Should/Could≈Condicional,
106
+ Won't≈fuera. Declarar QUÉ escala se usa; nunca mezclar dos en el mismo doc.
107
+
108
+ ## Por qué la elicitación falla (y qué hace el cuestionario al respecto)
109
+
110
+ Restricciones clásicas que el entrevistador debe asumir como default:
111
+ **conocimiento tácito** (la gente no sabe describir lo que hace — pedir
112
+ ejemplos concretos, no definiciones), **distribución del conocimiento**
113
+ (fuentes múltiples en conflicto — los conflictos se registran como decisiones
114
+ del Bloque 4, no se resuelven en silencio), **observación limitada** y
115
+ **parcialidad** (el resultado afecta al informante). Es la razón por la que
116
+ `discutir-fase` pregunta supuestos explícitos y registra decisiones con
117
+ estado en vez de asumir consenso.
118
+
119
+ ## Cuándo NO cargar
120
+
121
+ - REQs ya congelados con plan aprobado (gate G1) — re-litigar el REQ ahí es
122
+ cambio de scope: pasa por re-planificación, no por este checklist.
123
+ - Tareas técnicas triviales sin REQs formales (fix puntual, typo).
124
+ - Verificación post-implementación — eso es `/swl:verificar` (G4).
125
+
126
+ ## Gotchas / Errores comunes no obvios
127
+
128
+ - **Checklist aplicado al documento y no al requerimiento**: las 8
129
+ características se evalúan POR REQ individual; un CONTEXTO.md "en general
130
+ claro" puede contener 2 REQs ambiguos que revientan la fase.
131
+ - **"Verificable" confundido con "tiene test"**: verificable es una propiedad
132
+ del ENUNCIADO (términos mensurables), previa al test. G4 valida que el test
133
+ exista; este skill valida que el enunciado sea testeable.
134
+ - **Racional dentro del enunciado**: si el REQ explica por qué, mezcla dos
135
+ atributos — mover el porqué a `Razón` y dejar el enunciado conciso.
136
+ - **Funcional "verificado" directamente**: un funcional sin desempeños
137
+ asociados se "verifica" con opinión. Todo funcional no trivial necesita al
138
+ menos un desempeño cuantitativo asociado.
139
+
140
+ ---
141
+
142
+ **Origen**: investigación académica de Saúl Wade, *"Ingeniería de
143
+ requerimientos"* (Wade Inc., ~2003; referencias [ZAVE94] y [RE'01 CfP]),
144
+ absorbida al sistema el 2026-07-08 (v2.5.1). El documento fuente vive en
145
+ `temp/` del repo madre (material de referencia, no distribuido); este skill
146
+ es su destilado operativo con el mapeo a los mecanismos SWL (gates G1/G4,
147
+ cuestionario de discutir-fase, MoSCoW del PRD).
@@ -318,8 +318,8 @@ de token inválido.
318
318
  - `semantic-release` ya está configurado en CI — si el release está automatizado, el número de versión se calcula desde los commits sin intervención manual; cargar este skill duplicaría el trabajo.
319
319
  - El proyecto es una herramienta interna sin consumidores que dependan de compatibilidad de versión — SemVer completo compensa cuando hay consumidores que confían en los números de versión para evaluar breaking changes.
320
320
 
321
- ## Gotchas / Errores comunes no obvios
322
-
321
+ ## Gotchas / Errores comunes no obvios
322
+
323
323
  - **El registry espejo NUNCA publica cuando el canónico falló sus gates** [caso real: v2.5.0 y v2.5.1 quedaron huérfanas en GitHub Packages, 2026-07-08/09]: un publisher dual que publica el mirror desde un directorio temporal preparado (donde `prepublishOnly`/gates NO corren) debe condicionar el paso 2 al éxito del paso 1 — si el canónico falló, el mirror se OMITE con aviso visible. Publicar tras el fallo sube un tarball sin validar y desalinea los registries: la misma versión no puede re-subirse, forzando un "republish de coordinación" (bump PATCH) que es puro costo. Verificar además que el flujo del mirror realmente corre gates en alguna parte — "los pre-publish ya pasaron en el intento 1" es una suposición, no una garantía.
324
324
 
325
325
  - **Tag ligero creado en lugar de anotado para el release**: `git tag v2.1.0` sin la flag `-a` crea un tag ligero que no incluye metadata de autor, fecha ni mensaje. Causa: olvidar la flag `-a` o la costumbre de usar tags ligeros para marcado temporal. Solución: siempre `git tag -a v2.1.0 -m "Release v2.1.0"` para releases — los tags anotados son los que `git describe` y las herramientas de changelog usan correctamente.
@@ -53,13 +53,12 @@ Más dos prácticas auxiliares del video:
53
53
  Ejecuta el auditor determinista:
54
54
 
55
55
  ```bash
56
- # Repo de swl-ses (script local): node scripts/auditar-claudemd.js [--json|--strict]
57
- # Proyecto downstream (NO existe el script local): usar el subcomando del CLI:
58
- npx -y @saulwade/swl-ses@latest audit-claudemd [--json|--strict]
56
+ # CLI cross-scope: en el repo madre resuelve al script local, en proyectos
57
+ # downstream al paquete instalado/npx. Mismo auditor en ambos casos.
58
+ swl-ses audit-claudemd [--json|--strict]
59
59
  ```
60
60
 
61
- Regla: si `scripts/auditar-claudemd.js` no existe en el CWD, usar SIEMPRE
62
- `npx ... audit-claudemd` — ambas rutas ejecutan el mismo auditor.
61
+ Si `swl-ses` no está en PATH: `npx -y @saulwade/swl-ses@latest audit-claudemd`.
63
62
 
64
63
  El auditor verifica nueve dimensiones (la fila `@references rotos` caza el `@reglas/...` roto downstream):
65
64
 
@@ -205,8 +204,8 @@ y mensaje WARN — project-level >50 LOC sin mención a los 4 principios).
205
204
  `/swl:aprender` **muta** CLAUDE.md; `/swl:claudemd` **prescribe contrato**.
206
205
  Todo comando SWL que escriba a CLAUDE.md del proyecto (`aprender`,
207
206
  `adoptar-proyecto`, `nuevo-proyecto`, `claudemd init-project`, futuros) DEBE
208
- ejecutar el auditor síncrono tras escribir (`node scripts/auditar-claudemd.js
209
- --json`), evaluar el veredicto (OK→continuar; WARN→proponer condensar/extraer;
207
+ ejecutar el auditor síncrono tras escribir (`swl-ses audit-claudemd --json`,
208
+ CLI cross-scope), evaluar el veredicto (OK→continuar; WARN→proponer condensar/extraer;
210
209
  `ERROR placeholders`→**DETENER y revertir**) y re-auditar hasta OK/WARN aceptable.
211
210
 
212
211
  Doble red: capa síncrona (Paso 6.5 de aprender — proactiva, bloquea el comando)
@@ -243,51 +243,15 @@ Muestra en terminal las métricas de activación y bloqueo de los guardrails (ho
243
243
  de la sesión actual. Los datos provienen de `hooks/lib/guardrail-metrics.js`.
244
244
 
245
245
  ```bash
246
- # Leer métricas de guardrails de la sesión actual desde /tmp/
247
- SESSION_ID="${CLAUDE_SESSION_ID:-default}"
248
- BRIDGE_FILE="/tmp/swl-guardrail-metrics-${SESSION_ID}.json"
249
-
250
- if [ -f "$BRIDGE_FILE" ]; then
251
- node -e "
252
- const m = require('$BRIDGE_FILE');
253
- const hooks = m.hooks || {};
254
- const entries = Object.entries(hooks).sort(([,a],[,b]) => b.bloqueos - a.bloqueos);
255
- if (entries.length === 0) {
256
- console.log('Ningún guardrail se activó en esta sesión.');
257
- } else {
258
- console.log('\\nGuardrails — Activaciones de la sesión\\n');
259
- console.log('Hook'.padEnd(30) + 'Activaciones'.padStart(13) + 'Bloqueos'.padStart(9) + 'Warnings'.padStart(9) + 'Tasa'.padStart(7));
260
- console.log('-'.repeat(68));
261
- for (const [nombre, datos] of entries) {
262
- const tasa = datos.activaciones > 0 ? Math.round(datos.bloqueos / datos.activaciones * 100) + '%' : '0%';
263
- console.log(nombre.replace('.js','').padEnd(30) + String(datos.activaciones).padStart(13) + String(datos.bloqueos).padStart(9) + String(datos.warnings).padStart(9) + tasa.padStart(7));
264
- }
265
- }
266
- "
267
- else
268
- echo "Sin datos de guardrails para esta sesión. (bridge: $BRIDGE_FILE)"
269
- echo "Los guardrails registran métricas cuando se activan durante la sesión."
270
- fi
246
+ # Tabla de activaciones + diagnóstico automático de la sesión actual
247
+ # (--session=ID para otra sesión; --json para salida cruda)
248
+ swl-ses guardrail-metrics
271
249
  ```
272
250
 
273
- Después de mostrar la tabla, ejecutar diagnóstico automático:
274
-
275
- ```bash
276
- node -e "
277
- try {
278
- const { getMetrics, diagnosticar } = require('./hooks/lib/guardrail-metrics');
279
- const SESSION_ID = process.env.CLAUDE_SESSION_ID || 'default';
280
- const metricas = getMetrics(SESSION_ID);
281
- const advertencias = diagnosticar(metricas);
282
- if (advertencias.length > 0) {
283
- console.log('\\n⚠ Diagnóstico:');
284
- advertencias.forEach(a => console.log(' - ' + a));
285
- } else {
286
- console.log('\\n✓ Guardrails sin anomalías detectadas.');
287
- }
288
- } catch(e) { console.log('(sin datos disponibles)'); }
289
- "
290
- ```
251
+ El subcomando lee el bridge de la sesión (tmpdir del SO, portable
252
+ Windows/POSIX), imprime la tabla de activaciones/bloqueos/warnings por hook
253
+ y ejecuta el diagnóstico de tasas anómalas — sin datos de sesión muestra el
254
+ resumen vacío.
291
255
 
292
256
  > El resumen de guardrails también aparece automáticamente al final de cada sesión
293
257
  > (hook `resumen-sesion.js`) cuando hay advertencias de tasa anómala.
@@ -314,6 +278,10 @@ Modos: `offline` = funciona leyendo archivos locales; `online` = requiere conexi
314
278
 
315
279
  ### Uso básico
316
280
 
281
+ API del módulo (layout del repo madre; en instalaciones destino vive aplanado
282
+ junto a los hooks instalados — es documentación de referencia, no un comando
283
+ a ejecutar en proyectos consumidores):
284
+
317
285
  ```javascript
318
286
  const { listarPorCategoria, listarPorModo, obtenerWidget, obtenerLayoutDefault } =
319
287
  require('./scripts/lib/dashboard-widgets');