@saulwade/swl-ses 2.1.0 → 2.2.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 (113) hide show
  1. package/CLAUDE.md +199 -196
  2. package/README.md +597 -579
  3. package/agentes/arquitecto-swl.md +0 -5
  4. package/agentes/backend-python-swl.md +0 -5
  5. package/agentes/implementador-swl.md +0 -5
  6. package/agentes/nemesis-auditor-swl.md +0 -5
  7. package/agentes/orquestador-swl.md +0 -5
  8. package/agentes/planificador-swl.md +0 -5
  9. package/agentes/revisor-codigo-swl.md +0 -5
  10. package/bin/swl-ses.js +63 -0
  11. package/comandos/swl/adoptar-proyecto.md +12 -14
  12. package/comandos/swl/aprender.md +30 -47
  13. package/comandos/swl/aprobar-plan.md +23 -35
  14. package/comandos/swl/autoresearch.md +12 -14
  15. package/comandos/swl/briefing.md +5 -8
  16. package/comandos/swl/checkpoint.md +10 -15
  17. package/comandos/swl/claudemd.md +12 -12
  18. package/comandos/swl/configurar-ci.md +20 -19
  19. package/comandos/swl/cron.md +10 -12
  20. package/comandos/swl/ejecutar-fase.md +10 -8
  21. package/comandos/swl/evolucionar.md +6 -11
  22. package/comandos/swl/inbox.md +10 -10
  23. package/comandos/swl/modelo.md +7 -9
  24. package/comandos/swl/notificaciones.md +19 -116
  25. package/comandos/swl/nuevo-proyecto.md +9 -14
  26. package/comandos/swl/release.md +19 -5
  27. package/comandos/swl/revisar-impacto.md +0 -5
  28. package/comandos/swl/status.md +333 -348
  29. package/comandos/swl/verificar.md +817 -813
  30. package/habilidades/agent-browser/SKILL.md +0 -5
  31. package/habilidades/angular-moderno/SKILL.md +0 -5
  32. package/habilidades/api-rest-diseno/SKILL.md +0 -5
  33. package/habilidades/aprendizaje-continuo/SKILL.md +0 -5
  34. package/habilidades/auth-patrones/SKILL.md +0 -5
  35. package/habilidades/build-errors-nextjs/SKILL.md +0 -5
  36. package/habilidades/changelog-generator/SKILL.md +174 -179
  37. package/habilidades/checklist-seguridad/SKILL.md +0 -5
  38. package/habilidades/contenedores-docker/SKILL.md +0 -5
  39. package/habilidades/datos-etl/SKILL.md +0 -5
  40. package/habilidades/doc-sync/SKILL.md +0 -5
  41. package/habilidades/extractor-de-aprendizajes/SKILL.md +0 -5
  42. package/habilidades/fastapi-experto/SKILL.md +0 -5
  43. package/habilidades/frontend-avanzado/SKILL.md +0 -5
  44. package/habilidades/iam-secretos/SKILL.md +0 -5
  45. package/habilidades/manejo-errores/SKILL.md +0 -5
  46. package/habilidades/mapear-codebase/SKILL.md +0 -5
  47. package/habilidades/meta-skills-estandar/SKILL.md +0 -5
  48. package/habilidades/monitoring-alertas/SKILL.md +0 -5
  49. package/habilidades/nextjs-experto/SKILL.md +0 -5
  50. package/habilidades/nextjs-testing/SKILL.md +0 -5
  51. package/habilidades/node-experto/SKILL.md +0 -5
  52. package/habilidades/orquestacion-async/SKILL.md +0 -5
  53. package/habilidades/patrones-python/SKILL.md +227 -232
  54. package/habilidades/planear-fase/SKILL.md +336 -341
  55. package/habilidades/postgresql-experto/SKILL.md +0 -5
  56. package/habilidades/prevencion-sobreingenieria/SKILL.md +0 -5
  57. package/habilidades/protocolo-revision-swl/SKILL.md +0 -5
  58. package/habilidades/react-experto/SKILL.md +0 -5
  59. package/habilidades/release-semver/SKILL.md +0 -5
  60. package/habilidades/swl-claudemd/SKILL.md +10 -11
  61. package/habilidades/tdd-workflow/SKILL.md +710 -715
  62. package/habilidades/testing-python/SKILL.md +335 -340
  63. package/habilidades/verificar-trabajo/SKILL.md +0 -5
  64. package/hooks/lib/evolution-tracker.js +191 -35
  65. package/hooks/lib/propose-step.js +1 -0
  66. package/llms.txt +1 -1
  67. package/manifiestos/canonical-hashes.json +656 -0
  68. package/manifiestos/modulos.json +3 -0
  69. package/manifiestos/skills-lock.json +71 -71
  70. package/package.json +1 -1
  71. package/plugin.json +1 -1
  72. package/scripts/auditar-claudemd.js +38 -0
  73. package/scripts/cli/aprobar-plan.js +73 -0
  74. package/scripts/cli/briefing.js +23 -0
  75. package/scripts/cli/ciclo-evolucion.js +26 -0
  76. package/scripts/cli/configurar-ci.js +40 -0
  77. package/scripts/cli/derivar-feature-list.js +25 -0
  78. package/scripts/cli/detectar-host.js +27 -0
  79. package/scripts/cli/diary-entry.js +69 -0
  80. package/scripts/cli/execution-state.js +18 -0
  81. package/scripts/cli/gateway-notify.js +41 -0
  82. package/scripts/cli/liberar-fase.js +42 -0
  83. package/scripts/cli/loop-telemetry.js +125 -0
  84. package/scripts/cli/mark-evolved.js +56 -0
  85. package/scripts/cli/metricas-dora.js +26 -0
  86. package/scripts/cli/near-duplicate.js +55 -0
  87. package/scripts/cli/notificaciones.js +123 -0
  88. package/scripts/cli/propose-step.js +29 -0
  89. package/scripts/cli/schedule-parse.js +19 -0
  90. package/scripts/cli/sugerir-modelo.js +20 -0
  91. package/scripts/cli/verificar-plan.js +36 -0
  92. package/scripts/cli/verificar-trazabilidad.js +35 -0
  93. package/scripts/derivar-feature-list.js +1 -0
  94. package/scripts/generar-canonical-hashes.js +147 -0
  95. package/scripts/instalador.js +126 -53
  96. package/scripts/lib/audit-evolved.js +71 -0
  97. package/scripts/lib/auditar-invocaciones-comandos.js +104 -0
  98. package/scripts/lib/canonical-hash.js +94 -0
  99. package/scripts/lib/evolved-fuente.js +138 -0
  100. package/scripts/lib/resolver-plan-fase.js +37 -0
  101. package/scripts/remediar-evolved-instaladas.js +239 -0
  102. package/scripts/validar.js +27 -0
  103. package/scripts/verificar-evolucion.js +36 -0
  104. package/scripts/verificar-release.js +33 -0
  105. package/scripts/verificar-trazabilidad.js +1 -1
  106. package/agentes/.evolved.json +0 -9
  107. package/comandos/swl/.evolved.json +0 -23
  108. package/habilidades/auth-patrones/.evolved.json +0 -9
  109. package/habilidades/extractor-de-aprendizajes/.evolved.json +0 -9
  110. package/habilidades/instalar-sistema/.evolved.json +0 -9
  111. package/habilidades/manejo-errores/.evolved.json +0 -9
  112. package/habilidades/node-experto/.evolved.json +0 -9
  113. package/habilidades/release-semver/.evolved.json +0 -9
@@ -13,11 +13,6 @@ modeloAlterno: claude-sonnet-4-6
13
13
  ventanaContexto: 200k
14
14
  color: blue
15
15
  version: 1.0.1
16
- evolved: true
17
- evolved-from: "1.0.0"
18
- evolved-at: "2026-05-16"
19
- evolved-by: "aprender"
20
- evolved-note: "v1.0.1: documentar contrato 'arquitecto NO tiene Write tool — produce contenido textual, el padre lo materializa'. Origen: sesión 2026-05-16 ADR-0021."
21
16
  nivelRiesgo: MEDIO
22
17
  skillsInvocables: [api-rest-diseno, microservicios, event-driven, cloud-aws, postgresql-experto, extraccion-documentos, diagrama-arquitectura]
23
18
  skillsRestringidos: []
@@ -23,11 +23,6 @@ skillsRestringidos: [angular-moderno, typescript-avanzado, react-native-best-pra
23
23
  permisosRed: false
24
24
  permisosEscritura: true
25
25
  permisosComandos: true
26
- evolved: true
27
- evolved-from: "5.2.0"
28
- evolved-at: "2026-04-02"
29
- evolved-by: "mutación SIGAF"
30
- evolved-note: "Evolución incorporada desde proyecto SIGAF"
31
26
  toolBudget:
32
27
  simple: 15
33
28
  standard: 30
@@ -20,11 +20,6 @@ skillsRestringidos: [auto-evolucion-protocolo]
20
20
  permisosRed: false
21
21
  permisosEscritura: true
22
22
  permisosComandos: true
23
- evolved: true
24
- evolved-from: "5.2.0"
25
- evolved-at: "2026-04-02"
26
- evolved-by: "mutación SIGAF"
27
- evolved-note: "Evolución incorporada desde proyecto SIGAF"
28
23
  toolBudget:
29
24
  simple: 15
30
25
  standard: 30
@@ -12,11 +12,6 @@ tools: [Read, Grep, Glob, Bash, Write]
12
12
  model: claude-sonnet-4-6
13
13
  version: 1.1.1
14
14
  nivelRiesgo: MEDIO
15
- evolved: true
16
- evolved-from: "1.1.0"
17
- evolved-at: "2026-05-20"
18
- evolved-by: "aprender"
19
- evolved-note: "L-154 SIGM: reforzar exclusión ADR-0021 (no aplicar fixes) + agregar Gate defensivo post-fix (python -c import + compileall + tests) para detectar SyntaxErrors Python 2 que ruff no detecta cuando el agente excepcionalmente aplica fixes"
20
15
  skillsInvocables: [feynman-auditor-swl, state-inconsistency-auditor-swl, memoria-busqueda, checklist-seguridad, nemesis-evaluacion-json]
21
16
  permisosRed: false
22
17
  permisosEscritura: true
@@ -16,11 +16,6 @@ ventanaContexto: 200k
16
16
  permissionMode: plan
17
17
  color: white
18
18
  version: 1.3.0
19
- evolved: true
20
- evolved-from: "1.2.0"
21
- evolved-at: "2026-06-04"
22
- evolved-by: "evolucionar"
23
- evolved-note: "PE-005 sección 5 'Sub-agente background falla con API Error: Usage credits required for 1M context — verificar filesystem antes de re-intentar' + PE-006 sección 6 'Cuándo NO delegar a sub-agentes Opus 4.7 1M context'. Aprobación humana explícita pese a evolvable=false (función sistémica) — patrones de recovery operativos validados en OIC v1.5 2026-06-04 (2 sub-agentes background fallaron al cerrar pero dejaron ~700 LOC en disco)."
24
19
  nivelRiesgo: BAJO
25
20
  skillsInvocables: [compactacion-contexto, checkpoints-verificacion, aprendizaje-continuo, discutir-fase, ejecutar-fase, planear-fase, nuevo-proyecto, brainstorming, control-profundidad, prevencion-racionalizacion, estructura-proyecto-claude, workflow-claude-code, git-worktrees-paralelo, swl-dashboard, instalar-sistema, mapear-codebase, orquestacion-async, context-builder]
26
21
  skillsRestringidos: [fastapi-python, angular-component, angular-forms, postgresql-table-design]
@@ -19,11 +19,6 @@ skillsRestringidos: []
19
19
  permisosRed: false
20
20
  permisosEscritura: true
21
21
  permisosComandos: false
22
- evolved: true
23
- evolved-from: "5.2.0"
24
- evolved-at: "2026-04-02"
25
- evolved-by: "mutación SIGAF"
26
- evolved-note: "Evolución incorporada desde proyecto SIGAF; v1.2.0 agrega secciones vivas del ExecPlan (Progreso, Sorpresas, Bitácora de decisiones, Retrospectiva) portadas desde openai-agents-python PLANS.md"
27
22
  toolBudget:
28
23
  simple: 10
29
24
  standard: 20
@@ -16,11 +16,6 @@ modeloAlterno: claude-haiku-4-5-20251001
16
16
  ventanaContexto: 200k
17
17
  color: orange
18
18
  version: 1.2.2
19
- evolved: true
20
- evolved-from: "1.2.1"
21
- evolved-at: "2026-06-05"
22
- evolved-by: "evolucionar"
23
- evolved-note: "+gating por versión de lenguaje antes de marcar sintaxis como SyntaxError CRÍTICO: leer requires-python/target-version/tsconfig/edition y refutar con import+linter del stack (aplicación de verificar-citas Familia 2 a claims de sintaxis). Generalizable a cualquier lenguaje version-dependent. Origen: falso positivo PEP 758 (except A,B: en Python 3.14) en sistema-verificacion-oic."
24
19
  nivelRiesgo: BAJO
25
20
  skillsInvocables: [checklist-calidad, patrones-python, api-rest-diseno, tdd-workflow, verificar-trabajo, verificacion-evidencia, swl-revisar-impacto, prevencion-sobreingenieria]
26
21
  skillsRestringidos: []
package/bin/swl-ses.js CHANGED
@@ -119,6 +119,26 @@ const COMANDOS = {
119
119
  'audit-coverage-frameworks': '../scripts/cli/audit-coverage-frameworks.js',
120
120
  'audit-agents-gaps': '../scripts/cli/audit-agents-gaps.js',
121
121
  'skill-discovery': '../scripts/cli/skill-discovery.js',
122
+ 'aprobar-plan': '../scripts/cli/aprobar-plan.js',
123
+ 'verificar-plan': '../scripts/cli/verificar-plan.js',
124
+ 'verificar-trazabilidad': '../scripts/cli/verificar-trazabilidad.js',
125
+ 'liberar-fase': '../scripts/cli/liberar-fase.js',
126
+ 'propose-step': '../scripts/cli/propose-step.js',
127
+ 'derivar-feature-list': '../scripts/cli/derivar-feature-list.js',
128
+ 'detectar-host': '../scripts/cli/detectar-host.js',
129
+ 'metricas-dora': '../scripts/cli/metricas-dora.js',
130
+ 'mark-evolved': '../scripts/cli/mark-evolved.js',
131
+ 'near-duplicate': '../scripts/cli/near-duplicate.js',
132
+ 'sugerir-modelo': '../scripts/cli/sugerir-modelo.js',
133
+ briefing: '../scripts/cli/briefing.js',
134
+ 'execution-state': '../scripts/cli/execution-state.js',
135
+ 'schedule-parse': '../scripts/cli/schedule-parse.js',
136
+ 'gateway-notify': '../scripts/cli/gateway-notify.js',
137
+ 'diary-entry': '../scripts/cli/diary-entry.js',
138
+ 'loop-telemetry': '../scripts/cli/loop-telemetry.js',
139
+ 'configurar-ci': '../scripts/cli/configurar-ci.js',
140
+ 'ciclo-evolucion': '../scripts/cli/ciclo-evolucion.js',
141
+ notificaciones: '../scripts/cli/notificaciones.js',
122
142
  };
123
143
 
124
144
  // Comandos con subcomandos (nivel 2)
@@ -177,6 +197,49 @@ COMANDOS PRINCIPALES:
177
197
  Usado por /swl:salud.
178
198
  skill-discovery [query] Descubre y busca skills SWL. Sin query lista todos.
179
199
  Flag: --rebuild. Usado por /swl:skill-search.
200
+ aprobar-plan --fase=N Gate G1: firma el PLAN (SHA256 → lock) y escribe
201
+ fase-activa.json (gate G0). Flags: --plan=<ruta>,
202
+ --aprobado-por="texto". Usado por /swl:aprobar-plan.
203
+ verificar-plan --fase=N Verifica el lock de un PLAN (read-only). Exit 1 si
204
+ mutado/sin-firmar. Usado por /swl:ejecutar-fase.
205
+ verificar-trazabilidad --fase=N Valida matriz REQ×T→commit→test. Flags:
206
+ --solo-plan, --json. Usado por /swl:aprobar-plan.
207
+ liberar-fase Cierra el gate G0 (borra fase-activa.json). Usado
208
+ por /swl:ejecutar-fase al terminar.
209
+ propose-step --rango=A..B Anexo propositivo del RESUMEN de fase (ADR-0037).
210
+ Opt-out SWL_PROPOSE=0. Usado por /swl:ejecutar-fase.
211
+ derivar-feature-list Genera .planning/feature-list.json desde HOJA-RUTA.md.
212
+ Flag: --check (exit 2 si drift). Usado por /swl:status, briefing.
213
+ detectar-host Indica si el CWD es el repo host de SWL o consumidor.
214
+ Flag: --json. Usado por /swl:status.
215
+ metricas-dora Calcula métricas DORA del repo. Flags: --json, --dias=N.
216
+ Usado por /swl:status.
217
+ mark-evolved <ruta> Marca un componente como evolucionado (frontmatter).
218
+ Flags: --from, --by, --note, --rounds, --score.
219
+ Usado por /swl:aprender, autoresearch, evolucionar.
220
+ near-duplicate --texto="..." Detecta si un aprendizaje es duplicado cercano.
221
+ Flags: --archivo, --threshold. Usado por /swl:aprender.
222
+ sugerir-modelo "<tarea>" Sugiere modelo (opus/sonnet/haiku) por complejidad.
223
+ Usado por /swl:modelo.
224
+ briefing Recolecta señales baratas del briefing. Usado por
225
+ /swl:briefing.
226
+ execution-state Imprime el resumen de .planning/execution-state.json.
227
+ Usado por /swl:checkpoint.
228
+ schedule-parse "<frase>" Parsea frase en inglés a expresión cron. Usado por
229
+ /swl:cron.
230
+ gateway-notify --texto="..." Encola notificación al canal origen del gateway.
231
+ Flags: --tipo, --to, --reply-to. Usado por /swl:inbox.
232
+ diary-entry (JSON stdin) Construye y persiste una entrada de diario de sesión.
233
+ Usado por /swl:aprender.
234
+ loop-telemetry <op> Telemetría de loops: iniciar|registrar|handoff|listar.
235
+ Usado por /swl:verificar, autoresearch, status.
236
+ configurar-ci <op> Workflows CI/CD: init|status|uninstall (salida JSON).
237
+ Usado por /swl:configurar-ci.
238
+ ciclo-evolucion Regenera .planning/evolution/metricas.json.
239
+ Usado por /swl:status.
240
+ notificaciones <op> Telegram: init|status|disable|repair|bot-start|
241
+ bot-stop|bot-status|bot-restart|bot-enable-autostart|
242
+ bot-disable-autostart. Usado por /swl:notificaciones.
180
243
  info [--target <runtime>] Muestra información del sistema instalado
181
244
  help Muestra esta ayuda (alias de --help)
182
245
  list [--target <runtime>] Lista todos los agentes y skills instalados
@@ -2,11 +2,6 @@
2
2
  name: swl:adoptar-proyecto
3
3
  description: Incorpora un proyecto existente al sistema SWL. Analiza automáticamente el codebase (stack, arquitectura, dependencias, estado git) y combina los hallazgos con una entrevista corta al usuario para generar los 9 archivos de .planning/ con información real del proyecto — no plantillas vacías.
4
4
  allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "Agent"]
5
- evolved: true
6
- evolved-from: "1.6.8"
7
- evolved-at: "2026-05-22"
8
- evolved-by: "aprender"
9
- evolved-note: "Paso 8 — validación síncrona del auditor tras modificar CLAUDE.md (contrato cruzado con /swl:claudemd)"
10
5
  ---
11
6
 
12
7
  # /swl:adoptar-proyecto — Incorporar un proyecto existente al sistema SWL
@@ -182,15 +177,18 @@ Verificar el estado de `CLAUDE.md` en la raíz del proyecto:
182
177
  ```markdown
183
178
  ## Reglas obligatorias
184
179
 
185
- @reglas/usar-sistema-swl.md
180
+ Aplica la regla global `usar-sistema-swl.md` (matriz operacional del sistema
181
+ SWL), auto-cargada desde `.claude/rules/`. NO duplicar su contenido aquí.
186
182
  ```
187
- - **Si existe pero NO incluye `@reglas/usar-sistema-swl.md`**: agregar la
188
- referencia en una sección "Reglas obligatorias" cerca del inicio del
189
- archivo, preservando el contenido existente.
190
- - **Si existe e incluye la referencia**: no tocar.
183
+ - **Si existe pero NO menciona la regla global `usar-sistema-swl`**: agregar la
184
+ mención en una sección "Reglas obligatorias" cerca del inicio del archivo,
185
+ preservando el contenido existente. NUNCA usar `@reglas/usar-sistema-swl.md`
186
+ esa ruta no existe en proyectos downstream (las reglas viven en
187
+ `.claude/rules/`).
188
+ - **Si existe e incluye la mención**: no tocar.
191
189
 
192
- Esta referencia carga la matriz operacional del sistema SWL al inicio de cada
193
- sesión y es el contrato base de uso del sistema para el proyecto adoptado.
190
+ Esta mención recuerda la matriz operacional del sistema SWL y es el contrato
191
+ base de uso del sistema para el proyecto adoptado.
194
192
 
195
193
  ### Validación síncrona post-modificación (contrato cruzado con /swl:claudemd)
196
194
 
@@ -198,7 +196,7 @@ Tras generar o modificar `CLAUDE.md` en este paso, ejecutar el auditor
198
196
  síncrono para verificar que respeta el contrato canónico:
199
197
 
200
198
  ```bash
201
- node scripts/auditar-claudemd.js --json
199
+ swl-ses audit-claudemd --json
202
200
  # Fallback si el script no está en el proyecto destino:
203
201
  npx -y @saulwade/swl-ses@latest audit-claudemd --json
204
202
  ```
@@ -230,7 +228,7 @@ Archivos generados:
230
228
  ✓ .planning/research/FUNCIONALIDADES.md — inventario de funcionalidades
231
229
  ✓ .planning/research/RESUMEN.md — resumen ejecutivo consolidado
232
230
  ✓ .planning/research/TRAMPAS.md — deuda técnica y anti-patrones
233
- ✓ CLAUDE.md — creado o actualizado con @reglas/usar-sistema-swl.md
231
+ ✓ CLAUDE.md — creado o actualizado con mención de la regla global usar-sistema-swl
234
232
 
235
233
  Hallazgos clave:
236
234
  1. [hallazgo más importante]
@@ -2,11 +2,6 @@
2
2
  name: swl:aprender
3
3
  description: Extrae aprendizajes de la sesión de trabajo actual. Analiza patrones de errores, decisiones y soluciones para generar nuevas reglas y habilidades que mejoran el sistema. Actualiza CLAUDE.md del proyecto y propone nuevas habilidades al sistema SWL.
4
4
  allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
5
- evolved: true
6
- evolved-from: "1.6.9"
7
- evolved-at: "2026-05-22"
8
- evolved-by: "aprender"
9
- evolved-note: "Paso 6.5 § Protocolo 4.5 — detección de duplicación de reglas globales tras Tipo A (regla sin-duplicacion-reglas-globales.md, v1.7.0)"
10
5
  ---
11
6
 
12
7
  # /swl:aprender — Extracción de aprendizajes y mejora del sistema
@@ -308,19 +303,18 @@ Marcar `evolved` y bumpear la versión interna del componente son **dos operacio
308
303
 
309
304
  ### Acción 1 — Marcar como evolved
310
305
 
306
+ Usar el subcomando del CLI (resuelve cross-scope; ver
307
+ `docs/invocacion-cli-cross-scope.md`):
308
+
311
309
  ```bash
312
- node -e "
313
- const { markAsEvolved } = require('./hooks/lib/evolution-tracker');
314
- const pkg = require('./package.json');
315
- const r = markAsEvolved('[RUTA_ARCHIVO_MODIFICADO]', {
316
- from: pkg.version,
317
- by: 'aprender',
318
- note: '[tipo de aprendizaje: anti-patrón / mejora de metodología]'
319
- });
320
- console.log(r.marked ? 'Marcado como evolucionado' : 'Error: ' + r.error);
321
- "
310
+ swl-ses mark-evolved "[RUTA_ARCHIVO_MODIFICADO]" \
311
+ --by=aprender \
312
+ --note="[tipo de aprendizaje: anti-patrón / mejora de metodología]"
313
+ # fallback: npx -y @saulwade/swl-ses@latest mark-evolved "[RUTA]" --by=aprender --note="..."
322
314
  ```
323
315
 
316
+ `--from` se infiere del `package.json` del CWD si se omite.
317
+
324
318
  `markAsEvolved` registra automáticamente `evolved-at` con la fecha del día en formato ISO (`YYYY-MM-DD`) — no hay que pasarla manualmente. Escribe en el frontmatter los 5 campos siguientes:
325
319
 
326
320
  ```yaml
@@ -421,7 +415,7 @@ Solo si en Paso 6 se aplicó al menos un Tipo A:
421
415
  1. **Ejecutar el auditor síncrono**:
422
416
 
423
417
  ```bash
424
- node scripts/auditar-claudemd.js --json
418
+ swl-ses audit-claudemd --json
425
419
  ```
426
420
 
427
421
  Si el script no está disponible en el proyecto destino (instalación
@@ -573,29 +567,24 @@ búsquedas futuras y análisis cross-sesión.
573
567
  - Solo se respondieron preguntas técnicas sin tocar código.
574
568
  - Sesión < 30min sin commits.
575
569
 
576
- **Cómo generar**:
577
-
578
- ```js
579
- const diary = require('./scripts/lib/diary-entry');
580
-
581
- let entry = diary.createDiary({
582
- sessionId: '<id-de-sesión>',
583
- agent: 'orquestador-swl',
584
- });
585
- entry = diary.addAccomplishment(entry, '<logro 1>');
586
- entry = diary.addDecision(entry, '<decisión 1 + razón>');
587
- entry = diary.addLearning(entry, '<aprendizaje clave 1>');
588
- entry = diary.addSourceAgent(entry, 'implementador-swl');
589
- entry = diary.closeDiary(entry);
590
-
591
- const fs = require('fs');
592
- const path = require('path');
593
- const dir = '.planning/sessions/diary';
594
- if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
595
- fs.writeFileSync(path.join(dir, `${entry.id}.json`), diary.serializeDiary(entry));
570
+ **Cómo generar** (subcomando del CLI, resuelve cross-scope; ver
571
+ `docs/invocacion-cli-cross-scope.md`). Pasar el contenido como JSON por stdin:
572
+
573
+ ```bash
574
+ echo '{
575
+ "sessionId": "<id-de-sesión>",
576
+ "agent": "orquestador-swl",
577
+ "accomplishments": ["<logro 1>"],
578
+ "decisions": ["<decisión 1 + razón>"],
579
+ "learnings": ["<aprendizaje clave 1>"],
580
+ "sourceAgents": ["implementador-swl"]
581
+ }' | swl-ses diary-entry
582
+ # fallback: ... | npx -y @saulwade/swl-ses@latest diary-entry
596
583
  ```
597
584
 
598
- Validar con `validateDiary()` antes de persistir. Reportar en el output:
585
+ El subcomando construye la entrada, valida (`validateDiary`) y la persiste en
586
+ `.planning/sessions/diary/<id>.json`, imprimiendo la ruta escrita. Reportar en
587
+ el output:
599
588
 
600
589
  ```
601
590
  Diary generado: .planning/sessions/diary/diary-YYYYMMDD-HASH.json
@@ -714,16 +703,10 @@ Durante la consolidación (siguiente sección), usar estos niveles para decidir:
714
703
  Antes de persistir un aprendizaje nuevo, verificar que no sea duplicado de uno existente:
715
704
 
716
705
  ```bash
717
- # Usar fingerprint-id para detectar duplicados exactos o cercanos
718
- node -e "
719
- const { isNearDuplicate } = require('./hooks/lib/fingerprint-id');
720
- const fs = require('fs');
721
- const aprendizajes = fs.readFileSync('.planning/APRENDIZAJES.md', 'utf8');
722
- const existentes = aprendizajes.split(/^## /m).filter(Boolean);
723
- const nuevo = '[TEXTO_DEL_APRENDIZAJE_NUEVO]';
724
- const r = isNearDuplicate(nuevo, existentes, 0.6);
725
- console.log(r.nearDuplicate ? 'DUPLICADO (sim=' + r.similarity + ')' : 'ÚNICO');
726
- "
706
+ # Subcomando del CLI (resuelve cross-scope; ver docs/invocacion-cli-cross-scope.md).
707
+ # Lee APRENDIZAJES.md, divide por '## ' y compara con umbral 0.6 por defecto.
708
+ swl-ses near-duplicate --texto="[TEXTO_DEL_APRENDIZAJE_NUEVO]"
709
+ # fallback: npx -y @saulwade/swl-ses@latest near-duplicate --texto="[TEXTO]"
727
710
  ```
728
711
 
729
712
  Si es duplicado (similitud ≥0.6), fusionar con la entrada existente en vez de crear nueva.
@@ -15,6 +15,14 @@ a mano (`estado: aprobado`) deja el plan en modo legacy (cláusula de gracia D-0
15
15
  se ejecuta con advertencia pero sin protección de integridad. Usar este comando
16
16
  es lo que activa el gate real.
17
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
+
18
26
  ## Uso
19
27
 
20
28
  ```
@@ -37,7 +45,7 @@ Lee el campo `estado:` del frontmatter:
37
45
  - Si `estado: borrador` → continúa al Paso 3 (caso normal).
38
46
  - Si `estado: aprobado` → ya está aprobado. Verifica si existe el lock:
39
47
  ```bash
40
- node -e "const {verificarPlan}=require('./scripts/lib/plan-lock'); console.log(JSON.stringify(verificarPlan('.planning/fases/0N-PLAN.md')))"
48
+ swl-ses verificar-plan --fase=N
41
49
  ```
42
50
  - Si `modo: "firmado"` → informa "El plan ya está aprobado y firmado." y termina.
43
51
  - Si `modo: "legacy"` (aprobado sin lock) → pregunta al usuario: "El plan está
@@ -59,7 +67,7 @@ aceptación. `verificar-trazabilidad.js` reconoce ambos formatos.
59
67
  ("CONTEXTO sin REQ-IDs — trazabilidad no exigible, gracia legacy") y continúa.
60
68
  - **CONTEXTO con REQ-IDs**: verifica que el PLAN cubra TODOS:
61
69
  ```bash
62
- node scripts/verificar-trazabilidad.js --fase=N --solo-plan
70
+ swl-ses verificar-trazabilidad --fase=N --solo-plan
63
71
  ```
64
72
  - Exit 0 → continúa al Paso 3.
65
73
  - Exit 1 (REQ huérfanos) → **RECHAZA la aprobación**. Lista los REQ sin tarea y
@@ -86,41 +94,21 @@ a `/swl:planear-fase N` para refinar.
86
94
  edita el frontmatter `estado: borrador` → `estado: aprobado` y agrega
87
95
  `aprobadoPor: usuario (<nombre>) — <fecha>, via /swl:aprobar-plan`.
88
96
 
89
- 2. **Firmar** — escribe el lock SHA256:
90
- ```bash
91
- node -e "const {firmarPlan}=require('./scripts/lib/plan-lock'); const r=firmarPlan('.planning/fases/0N-PLAN.md'); console.log(JSON.stringify(r))"
92
- ```
93
- Verifica que el resultado sea `ok: true` y que exista
94
- `.planning/locks/0N-PLAN.md.lock`.
95
-
96
- 3. **Verificar** la firma de inmediato:
97
- ```bash
98
- node -e "const {verificarPlan}=require('./scripts/lib/plan-lock'); console.log(JSON.stringify(verificarPlan('.planning/fases/0N-PLAN.md')))"
99
- ```
100
- Debe retornar `modo: "firmado"`, `ok: true`.
101
-
102
- 4. **Marcar la fase como activa** (gate G0 — `hooks/spec-gate.js` consume este
103
- archivo): escribe `.planning/locks/fase-activa.json` con el sha256 devuelto
104
- por `firmarPlan`:
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`):
105
101
  ```bash
106
- node -e "
107
- const {atomicWriteJSON} = require('./hooks/lib/atomic-write');
108
- const {verificarPlan} = require('./scripts/lib/plan-lock');
109
- const v = verificarPlan('.planning/fases/0N-PLAN.md');
110
- atomicWriteJSON('.planning/locks/fase-activa.json', {
111
- numero: N,
112
- planPath: '.planning/fases/0N-PLAN.md',
113
- sha256: v.hashEsperado,
114
- aprobadoEn: new Date().toISOString(),
115
- aprobadoPor: 'usuario via /swl:aprobar-plan'
116
- });
117
- console.log('fase activa: 0N');
118
- "
102
+ swl-ses aprobar-plan --fase=N
119
103
  ```
120
- Este archivo es runtime local (gitignored a diferencia del `.lock`, que
121
- se versiona como evidencia). `/swl:ejecutar-fase` lo elimina al cerrar la fase.
122
- Si se re-firma un plan (re-aprobación tras mutación), re-escribir también
123
- fase-activa.json para que el hash quede alineado.
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` 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.
124
112
 
125
113
  ## Paso 5 — Reporte
126
114
 
@@ -135,20 +135,15 @@ Resultado: [ÉXITO | PLATEAU | ESTANCAMIENTO | DEGRADACIÓN]
135
135
 
136
136
  Si el score mejoró respecto al baseline:
137
137
  1. Actualizar versión del skill/agente (< 10 pts: PATCH, >= 10 pts: MINOR)
138
- 2. **OBLIGATORIO — Marcar como evolucionado ejecutando este comando Bash**:
138
+ 2. **OBLIGATORIO — Marcar como evolucionado** con el subcomando del CLI
139
+ (resuelve cross-scope; ver `docs/invocacion-cli-cross-scope.md`):
139
140
  ```bash
140
- node -e "
141
- const { markAsEvolved } = require('./hooks/lib/evolution-tracker');
142
- const pkg = require('./package.json');
143
- const r = markAsEvolved('[RUTA_ARCHIVO_MODIFICADO]', {
144
- from: pkg.version,
145
- by: 'autoresearch',
146
- rounds: [N_ROUNDS],
147
- score: '[BASELINE]% → [FINAL]%',
148
- note: '[descripción breve de las mutaciones]'
149
- });
150
- console.log(r.marked ? 'Marcado como evolucionado' : 'Error: ' + r.error);
151
- "
141
+ swl-ses mark-evolved "[RUTA_ARCHIVO_MODIFICADO]" \
142
+ --by=autoresearch \
143
+ --rounds=[N_ROUNDS] \
144
+ --score="[BASELINE]% [FINAL]%" \
145
+ --note="[descripción breve de las mutaciones]"
146
+ # fallback: npx -y @saulwade/swl-ses@latest mark-evolved "[RUTA]" --by=autoresearch ...
152
147
  ```
153
148
  Reemplazar los placeholders entre corchetes con los valores reales.
154
149
  Si el comando Bash no está disponible, agregar manualmente en el frontmatter:
@@ -220,8 +215,11 @@ Si `--dry-run`: terminar aquí mostrando la configuración derivada.
220
215
 
221
216
  ### Paso C1 — Baseline y telemetría
222
217
 
218
+ Subcomando del CLI (resuelve cross-scope; ver `docs/invocacion-cli-cross-scope.md`).
219
+ Imprime el `<dir>` de la corrida:
220
+
223
221
  ```bash
224
- node -e "const lt=require('./hooks/lib/loop-telemetry');const r=lt.iniciarCorrida({tipo:'autoresearch',direccion:'[direction]',config:{goal:'[goal]',scope:'[scope]',verify:'[verify]',guard:'[guard]'}});console.log(r.dir)"
222
+ swl-ses loop-telemetry iniciar --tipo=autoresearch --direccion=[direction] --config='{"goal":"[goal]","scope":"[scope]","verify":"[verify]","guard":"[guard]"}'
225
223
  ```
226
224
 
227
225
  Correr Verify, extraer la métrica, registrar la iteración 0 (`estado:
@@ -28,12 +28,9 @@ Ejecuta los recolectores de filesystem y presenta el digest sin tope de 5 (aquí
28
28
  sí caben todas, no hay presupuesto de latencia de arranque):
29
29
 
30
30
  ```bash
31
- node -e "
32
- const b = require('./hooks/lib/briefing.js');
33
- const items = b.recolectarTodo(process.cwd(), new Date());
34
- for (const it of items) console.log('— [' + it.categoria + '] ' + it.titulo + ' → ' + it.accion);
35
- if (items.length === 0) console.log('(sin señales baratas)');
36
- "
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
37
34
  ```
38
35
 
39
36
  Las 5 categorías: `adr-vencido`, `deuda-trigger`, `nudges-pendientes`,
@@ -78,11 +75,11 @@ commits sin revisión asociada. Si no está disponible → omitir con nota.
78
75
  ### 2.4 — Drift de feature-list
79
76
 
80
77
  ```bash
81
- node scripts/derivar-feature-list.js --check 2>/dev/null; echo "exit: $?"
78
+ swl-ses derivar-feature-list --check 2>/dev/null; echo "exit: $?"
82
79
  ```
83
80
 
84
81
  Exit 2 → reportar que `HOJA-RUTA.md` y `feature-list.json` divergieron, con la
85
- acción `node scripts/derivar-feature-list.js` para regenerar.
82
+ acción `swl-ses derivar-feature-list` para regenerar.
86
83
 
87
84
  ### 2.5 — Deuda con trigger en prosa libre
88
85
 
@@ -221,24 +221,19 @@ cat .planning/execution-state.json 2>/dev/null || echo "(sin estado de ejecució
221
221
  ```
222
222
 
223
223
  Si existe, actualizar el campo `proximoAgente` con la siguiente tarea pendiente.
224
- Si no existe y hay un plan en progreso con agentes ejecutados en esta sesión, crear el estado:
224
+ Si no existe y hay un plan en progreso con agentes ejecutados en esta sesión,
225
+ imprimir el resumen estructurado con el subcomando del CLI (resuelve cross-scope;
226
+ ver `docs/invocacion-cli-cross-scope.md`):
225
227
 
226
- ```javascript
227
- // Ejemplo de actualización manual desde el orquestador o skill ejecutar-fase:
228
- const es = require('./hooks/lib/execution-state');
229
-
230
- // Registrar agentes completados en esta sesión
231
- // es.completarAgente(cwd, 'nombre-agente', 'slice', { resumen: '...' });
232
-
233
- // Registrar el próximo agente a ejecutar
234
- // es.establecerProximo(cwd, 'proximo-agente', 'proximo-slice');
235
-
236
- // Ver resumen del estado
237
- console.log(es.formatearResumen(process.cwd()));
228
+ ```bash
229
+ swl-ses execution-state
230
+ # fallback: npx -y @saulwade/swl-ses@latest execution-state
238
231
  ```
239
232
 
240
- Incluir el resumen de `formatearResumen()` en el `continue-here.md` generado en el Paso 4,
241
- bajo la sección "Qué se estaba haciendo".
233
+ Incluir ese resumen en el `continue-here.md` generado en el Paso 4, bajo la
234
+ sección "Qué se estaba haciendo". El registro de agentes
235
+ (`completarAgente`/`establecerProximo`) lo gestiona el skill `ejecutar-fase`
236
+ internamente; aquí solo se lee el resumen.
242
237
 
243
238
  ## Paso 4 — Creación del continue-here.md
244
239
 
@@ -2,11 +2,6 @@
2
2
  name: swl:claudemd
3
3
  description: Audita, refactoriza, valida o inicializa archivos CLAUDE.md según best practices Anthropic (ADR-0016). Subcomandos audit (analiza calidad), refactor (sugiere extracciones), check (verifica secciones canónicas), init-user (crea ~/.claude/CLAUDE.md template), init-project (genera CLAUDE.md raíz del proyecto).
4
4
  allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
5
- evolved: true
6
- evolved-from: "1.6.9"
7
- evolved-at: "2026-05-22"
8
- evolved-by: "aprender"
9
- evolved-note: "Audit dimensión 7 — duplicación de reglas globales (cataloga 6 reglas de ~/.claude/rules/ que NO deben duplicarse inline). Refactor propone reemplazo canónico. Aplica regla nueva sin-duplicacion-reglas-globales.md."
10
5
  ---
11
6
 
12
7
  # /swl:claudemd — Tratamiento profesional de CLAUDE.md
@@ -127,12 +122,15 @@ y genera `./CLAUDE.md` mínimo con:
127
122
  ```markdown
128
123
  ## Reglas obligatorias
129
124
 
130
- @reglas/usar-sistema-swl.md
125
+ Aplica la regla global `usar-sistema-swl.md` (matriz operacional del sistema
126
+ SWL), auto-cargada desde `.claude/rules/`. NO duplicar su contenido aquí.
131
127
  ```
132
- Esta referencia es obligatoria — fuerza que el agente cargue la matriz
133
- operacional de uso del sistema SWL al inicio de cada sesión. Si el proyecto
134
- tiene otras reglas locales (`@reglas/seguridad.md`, `@reglas/arquitectura.md`,
135
- etc.), agregarlas debajo.
128
+ Esta mención es obligatoria — recuerda la matriz operacional de uso del
129
+ sistema SWL. NO usar `@reglas/usar-sistema-swl.md`: la regla se auto-carga
130
+ desde `.claude/rules/` y un `@reglas/...` se rompe en proyectos downstream
131
+ (ahí no existe `reglas/`). Las demás reglas globales (`seguridad.md`,
132
+ `arquitectura.md`, etc.) también se auto-cargan desde `.claude/rules/` — NO
133
+ referenciarlas con `@reglas/...`; mencionarlas por nombre si hace falta.
136
134
  - Sección **Reglas de máxima prioridad** con sub-sección obligatoria
137
135
  **Cuatro principios de implementación (Karpathy)**:
138
136
  ```markdown
@@ -150,7 +148,7 @@ y genera `./CLAUDE.md` mínimo con:
150
148
 
151
149
  Si CLAUDE.md ya existe, **NO lo sobreescribe**. Sugiere correr
152
150
  `/swl:claudemd refactor` para mejorar el actual. Si detecta que el CLAUDE.md
153
- existente NO incluye `@reglas/usar-sistema-swl.md` o NO menciona los cuatro
151
+ existente NO menciona la regla global `usar-sistema-swl` o NO menciona los cuatro
154
152
  principios Karpathy (o `prevencion-sobreingenieria`), emitir hallazgo WARN
155
153
  recomendando agregarlo manualmente.
156
154
 
@@ -160,7 +158,9 @@ Tras `init-project` generar el archivo nuevo, ejecutar inmediatamente
160
158
  `audit` sobre el resultado:
161
159
 
162
160
  ```bash
163
- node scripts/auditar-claudemd.js --json
161
+ swl-ses audit-claudemd --json
162
+ # Fallback si el script no está en el proyecto destino (instalación global vía npm):
163
+ npx -y @saulwade/swl-ses@latest audit-claudemd --json
164
164
  ```
165
165
 
166
166
  Veredicto esperado: `OK` (el template debe respetar el contrato por