@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
package/CLAUDE.md CHANGED
@@ -1,4 +1,4 @@
1
- # CLAUDE.md — @saulwade/swl-ses v1.5.2
1
+ # CLAUDE.md — @saulwade/swl-ses v1.6.1
2
2
 
3
3
  ## Reglas de máxima prioridad (aplican SIEMPRE, sin excepción)
4
4
 
@@ -19,19 +19,7 @@ python scripts/vendor/markitdown/cli.py <ruta-al-archivo>
19
19
  El Read tool sigue siendo correcto para `.pdf` (≤20 páginas), `.md`, `.txt` y código fuente. Para más opciones y casos de uso consultar `Skill("swl-markitdown")`.
20
20
 
21
21
  ### Versión SemVer del próximo release: decisión exclusiva del usuario
22
- NUNCA asumir, sugerir como hecho consumado, ni escribir en ADRs/manifiestos/CHANGELOG el número del próximo release sin autorización explícita del usuario en la conversación actual. El agente puede **recomendar** el bump apropiado según SemVer estricto ("este cambio sugiere MINOR"), pero la **decisión final del número es del usuario**.
23
-
24
- Comportamiento correcto:
25
- - Recomendar: "feature opt-in nuevo sugiere bump MINOR (v1.5.1 → v1.6.0)."
26
- - Esperar autorización: "¿confirmas el bump?"
27
- - Aplicar solo lo autorizado: usuario dice "v1.5.2", aplicar v1.5.2.
28
-
29
- Comportamiento prohibido:
30
- - Escribir "v1.6.0" en ADR/CHANGELOG/manifiestos basado en juicio propio del agente.
31
- - Asumir que SemVer estricto sustituye la autorización del usuario.
32
- - Sincronizar las 15+ ubicaciones de versión sin que el usuario confirme el número.
33
-
34
- Origen: sesión 2026-05-16, ADR-0021. El agente asumió v1.6.0; el usuario eligió v1.5.2 al considerar que el cambio cerraba un bug observado con backward-compat estricta — decisión legítima del usuario que el agente no anticipó. Documentado como aprendizaje HIGH en APRENDIZAJES.md.
22
+ NUNCA asumir, sugerir como hecho consumado, ni escribir en ADRs/manifiestos/CHANGELOG el número del próximo release sin autorización explícita del usuario en la conversación actual. El agente puede **recomendar** el bump apropiado según SemVer estricto, pero la **decisión final del número es del usuario**. Detalle y origen del aprendizaje en `.planning/APRENDIZAJES.md` sesión 2026-05-16 (ADR-0021).
35
23
 
36
24
  ---
37
25
 
@@ -98,7 +86,6 @@ Origen: sesión 2026-05-16, ADR-0021. El agente asumió v1.6.0; el usuario eligi
98
86
  - `@COMANDOS.md` — referencia detallada de cada `/swl:*`
99
87
  - `@AGENTS.md` — catálogo de agentes con capacidades
100
88
  - `@INVENTARIO.md` — conteos oficiales (regenerado por script)
101
- - `@CONTRIBUTING.md` — guía para colaboradores
102
89
  - `@docs/variables-entorno.md` — variables opt-in completas
103
90
  - `@docs/CI-CD-SETUP.md` — setup de pipelines
104
91
  - `@.planning/adrs/README.md` — índice de decisiones arquitecturales
@@ -108,7 +95,7 @@ Origen: sesión 2026-05-16, ADR-0021. El agente asumió v1.6.0; el usuario eligi
108
95
  ## Qué es este repositorio
109
96
 
110
97
  Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo).
111
- 11 lenguajes, 7 runtimes (Claude, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot), 60 agentes, 162 skills, 44 comandos, 66 reglas, 41 hooks.
98
+ 11 lenguajes, 7 runtimes (Claude, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot), 60 agentes, 162 skills, 44 comandos, 67 reglas, 41 hooks.
112
99
 
113
100
  ## Estructura del repositorio
114
101
 
@@ -128,23 +115,17 @@ scripts/ bin/ _userland/ .claude/ .planning/
128
115
 
129
116
  ## Comandos del sistema (/swl:*)
130
117
 
131
- Para la lista completa con descripción ver `@COMANDOS.md`. Comandos más usados:
118
+ Catálogo completo de 44 comandos `/swl:*` en `@COMANDOS.md`. Atajos mentales por categoría:
132
119
 
133
- | Comando | Propósito |
134
- |---------|-----------|
135
- | `/swl:nuevo-proyecto` | Iniciar proyecto nuevo desde cero con entrevista |
136
- | `/swl:adoptar-proyecto` | Incorporar proyecto existente: análisis automático + entrevista corta |
137
- | `/swl:discutir-fase` / `/swl:planear-fase` / `/swl:ejecutar-fase` / `/swl:verificar` | Ciclo GSD por fase. `discutir-fase` empieza con discovery routing (5 paths: extender / sin-fase / nueva / decomposición / mixto). `ejecutar-fase --iterative` activa modo per-task con review adversarial. `verificar` clasifica claims (TASK/FIX/TEST_OR_BUILD/FEATURE_GO) para evidencia proporcional. |
138
- | `/swl:checkpoint` / `/swl:compactar` | Anti-context-rot |
139
- | `/swl:claudemd` | Auditar/refactorizar/inicializar CLAUDE.md (audit, refactor, init-user, check) |
140
- | `/swl:aprender` / `/swl:evolucionar` / `/swl:autoresearch` | Aprendizaje y auto-evolución |
141
- | `/swl:salud` / `/swl:metricas` / `/swl:dashboard` | Diagnóstico y observabilidad |
142
- | `/swl:revisar` / `/swl:verificar` | Calidad de código (revisión por stack, verificación goal-backward). `/swl:verificar --full` activa parallel scorecard con 4 audits paralelos |
143
- | `/swl:nemesis` | Auditoría iterativa Feynman + State Inconsistency (loop hasta convergencia, ADR-0018). Flags: `--pass1`, `--pass2`, `--continue`, `--modulo <ruta>` |
144
- | `/swl:release` | Ciclo de release SemVer |
145
- | `/swl:configurar-ci` | Workflows CI/CD para proyectos del usuario |
146
- | `/swl:wiki` / `/swl:mapear-codebase` | Conocimiento de proyecto |
147
- | `/swl:ayuda` | Catálogo interactivo de comandos |
120
+ - **Ciclo GSD por fase**: `discutir-fase` → `planear-fase` → `ejecutar-fase` → `verificar` (con discovery routing, modo iterativo `--iterative` y `--until-converge`).
121
+ - **Anti-context-rot**: `checkpoint`, `compactar`.
122
+ - **Aprendizaje**: `aprender`, `evolucionar`, `autoresearch`, `reflect-skills`.
123
+ - **Calidad**: `revisar`, `verificar`, `nemesis` (auditoría Feynman + State, opcional `--remediar`).
124
+ - **Diagnóstico**: `salud`, `metricas`, `dashboard`, `evolucion-estado`.
125
+ - **Release**: `release`, `configurar-ci`.
126
+ - **Conocimiento**: `wiki`, `mapear-codebase`, `skill-search`, `ayuda`.
127
+
128
+ Para flags exactos y semántica de cada comando ver `@COMANDOS.md` y `@MANUAL_USO.md`.
148
129
 
149
130
  ## Reglas obligatorias (25 base + 40 por lenguaje)
150
131
 
@@ -164,6 +145,7 @@ proyecto. Reglas de mayor uso:
164
145
  | `git-workflow.md` | Siempre |
165
146
  | `skills-estandar.md` / `fragmentos-compartidos.md` | Crear/auditar skills o fragmentos |
166
147
  | `registro-componentes-nuevos.md` | Crear cualquier componente nuevo (agente/skill/comando/hook/regla) — registro obligatorio en manifiestos + plugin.json + INVENTARIO en mismo commit |
148
+ | `auditorias-documentales-estructurales.md` | Ejecutar verificadores docs/release/manifest — gates de profundidad y cobertura completa (no muestra). Aplica reglas anti-cosméticas a auditorías |
167
149
 
168
150
  Catálogo completo y matchers en `@INVENTARIO.md` sección Reglas.
169
151
 
@@ -189,37 +171,26 @@ NUNCA usar Opus para tareas que Sonnet resuelve igual de bien.
189
171
 
190
172
  ## Convenciones operacionales
191
173
 
192
- - Score mínimo de calidad: **9.0/10** para aprobar trabajo
193
- - Modos de desarrollo: `dev`, `review`, `research` (vía `/swl:contexto`)
194
- - `respositorios-git/` y `temp/` son material de referencia — no modificar ni commitear
195
- - Inventario completo: ver `@INVENTARIO.md` o `@.planning/ESTADO.md`
196
- - **Limpieza de registros resueltos**: no dejar items completados en listas de pendientes
197
- - **Dependencias externas educativas son opt-in NO-dependencia**: cuando se documenta un recurso externo (MCPs opcionales, plantillas comunitarias, indexadores externos) marcarlo explícitamente como **"NO es dependencia técnica de swl-ses"**. El sistema debe seguir funcionando sin ese recurso
198
- - **Patrón "validar antes de invocar"**: cualquier invocación a herramienta externa opt-in (markitdown, MinerU, gh, etc.) DEBE verificar primero (`command -v <bin>` / `try/catch execSync('<bin> --version')`) y, si no está disponible, **continuar con el flujo nativo de SWL sin emitir error al usuario**
199
- - **`skillsInvocables` requiere `Skill` en `tools:`**: si un agente declara `skillsInvocables: [...]` Y su cuerpo usa `Skill("nombre")`, debe incluir `Skill` en `tools:`. Verificar con `grep -c 'Skill(' agentes/X.md` >0
200
- - **Criterio gitignore para JSONL — runtime vs baseline**: runtime telemetry (alta frecuencia, recreable) → gitignore. Baseline auditable (histórico crítico, decisiones, evidencia gobernanza) → trackear. Pregunta filtro: *si borro este archivo, ¿se pierde info que el sistema necesita reconstruir desde otra fuente?* Sí → trackear
201
-
202
- ## Mapa de propagación de cambios
174
+ Detalle completo en `@docs/convenciones-operacionales.md`. Resumen mínimo:
203
175
 
204
- Al modificar un componente del sistema, verificar TODOS los archivos afectados.
176
+ - **Score mínimo de calidad**: **9.0/10** para aprobar trabajo.
177
+ - **Modos de desarrollo**: `dev`, `review`, `research` (vía `/swl:contexto`).
178
+ - **`respositorios-git/` y `temp/` son material de referencia** — no modificar ni commitear.
179
+ - **Dependencias externas educativas son opt-in NO-dependencia** — el sistema funciona sin ellas.
180
+ - **Patrón "validar antes de invocar"** para herramientas externas opt-in (markitdown, MinerU, gh).
181
+ - **`skillsInvocables` requiere `Skill` en `tools:`** del agente.
205
182
 
206
- | Tipo de cambio | Archivos a verificar |
207
- |----------------|---------------------|
208
- | **Agente** | `plugin.json`, `manifiestos/modulos.json`, `INVENTARIO.md`, `AGENTS.md`, `SALUD.md`, `.planning/REPORTE-GRAFO.md` |
209
- | **Skill** | `plugin.json`, `manifiestos/modulos.json`, `INVENTARIO.md`, `CLAUDE.md` (si aplica al dominio) |
210
- | **Hook** | `plugin.json`, `.claude/settings.json`, `manifiestos/hooks-config.json` (event+matcher), `manifiestos/modulos.json` (ruta), `INVENTARIO.md`, `SALUD.md`. **AMBOS manifiestos son obligatorios** |
211
- | **Comando** | `COMANDOS.md`, `CLAUDE.md` (tabla de comandos), `INVENTARIO.md` |
212
- | **Regla** | `CLAUDE.md` (tabla de reglas), `INVENTARIO.md`, `SALUD.md` |
213
- | **Schema** | `INVENTARIO.md`, `SALUD.md` |
214
- | **Bump de versión** | 15+ ubicaciones — checklist en `/swl:release` paso 6 |
215
- | **CLAUDE.md (cualquier capa)** | Verificar con `/swl:claudemd audit` antes de commit |
216
- | **Cualquier `npm publish`** | Ejecutar `node scripts/verificar-release.js` ANTES, no solo en release formal. Detecta discrepancias de contadores y versiones invisibles al ojo humano (caso real v1.3.0: 18 discrepancias detectadas) |
183
+ ## Mapa de propagación de cambios
217
184
 
218
- Esta tabla es obligatoria. Omitir un archivo causa fallos en `/swl:salud`.
185
+ Al modificar o agregar cualquier componente del sistema, **invocar
186
+ `Skill("doc-sync")` antes del commit final** para cargar el protocolo
187
+ proactivo completo. La tabla y checklist completos viven en
188
+ `@docs/mapa-propagacion.md` para mantener este archivo bajo el umbral
189
+ de 200 líneas (regla `auditar-claudemd.js`).
219
190
 
220
- ### Reglas auxiliares
191
+ Resumen mínimo para uso inmediato:
221
192
 
222
- - **Regenerar inventario, nunca contar a mano**: antes de modificar contadores en CLAUDE.md/README.md/SALUD.md/AGENTS.md/package.json/plugin.json, ejecutar `node scripts/generar-inventario.js`. El script es la fuente de verdad
223
- - **Checklists consolidados se regeneran**: archivos en `docs/checklists-consolidados/` son derivados. Editar la regla origen y `npm run gen-checklists`. NO editar manualmente los generados
224
- - **Modelo por defecto headless**: scripts/bots externos invocan `claude -p --model claude-haiku-4-5-20251001 --effort low --max-budget-usd 0.50 --dangerously-skip-permissions`. Haiku 4.5 cuesta menos
225
- - **File-based queue sobre PTY injection**: control remoto via `gateway/command-relay.js` `.planning/inbox/cmd-*.json` `/swl:inbox`. Tmux solo opt-in avanzado (`scripts/inbox-tmux-inject.js` Linux/macOS)
193
+ - Cualquier componente nuevo o modificado (agente / skill / comando / hook / regla / schema / variable `SWL_*` / ADR / dependencia opt-in): consultar tabla completa en `@docs/mapa-propagacion.md` para saber qué archivos tocar.
194
+ - **Skill responsable**: `Skill("doc-sync") § Protocolo proactivo` (sub-secciones Tipo 1 a Tipo 8) tiene el detalle prescriptivo.
195
+ - **Antes de commit estructural**: regenerar inventario, validar manifiestos, verificar evolución (si tocó skill/agente), correr verificador docs-vs-código, suite completa, gate de release. Checklist exacto en `@docs/mapa-propagacion.md § Checklist único`.
196
+ - Si cualquier gate falla, **NO commitear** hasta corregir. Regla `arreglar-al-detectar.md` exige resolver en mismo turno.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # swl-ses v1.5.2
1
+ # swl-ses v1.6.1
2
2
 
3
3
  > El paquete anterior `@saulwadeleon/swl-software-engineering-system` está deprecado. Migrar a `@saulwade/swl-ses` (npmjs.org canónico) o `@saul-wade/swl-ses` (mirror en GitHub Packages) — el CLI `swl-ses` no cambia.
4
4
 
@@ -6,7 +6,7 @@ Sistema de ingeniería de software auto-evolutivo **multi-runtime** con agentes
6
6
 
7
7
  Soporta 7 runtimes de IA: Claude Code, OpenClaude, OpenCode y Gemini CLI (soporte completo); Cursor, Codex CLI y GitHub Copilot (soporte parcial — reglas + MCP server o consolidación en archivo de instrucciones según el runtime). Incluye sistema de transformadores que adapta el formato canónico SWL al formato nativo de cada runtime, **multi-target install** (`--target=claude,cursor,codex` en una sola invocación), y **`swl-mcp-server` v1.0.0** con auth opt-in para que Cursor, Codex y otros clientes MCP consulten la memoria SWL (aprendizajes, instintos, sesiones).
8
8
 
9
- Cubre el SDLC completo: discovery, requisitos, arquitectura, UX/UI, frontend, backend, mobile, datos, testing, seguridad, CI/CD, observabilidad, releases, documentación, notificaciones y auto-evolución. Incluye sistema de notificaciones Telegram opt-in (hook saliente, bot bidireccional con 15 comandos, autostart cross-platform) y **auditoría profunda Nemesis** (loop iterativo Feynman + State Inconsistency hasta convergencia) con 8 tools ejecutables JSON-output para code-profiler, pentest-scanner, dep-doctor, bundle-tracker y más (ADR-0018, v1.4.1).
9
+ Cubre el SDLC completo: discovery, requisitos, arquitectura, UX/UI, frontend, backend, mobile, datos, testing, seguridad, CI/CD, observabilidad, releases, documentación, notificaciones y auto-evolución. Incluye sistema de notificaciones Telegram opt-in (hook saliente, bot bidireccional con 15 comandos, autostart cross-platform), **auditoría profunda Nemesis** (loop iterativo Feynman + State Inconsistency hasta convergencia, ahora con loop evaluator-optimizer opt-in vía `/swl:nemesis --remediar` desde v1.5.2 - ADR-0021) con 8 tools ejecutables JSON-output para code-profiler, pentest-scanner, dep-doctor, bundle-tracker y más (ADR-0018, v1.4.1), e **instalador/actualizador TUI custom** zero-deps con paneles, multi-select y barra de progreso por categoría (v1.6.0).
10
10
 
11
11
  ## Inventario
12
12
 
@@ -56,6 +56,23 @@ El setup requiere **dos comandos en orden**, con propósitos distintos:
56
56
  > y los hace disponibles en todos tus proyectos. Aun así, cada proyecto necesita su propio `init`
57
57
  > para obtener `.planning/` y `_userland/`.
58
58
 
59
+ ### Modo recomendado: TUI visual (v1.6.0+)
60
+
61
+ Desde v1.6.0, al ejecutar `install` o `update` sin flags desde una terminal
62
+ interactiva, swl-ses lanza un **TUI custom** con paneles, selectores con
63
+ flechas, multi-select con espacio y barra de progreso por categoría.
64
+
65
+ ```bash
66
+ # Lanza el TUI: Welcome → Menú → Wizard → Progreso → Resumen
67
+ npx -y @saulwade/swl-ses@latest install
68
+ npx -y @saulwade/swl-ses@latest update
69
+ ```
70
+
71
+ Opt-out con `--no-tui` para usar el asistido lineal clásico, o pasa cualquier
72
+ flag (`--target`, `--profile`, `--force`, etc.) y el CLI usa el flujo directo
73
+ sin prompts. Ver [`MANUAL_USO.md`](./MANUAL_USO.md) sección "Opción C — Modo
74
+ TUI visual" para capturas ASCII de cada pantalla.
75
+
59
76
  ### Opción 1: CLI vía npmjs (recomendada)
60
77
 
61
78
  ```bash
@@ -178,7 +195,7 @@ claude
178
195
  | `mobile` | Android + iOS + React Native/Flutter + UX |
179
196
  | `devops` | CI/CD + cloud + observabilidad + releases + seguridad |
180
197
  | `polyglot` | Todos los lenguajes: 11 lenguajes + revisores + build resolvers |
181
- | `completo` | Todo: 60 agentes + 162 habilidades + 44 comandos + 66 reglas + 41 hooks |
198
+ | `completo` | Todo: 60 agentes + 162 habilidades + 44 comandos + 67 reglas + 41 hooks |
182
199
 
183
200
  ### Targets soportados
184
201
 
@@ -62,7 +62,7 @@ Responsabilidades concretas:
62
62
  ANTES de diseñar cualquier pipeline o modelo de datos:
63
63
 
64
64
  1. Leer CLAUDE.md del proyecto para entender el stack de datos existente.
65
- 2. Invocar `Skill("postgresql-schema-design")` y `Skill("sql-query-optimization")`.
65
+ 2. Invocar `Skill("postgresql-experto")` y `Skill("sql-optimizacion")`.
66
66
  3. Identificar las fuentes de datos: sistemas origen, formatos, frecuencia de actualización.
67
67
  4. Estimar el volumen: filas por tabla, tasa de crecimiento, tamaño en GB/TB.
68
68
  5. Verificar qué herramientas de orquestación están disponibles (Airflow, Prefect, dbt, etc.).
@@ -100,13 +100,13 @@ Grep("@if|@for") → confirmar uso de block syntax
100
100
 
101
101
  | Caso de uso | Skills a invocar |
102
102
  |-------------|-----------------|
103
- | Componentes Angular | `Skill("angular-component")` + `Skill("angular-signals")` |
104
- | Formularios Angular | + `Skill("angular-forms")` |
105
- | Build / CLI / configuración | + `Skill("angular-tooling")` |
106
- | Estilos con Tailwind | `Skill("tailwind-design-system")` + `Skill("responsive-design")` |
107
- | TypeScript complejo | `Skill("typescript-advanced-types")` |
108
- | Tests Angular | `Skill("javascript-testing-patterns")` |
109
- | Patrones de diseño UI | `Skill("frontend-design")` + `Skill("frontend-patterns")` |
103
+ | Componentes Angular | `Skill("angular-moderno")` + `Skill("angular-moderno")` |
104
+ | Formularios Angular | + `Skill("angular-moderno")` |
105
+ | Build / CLI / configuración | + `Skill("angular-moderno")` |
106
+ | Estilos con Tailwind | `Skill("tailwind-experto")` + `Skill("diseno-responsivo")` |
107
+ | TypeScript complejo | `Skill("typescript-avanzado")` |
108
+ | Tests Angular | (sin skill dedicado — usar `@angular/core/testing` directo) |
109
+ | Patrones de diseño UI | `Skill("frontend-design")` + `Skill("frontend-avanzado")` |
110
110
 
111
111
  **REGLA**: Invoca AL MENOS 1 skill antes de implementar. Si la UI-SPEC.md lista
112
112
  skills requeridos, invoca TODOS los listados.
@@ -90,10 +90,10 @@ Read("src/styles/tokens.css") → sistema de tokens
90
90
 
91
91
  | Caso de uso | Skills a invocar |
92
92
  |-------------|-----------------|
93
- | Responsive design | `Skill("responsive-design")` |
94
- | Design system y tokens | `Skill("tailwind-design-system")` |
95
- | Patrones de UI/UX | `Skill("frontend-design")` + `Skill("frontend-patterns")` |
96
- | Accesibilidad visual | `Skill("web-design-guidelines")` |
93
+ | Responsive design | `Skill("diseno-responsivo")` |
94
+ | Design system y tokens | `Skill("tailwind-experto")` |
95
+ | Patrones de UI/UX | `Skill("frontend-design")` + `Skill("frontend-avanzado")` |
96
+ | Accesibilidad visual | `Skill("ux-diseno")` |
97
97
 
98
98
  ## Arquitectura de @layer — el estándar moderno
99
99
 
@@ -103,13 +103,13 @@ Grep("useQuery|useSWR|fetch") → patrones de data fetching en uso
103
103
 
104
104
  | Caso de uso | Skills a invocar |
105
105
  |-------------|-----------------|
106
- | Componentes React / Next.js | `Skill("vercel-react-best-practices")` |
107
- | Estilos con Tailwind | `Skill("tailwind-design-system")` + `Skill("responsive-design")` |
108
- | TypeScript complejo | `Skill("typescript-advanced-types")` |
109
- | Tests React | `Skill("javascript-testing-patterns")` |
110
- | React Native | `Skill("react-native-best-practices")` |
111
- | React Native + Expo | + `Skill("expo-tailwind-setup")` |
112
- | UX y patrones de diseño | `Skill("frontend-design")` + `Skill("frontend-patterns")` |
106
+ | Componentes React / Next.js | `Skill("nextjs-experto")` |
107
+ | Estilos con Tailwind | `Skill("tailwind-experto")` + `Skill("diseno-responsivo")` |
108
+ | TypeScript complejo | `Skill("typescript-avanzado")` |
109
+ | Tests React | (sin skill dedicado — usar Vitest/Jest + React Testing Library directo) |
110
+ | React Native | `Skill("mobile-react-native")` |
111
+ | React Native + Expo | + `Skill("mobile-react-native")` |
112
+ | UX y patrones de diseño | `Skill("frontend-design")` + `Skill("frontend-avanzado")` |
113
113
 
114
114
  **REGLA**: Invoca AL MENOS 1 skill antes de implementar. Si la UI-SPEC.md lista
115
115
  skills requeridos, invoca TODOS los listados.
@@ -75,15 +75,15 @@ Antes de escribir la primera línea de código, invoca los skills del framework
75
75
 
76
76
  | Framework | Skills a invocar |
77
77
  |-----------|-----------------|
78
- | Angular | `Skill("angular-component")` + `Skill("angular-signals")` |
79
- | Angular + formularios | + `Skill("angular-forms")` |
80
- | Angular + build/CLI | + `Skill("angular-tooling")` |
81
- | React (Next.js/Vercel) | `Skill("vercel-react-best-practices")` |
82
- | React Native | `Skill("react-native-best-practices")` |
83
- | React Native + Expo | + `Skill("expo-tailwind-setup")` |
84
- | Cualquier framework + estilos | `Skill("tailwind-design-system")` + `Skill("responsive-design")` |
85
- | TypeScript complejo | `Skill("typescript-advanced-types")` |
86
- | Tests JS/TS | `Skill("javascript-testing-patterns")` |
78
+ | Angular | `Skill("angular-moderno")` + `Skill("angular-moderno")` |
79
+ | Angular + formularios | + `Skill("angular-moderno")` |
80
+ | Angular + build/CLI | + `Skill("angular-moderno")` |
81
+ | React (Next.js/Vercel) | `Skill("nextjs-experto")` |
82
+ | React Native | `Skill("mobile-react-native")` |
83
+ | React Native + Expo | + `Skill("mobile-react-native")` |
84
+ | Cualquier framework + estilos | `Skill("tailwind-experto")` + `Skill("diseno-responsivo")` |
85
+ | TypeScript complejo | `Skill("typescript-avanzado")` |
86
+ | Tests JS/TS | (sin skill dedicado — usar Vitest/Jest directo) |
87
87
 
88
88
  **REGLA**: Invoca AL MENOS 1 skill antes de escribir código.
89
89
  Si la UI-SPEC.md lista skills requeridos, invoca TODOS los listados.
@@ -94,10 +94,10 @@ Read("package.json") → versión exacta de Tailwind
94
94
 
95
95
  | Caso de uso | Skills a invocar |
96
96
  |-------------|-----------------|
97
- | Design system | `Skill("tailwind-design-system")` |
98
- | Responsive design | `Skill("responsive-design")` |
99
- | Patrones de UI | `Skill("frontend-design")` + `Skill("frontend-patterns")` |
100
- | Accesibilidad | `Skill("web-design-guidelines")` |
97
+ | Design system | `Skill("tailwind-experto")` |
98
+ | Responsive design | `Skill("diseno-responsivo")` |
99
+ | Patrones de UI | `Skill("frontend-design")` + `Skill("frontend-avanzado")` |
100
+ | Accesibilidad | `Skill("ux-diseno")` |
101
101
 
102
102
  **REGLA**: Invoca AL MENOS 1 skill antes de implementar.
103
103
 
@@ -70,8 +70,8 @@ Responsabilidades concretas:
70
70
  ANTES de cualquier optimización:
71
71
 
72
72
  1. Leer CLAUDE.md del proyecto para entender el stack y las dependencias.
73
- 2. Invocar `Skill("sql-query-optimization")` si hay optimización de queries.
74
- 3. Invocar `Skill("async-python-patterns")` si hay optimización de código async.
73
+ 2. Invocar `Skill("sql-optimizacion")` si hay optimización de queries.
74
+ 3. Invocar `Skill("async-python")` si hay optimización de código async.
75
75
  4. Establecer el contexto del problema: ¿qué es lento?, ¿cuándo empezó?, ¿cuántos usuarios afecta?
76
76
  5. Obtener datos de rendimiento actuales (logs, APM, métricas de observabilidad).
77
77
  6. Establecer la línea base medible antes de cualquier cambio.
package/bin/swl-ses.js CHANGED
@@ -190,7 +190,7 @@ GESTIÓN DE COMPONENTES:
190
190
  agents remove <nombre> Remueve un agente individual
191
191
 
192
192
  OPCIONES DE INSTALL:
193
- --target <runtime> Runtime destino: claude|openclaude|copilot|opencode|codex|gemini (default: claude)
193
+ --target <runtime> Runtime destino: claude|openclaude|copilot|opencode|codex|gemini|cursor (default: claude)
194
194
  --profile <perfil> Perfil: core|backend-python|backend-node|frontend-react|frontend-angular|
195
195
  fullstack-python-angular|fullstack-node-react|mobile|devops|completo (default: core)
196
196
  --with <componentes> Incluir componentes adicionales (separados por coma)
@@ -200,10 +200,19 @@ OPCIONES DE INSTALL:
200
200
  --dry-run Mostrar plan sin aplicar cambios
201
201
  --force Sobreescribir archivos existentes sin confirmar
202
202
  --all-langs Instalar reglas de todos los lenguajes (omite detección automática de stack)
203
+ --with-mcp Configura el MCP server swl-memory automáticamente (v1.5.0+)
204
+ --tui Fuerza el modo TUI visual aunque pases otros flags (v1.6.0+)
205
+ --no-tui Desactiva el TUI; usa el asistido lineal clásico (v1.6.0+)
206
+ --verbose Expande el panel de log del Progreso del TUI de 8 a 24 líneas (v1.6.0+)
203
207
  --no-claudemd No modificar el CLAUDE.md del proyecto (solo aplica con --target claude).
204
208
  Por defecto el instalador crea o actualiza un bloque delimitado por
205
209
  <!-- SWL-BEGIN vX.Y.Z --> / <!-- SWL-END --> preservando el resto del archivo.
206
210
 
211
+ MODOS DE INVOCACIÓN (v1.6.0+):
212
+ TTY + sin flags → TUI visual completo (recomendado)
213
+ TTY + --no-tui → Asistido lineal clásico (preguntas en serie)
214
+ No-TTY o con flags → Modo directo sin prompts (CI/scripts)
215
+
207
216
  OPCIONES DE SKILLS/AGENTS:
208
217
  --skill <nombre> Nombre del skill a extraer del repo (con skills add)
209
218
  --agent <nombre> Nombre del agente a extraer del repo (con agents add)
@@ -215,11 +224,14 @@ OPCIONES GENERALES:
215
224
 
216
225
  EJEMPLOS:
217
226
  ${NOMBRE} init
218
- ${NOMBRE} install (modo asistido — recomendado para primera vez)
227
+ ${NOMBRE} install (TUI visual — recomendado para primera vez)
228
+ ${NOMBRE} install --no-tui (asistido lineal clásico)
219
229
  ${NOMBRE} install --target claude --profile backend-python
220
230
  ${NOMBRE} install --target openclaude --profile fullstack-python-angular
221
231
  ${NOMBRE} install --target gemini --profile core
222
232
  ${NOMBRE} install --target copilot --profile fullstack-node-react
233
+ ${NOMBRE} update (TUI visual con multi-select de runtimes)
234
+ ${NOMBRE} update --no-tui (preguntas lineales clásicas)
223
235
  ${NOMBRE} skills list --target claude
224
236
  ${NOMBRE} skills add https://github.com/user/repo --skill mi-skill
225
237
  ${NOMBRE} agents add ./path/local --agent mi-agente
@@ -312,14 +324,44 @@ function main() {
312
324
 
313
325
  const opciones = parsearOpciones(args.slice(1));
314
326
 
315
- // Modo asistido: `install` sin flags → flujo interactivo
316
- // (Si el usuario pasa cualquier flag relevante, se asume que sabe lo que hace.)
317
- if (comando === 'install') {
318
- const flagsIrrelevantesParaAsistido = ['verbose'];
327
+ // Modo asistido / TUI: `install` o `update` sin flags relevantes modo visual.
328
+ //
329
+ // Niveles de fallback:
330
+ // 1. TTY + sin flags (excepto --tui): lanzar TUI completo (scripts/tui/index.js)
331
+ // 2. TTY + --no-tui: lanzar install-asistido clásico (preguntarOpcion lineal)
332
+ // 3. No TTY (CI/pipe): flujo clásico con flags por defecto sin asistido
333
+ //
334
+ // El usuario puede forzar el TUI incluso con flags pasando --tui.
335
+ if (comando === 'install' || comando === 'update') {
336
+ const flagsIrrelevantesParaAsistido = ['verbose', 'tui'];
319
337
  const flagsEspecificados = Object.keys(opciones).filter(
320
338
  k => k !== '_args' && !flagsIrrelevantesParaAsistido.includes(k)
321
339
  );
322
- if (flagsEspecificados.length === 0) {
340
+ const stdinTty = !!process.stdin.isTTY;
341
+ const optoutTui = opciones['no-tui'] || opciones.no_tui;
342
+ const forzarTui = opciones.tui;
343
+ const sinFlags = flagsEspecificados.length === 0;
344
+
345
+ if ((sinFlags || forzarTui) && stdinTty && !optoutTui) {
346
+ try {
347
+ const { iniciarTui } = require('../scripts/tui');
348
+ iniciarTui({ operacionInicial: comando }).then(() => {
349
+ process.exit(0);
350
+ }).catch(err => {
351
+ console.error(`Error en TUI: ${err.message}`);
352
+ if (opciones.verbose) console.error(err.stack);
353
+ process.exit(1);
354
+ });
355
+ return;
356
+ } catch (err) {
357
+ console.error(`Error cargando TUI: ${err.message}`);
358
+ if (opciones.verbose) console.error(err.stack);
359
+ // Caer al asistido clásico como fallback
360
+ }
361
+ }
362
+
363
+ if (comando === 'install' && sinFlags && !forzarTui) {
364
+ // Fallback al asistido lineal (sin TUI) — preserva la UX de versiones previas
323
365
  try {
324
366
  const asistido = require('../scripts/comandos/install-asistido');
325
367
  asistido.main().catch(err => {
@@ -1,4 +1,5 @@
1
1
  ---
2
+ name: swl:brainstorm
2
3
  description: Inicia una sesión de brainstorming estructurado para diseñar una feature o solución
3
4
  ---
4
5
 
@@ -24,7 +24,7 @@ Este comando es diferente de `/swl:checkpoint`: mientras checkpoint guarda estad
24
24
  Skill("compactacion-contexto")
25
25
  ```
26
26
 
27
- Si no existe, busca alternativas: `Skill("systematic-debugging")` para razonamiento estructurado. Documenta lo que cargaste.
27
+ Si no existe, busca alternativas en `~/.claude/skills/` (skills oficiales de Anthropic) o procede sin skill auxiliar — el algoritmo de 5 fases es zero-deps. Documenta lo que cargaste o que procediste sin skill.
28
28
 
29
29
  ## Paso 1 — Auditoría del contexto activo
30
30
 
@@ -17,13 +17,27 @@ Eres un analista funcional y técnico experto. Tu trabajo es convertir los objet
17
17
 
18
18
  El argumento `<n>` es el número de la fase a discutir.
19
19
 
20
+ ## Discovery routing (5 paths) — primer paso antes del cuestionario
21
+
22
+ Antes del cuestionario adaptativo completo, el agente clasifica la petición en uno de **5 rutas posibles** y ejecuta solo lo relevante. Origen: ADR-0020 sub-fase 1.
23
+
24
+ | Ruta | Cuándo aplica | Acción |
25
+ |------|--------------|--------|
26
+ | **RUTA_A** — Extender fase existente | La petición agrega tareas a una fase ya planeada. | Saltar cuestionario; cargar el CONTEXTO.md existente y agregar tareas. |
27
+ | **RUTA_B** — Sin fase formal | Fix trivial o tarea de <2 horas sin impacto cross-módulo. | Saltar cuestionario; proceder con `/swl:ejecutar-fase` directamente. |
28
+ | **RUTA_C** — Nueva fase single-scope | Petición nueva, no encaja en fases existentes, single-domain. | Ejecutar cuestionario completo (Bloques 1-4). |
29
+ | **RUTA_D** — Nueva fase multi-domain | Petición nueva, requiere decomposición en sub-tareas paralelas. | Cuestionario completo + planificación de paralelización. |
30
+ | **RUTA_E** — Mixto | La petición combina: extensión + nueva fase + posiblemente fix trivial. | Presentar decomposición propuesta y confirmar antes de proceder. |
31
+
32
+ El agente identifica la ruta en la primera respuesta al cargar `Skill("discutir-fase")` analizando: la petición textual, el estado de `.planning/HOJA-RUTA.md` y el último `RESUMEN.md`. Solo si la ruta es C o D se ejecuta el cuestionario completo descrito a continuación.
33
+
20
34
  ## Paso 0 — Carga de habilidades
21
35
 
22
36
  ```
23
37
  Skill("discutir-fase")
24
38
  ```
25
39
 
26
- Si no existe, intenta `Skill("planificador")` o `Skill("api-design-principles")`. Documenta qué cargaste.
40
+ Si no existe, intenta `Skill("planear-fase")` o `Skill("api-rest-diseno")`. Documenta qué cargaste.
27
41
 
28
42
  ## Paso 1 — Lectura de contexto previo
29
43
 
@@ -16,7 +16,7 @@ Carga la habilidad de análisis antes de comenzar:
16
16
  Skill("mapear-codebase")
17
17
  ```
18
18
 
19
- Si no existe en el proyecto, busca alternativas como `Skill("codebase-mapper")` o `Skill("systematic-debugging")`. Documenta qué habilidad cargaste.
19
+ Si no existe en el proyecto, procede sin skill auxiliar la lógica de mapeo del comando es zero-deps. Documenta que procediste sin skill.
20
20
 
21
21
  ## Paso 1 — Verificación del entorno
22
22
 
@@ -247,6 +247,35 @@ Cada `evaluacion.json` sigue el schema `nemesis-evaluacion-json` v1.0.0.
247
247
  El costo del modo `--remediar` es 3-5× el del modo solo auditar. Es opt-in
248
248
  deliberado del usuario, no default.
249
249
 
250
+ ### Calibración para módulos pequeños con alta densidad de control de flujo
251
+
252
+ Aunque la tabla estima 12-18 turnos para `--remediar` sobre módulo pequeño
253
+ (< 500 LOC), el valor agregado es desproporcionadamente alto cuando el
254
+ módulo concentra **lógica de control de flujo** (event handlers,
255
+ callbacks, `setTimeout`/`setInterval`, readline, promises, race conditions).
256
+ La densidad de bugs latentes en este tipo de código es alta, y nemesis los
257
+ detecta donde la revisión one-shot no.
258
+
259
+ **Patrón confirmado en swl-ses v1.6.0** (sesión 2026-05-16): `--remediar`
260
+ sobre `scripts/lib/ui.js` (~300 LOC con spinner + readline + prompts)
261
+ convergió en iter-2 con 15 turnos totales. Iter-1 detectó dos hallazgos
262
+ adicionales que el fix manual no había detectado:
263
+
264
+ - **F-1 (ALTO)**: listener leak de `process.once('exit')` acumulándose
265
+ en loops que crean N spinners secuenciales → MaxListenersExceededWarning.
266
+ - **F-2 (MEDIO)**: `preguntarOpcion` llamaba `_pausarSpinnersActivos()`
267
+ DESPUÉS del primer `console.log` del menú, dejando una ventana donde
268
+ el tick del spinner sobrescribía la primera línea.
269
+
270
+ Iter-2 confirmó PASS tras aplicar ambos fixes. Ninguno habría sido
271
+ detectado por `/swl:revisar` o `revisor-codigo-swl` solos — ambos
272
+ requirieron el reasoning iterativo Feynman+State.
273
+
274
+ **Regla operativa**: tras commits de fix-only en módulos con alta densidad
275
+ de control de flujo (no en módulos CRUD puros), correr `--remediar`
276
+ acotado al módulo. La inversión de 15 turnos típicamente detecta 1-2
277
+ bugs adyacentes que el fix original no cubrió.
278
+
250
279
  ## Ejemplos de invocación
251
280
 
252
281
  ```bash
@@ -21,10 +21,10 @@ Eres el coordinador de planeación SWL. Tu trabajo es orquestar la generación d
21
21
  Skill("planear-fase")
22
22
  ```
23
23
 
24
- Si no existe, carga `Skill("python-patterns")` si el stack es Python, o `Skill("angular-component")` si el stack es Angular/TS. Siempre carga también:
24
+ Si no existe, carga `Skill("patrones-python")` si el stack es Python, o `Skill("angular-moderno")` si el stack es Angular/TS. Siempre carga también:
25
25
 
26
26
  ```
27
- Skill("api-design-principles")
27
+ Skill("api-rest-diseno")
28
28
  ```
29
29
 
30
30
  ## Paso 1 — Verificación de prerrequisitos
@@ -51,12 +51,12 @@ Skill("verificar-trabajo")
51
51
 
52
52
  Carga también:
53
53
  ```
54
- Skill("error-handling-patterns")
55
- Skill("code-review-excellence")
54
+ Skill("manejo-errores")
55
+ Skill("checklist-calidad")
56
56
  ```
57
57
 
58
- Si el stack tiene Python: `Skill("python-testing-patterns")`
59
- Si el stack tiene Angular: `Skill("javascript-testing-patterns")`
58
+ Si el stack tiene Python: `Skill("testing-python")`
59
+ Si el stack tiene Angular: usar `@angular/core/testing` directo (sin skill dedicado)
60
60
 
61
61
  ## Paso 1 — Determinación del alcance de verificación
62
62
 
@@ -6,7 +6,12 @@ description: >
6
6
  tres scopes (proyecto/dominio/global), degradacion automatica por contradiccion,
7
7
  promocion a skills/comandos/agentes, evolucion (merge, split, deprecate) y
8
8
  proteccion contra contaminacion cross-proyecto.
9
- version: "1.0.0"
9
+ version: "1.0.1"
10
+ evolved: true
11
+ evolved-from: "1.0.0"
12
+ evolved-at: "2026-05-16"
13
+ evolved-by: "aprender"
14
+ evolved-note: "v1.0.1 (PATCH): nuevo gotcha 'Filtro de exclusión de hooks debe cubrir tests/'. Origen: H3 sesión 2026-05-16 — el extractor de aprendizajes capturaba comentarios JSDoc de un test recién escrito (palabras 'bug', 'patrón', 'fix') y los promovía como entradas truncadas a APRENDIZAJES.md porque PATRONES_ARCHIVO_SWL_EXCLUIDO no incluía tests/."
10
15
  herramientasPermitidas: [Read]
11
16
  exclusiones:
12
17
  - "No cargar para consultar instintos ya cargados en la sesión actual — si el perfil fue leído, re-cargarlo es desperdicio de contexto."
@@ -141,6 +146,7 @@ ver [recursos/referencia-instintos.md](recursos/referencia-instintos.md).
141
146
  - **Hooks de observación con exit code != 0 interrumpen la sesión**: el hook `observe-pre.js` lanza una excepción y Claude Code detiene la tarea en curso. Causa: violación de la regla "los hooks de observación NUNCA deben producir exit code != 0". Solución: envolver toda la lógica del hook en `try/catch` y loggear el error al stderr sin propagarlo — la observabilidad nunca debe bloquear el trabajo productivo.
142
147
  - **Duplicación de instintos entre `proyecto.yaml` y `APRENDIZAJES.md`**: el mismo anti-patrón existe en ambos canales con información inconsistente. Causa: el instinto se creó manualmente sin verificar si ya había una entrada en APRENDIZAJES.md. Solución: antes de crear un instinto nuevo, ejecutar `memoria-busqueda` para verificar si ya existe en otro canal; si existe, actualizar el canal correcto según `reglas/memoria-consolidada.md`.
143
148
  - **Confianza llegando a 0.95 sin revisión humana**: el algoritmo suma 0.1 por evento y el instinto llega a 0.95 sin que nadie lo revise antes de la promoción. Causa: no se aplicó la restricción del último 5% (requiere revisión explícita). Solución: al llegar a 0.90, el sistema debe emitir un checkpoint `human-verify` antes de superar ese umbral — automatizar la vigilancia en `session-end.js`.
149
+ - **Filtro de exclusión de hooks de extracción no cubre `tests/`** [CONFIRMADO 2026-05-16]: el hook `hooks/extraccion-aprendizajes.js` capturaba comentarios JSDoc/docstring de tests recién escritos por el agente y los promovía como entradas truncadas a `APRENDIZAJES.md`. Caso real: al escribir `tests/lib/ui-spinner-prompt.test.js` con un comentario `/** Bug original: cuando un comando arrancaba un spinner y luego (dentro de la lógica...) */`, el hook detectaba la palabra "bug" y promovía una entrada con título cortado a mitad de frase. Causa: `PATRONES_ARCHIVO_SWL_EXCLUIDO` tenía `agentes/`, `habilidades/`, `comandos/swl/`, `hooks/`, `scripts/`, etc., pero **no incluía `tests/`**. Solución: cualquier filtro de exclusión que protege contra ruido auto-referente del agente DEBE incluir explícitamente todos los patrones de tests: `tests/`, `__tests__/`, `spec/`, `*.test.{js,ts,jsx,tsx,mjs,cjs}`, `test_*.py`, `_test.{py,go}`. Los comentarios de un test describen el SUT (System Under Test) — contienen las mismas keywords que un descubrimiento real ("bug", "patrón", "fix") pero NO son descubrimientos. Patrón general: al diseñar un filtro de exclusión para hooks de observación, listar **todas las convenciones de naming de tests del ecosistema target**, no solo los directorios. Verificado en commit `cb4332e` swl-ses v1.6.0.
144
150
 
145
151
  ## Anti-patrones
146
152
 
@@ -6,6 +6,7 @@ description: >
6
6
  description como prompt engineering, naming MCP y diseno de mensajes de error.
7
7
  Cargar cuando se disenan tools para agentes, se configura MCP, se definen
8
8
  toolBudget en agentes SWL, o se evalua la coleccion de herramientas de un agente.
9
+ version: "1.0.0"
9
10
  herramientasPermitidas: [Read, Grep]
10
11
  exclusiones:
11
12
  - "No cargar para implementar el hook que ejecuta los tools — este skill diseña la interfaz, no el handler; para implementar PreToolUse o PostToolUse cargar `hooks` o el agente correspondiente."