@saulwade/swl-ses 1.5.2 → 1.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 (64) hide show
  1. package/CLAUDE.md +32 -61
  2. package/README.md +20 -3
  3. package/agentes/datos-swl.md +1 -1
  4. package/agentes/frontend-angular-swl.md +7 -7
  5. package/agentes/frontend-css-swl.md +4 -4
  6. package/agentes/frontend-react-swl.md +7 -7
  7. package/agentes/frontend-swl.md +9 -9
  8. package/agentes/frontend-tailwind-swl.md +4 -4
  9. package/agentes/rendimiento-swl.md +2 -2
  10. package/bin/swl-ses.js +49 -7
  11. package/comandos/swl/brainstorm.md +1 -0
  12. package/comandos/swl/compactar.md +1 -1
  13. package/comandos/swl/discutir-fase.md +15 -1
  14. package/comandos/swl/mapear-codebase.md +1 -1
  15. package/comandos/swl/nemesis.md +29 -0
  16. package/comandos/swl/planear-fase.md +2 -2
  17. package/comandos/swl/verificar.md +4 -4
  18. package/habilidades/aprendizaje-continuo/SKILL.md +7 -1
  19. package/habilidades/diseno-herramientas-agente/SKILL.md +1 -0
  20. package/habilidades/doc-sync/SKILL.md +441 -1
  21. package/habilidades/doubt-driven-review/SKILL.md +177 -171
  22. package/habilidades/feynman-auditor-swl/SKILL.md +129 -123
  23. package/habilidades/infra-github-actions/SKILL.md +172 -166
  24. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  25. package/habilidades/nemesis-evaluacion-json/SKILL.md +5 -0
  26. package/habilidades/nemesis-redistribuir/SKILL.md +5 -0
  27. package/habilidades/node-experto/SKILL.md +197 -3
  28. package/habilidades/prevencion-racionalizacion/SKILL.md +1 -0
  29. package/habilidades/privacy-memoria/SKILL.md +1 -0
  30. package/habilidades/sre-patrones/SKILL.md +1 -1
  31. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +172 -166
  32. package/habilidades/tdd-workflow/SKILL.md +178 -3
  33. package/habilidades/verificacion-evidencia/SKILL.md +1 -0
  34. package/habilidades/web-fetcher-routing/SKILL.md +81 -75
  35. package/habilidades/workflow-claude-code/SKILL.md +2 -2
  36. package/hooks/extraccion-aprendizajes.js +11 -0
  37. package/manifiestos/modulos.json +2 -1
  38. package/manifiestos/skills-lock.json +1142 -1114
  39. package/package.json +7 -4
  40. package/plugin.json +4 -2
  41. package/reglas/auditorias-documentales-estructurales.md +205 -0
  42. package/schemas/agent-frontmatter.schema.json +1 -1
  43. package/scripts/desinstalar.js +105 -24
  44. package/scripts/generar-inventario.js +450 -420
  45. package/scripts/instalador.js +55 -4
  46. package/scripts/lib/parsear-opciones.js +3 -0
  47. package/scripts/lib/ui.js +148 -22
  48. package/scripts/tui/componentes/selector-multi.js +189 -0
  49. package/scripts/tui/componentes/selector-unico.js +158 -0
  50. package/scripts/tui/ejecutores.js +375 -0
  51. package/scripts/tui/index.js +162 -0
  52. package/scripts/tui/lib/colores.js +129 -0
  53. package/scripts/tui/lib/render.js +264 -0
  54. package/scripts/tui/lib/teclas.js +113 -0
  55. package/scripts/tui/pantallas/inspect.js +173 -0
  56. package/scripts/tui/pantallas/install-wizard.js +334 -0
  57. package/scripts/tui/pantallas/menu-principal.js +52 -0
  58. package/scripts/tui/pantallas/progreso.js +274 -0
  59. package/scripts/tui/pantallas/resumen.js +132 -0
  60. package/scripts/tui/pantallas/uninstall-wizard.js +208 -0
  61. package/scripts/tui/pantallas/update-wizard.js +232 -0
  62. package/scripts/tui/pantallas/welcome.js +187 -0
  63. package/scripts/verificar-docs-vs-codigo.js +654 -0
  64. package/scripts/verificar-evolucion.js +19 -3
@@ -1,7 +1,12 @@
1
1
  ---
2
2
  name: doc-sync
3
3
  description: Sincronización de documentación con el estado actual del código. Detecta documentos desactualizados (README, ADRs, docstrings, comentarios de API), genera un changelog estructurado de los cambios relevantes, y mantiene los Architecture Decision Records (ADRs) actualizados con las decisiones tomadas durante el desarrollo.
4
- version: "1.0.0"
4
+ version: "1.3.0"
5
+ evolved: true
6
+ evolved-from: "1.2.0"
7
+ evolved-at: "2026-05-16"
8
+ evolved-by: "aprender"
9
+ evolved-note: "v1.3.0 (MINOR): sección nueva 'Protocolo proactivo: qué hacer al modificar componentes SWL' con sub-secciones por tipo (agente, skill, comando, hook, regla, variable de entorno, ADR, dependencia opt-in). Cierra el gap entre detección post-hoc (verificadores) y guía prescriptiva proactiva. Origen: feedback usuario 2026-05-16 — la información del flujo operativo estaba dispersa en 5 archivos (registro-componentes-nuevos.md + CLAUDE.md § Mapa + verificadores + reglas) sin un punto único invocable."
5
10
  herramientasPermitidas: [Read, Bash, Glob, Grep]
6
11
  exclusiones:
7
12
  - "No cargar para crear documentación nueva desde cero — este skill sincroniza documentación existente con el código actual; para crear documentación de feature nueva usar `documentador-swl` o escribir el README/ADR directamente."
@@ -260,6 +265,441 @@ NUNCA eliminar ADRs — son historia del proyecto.
260
265
 
261
266
  ---
262
267
 
268
+ ## Verificador automatizado doc-vs-código
269
+
270
+ Para proyectos con documentación extensa (>3 archivos `.md` activos) y
271
+ componentes inventariables (skills, comandos, agentes, flags, schemas), un
272
+ verificador automatizado **detecta drift sistemático** entre los archivos
273
+ de doc y el estado real del código. Es complementario al checklist manual.
274
+
275
+ ### Patrón de los 5 checks portables
276
+
277
+ | # | Check | Qué verifica | FAIL vs WARN |
278
+ |---|---|---|---|
279
+ | **1** | **Contadores** | Cifras en `INVENTARIO.md` / `README.md` (60 agentes, 162 skills, etc.) vs conteo real en disco | FAIL si difiere |
280
+ | **2** | **Comandos / componentes en disco vs docs** | Cada componente con archivo en `comandos/`, `agentes/`, etc. tiene mención en `COMANDOS.md` y `MANUAL_USO.md` | WARN (deuda preexistente OK) |
281
+ | **3** | **Flags del parser vs `--help` y docs** | Booleanas declaradas en `scripts/lib/parsear-opciones.js` (o equivalente) aparecen en `bin --help` y tabla de opciones | FAIL para flags críticos |
282
+ | **4** | **Versión `package.json` vs encabezados** | Primera línea de cada `.md` canónico (`README`, `CLAUDE.md`, etc.) menciona la versión actual | FAIL |
283
+ | **5** | **Componentes UI vs docs** | Cada archivo en `scripts/tui/pantallas/` (o equivalente UI) tiene al menos una mención en `MANUAL_USO.md` | FAIL |
284
+
285
+ ### Estructura recomendada del script
286
+
287
+ ```javascript
288
+ // scripts/verificar-docs-vs-codigo.js — esqueleto portable
289
+ const fs = require('fs');
290
+ const path = require('path');
291
+ const RAIZ = path.resolve(__dirname, '..');
292
+
293
+ function leerArchivo(rel) { /* ... */ }
294
+ const resultados = [];
295
+ function reportar(check, etiqueta, ok, detalle) { /* OK / FAIL / WARN */ }
296
+
297
+ // Cada check es una función pura que llama reportar() N veces
298
+ function check1Contadores() { /* INVENTARIO.md tabla vs disco */ }
299
+ function check2Comandos() { /* archivos en disco vs docs (WARN para deuda) */ }
300
+ function check3Flags() { /* parser BOOLEANAS vs --help + docs */ }
301
+ function check4Versiones() { /* package.json vs encabezados de .md */ }
302
+ function check5UIComponents() { /* archivos UI vs MANUAL_USO.md */ }
303
+
304
+ function main() {
305
+ check1Contadores(); check2Comandos(); check3Flags();
306
+ check4Versiones(); check5UIComponents();
307
+ const fails = resultados.filter(r => !r.ok).length;
308
+ process.exit(fails === 0 ? 0 : 1);
309
+ }
310
+ ```
311
+
312
+ ### Reglas operativas
313
+
314
+ - **WARN no falla CI** (deuda preexistente): use WARN para checks que
315
+ detectan gaps de adopción incremental (ej: comandos viejos sin
316
+ documentar). Si fuera FAIL, bloquearía el merge cuando lo correcto es
317
+ documentar incrementalmente.
318
+ - **FAIL bloquea CI** (drift de release): use FAIL solo para checks que
319
+ invalidarían el release (contadores incorrectos, versión incorrecta,
320
+ flags críticos sin documentar).
321
+ - **Soporta flags `--check N` y `--quiet`**: permite ejecutar un check
322
+ específico durante triage y suprimir output OK durante CI.
323
+ - **Integrado en `npm run test:all`**: el verificador corre tras los
324
+ validadores estructurales (`validar.js`, `validar-manifest.js`) para
325
+ que un PR con drift de docs falle CI antes del merge.
326
+ - **Exit codes 0/1/2**: 0 todo OK; 1 ≥1 FAIL; 2 error de invocación
327
+ (archivo no existe, regex inválido).
328
+
329
+ ### Origen del patrón
330
+
331
+ Aplicado en swl-ses v1.6.0 (`scripts/verificar-docs-vs-codigo.js`,
332
+ 425 LOC). Detectó: 5 comandos `/swl:*` sin documentar (WARN, resuelto
333
+ incrementalmente), 0 drift de contadores, 0 drift de versiones, 1
334
+ pantalla TUI sin mención (resuelto en mismo commit). Tras integrar a
335
+ `npm run test:all`, drift futuro será bloqueado automáticamente.
336
+
337
+ **Portabilidad**: el patrón aplica a cualquier proyecto con `INVENTARIO`
338
+ + docs + componentes inventariables. Adaptar las rutas y los regex de
339
+ extracción al stack del proyecto destino.
340
+
341
+ ---
342
+
343
+ ## Auditorías estructurales vs cosméticas
344
+
345
+ Un verificador automático que reporta "N/N checks OK" **no es prueba** de
346
+ que la documentación esté sincronizada — solo prueba que pasaron los
347
+ checks que ese verificador concretamente mide. La diferencia entre
348
+ **auditoría cosmética** y **auditoría estructural** es la dimensión más
349
+ importante de este skill.
350
+
351
+ ### Diferencia operativa
352
+
353
+ | Dimensión | Auditoría cosmética | Auditoría estructural |
354
+ |---|---|---|
355
+ | **Métrica** | "¿aparece la palabra X?" | "¿está documentada con profundidad ≥ N?" |
356
+ | **Cobertura** | Muestra (whitelist hardcodeada) | Universo (catálogo completo cross-archivo) |
357
+ | **WARN treatment** | "WARN no falla, paso a OK" | "WARN es deuda visible que cuento separado" |
358
+ | **Reporte al usuario** | "N/N checks OK ✓" | "N/N gate formal OK + sondeo manual: X gaps detectados" |
359
+ | **Skip treatment** | "✓ skip" sumado al conteo positivo | "skip" reportado aparte, no como pass |
360
+
361
+ ### Anti-patrones específicos a detectar
362
+
363
+ - **Verificador que cuenta "1 mención" como "documentado"**: bug grave.
364
+ Un comando complejo con flags y dependencias externas necesita al
365
+ menos 4 menciones (TOC + encabezado + uso + ejemplo). El gate debe
366
+ exigir profundidad, no solo presencia.
367
+ - **Whitelist hardcodeada en check de flags**: "estas 7 flags
368
+ críticas" deja fuera el universo real (todas las booleanas del
369
+ parser). Cruzar contra `BOOLEANAS` completo o explicitar las
370
+ excepciones.
371
+ - **WARN convertido en OK**: agregar `WARN no falla el verificador`
372
+ al detalle pero seguir contando como OK en el agregado. Usuario
373
+ ve "verde" y la deuda se acumula.
374
+ - **Reportar verde sin sondeo manual**: aceptar el output del
375
+ verificador como prueba sin tomar 2-3 ítems del dominio y
376
+ verificar profundidad real.
377
+ - **No detectar drift de catálogo**: variables de entorno, ADRs,
378
+ skills nuevos — todos pueden aparecer en código sin entrar al
379
+ catálogo documental si no hay gate de cobertura completa.
380
+
381
+ ### Gates de profundidad obligatorios (referencia)
382
+
383
+ Para sistemas tipo SWL con catálogo formal de componentes:
384
+
385
+ | Dimensión | Métrica | Gate FAIL si... |
386
+ |---|---|---|
387
+ | Comandos `/swl:*` | Menciones en MANUAL_USO | <4 menciones para comando no trivial |
388
+ | Variables de entorno `SWL_*` | Cobertura en `docs/variables-entorno.md` | Cualquier variable en código sin entrada en catálogo |
389
+ | ADRs | Referencias en MANUAL_USO + CHANGELOG | ADR que cambia comportamiento sin referencia |
390
+ | Integraciones opt-in | Estructura mínima de 8 secciones | Cualquier dependencia documentada solo con instalación |
391
+
392
+ ### Patrón de reporte al usuario (correcto)
393
+
394
+ ```
395
+ Verificador docs-vs-código: 10/10 OK formal.
396
+ - Check #1 contadores: 5/5 OK
397
+ - Check #2 comandos: 44/44 con profundidad >= 4 (o triviales)
398
+ - Check #3 flags: 7/7 críticas
399
+ - Check #4 versiones: 6/6
400
+ - Check #5 pantallas TUI: 8/8
401
+ - Check #6 variables SWL_*: 55/58 (3 huérfanas restantes — TIPO B documentar)
402
+
403
+ Sondeo manual estructural:
404
+ - ADRs no referenciados: 0/22 (todos vinculados en MANUAL_USO)
405
+ - Integraciones opt-in con estructura completa: 7/7
406
+ - Comandos infra-documentados detectados por gate: 0 (cerrados en mismo commit)
407
+
408
+ Conclusión: docs sincronizadas a profundidad estructural.
409
+ ```
410
+
411
+ ### Patrón de reporte al usuario (INCORRECTO — evitar)
412
+
413
+ ```
414
+ Verificador: 9/9 OK. ✓ Docs alineadas con código.
415
+ ```
416
+
417
+ Sin desglose de qué mide cada check, sin sondeo manual, sin enumerar
418
+ qué NO mide el verificador. Es lo que el usuario detectó como
419
+ "auditoría minimizada" en sesión 2026-05-16.
420
+
421
+ ### Cómo aplicar este patrón a otros proyectos
422
+
423
+ El skeleton `scripts/verificar-docs-vs-codigo.js` de swl-ses (~425 LOC
424
+ con 6 checks) es portable a cualquier proyecto Node.js con manifiestos.
425
+ Adaptaciones típicas por proyecto:
426
+
427
+ 1. **Check de comandos** → equivalente al de "endpoints documentados",
428
+ "componentes UI documentados", "hooks documentados".
429
+ 2. **Check de variables de entorno** → universal, mismo patrón.
430
+ 3. **Check de ADRs/Decisiones** → si el proyecto trackea decisiones.
431
+ 4. **Gates de profundidad** → ajustar `PROFUNDIDAD_MINIMA` según el
432
+ dominio (4 para CLIs, 6-8 para endpoints HTTP con OpenAPI).
433
+
434
+ Origen del patrón: regla local `reglas/auditorias-documentales-estructurales.md`
435
+ en swl-ses + ADR-0023.
436
+
437
+ ---
438
+
439
+ ## Protocolo proactivo — qué hacer al modificar componentes SWL
440
+
441
+ Esta sección es **prescriptiva**: dice qué archivos tocar, qué comandos
442
+ ejecutar y qué verificar **cuando agregas o modificas** un componente
443
+ del sistema SWL. Cierra el gap entre detección post-hoc (verificadores)
444
+ y guía proactiva (no esperar a que el gate falle).
445
+
446
+ **Cuándo cargar este skill como protocolo**: el agente debe invocar
447
+ `Skill("doc-sync")` ANTES de hacer commits cuando ha modificado
448
+ componentes estructurales del sistema. CLAUDE.md § Mapa de propagación
449
+ de cambios tiene la tabla rápida y apunta aquí para el detalle.
450
+
451
+ ### Principios generales que aplican a TODOS los tipos
452
+
453
+ 1. **Registro en mismo commit**: cualquier componente nuevo/modificado se registra en sus manifiestos en el MISMO commit. Nunca diferir al siguiente. Origen: `reglas/registro-componentes-nuevos.md`.
454
+ 2. **Profundidad ≥4 menciones**: para componentes con interfaz al usuario (comandos `/swl:*`, integraciones opt-in). Origen: `reglas/auditorias-documentales-estructurales.md`.
455
+ 3. **Catálogo formal único**: variables de entorno en `docs/variables-entorno.md`, ADRs en `.planning/adrs/README.md`, componentes en `INVENTARIO.md`. NO duplicar entre archivos.
456
+ 4. **Regenerar inventario al final**: `node scripts/generar-inventario.js` actualiza `INVENTARIO.md` y `SALUD.md`. Hacerlo antes del commit final.
457
+ 5. **Gate antes de commit**: `npm run test:all` (incluye `verificar-docs-vs-codigo.js`). Si falla, NO commitear hasta corregir.
458
+
459
+ ### Tipo 1 — Agente nuevo o modificado (`agentes/*.md`)
460
+
461
+ **Crear nuevo `agentes/X-swl.md`:**
462
+
463
+ | Archivo | Acción | Por qué |
464
+ |---|---|---|
465
+ | `agentes/X-swl.md` | Crear con frontmatter completo (`name`, `description`, `version`, `nivelRiesgo`, `tools`, `exclusiones`, `model` si aplica) | Componente principal |
466
+ | `plugin.json` | Agregar a array `agents` | Plugin descriptor para runtimes Claude Code |
467
+ | `manifiestos/modulos.json` | Agregar al módulo del dominio (backend/frontend/calidad/etc.) | Instalador propaga al destino |
468
+ | `AGENTS.md` | Agregar entrada al catálogo con capacidades | Documentación humana del catálogo |
469
+ | `INVENTARIO.md` | Regenerar con `node scripts/generar-inventario.js` | Contador oficial |
470
+ | `SALUD.md` | Regenerar (mismo script) | Health check |
471
+
472
+ **Modificar agente existente:**
473
+
474
+ - Si cambias `model`: verificar que la asignación respeta la tabla de Model-Tier del CLAUDE.md (crítico=Opus, estándar=Sonnet, ligero=Haiku).
475
+ - Si cambias `tools`: si declaras `skillsInvocables: [...]` Y usas `Skill(...)` en el cuerpo, debe incluir `Skill` en `tools:` (regla CLAUDE.md).
476
+ - Si agregas/quitas fragmentos: declarar `fragmentos: [_nombre]` en frontmatter (regla `fragmentos-compartidos.md`).
477
+
478
+ **Comando a ejecutar al final**: `npm run test:all`. El gate valida frontmatter, manifiestos y permisos.
479
+
480
+ ### Tipo 2 — Skill nuevo o modificado (`habilidades/X/SKILL.md`)
481
+
482
+ **Crear nuevo `habilidades/X/SKILL.md`:**
483
+
484
+ | Archivo | Acción | Por qué |
485
+ |---|---|---|
486
+ | `habilidades/X/SKILL.md` | Crear con frontmatter (`name`, `description`, `version`, `evolved: false`, `herramientasPermitidas`, `exclusiones`) y prefijo de dominio en el nombre (backend-/frontend-/mobile-/datos-/etc.) | Componente principal |
487
+ | `plugin.json` | Agregar a array `skills` | Plugin descriptor |
488
+ | `manifiestos/modulos.json` | Agregar al módulo del dominio | Instalador |
489
+ | `manifiestos/skills-lock.json` | (auto-generado al ejecutar inventario) | Lock de versión por skill |
490
+ | `INVENTARIO.md` + `SALUD.md` | Regenerar | Contador oficial |
491
+ | `CLAUDE.md` § Sistema de habilidades | Solo si aplica al dominio principal | Discoverability |
492
+
493
+ **Modificar skill existente con cambio de contenido:**
494
+
495
+ Aplica el bump SemVer y los metadatos `evolved`:
496
+
497
+ ```bash
498
+ # 1. Detectar tipo de cambio
499
+ # - Gotcha nuevo, regla nueva, fix redacción: PATCH (X.Y.Z → X.Y.Z+1)
500
+ # - Sección nueva, alcance ampliado: MINOR (X.Y.0 → X.Y+1.0)
501
+ # - Redefinición incompatible: MAJOR (X.0.0 → X+1.0.0)
502
+
503
+ # 2. Editar frontmatter del skill:
504
+ # version: "1.X.Y" (bump según tipo)
505
+ # evolved: true
506
+ # evolved-from: "<versión-anterior>"
507
+ # evolved-at: "YYYY-MM-DD"
508
+ # evolved-by: "aprender" (o "evolucionar", "manual")
509
+ # evolved-note: "<descripción breve>"
510
+
511
+ # 3. Verificar antes de commit
512
+ node bin/swl-ses.js verify-evolution --changed --since=HEAD
513
+ ```
514
+
515
+ **Comando a ejecutar al final**: `npm run test:all` + `npx swl-ses verify-evolution --changed --since=HEAD`. La verificación de evolución es gate obligatorio (regla `gobernanza.md` G8).
516
+
517
+ ### Tipo 3 — Comando `/swl:*` nuevo o modificado (`comandos/swl/X.md`)
518
+
519
+ **Crear nuevo `comandos/swl/X.md`:**
520
+
521
+ | Archivo | Acción | Por qué |
522
+ |---|---|---|
523
+ | `comandos/swl/X.md` | Crear archivo del slash command con frontmatter y cuerpo de instrucciones | Componente principal |
524
+ | `manifiestos/modulos.json` | Agregar a módulo del dominio | Instalador |
525
+ | `COMANDOS.md` | Agregar entrada con flags, descripción, ejemplo | Catálogo de referencia |
526
+ | `CLAUDE.md` § tabla de comandos `/swl:*` | Agregar línea con propósito | Discovery rápida |
527
+ | `MANUAL_USO.md` | Agregar sección dedicada con **mínimo 4 menciones del comando** (TOC + encabezado + Uso + ejemplo) | **Gate Check #2 endurecido** |
528
+ | `INVENTARIO.md` | Regenerar | Contador oficial |
529
+
530
+ **Estructura mínima obligatoria en MANUAL_USO.md** (gate de profundidad):
531
+
532
+ ```markdown
533
+ ### `/swl:nombre-comando`
534
+
535
+ **Uso:** `/swl:nombre-comando [flags y argumentos]`
536
+
537
+ **¿Qué hace?**
538
+ Descripción funcional en 2-3 oraciones.
539
+
540
+ **Cuándo usarlo:**
541
+ - Caso de uso 1
542
+ - Caso de uso 2
543
+
544
+ **Ejemplos concretos**:
545
+ \`\`\`bash
546
+ /swl:nombre-comando # caso default
547
+ /swl:nombre-comando --flag valor # con argumentos
548
+ \`\`\`
549
+
550
+ **Troubleshooting** (si tiene dependencias externas):
551
+ Problemas frecuentes y soluciones.
552
+ ```
553
+
554
+ Los comandos triviales (`ayuda`, `salud`, `modelo`, `contexto`, `dashboard`, `sesiones`, `instintos`, `metricas`, `mcp-status`) están exentos del gate ≥4 menciones (lista hardcodeada en `scripts/verificar-docs-vs-codigo.js`).
555
+
556
+ **Comando a ejecutar al final**: `npm run test:all`.
557
+
558
+ ### Tipo 4 — Hook nuevo o modificado (`hooks/X.js`)
559
+
560
+ **Crear nuevo `hooks/X.js`:**
561
+
562
+ | Archivo | Acción | Por qué |
563
+ |---|---|---|
564
+ | `hooks/X.js` | Crear con zero-deps (importar solo de `hooks/lib/`) y exit code 0 (regla seguridad-agentes) | Componente principal |
565
+ | `plugin.json` | Agregar a array `hooks` (si aplica) | Plugin descriptor |
566
+ | `.claude/settings.json` | Agregar event + matcher (`PreToolUse`, `PostToolUse`, `Stop`, etc.) | Settings local |
567
+ | `manifiestos/hooks-config.json` | Agregar `event` + `matcher` + `blocking` | Instalador propaga la config |
568
+ | `manifiestos/modulos.json` | Agregar ruta del archivo al módulo | Instalador copia el archivo |
569
+ | `INVENTARIO.md` + `SALUD.md` | Regenerar | Contador oficial |
570
+
571
+ **Punto crítico — AMBOS manifiestos son obligatorios**: si solo agregas a `.claude/settings.json` pero no a `manifiestos/hooks-config.json`, el hook NO se propaga al destino del instalador. Y viceversa.
572
+
573
+ **Si el hook usa variable de entorno opt-in `SWL_*`**:
574
+ - Documentarla en `docs/variables-entorno.md` en sección apropiada (Auditoría / Notificaciones / Drift / Daemon / etc.) en el MISMO commit.
575
+ - Gate Check #6 falla si la variable existe en código pero no en catálogo.
576
+
577
+ **Comando a ejecutar al final**: `npm run test:manifest` (valida ambos manifiestos) + `npm run test:all`.
578
+
579
+ ### Tipo 5 — Regla nueva o modificada (`reglas/X.md`)
580
+
581
+ **Crear nueva `reglas/X.md`:**
582
+
583
+ | Archivo | Acción | Por qué |
584
+ |---|---|---|
585
+ | `reglas/X.md` | Crear archivo con título, principio, cómo aplicar, anti-patrones, origen | Componente principal |
586
+ | `CLAUDE.md` § tabla de reglas | Agregar línea con matcher | Discovery + carga automática |
587
+ | `manifiestos/modulos.json` | Agregar al módulo correspondiente | Instalador |
588
+ | `INVENTARIO.md` + `SALUD.md` | Regenerar | Contador oficial |
589
+
590
+ **Si la regla es transversal a múltiples proyectos del usuario**:
591
+ - Considerar promoverla a `~/.claude/rules/X.md` (regla global) en lugar de local del proyecto.
592
+ - Las globales se cargan automáticamente en TODOS los proyectos del usuario.
593
+
594
+ **Regla obligatoria nueva**: si declaras la regla como obligatoria para todos los agentes, es un cambio **MAJOR** del sistema (regla `gobernanza.md`). Requiere ADR + período de revisión.
595
+
596
+ **Comando a ejecutar al final**: `npm run test:all`.
597
+
598
+ ### Tipo 6 — Variable de entorno opt-in `SWL_*` nueva o modificada
599
+
600
+ **Agregar variable nueva `SWL_NUEVA_VAR` en hook o script:**
601
+
602
+ | Archivo | Acción | Por qué |
603
+ |---|---|---|
604
+ | `hooks/X.js` o `scripts/Y.js` | Código que usa `process.env.SWL_NUEVA_VAR` con patrón `if (!process.env.X) return` | Componente principal |
605
+ | `docs/variables-entorno.md` | Agregar entrada en sección apropiada con: nombre, default, archivo que la consume, qué activa, cómo desactivar | **Catálogo formal único — gate Check #6** |
606
+ | `MANUAL_USO.md` | (opcional) Mención si es relevante al flujo del usuario final | Discovery |
607
+
608
+ **Sección apropiada en `docs/variables-entorno.md`** según el dominio:
609
+ - Auditoría y observabilidad
610
+ - Mission Control externo
611
+ - Calidad de CLAUDE.md
612
+ - Drift y auto-evolución
613
+ - Clasificador y monitor de contexto
614
+ - Webhook entrante HTTP local
615
+ - Protección de rutas
616
+ - Daemon SWL
617
+ - MCP server
618
+ - Notificaciones y output
619
+ - Captura de feedback y perfil de usuario
620
+ - Update check y release
621
+ - Hooks: control de wrapper y paths
622
+ - Telemetría y registro de turnos
623
+ - Workflows y herramientas inferidas
624
+ - Filtros de extracción
625
+ - Debug y desarrollo del propio SWL
626
+
627
+ Si tu variable no encaja en ninguna, **NO** crees sección nueva por una sola variable — agregar a la más cercana con nota o consultar al maintainer.
628
+
629
+ **Comando a ejecutar al final**: `node scripts/verificar-docs-vs-codigo.js --check 6`. Falla si la variable está en código pero no en el catálogo.
630
+
631
+ ### Tipo 7 — ADR nuevo (`.planning/adrs/NNNN-titulo.md`)
632
+
633
+ **Crear nuevo ADR:**
634
+
635
+ | Archivo | Acción | Por qué |
636
+ |---|---|---|
637
+ | `.planning/adrs/NNNN-titulo.md` | Crear con frontmatter (fecha, estado, decisores, relacionado) y secciones obligatorias (Contexto, Decisión, Por qué, Alternativas, Consecuencias, Origen) | Componente principal |
638
+ | `.planning/adrs/README.md` | Agregar fila a la tabla "Estado de cada ADR" con número, título corto, estado, fecha | **Índice obligatorio (regla `arquitectura.md`)** |
639
+ | `MANUAL_USO.md` | Referenciar el ADR en la sección del feature que materializa, **si cambia comportamiento observable** | Discovery del usuario |
640
+ | `CHANGELOG.md` | Mencionar en la versión que lo introduce | Trazabilidad |
641
+
642
+ **Estado del ADR**:
643
+ - `Propuesto`: en discusión, NO implementado. Debe tener fecha de reevaluación 6-12 meses y criterios de disparo.
644
+ - `Aceptado`: decisión final, implementación en curso o completada.
645
+ - `Deprecado`: sigue vigente pero se anticipa reemplazo.
646
+ - `Reemplazado por ADR NNN`: superado por otro ADR.
647
+ - `Descartado`: se evaluó y se decidió NO adoptar.
648
+
649
+ **Numeración estricta**: el ADR nuevo recibe el siguiente número secuencial. NUNCA reutilizar un número, ni siquiera de ADRs descartados.
650
+
651
+ **Comando a ejecutar al final**: ninguno automatizado. La validez del ADR es revisión humana.
652
+
653
+ ### Tipo 8 — Dependencia externa opt-in nueva
654
+
655
+ **Documentar nueva dependencia opt-in (markitdown, agent-browser, code-review-graph, etc.):**
656
+
657
+ `MANUAL_USO.md § Dependencias externas — referencia detallada` con **estructura mínima de 8 secciones** obligatorias (regla `auditorias-documentales-estructurales.md`):
658
+
659
+ 1. **Marcador obligatorio**: "NO es dependencia técnica de swl-ses" (regla CLAUDE.md sobre dependencias educativas opt-in).
660
+ 2. **Qué es** y **por qué existe la integración** (no solo instalación).
661
+ 3. **Beneficio cuantificado** vs alternativas (tokens, espacio, tiempo — números, no adjetivos).
662
+ 4. **Cuándo vale la pena** vs **cuándo NO instalarlo**.
663
+ 5. **Cómo lo usa el sistema** internamente (qué agente/skill/comando lo invoca — tabla).
664
+ 6. **Comportamiento si NO está instalado** (debe degradar funcionalmente sin fallar — regla `arreglar-al-detectar`).
665
+ 7. **Limitaciones conocidas**.
666
+ 8. **Origen** (ADR, sesión, paper, repo).
667
+
668
+ Si la dependencia se distribuye via `npx`, **validar costo de tarball** con `npm view <paquete> dist.unpackedSize` antes de aceptar (regla global `analisis-previo-tareas-grandes.md § Validar costo real de deps`).
669
+
670
+ **Comando a ejecutar al final**: `npm run test:all` (Check #2 valida mención mínima).
671
+
672
+ ---
673
+
674
+ ### Checklist único antes de cualquier commit estructural
675
+
676
+ Ejecuta en orden:
677
+
678
+ ```bash
679
+ # 1. Regenerar inventario (single source of truth de contadores)
680
+ node scripts/generar-inventario.js
681
+
682
+ # 2. Verificar manifiestos coherentes
683
+ npm run test:manifest
684
+
685
+ # 3. Si modificaste skill o agente: verificar evolución
686
+ npx swl-ses verify-evolution --changed --since=HEAD
687
+
688
+ # 4. Verificar docs-vs-código (10 checks)
689
+ node scripts/verificar-docs-vs-codigo.js
690
+
691
+ # 5. Suite completa
692
+ npm run test:all
693
+
694
+ # 6. (solo antes de release) Gate pre-publish
695
+ node scripts/verificar-release.js
696
+ ```
697
+
698
+ Si CUALQUIER paso falla, **no commitees**. Corregir primero. La regla
699
+ `arreglar-al-detectar.md` exige resolver en mismo turno, no diferir.
700
+
701
+ ---
702
+
263
703
  ## Regla de cierre
264
704
 
265
705
  Ninguna fase se marca como "completada" si la documentación contradice