@saulwade/swl-ses 2.6.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/CLAUDE.md +197 -197
  2. package/README.md +600 -600
  3. package/agentes/_intent-spec.md +73 -73
  4. package/agentes/_propose-step.md +90 -90
  5. package/agentes/accesibilidad-wcag-swl.md +690 -690
  6. package/agentes/arquitecto-swl.md +267 -267
  7. package/agentes/auto-evolucion-swl.md +932 -932
  8. package/agentes/backend-csharp-swl.md +420 -420
  9. package/agentes/backend-go-swl.md +390 -390
  10. package/agentes/backend-java-swl.md +281 -281
  11. package/agentes/backend-rust-swl.md +364 -364
  12. package/agentes/backend-workers-swl.md +482 -482
  13. package/agentes/cloud-infra-swl.md +509 -509
  14. package/agentes/consolidador-swl.md +541 -541
  15. package/agentes/depurador-swl.md +352 -352
  16. package/agentes/devops-ci-swl.md +400 -400
  17. package/agentes/disenador-ui-swl.md +569 -569
  18. package/agentes/documentador-swl.md +345 -345
  19. package/agentes/frontend-angular-swl.md +621 -621
  20. package/agentes/frontend-css-swl.md +716 -716
  21. package/agentes/frontend-react-swl.md +692 -692
  22. package/agentes/frontend-swl.md +496 -496
  23. package/agentes/frontend-tailwind-swl.md +826 -826
  24. package/agentes/investigador-swl.md +432 -432
  25. package/agentes/investigador-ux-swl.md +505 -505
  26. package/agentes/migrador-swl.md +442 -442
  27. package/agentes/mobile-android-swl.md +511 -511
  28. package/agentes/mobile-cross-swl.md +541 -541
  29. package/agentes/mobile-ios-swl.md +502 -502
  30. package/agentes/mobile-testing-swl.md +302 -302
  31. package/agentes/nemesis-auditor-swl.md +285 -285
  32. package/agentes/observabilidad-swl.md +438 -438
  33. package/agentes/pagos-swl.md +310 -310
  34. package/agentes/perfilador-usuario-swl.md +321 -321
  35. package/agentes/planificador-swl.md +399 -399
  36. package/agentes/producto-prd-swl.md +589 -589
  37. package/agentes/red-team-swl.md +218 -218
  38. package/agentes/release-manager-swl.md +590 -590
  39. package/agentes/rendimiento-swl.md +713 -713
  40. package/agentes/revisor-angular-swl.md +278 -278
  41. package/agentes/revisor-csharp-swl.md +264 -264
  42. package/agentes/revisor-go-swl.md +259 -259
  43. package/agentes/revisor-java-swl.md +257 -257
  44. package/agentes/revisor-kotlin-swl.md +273 -273
  45. package/agentes/revisor-nextjs-swl.md +281 -281
  46. package/agentes/revisor-php-swl.md +271 -271
  47. package/agentes/revisor-react-swl.md +278 -278
  48. package/agentes/revisor-rust-swl.md +346 -346
  49. package/agentes/revisor-seguridad-swl.md +399 -399
  50. package/agentes/revisor-swift-swl.md +268 -268
  51. package/agentes/revisor-typescript-swl.md +346 -346
  52. package/agentes/tdd-qa-swl.md +393 -393
  53. package/comandos/swl/actualizar.md +174 -174
  54. package/comandos/swl/adoptar-proyecto.md +265 -265
  55. package/comandos/swl/aprender.md +836 -836
  56. package/comandos/swl/aprobar-plan.md +146 -146
  57. package/comandos/swl/auditar-deps.md +134 -134
  58. package/comandos/swl/autoresearch.md +264 -264
  59. package/comandos/swl/ayuda.md +224 -224
  60. package/comandos/swl/brainstorm.md +51 -51
  61. package/comandos/swl/briefing.md +119 -119
  62. package/comandos/swl/checkpoint.md +325 -325
  63. package/comandos/swl/claudemd.md +234 -234
  64. package/comandos/swl/compactar.md +310 -310
  65. package/comandos/swl/configurar-ci.md +235 -235
  66. package/comandos/swl/contexto.md +110 -110
  67. package/comandos/swl/contribuir.md +233 -233
  68. package/comandos/swl/crear-skill.md +292 -292
  69. package/comandos/swl/cron.md +194 -194
  70. package/comandos/swl/discutir-fase.md +169 -169
  71. package/comandos/swl/ejecutar-fase.md +233 -233
  72. package/comandos/swl/evaluar-skill.md +520 -520
  73. package/comandos/swl/evolucion-continua.md +73 -73
  74. package/comandos/swl/evolucionar.md +267 -267
  75. package/comandos/swl/exportar-vault.md +583 -583
  76. package/comandos/swl/fix.md +118 -118
  77. package/comandos/swl/gateway.md +158 -158
  78. package/comandos/swl/inbox.md +116 -116
  79. package/comandos/swl/instalar.md +220 -220
  80. package/comandos/swl/instintos.md +86 -86
  81. package/comandos/swl/mapear-codebase.md +312 -312
  82. package/comandos/swl/mcp-status.md +175 -175
  83. package/comandos/swl/modelo.md +100 -100
  84. package/comandos/swl/nemesis.md +433 -433
  85. package/comandos/swl/notificaciones.md +299 -299
  86. package/comandos/swl/nuevo-proyecto.md +251 -251
  87. package/comandos/swl/planear-fase.md +263 -263
  88. package/comandos/swl/plugins.md +256 -256
  89. package/comandos/swl/predecir.md +169 -169
  90. package/comandos/swl/reflect-skills.md +125 -125
  91. package/comandos/swl/release.md +450 -450
  92. package/comandos/swl/revisar-impacto.md +201 -201
  93. package/comandos/swl/revisar.md +330 -330
  94. package/comandos/swl/seguridad.md +189 -189
  95. package/comandos/swl/sesiones.md +200 -200
  96. package/comandos/swl/skill-search.md +113 -113
  97. package/comandos/swl/status.md +345 -345
  98. package/comandos/swl/verificar.md +817 -817
  99. package/comandos/swl/wiki.md +620 -620
  100. package/gateway/cron/jobs.example.json +12 -12
  101. package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
  102. package/habilidades/backend-async-postgres-testing/SKILL.md +2 -1
  103. package/habilidades/changelog-generator/SKILL.md +174 -174
  104. package/habilidades/compactacion-contexto/SKILL.md +2 -1
  105. package/habilidades/contenedores-docker/SKILL.md +4 -2
  106. package/habilidades/doubt-driven-review/SKILL.md +207 -207
  107. package/habilidades/drift-detection/SKILL.md +1 -1
  108. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  109. package/habilidades/extractor-de-aprendizajes/SKILL.md +8 -2
  110. package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
  111. package/habilidades/harness-claude-code/SKILL.md +314 -314
  112. package/habilidades/instalar-sistema/SKILL.md +227 -227
  113. package/habilidades/planear-fase/SKILL.md +358 -358
  114. package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
  115. package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
  116. package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
  117. package/habilidades/release-semver/SKILL.md +2 -2
  118. package/habilidades/tdd-workflow/SKILL.md +749 -749
  119. package/hooks/agente-lifecycle.js +1 -1
  120. package/hooks/audit-trail.js +1 -1
  121. package/hooks/auto-consolidacion.js +1 -1
  122. package/hooks/captura-acciones-post.js +1 -1
  123. package/hooks/captura-acciones-session.js +1 -1
  124. package/hooks/captura-feedback-usuario.js +1 -1
  125. package/hooks/contexto-iteracion.js +1 -1
  126. package/hooks/contexto-subagente.js +68 -68
  127. package/hooks/degradacion-instintos.js +1 -1
  128. package/hooks/grafo-contexto.js +1 -1
  129. package/hooks/guardrail-modelo.js +1 -1
  130. package/hooks/inbox-aviso.js +1 -1
  131. package/hooks/inyeccion-contexto.js +1 -1
  132. package/hooks/lib/agent-matcher.js +1 -1
  133. package/hooks/lib/agent-routing.js +1 -1
  134. package/hooks/lib/captura-acciones.js +1 -1
  135. package/hooks/lib/etapa-metricas.js +1 -1
  136. package/hooks/lib/evolution-tracker.js +1 -1
  137. package/hooks/lib/gateway-notify.js +193 -193
  138. package/hooks/lib/mcp-health.js +1 -1
  139. package/hooks/lib/notificacion-formato.js +58 -0
  140. package/hooks/lib/nudge-tracker.js +1 -1
  141. package/hooks/lib/otlp-exporter.js +1 -1
  142. package/hooks/lib/propose-step.js +1 -1
  143. package/hooks/lib/raiz-proyecto.js +127 -102
  144. package/hooks/lib/run-log.js +1 -1
  145. package/hooks/lib/singleton-guard.js +20 -13
  146. package/hooks/lib/telegram-cliente.js +11 -3
  147. package/hooks/notificacion-telegram.js +13 -3
  148. package/hooks/preservar-estado-pre-compact.js +1 -1
  149. package/hooks/registro-turnos.js +1 -1
  150. package/hooks/resumen-sesion.js +1 -1
  151. package/hooks/risk-scoring.js +1 -1
  152. package/hooks/session-briefing.js +1 -1
  153. package/hooks/spec-gate.js +1 -1
  154. package/hooks/sugerir-regenerar-inventario.js +1 -1
  155. package/hooks/tdd-gate.js +1 -1
  156. package/hooks/telemetria-agentes.js +1 -1
  157. package/hooks/telemetria-skill-routing.js +1 -1
  158. package/hooks/tracking-costos.js +1 -1
  159. package/hooks/validar-formato-post-subagente.js +1 -1
  160. package/hooks/validar-intent-spec.js +1 -1
  161. package/hooks/validar-planning-paths.js +1 -1
  162. package/llms.txt +29 -29
  163. package/manifiestos/canonical-hashes.json +5588 -5257
  164. package/manifiestos/hooks-config.json +469 -469
  165. package/manifiestos/invariantes-criticos.json +30 -30
  166. package/manifiestos/modulos.json +1429 -1428
  167. package/manifiestos/skills-lock.json +1275 -1275
  168. package/package.json +94 -94
  169. package/plugin.json +369 -369
  170. package/scripts/auditar-clases-conocidas.js +134 -134
  171. package/scripts/bootstrap-instintos.js +85 -14
  172. package/scripts/canario-hooks.js +166 -166
  173. package/scripts/cli/autonomia.js +23 -23
  174. package/scripts/cli/benchmark-memoria.js +37 -37
  175. package/scripts/cli/ciclo-autonomo.js +73 -73
  176. package/scripts/cli/ciclo-fase-b.js +102 -102
  177. package/scripts/cli/guardrail-metrics.js +39 -39
  178. package/scripts/cli/memoria-search.js +69 -69
  179. package/scripts/cli/nudge-accionar.js +39 -39
  180. package/scripts/cli/run-eval.js +38 -38
  181. package/scripts/doctor.js +26 -3
  182. package/scripts/evidencia-valor.js +101 -101
  183. package/scripts/field-report.js +16 -16
  184. package/scripts/instalador.js +13 -0
  185. package/scripts/lib/activar-hooks-proyecto.js +116 -116
  186. package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
  187. package/scripts/lib/ciclo-autonomo/config.js +165 -165
  188. package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
  189. package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
  190. package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
  191. package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
  192. package/scripts/lib/ciclo-autonomo/index.js +301 -301
  193. package/scripts/lib/ciclo-autonomo/lock.js +124 -124
  194. package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
  195. package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
  196. package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
  197. package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
  198. package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -535
  199. package/scripts/lib/evidencia-valor.js +228 -228
  200. package/scripts/lib/expandir-targets.js +71 -71
  201. package/scripts/lib/limpiar-basura-global.js +161 -0
  202. package/scripts/lib/toml-merge.js +204 -204
  203. package/scripts/mcp-server/auth.js +105 -105
  204. package/scripts/mcp-server/cache.js +106 -106
  205. package/scripts/tui/pantallas/install-wizard.js +403 -403
  206. package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
  207. package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +0 -372
package/CLAUDE.md CHANGED
@@ -1,197 +1,197 @@
1
- # CLAUDE.md — @saulwade/swl-ses v2.6.0
2
-
3
- ## Reglas de máxima prioridad (aplican SIEMPRE, sin excepción)
4
-
5
- ### Idioma y estilo de output
6
- Aplican las reglas globales `@~/.claude/rules/brevedad-output.md` (español de México, brevedad, sin AI-isms) y `@~/.claude/rules/git-coauthor.md` (sin co-autores en commits) — cargadas automáticamente en cada sesión. NO duplicar su contenido inline en este archivo (regla `@reglas/sin-duplicacion-reglas-globales.md`).
7
-
8
- ### Uso obligatorio del sistema SWL
9
- Aplica la regla global `@~/.claude/rules/usar-sistema-swl.md` — matriz operacional completa (qué agente/skill/comando usar por tipo de tarea, excepciones legítimas, anti-patrones). Cargar skills con `Skill("nombre")` antes de implementar.
10
-
11
- ### Cuatro principios de implementación (Karpathy)
12
- Antes de implementar, refactorizar o corregir bugs: (1) **pensar antes de codificar** (no asumir en silencio), (2) **simplicidad primero** (sin abstracciones especulativas), (3) **cambios quirúrgicos** (leer archivo completo antes de editar, no refactor de oportunidad), (4) **ejecución orientada a metas** (criterios verificables, test que reproduce bugs antes del fix). Tabla operativa + mapeo a agentes SWL en `@docs/karpathy-principios.md`. Detalle + 9 ejemplos MAL→BIEN: `Skill("prevencion-sobreingenieria")` + `recursos/EXAMPLES.md`.
13
-
14
- ### Lectura de documentos Office
15
- Cuando necesites leer el **contenido** de un archivo `.docx`, `.xlsx`, `.xls` o `.pptx`, NUNCA uses el Read tool directamente (no soporta esos formatos). Usa:
16
- ```bash
17
- python scripts/vendor/markitdown/cli.py <ruta-al-archivo>
18
- ```
19
- El Read tool sigue siendo correcto para `.pdf` (≤20 páginas), `.ipynb` (Claude Code actual lee notebooks nativamente: celdas + outputs), `.md`, `.txt` y código fuente. Para más opciones y casos de uso consultar `Skill("swl-markitdown")`.
20
-
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, 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).
23
-
24
- ---
25
-
26
- ## Stack del proyecto
27
-
28
- - **Runtime**: Node.js >=22.0.0 (ESM + CommonJS)
29
- - **Tipo**: Sistema de scripts CLI + plugin para Claude Code (multi-runtime: Claude / Copilot / OpenCode / Codex / Gemini)
30
- - **Formato fuente**: Markdown (agentes, skills, comandos, reglas) + JSON Schema (validación) + YAML (instintos)
31
- - **Distribución**: npm package (`@saulwade/swl-ses`) + plugin Claude Code (`plugin.json`)
32
- - **Dependencias runtime**: 1 directa (`docx ^9.6.1`; `pako` y `readable-stream` son transitivas de docx/jszip, no directas). Hooks y scripts/lib son zero-deps
33
- - **Idioma de salida**: 100% español (México) para componentes SWL; skills oficiales de Anthropic en inglés
34
- - **MCP del proyecto**: `code-review-graph` disponible vía `.mcp.json` (requiere `uvx`). Comportamiento: `@~/.claude/rules/usar-code-review-graph.md`
35
-
36
- ## Comandos del proyecto
37
-
38
- | Comando | Propósito |
39
- |---|---|
40
- | `npm test` | Tests unitarios (lib/, scripts/, hooks/) |
41
- | `npm run test:all` | test + validar.js + validar-manifest.js |
42
- | `npm run test:release` | test:all + test:userland + smoke (gate pre-publish) |
43
- | `npm run test:validate` | `node scripts/validar.js` — validación estructural completa |
44
- | `npm run test:manifest` | `node scripts/validar-manifest.js` — coherencia modulos/hooks |
45
- | `npm run test:smoke` | Smoke test del instalador |
46
- | `npm run gen-checklists` | Regenera `docs/checklists-consolidados/` desde reglas |
47
- | `npm run gen-checklists:check` | Falla si hay drift (uso CI) |
48
- | `npm run generate:docs` | Regenera `INVENTARIO.md` desde directorios |
49
- | `npm run doctor` | Diagnóstico del sistema (`scripts/doctor.js`) |
50
- | `npm run publish:dry` | Dry-run de publicación a npm + GitHub |
51
- | `node scripts/verificar-release.js` | Gate pre-release: 15+ ubicaciones de versión, sincronización, AI-isms (si `SWL_AIISMS_GATE=1`) |
52
- | `node scripts/generar-inventario.js` | Regenera contadores oficiales + catálogos de INVENTARIO/SALUD/llms.txt (NUNCA contar a mano) |
53
- | `npm run gen-comandos` | Regenera los bloques `CATALOGO-COMANDOS` de COMANDOS.md y AGENTS.md desde frontmatter; `--check` (en test:all) detecta drift |
54
- | `node scripts/auditar-clases-conocidas.js` | Gate anti-reincidencia de clases de bug documentadas (C1 fecha UTC, C2 comparación sin normalizar EOL, C3 bloqueo ciego en hooks). En test:all |
55
- | `node scripts/canario-hooks.js [--smoke]` | Canario de hooks: grafo de requires distribuido en modulos.json (clase check-update); --smoke ejecuta los 49 en sandbox (en test:release) |
56
- | `node scripts/derivar-feature-list.js` | Genera `.planning/feature-list.json` (derivado de `HOJA-RUTA.md`, gitignored, regenerable). Modo `--check` exit 2 si drift detectado. Consumido por `/swl:status metricas fases`. |
57
-
58
- ## Code style
59
-
60
- - **Nombres**: kebab-case para archivos; agentes SWL y vocabulario GSD (comandos `*-fase`, dir `.planning/fases/`) en español; paths runtime/técnicos de `.planning/` en inglés (`evolution/`, `auto-evolution/`, `user-profile/`, `archive/`, `traces/`, `sessions/`, `audit/`). Ver `@~/.claude/rules/analizar-directorios-antes-de-escribir.md § Eje técnico-runtime`
61
- - **Zero-dependencies en `hooks/lib/`**: sin dependencias npm externas
62
- - **Escrituras atómicas obligatorias**: usar `atomicWriteSync()` / `atomicWriteJSON()` de `hooks/lib/atomic-write.js`. NUNCA `fs.writeFileSync` directo en archivos del sistema
63
- - **JSONL para alta frecuencia**: usar `fs.appendFileSync(ruta, JSON.stringify(evento) + '\n')` en hooks de telemetría/auditoría — no `atomicWriteJSON` que reescribe todo
64
- - **Fechas de artefactos generados SIEMPRE locales**: `toLocaleDateString('sv')`, NUNCA `toISOString().slice(0,10)` — desde México la tarde ya es "mañana" en UTC (x7 sitios corregidos 2026-07-08)
65
- - **Reemplazos con backticks/regex vía `node -e` en bash mangean escapes en silencio** ("aplica" sin aplicar): usar heredoc `node <<'EOF'` + `String.raw` (x3 incidentes 2026-07-08)
66
- - **`plugin.json#agents`/`#skills` son alfabéticos**: insertar en posición — ningún gate valida el orden
67
- - **Todo gate de escaneo nuevo lleva test anti-regresión viva** ("el repo real pasa con exit 0") en `npm test`: pre-commit el gate no se escanea a sí mismo (`git ls-files` ignora untracked) y su doc NO escribe el patrón prohibido literal (se auto-detectó y tumbó el publish v2.5.1)
68
- - **Contrato del CLI (`bin/swl-ses.js`)**: todo subcomando exporta UNA función(opciones) sin efectos al require — test viviente `bin-contrato-comandos.test.js` (3 violaciones cazadas, una en campo)
69
- - **YAML inline en frontmatter**: `tools: [Read, Write]`, `skillsInvocables: [skill-a]`. NUNCA CSV string ni mezcla con lista multilínea
70
- - **Mensajes de commit**: imperativo en español, formato `<tipo>(<scope>): <descripción>`
71
- - **Sin `console.log` en producción** — excepto en `scripts/`, `bin/`, `hooks/`, `gateway/` (CLIs y daemons)
72
- - **Nombre completo del paquete en npx**: todo mensaje del installer/docs usa `npx -y @saulwade/swl-ses@latest <comando>`. **NUNCA** `npx swl-ses@latest <comando>` sin el scope `@saulwade/` — eso resuelve al paquete legacy DEPRECATED (v5.13.1) que aún existe en npm tras el rebrand de 2026-04-30. El `@latest` es indispensable: sin él npx reutiliza la primera versión cacheada y el usuario corre código viejo sin saberlo. El `-y` evita la prompt de confirmación en CI/scripts
73
- - **Fixtures `secret`/`token` en tests deben ser en español** (`secreto`, `tokenBearer`, `clave-test`). El hook `calidad-pre-commit.js` matchea `\bsecret\s*[=:]\s*["'][^"'\s]{4,}["']` y `\btoken\s*[=:]\s*["'][^"'\s]{8,}["']` — `const secret = "valor"` se bloquea como credencial hardcodeada aunque sea fixture legítimo. Renombrar a español elude el regex sin bypass (alternativas reconocidas por el hook: `placeholder`, `example`, `fake_`, `dummy_`, `os.environ`/`process.env`). Coherente con regla global de idioma. Origen: PR #11 sesión 2026-05-13
74
- - **Scopes de runtime SIEMPRE vía `scopesReales()` de `scripts/lib/detectar-runtime.js`** — NUNCA el patrón manual `[runtime.global, path.resolve(runtime.local)]`: desde el HOME el local relativo resuelve al global propio (duplicados) o al de OTRO runtime (scope "proyecto" fantasma — el local de OpenClaude es el global de Claude Code; un uninstall de ese fantasma borraría el global). 8 sitios corregidos el 2026-07-03 (doctor ×5, actualizar ×2, TUI ×4)
75
- - **`git add archivo && git commit -m "..."` en un solo comando bash NO actualiza el index antes del PreToolUse hook**: el hook `calidad-pre-commit.js` evalúa el contenido staged previo al `&&`, no el actualizado en la misma línea. Síntoma: commit bloqueado por contenido que ya corregiste vía Write/Edit pero seguía staged en versión antigua. Fix: separar en dos calls Bash (`git add archivo` → ver resultado → `git commit -m "..."`). NUNCA usar `--no-verify` para bypassear. Origen: PR #11 sesión 2026-05-13
76
- - **Secretos compartidos entre clientes MCP viven como variables de entorno persistentes del SO, NO en archivos JSON** [v2 — 2026-05-18]: un MCP usado desde Cursor + Claude Code + VS Code tiene un config JSON POR cliente; duplicar `OBSIDIAN_API_KEY` en N archivos genera drift al regenerar la apiKey. Patrón: `setx OBSIDIAN_API_KEY <key>` (o `[Environment]::SetEnvironmentVariable(..., "User")` en PS7) → escribe a `HKCU\Environment` → todos los clientes la heredan al spawnear el binario. Los JSON OMITEN la clave `env` por completo (NO `env: {}` vacío — pasa literal a `child_process.spawn` y REEMPLAZA el env del padre, rompiendo la herencia). Regenerar apiKey = un `setx` + reiniciar clientes, sin tocar JSONs. Origen: 2026-05-18, 6h de errores 40101 por 3 configs descoordinados.
77
-
78
- ## Convenciones de arquitectura
79
-
80
- - **Precedencia de capas**: Reglas base (`reglas/`) → Reglas por lenguaje (`reglas/{lang}/`) → Skills (`habilidades/`) → Instintos (`instintos/`). Cada capa puede especializar pero NUNCA contradecir las superiores
81
- - **`reglas/` es la FUENTE; `~/.claude/rules/` son copias INSTALADAS** por el instalador: todo cambio a reglas base va en la fuente y se sincroniza — editar solo las copias es deuda volátil (el install las sobreescribe). Incluye las reglas globales personales del usuario (decisión 2026-06-12, commit `2f6b8de` — las 37 base viajan en `reglas-core`). Origen: Fase 09 (APRENDIZAJES 2026-06-11)
82
- - **Privilegio mínimo de agentes**: un agente delegado NUNCA excede los permisos declarados en su propio frontmatter. La cadena de delegación no escala privilegios. Ver `@reglas/seguridad-agentes.md`
83
- - **Preservación de datos en actualización**: `.planning/sessions/`, `.planning/comms/`, `_userland/`, `instintos/proyecto.yaml`, `APRENDIZAJES.md` NUNCA se sobreescriben
84
- - **Documentación obligatoria**: toda funcionalidad nueva DEBE documentarse en `MANUAL_USO.md`, `COMANDOS.md`, `CLAUDE.md` y `README.md` ANTES del commit
85
- - **Criterio dominio para incorporar skills externos**: solo si dominio = ingeniería de software general. Pregunta de filtro: *¿le sirve esto a un ingeniero de software en cualquier proyecto de software?* (ML Ops, Data Science, finanzas, etc. → descartar)
86
- - **Filtro primario al analizar `temp/`**: antes de evaluar arquitectura, verificar **compatibilidad de dominio**. Si es incompatible, veredicto NINGUNA aplicabilidad sin análisis adicional
87
- - **Variables de entorno opt-in enterprise**: ver `@docs/variables-entorno.md` (catálogo completo). Patrón obligatorio: `if (!process.env.VAR) return` — zero-config por defecto
88
- - **Hooks SWL que invocan auditores Node deben cargar el auditor como módulo (`require()`), no como subproceso**: ~10× más rápido, errores estructurados (no parsing de stdout), tests directos del módulo. Excepción legítima: cuando el auditor es Python o Bash (`spawnSync`). Ejemplo aplicado en `hooks/claudemd-bloat-detector.js` que usa `require('./scripts/auditar-claudemd.js')` directamente. Antipatrón evitado: `spawnSync('node', [auditorPath, ...])` agrega ~50ms por invocación y obliga a parsear JSON de stdout
89
- - **npm v10+ NO escribe debug logs cuando falla un script invocado** (`prepublishOnly`, `prepack`, etc.) — solo cuando falla npm-mismo (network, registry, auth). El default `loglevel=notice` mantiene `_logs/` vacío para errores de scripts. Para diagnóstico de `npm run publish:all` que falla en script propio, capturar stdout+stderr con redirección: PowerShell `npm run publish:all *>&1 | Tee-Object .planning/logs/publish-$(Get-Date -Format yyyyMMdd-HHmmss).log` o Bash `2>&1 | tee`. Alternativa permanente: `npm config set loglevel verbose`
90
- - **`package.json#files` debe incluir TODOS los directorios referenciados por `bin/`, `hooks/`, `scripts/` o `comandos/`**: si un binario hace `require('./gateway/foo')` pero `gateway/` no está listado en `files`, **el módulo se omite del tarball npm y el binario falla con MODULE_NOT_FOUND tras instalación pública** — aunque la suite local pase. Bug latente histórico: `/swl:cron`, `/swl:gateway` e `/swl:inbox` instruyen `require('./gateway/...')` y rompían en npm porque `gateway/` no estaba en `files` desde versiones previas. Revelado al agregar `bin/swl-webhook-server` (v1.4.0). Verificar antes de cada release: `npm pack --dry-run | grep -E "^npm notice [0-9].*[Bb] (bin|gateway|hooks|scripts|comandos)/"` debe listar todos los directorios reales referenciados. Gate automatizable en `scripts/verificar-release.js`. Origen: PR #15 sesión 2026-05-13
91
- - **Comandos `/swl:*` invocan vía CLI cross-scope, NUNCA rutas relativas al proyecto**: dentro de fenced code blocks de `comandos/swl/*.md` usar `swl-ses <sub>` (resolución: repo madre → bin en PATH → `npx -y @saulwade/swl-ses@latest <sub>`), no `node scripts/...` ni `require('./hooks/...')` — esas rutas rompen en instalación global/downstream (gates SDD G0/G1, telemetría, CI). Gate bloqueante en `scripts/validar.js §7b` (`auditar-invocaciones-comandos.js`); excluye SELF_DEV `{release, contribuir, evaluar-skill, reflect-skills}`. Wrappers en `scripts/cli/` se distribuyen SOLO vía npm (`package.json#files`), NO se cuentan en INVENTARIO ni en `modulos.json`; registro único en `bin/swl-ses.js`. Detalle: `@docs/invocacion-cli-cross-scope.md`. Origen: v2.2.0
92
- - **Componentes evolucionados: merge, no overwrite (invariante)**: el instalador NUNCA sobrescribe un componente con evolución del usuario (global o proyecto) — usa merge (preserve + `.evolved-diff.txt`). Distingue evolución de usuario (A) de shipped-evolved de fábrica (B) por hash del cuerpo canónico (`manifiestos/canonical-hashes.json`); el fuente NO porta marcadores `evolved` (gate inverso en `validar.js`). Detalle: ADR-0040. Origen: Fase 16
93
-
94
- ## Referencias a docs clave (cargar bajo demanda con `@`)
95
-
96
- - `@README.md` — overview público y quickstart
97
- - `@MANUAL_USO.md` — manual operacional completo
98
- - `@INSTALACION.md` — instalación, perfiles, configuración
99
- - `@COMANDOS.md` — referencia detallada de cada `/swl:*`
100
- - `@AGENTS.md` — catálogo de agentes con capacidades
101
- - `@INVENTARIO.md` — conteos oficiales (regenerado por script)
102
- - `@docs/variables-entorno.md` — variables opt-in completas
103
- - `@docs/CI-CD-SETUP.md` — setup de pipelines
104
- - `@docs/evidencia-valor.md` — medición de valor en campo (`swl-ses valor`), frontera de datos downstream↔repo madre
105
- - `@.planning/adrs/README.md` — índice de decisiones arquitecturales
106
-
107
- ---
108
-
109
- ## Qué es este repositorio
110
-
111
- Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo).
112
- 11 lenguajes, 7 runtimes (Claude, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot), 61 agentes, 181 skills, 48 comandos, 77 reglas, 49 hooks.
113
-
114
- ## Estructura del repositorio
115
-
116
- ```
117
- agentes/ habilidades/ comandos/swl/ contextos/ instintos/
118
- reglas/ hooks/ schemas/ manifiestos/ plantillas/
119
- scripts/ bin/ _userland/ .claude/ .planning/
120
- ```
121
-
122
- ## Flujos de trabajo
123
-
124
- **Feature completa**: orquestador → discovery → PRD → arquitectura → plan → implementación (paralelo) → calidad (paralelo) → cierre
125
- **Fases GSD**: discutir → planear → ejecutar → verificar
126
- **Frontend**: investigador-ux → disenador-ui → accesibilidad → frontend-* → rendimiento
127
- **Backend**: backend-api → backend-python/node → backend-workers → datos
128
- **Mobile**: producto-prd → mobile-cross (decisión) → mobile-android/ios → tdd-qa
129
-
130
- ## Comandos del sistema (/swl:*)
131
-
132
- Catálogo completo de 48 comandos `/swl:*` en `@COMANDOS.md`. Atajos mentales por categoría:
133
-
134
- - **Ciclo GSD por fase**: `discutir-fase` → `planear-fase` → `ejecutar-fase` → `verificar` (con discovery routing, modo iterativo `--iterative` y `--until-converge`).
135
- - **Anti-context-rot**: `checkpoint`, `compactar`.
136
- - **Aprendizaje**: `aprender`, `evolucionar`, `evolucion-continua` (motor determinista on|off|status, ADR-0041), `autoresearch`, `reflect-skills`.
137
- - **Calidad**: `revisar`, `verificar`, `nemesis` (auditoría Feynman + State, opcional `--remediar`), `deuda-codigo` (cosecha de marcadores `simplificado:`), `seguridad` (postura del proyecto completo), `fix` (triage y despacho de reparaciones), `predecir` (panel pre-implementación; `--abogado-diablo` critica la decisión).
138
- - **Diagnóstico**: `salud`, `metricas`, `dashboard`, `evolucion-estado`.
139
- - **Release**: `release`, `configurar-ci`.
140
- - **Conocimiento**: `wiki`, `mapear-codebase`, `skill-search`, `ayuda`.
141
-
142
- Para flags exactos y semántica de cada comando ver `@COMANDOS.md` y `@MANUAL_USO.md`.
143
-
144
- ## Reglas obligatorias (37 base + 40 por lenguaje)
145
-
146
- Las reglas globales del usuario en `~/.claude/rules/` se cargan automáticamente
147
- y aplican a todos los proyectos. Las reglas del sistema en `reglas/` se cargan
148
- por matcher de archivos o vía `@reglas/<nombre>.md` desde el CLAUDE.md del
149
- proyecto. Reglas de mayor uso:
150
-
151
- | Regla | Carga cuando |
152
- |-------|-------------|
153
- | `brevedad-output.md` | Siempre — idioma español, eficiencia de tokens |
154
- | `seguridad.md` / `seguridad-agentes.md` | `*.py`, `*.ts`, `auth/`, agentes autónomos |
155
- | `arreglar-al-detectar.md` | Siempre — detectar → informar → arreglar en mismo turno |
156
- | `analisis-previo-tareas-grandes.md` | Solicitudes >10 archivos / >500 LOC / cross-módulo |
157
- | `usar-context7.md` | Al generar código que importe librerías externas |
158
- | `git-workflow.md` | Siempre |
159
- | `skills-estandar.md` / `fragmentos-compartidos.md` | Crear/auditar skills o fragmentos |
160
- | `registro-componentes-nuevos.md` | Crear cualquier componente nuevo (agente/skill/comando/hook/regla) — registro obligatorio en manifiestos + plugin.json + INVENTARIO en mismo commit |
161
- | `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 |
162
-
163
- Catálogo completo y matchers en `@INVENTARIO.md` sección Reglas.
164
-
165
- <!-- La regla de la sección "Uso obligatorio del sistema SWL" NO se importa con @: la copia global ya carga sola; el @import duplicaba ~250 líneas/sesión. Depurado Fase 09 (commit 7273c9e). -->
166
-
167
- ## Estrategia de modelos (Model-Tier)
168
-
169
- Tiers por alias (se actualizan solos, NUNCA ID pineado en frontmatter): `fable` solo orquestador (coordinación central); `opus` decisiones irreversibles (arquitecto, revisor-seguridad, producto-prd, abogado-diablo); `sonnet` implementación y revisión; `haiku` operaciones deterministas; `inherit` sub-agentes del orquestador. NUNCA un tier superior para lo que el inferior resuelve igual. Detalle (alias vs API cruda, workflow de delegación, effort levels): `@docs/model-tier.md`.
170
-
171
- ---
172
-
173
- ## Convenciones operacionales
174
-
175
- Detalle completo en `@docs/convenciones-operacionales.md`. Resumen mínimo:
176
-
177
- - **Score mínimo de calidad**: **9.0/10** para aprobar trabajo.
178
- - **Modos de desarrollo**: `dev`, `review`, `research` (vía `/swl:contexto`).
179
- - **`respositorios-git/` y `temp/` son material de referencia** — no modificar ni commitear.
180
- - **Dependencias externas educativas son opt-in NO-dependencia** — el sistema funciona sin ellas.
181
- - **Patrón "validar antes de invocar"** para herramientas externas opt-in (markitdown, MinerU, gh).
182
- - **`skillsInvocables` requiere `Skill` en `tools:`** del agente.
183
-
184
- ## Mapa de propagación de cambios
185
-
186
- Al modificar o agregar cualquier componente del sistema, **invocar
187
- `Skill("doc-sync")` antes del commit final** para cargar el protocolo
188
- proactivo completo. La tabla y checklist completos viven en
189
- `@docs/mapa-propagacion.md` para mantener este archivo bajo el umbral
190
- de 200 líneas (regla `auditar-claudemd.js`).
191
-
192
- Resumen mínimo para uso inmediato:
193
-
194
- - 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.
195
- - **Skill responsable**: `Skill("doc-sync") § Protocolo proactivo` (sub-secciones Tipo 1 a Tipo 8) tiene el detalle prescriptivo.
196
- - **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`.
197
- - Si cualquier gate falla, **NO commitear** hasta corregir. Regla `arreglar-al-detectar.md` exige resolver en mismo turno.
1
+ # CLAUDE.md — @saulwade/swl-ses v2.6.1
2
+
3
+ ## Reglas de máxima prioridad (aplican SIEMPRE, sin excepción)
4
+
5
+ ### Idioma y estilo de output
6
+ Aplican las reglas globales `@~/.claude/rules/brevedad-output.md` (español de México, brevedad, sin AI-isms) y `@~/.claude/rules/git-coauthor.md` (sin co-autores en commits) — cargadas automáticamente en cada sesión. NO duplicar su contenido inline en este archivo (regla `@reglas/sin-duplicacion-reglas-globales.md`).
7
+
8
+ ### Uso obligatorio del sistema SWL
9
+ Aplica la regla global `@~/.claude/rules/usar-sistema-swl.md` — matriz operacional completa (qué agente/skill/comando usar por tipo de tarea, excepciones legítimas, anti-patrones). Cargar skills con `Skill("nombre")` antes de implementar.
10
+
11
+ ### Cuatro principios de implementación (Karpathy)
12
+ Antes de implementar, refactorizar o corregir bugs: (1) **pensar antes de codificar** (no asumir en silencio), (2) **simplicidad primero** (sin abstracciones especulativas), (3) **cambios quirúrgicos** (leer archivo completo antes de editar, no refactor de oportunidad), (4) **ejecución orientada a metas** (criterios verificables, test que reproduce bugs antes del fix). Tabla operativa + mapeo a agentes SWL en `@docs/karpathy-principios.md`. Detalle + 9 ejemplos MAL→BIEN: `Skill("prevencion-sobreingenieria")` + `recursos/EXAMPLES.md`.
13
+
14
+ ### Lectura de documentos Office
15
+ Cuando necesites leer el **contenido** de un archivo `.docx`, `.xlsx`, `.xls` o `.pptx`, NUNCA uses el Read tool directamente (no soporta esos formatos). Usa:
16
+ ```bash
17
+ python scripts/vendor/markitdown/cli.py <ruta-al-archivo>
18
+ ```
19
+ El Read tool sigue siendo correcto para `.pdf` (≤20 páginas), `.ipynb` (Claude Code actual lee notebooks nativamente: celdas + outputs), `.md`, `.txt` y código fuente. Para más opciones y casos de uso consultar `Skill("swl-markitdown")`.
20
+
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, 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).
23
+
24
+ ---
25
+
26
+ ## Stack del proyecto
27
+
28
+ - **Runtime**: Node.js >=22.0.0 (ESM + CommonJS)
29
+ - **Tipo**: Sistema de scripts CLI + plugin para Claude Code (multi-runtime: Claude / Copilot / OpenCode / Codex / Gemini)
30
+ - **Formato fuente**: Markdown (agentes, skills, comandos, reglas) + JSON Schema (validación) + YAML (instintos)
31
+ - **Distribución**: npm package (`@saulwade/swl-ses`) + plugin Claude Code (`plugin.json`)
32
+ - **Dependencias runtime**: 1 directa (`docx ^9.6.1`; `pako` y `readable-stream` son transitivas de docx/jszip, no directas). Hooks y scripts/lib son zero-deps
33
+ - **Idioma de salida**: 100% español (México) para componentes SWL; skills oficiales de Anthropic en inglés
34
+ - **MCP del proyecto**: `code-review-graph` disponible vía `.mcp.json` (requiere `uvx`). Comportamiento: `@~/.claude/rules/usar-code-review-graph.md`
35
+
36
+ ## Comandos del proyecto
37
+
38
+ | Comando | Propósito |
39
+ |---|---|
40
+ | `npm test` | Tests unitarios (lib/, scripts/, hooks/) |
41
+ | `npm run test:all` | test + validar.js + validar-manifest.js |
42
+ | `npm run test:release` | test:all + test:userland + smoke (gate pre-publish) |
43
+ | `npm run test:validate` | `node scripts/validar.js` — validación estructural completa |
44
+ | `npm run test:manifest` | `node scripts/validar-manifest.js` — coherencia modulos/hooks |
45
+ | `npm run test:smoke` | Smoke test del instalador |
46
+ | `npm run gen-checklists` | Regenera `docs/checklists-consolidados/` desde reglas |
47
+ | `npm run gen-checklists:check` | Falla si hay drift (uso CI) |
48
+ | `npm run generate:docs` | Regenera `INVENTARIO.md` desde directorios |
49
+ | `npm run doctor` | Diagnóstico del sistema (`scripts/doctor.js`) |
50
+ | `npm run publish:dry` | Dry-run de publicación a npm + GitHub |
51
+ | `node scripts/verificar-release.js` | Gate pre-release: 15+ ubicaciones de versión, sincronización, AI-isms (si `SWL_AIISMS_GATE=1`) |
52
+ | `node scripts/generar-inventario.js` | Regenera contadores oficiales + catálogos de INVENTARIO/SALUD/llms.txt (NUNCA contar a mano) |
53
+ | `npm run gen-comandos` | Regenera los bloques `CATALOGO-COMANDOS` de COMANDOS.md y AGENTS.md desde frontmatter; `--check` (en test:all) detecta drift |
54
+ | `node scripts/auditar-clases-conocidas.js` | Gate anti-reincidencia de clases de bug documentadas (C1 fecha UTC, C2 comparación sin normalizar EOL, C3 bloqueo ciego en hooks). En test:all |
55
+ | `node scripts/canario-hooks.js [--smoke]` | Canario de hooks: grafo de requires distribuido en modulos.json (clase check-update); --smoke ejecuta los 49 en sandbox (en test:release) |
56
+ | `node scripts/derivar-feature-list.js` | Genera `.planning/feature-list.json` (derivado de `HOJA-RUTA.md`, gitignored, regenerable). Modo `--check` exit 2 si drift detectado. Consumido por `/swl:status metricas fases`. |
57
+
58
+ ## Code style
59
+
60
+ - **Nombres**: kebab-case para archivos; agentes SWL y vocabulario GSD (comandos `*-fase`, dir `.planning/fases/`) en español; paths runtime/técnicos de `.planning/` en inglés (`evolution/`, `auto-evolution/`, `user-profile/`, `archive/`, `traces/`, `sessions/`, `audit/`). Ver `@~/.claude/rules/analizar-directorios-antes-de-escribir.md § Eje técnico-runtime`
61
+ - **Zero-dependencies en `hooks/lib/`**: sin dependencias npm externas
62
+ - **Escrituras atómicas obligatorias**: usar `atomicWriteSync()` / `atomicWriteJSON()` de `hooks/lib/atomic-write.js`. NUNCA `fs.writeFileSync` directo en archivos del sistema
63
+ - **JSONL para alta frecuencia**: usar `fs.appendFileSync(ruta, JSON.stringify(evento) + '\n')` en hooks de telemetría/auditoría — no `atomicWriteJSON` que reescribe todo
64
+ - **Fechas de artefactos generados SIEMPRE locales**: `toLocaleDateString('sv')`, NUNCA `toISOString().slice(0,10)` — desde México la tarde ya es "mañana" en UTC (x7 sitios corregidos 2026-07-08)
65
+ - **Reemplazos con backticks/regex vía `node -e` en bash mangean escapes en silencio** ("aplica" sin aplicar): usar heredoc `node <<'EOF'` + `String.raw` (x3 incidentes 2026-07-08)
66
+ - **`plugin.json#agents`/`#skills` son alfabéticos**: insertar en posición — ningún gate valida el orden
67
+ - **Todo gate de escaneo nuevo lleva test anti-regresión viva** ("el repo real pasa con exit 0") en `npm test`: pre-commit el gate no se escanea a sí mismo (`git ls-files` ignora untracked) y su doc NO escribe el patrón prohibido literal (se auto-detectó y tumbó el publish v2.5.1)
68
+ - **Contrato del CLI (`bin/swl-ses.js`)**: todo subcomando exporta UNA función(opciones) sin efectos al require — test viviente `bin-contrato-comandos.test.js` (3 violaciones cazadas, una en campo)
69
+ - **YAML inline en frontmatter**: `tools: [Read, Write]`, `skillsInvocables: [skill-a]`. NUNCA CSV string ni mezcla con lista multilínea
70
+ - **Mensajes de commit**: imperativo en español, formato `<tipo>(<scope>): <descripción>`
71
+ - **Sin `console.log` en producción** — excepto en `scripts/`, `bin/`, `hooks/`, `gateway/` (CLIs y daemons)
72
+ - **Nombre completo del paquete en npx**: todo mensaje del installer/docs usa `npx -y @saulwade/swl-ses@latest <comando>`. **NUNCA** `npx swl-ses@latest <comando>` sin el scope `@saulwade/` — eso resuelve al paquete legacy DEPRECATED (v5.13.1) que aún existe en npm tras el rebrand de 2026-04-30. El `@latest` es indispensable: sin él npx reutiliza la primera versión cacheada y el usuario corre código viejo sin saberlo. El `-y` evita la prompt de confirmación en CI/scripts
73
+ - **Fixtures `secret`/`token` en tests deben ser en español** (`secreto`, `tokenBearer`, `clave-test`). El hook `calidad-pre-commit.js` matchea `\bsecret\s*[=:]\s*["'][^"'\s]{4,}["']` y `\btoken\s*[=:]\s*["'][^"'\s]{8,}["']` — `const secret = "valor"` se bloquea como credencial hardcodeada aunque sea fixture legítimo. Renombrar a español elude el regex sin bypass (alternativas reconocidas por el hook: `placeholder`, `example`, `fake_`, `dummy_`, `os.environ`/`process.env`). Coherente con regla global de idioma. Origen: PR #11 sesión 2026-05-13
74
+ - **Scopes de runtime SIEMPRE vía `scopesReales()` de `scripts/lib/detectar-runtime.js`** — NUNCA el patrón manual `[runtime.global, path.resolve(runtime.local)]`: desde el HOME el local relativo resuelve al global propio (duplicados) o al de OTRO runtime (scope "proyecto" fantasma — el local de OpenClaude es el global de Claude Code; un uninstall de ese fantasma borraría el global). 8 sitios corregidos el 2026-07-03 (doctor ×5, actualizar ×2, TUI ×4)
75
+ - **`git add archivo && git commit -m "..."` en un solo comando bash NO actualiza el index antes del PreToolUse hook**: el hook `calidad-pre-commit.js` evalúa el contenido staged previo al `&&`, no el actualizado en la misma línea. Síntoma: commit bloqueado por contenido que ya corregiste vía Write/Edit pero seguía staged en versión antigua. Fix: separar en dos calls Bash (`git add archivo` → ver resultado → `git commit -m "..."`). NUNCA usar `--no-verify` para bypassear. Origen: PR #11 sesión 2026-05-13
76
+ - **Secretos compartidos entre clientes MCP viven como variables de entorno persistentes del SO, NO en archivos JSON** [v2 — 2026-05-18]: un MCP usado desde Cursor + Claude Code + VS Code tiene un config JSON POR cliente; duplicar `OBSIDIAN_API_KEY` en N archivos genera drift al regenerar la apiKey. Patrón: `setx OBSIDIAN_API_KEY <key>` (o `[Environment]::SetEnvironmentVariable(..., "User")` en PS7) → escribe a `HKCU\Environment` → todos los clientes la heredan al spawnear el binario. Los JSON OMITEN la clave `env` por completo (NO `env: {}` vacío — pasa literal a `child_process.spawn` y REEMPLAZA el env del padre, rompiendo la herencia). Regenerar apiKey = un `setx` + reiniciar clientes, sin tocar JSONs. Origen: 2026-05-18, 6h de errores 40101 por 3 configs descoordinados.
77
+
78
+ ## Convenciones de arquitectura
79
+
80
+ - **Precedencia de capas**: Reglas base (`reglas/`) → Reglas por lenguaje (`reglas/{lang}/`) → Skills (`habilidades/`) → Instintos (`instintos/`). Cada capa puede especializar pero NUNCA contradecir las superiores
81
+ - **`reglas/` es la FUENTE; `~/.claude/rules/` son copias INSTALADAS** por el instalador: todo cambio a reglas base va en la fuente y se sincroniza — editar solo las copias es deuda volátil (el install las sobreescribe). Incluye las reglas globales personales del usuario (decisión 2026-06-12, commit `2f6b8de` — las 37 base viajan en `reglas-core`). Origen: Fase 09 (APRENDIZAJES 2026-06-11)
82
+ - **Privilegio mínimo de agentes**: un agente delegado NUNCA excede los permisos declarados en su propio frontmatter. La cadena de delegación no escala privilegios. Ver `@reglas/seguridad-agentes.md`
83
+ - **Preservación de datos en actualización**: `.planning/sessions/`, `.planning/comms/`, `_userland/`, `instintos/proyecto.yaml`, `APRENDIZAJES.md` NUNCA se sobreescriben
84
+ - **Documentación obligatoria**: toda funcionalidad nueva DEBE documentarse en `MANUAL_USO.md`, `COMANDOS.md`, `CLAUDE.md` y `README.md` ANTES del commit
85
+ - **Criterio dominio para incorporar skills externos**: solo si dominio = ingeniería de software general. Pregunta de filtro: *¿le sirve esto a un ingeniero de software en cualquier proyecto de software?* (ML Ops, Data Science, finanzas, etc. → descartar)
86
+ - **Filtro primario al analizar `temp/`**: antes de evaluar arquitectura, verificar **compatibilidad de dominio**. Si es incompatible, veredicto NINGUNA aplicabilidad sin análisis adicional
87
+ - **Variables de entorno opt-in enterprise**: ver `@docs/variables-entorno.md` (catálogo completo). Patrón obligatorio: `if (!process.env.VAR) return` — zero-config por defecto
88
+ - **Hooks SWL que invocan auditores Node deben cargar el auditor como módulo (`require()`), no como subproceso**: ~10× más rápido, errores estructurados (no parsing de stdout), tests directos del módulo. Excepción legítima: cuando el auditor es Python o Bash (`spawnSync`). Ejemplo aplicado en `hooks/claudemd-bloat-detector.js` que usa `require('./scripts/auditar-claudemd.js')` directamente. Antipatrón evitado: `spawnSync('node', [auditorPath, ...])` agrega ~50ms por invocación y obliga a parsear JSON de stdout
89
+ - **npm v10+ NO escribe debug logs cuando falla un script invocado** (`prepublishOnly`, `prepack`, etc.) — solo cuando falla npm-mismo (network, registry, auth). El default `loglevel=notice` mantiene `_logs/` vacío para errores de scripts. Para diagnóstico de `npm run publish:all` que falla en script propio, capturar stdout+stderr con redirección: PowerShell `npm run publish:all *>&1 | Tee-Object .planning/logs/publish-$(Get-Date -Format yyyyMMdd-HHmmss).log` o Bash `2>&1 | tee`. Alternativa permanente: `npm config set loglevel verbose`
90
+ - **`package.json#files` debe incluir TODOS los directorios referenciados por `bin/`, `hooks/`, `scripts/` o `comandos/`**: si un binario hace `require('./gateway/foo')` pero `gateway/` no está listado en `files`, **el módulo se omite del tarball npm y el binario falla con MODULE_NOT_FOUND tras instalación pública** — aunque la suite local pase. Bug latente histórico: `/swl:cron`, `/swl:gateway` e `/swl:inbox` instruyen `require('./gateway/...')` y rompían en npm porque `gateway/` no estaba en `files` desde versiones previas. Revelado al agregar `bin/swl-webhook-server` (v1.4.0). Verificar antes de cada release: `npm pack --dry-run | grep -E "^npm notice [0-9].*[Bb] (bin|gateway|hooks|scripts|comandos)/"` debe listar todos los directorios reales referenciados. Gate automatizable en `scripts/verificar-release.js`. Origen: PR #15 sesión 2026-05-13
91
+ - **Comandos `/swl:*` invocan vía CLI cross-scope, NUNCA rutas relativas al proyecto**: dentro de fenced code blocks de `comandos/swl/*.md` usar `swl-ses <sub>` (resolución: repo madre → bin en PATH → `npx -y @saulwade/swl-ses@latest <sub>`), no `node scripts/...` ni `require('./hooks/...')` — esas rutas rompen en instalación global/downstream (gates SDD G0/G1, telemetría, CI). Gate bloqueante en `scripts/validar.js §7b` (`auditar-invocaciones-comandos.js`); excluye SELF_DEV `{release, contribuir, evaluar-skill, reflect-skills}`. Wrappers en `scripts/cli/` se distribuyen SOLO vía npm (`package.json#files`), NO se cuentan en INVENTARIO ni en `modulos.json`; registro único en `bin/swl-ses.js`. Detalle: `@docs/invocacion-cli-cross-scope.md`. Origen: v2.2.0
92
+ - **Componentes evolucionados: merge, no overwrite (invariante)**: el instalador NUNCA sobrescribe un componente con evolución del usuario (global o proyecto) — usa merge (preserve + `.evolved-diff.txt`). Distingue evolución de usuario (A) de shipped-evolved de fábrica (B) por hash del cuerpo canónico (`manifiestos/canonical-hashes.json`); el fuente NO porta marcadores `evolved` (gate inverso en `validar.js`). Detalle: ADR-0040. Origen: Fase 16
93
+
94
+ ## Referencias a docs clave (cargar bajo demanda con `@`)
95
+
96
+ - `@README.md` — overview público y quickstart
97
+ - `@MANUAL_USO.md` — manual operacional completo
98
+ - `@INSTALACION.md` — instalación, perfiles, configuración
99
+ - `@COMANDOS.md` — referencia detallada de cada `/swl:*`
100
+ - `@AGENTS.md` — catálogo de agentes con capacidades
101
+ - `@INVENTARIO.md` — conteos oficiales (regenerado por script)
102
+ - `@docs/variables-entorno.md` — variables opt-in completas
103
+ - `@docs/CI-CD-SETUP.md` — setup de pipelines
104
+ - `@docs/evidencia-valor.md` — medición de valor en campo (`swl-ses valor`), frontera de datos downstream↔repo madre
105
+ - `@.planning/adrs/README.md` — índice de decisiones arquitecturales
106
+
107
+ ---
108
+
109
+ ## Qué es este repositorio
110
+
111
+ Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo).
112
+ 11 lenguajes, 7 runtimes (Claude, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot), 61 agentes, 181 skills, 48 comandos, 77 reglas, 49 hooks.
113
+
114
+ ## Estructura del repositorio
115
+
116
+ ```
117
+ agentes/ habilidades/ comandos/swl/ contextos/ instintos/
118
+ reglas/ hooks/ schemas/ manifiestos/ plantillas/
119
+ scripts/ bin/ _userland/ .claude/ .planning/
120
+ ```
121
+
122
+ ## Flujos de trabajo
123
+
124
+ **Feature completa**: orquestador → discovery → PRD → arquitectura → plan → implementación (paralelo) → calidad (paralelo) → cierre
125
+ **Fases GSD**: discutir → planear → ejecutar → verificar
126
+ **Frontend**: investigador-ux → disenador-ui → accesibilidad → frontend-* → rendimiento
127
+ **Backend**: backend-api → backend-python/node → backend-workers → datos
128
+ **Mobile**: producto-prd → mobile-cross (decisión) → mobile-android/ios → tdd-qa
129
+
130
+ ## Comandos del sistema (/swl:*)
131
+
132
+ Catálogo completo de 48 comandos `/swl:*` en `@COMANDOS.md`. Atajos mentales por categoría:
133
+
134
+ - **Ciclo GSD por fase**: `discutir-fase` → `planear-fase` → `ejecutar-fase` → `verificar` (con discovery routing, modo iterativo `--iterative` y `--until-converge`).
135
+ - **Anti-context-rot**: `checkpoint`, `compactar`.
136
+ - **Aprendizaje**: `aprender`, `evolucionar`, `evolucion-continua` (motor determinista on|off|status, ADR-0041), `autoresearch`, `reflect-skills`.
137
+ - **Calidad**: `revisar`, `verificar`, `nemesis` (auditoría Feynman + State, opcional `--remediar`), `deuda-codigo` (cosecha de marcadores `simplificado:`), `seguridad` (postura del proyecto completo), `fix` (triage y despacho de reparaciones), `predecir` (panel pre-implementación; `--abogado-diablo` critica la decisión).
138
+ - **Diagnóstico**: `salud`, `metricas`, `dashboard`, `evolucion-estado`.
139
+ - **Release**: `release`, `configurar-ci`.
140
+ - **Conocimiento**: `wiki`, `mapear-codebase`, `skill-search`, `ayuda`.
141
+
142
+ Para flags exactos y semántica de cada comando ver `@COMANDOS.md` y `@MANUAL_USO.md`.
143
+
144
+ ## Reglas obligatorias (37 base + 40 por lenguaje)
145
+
146
+ Las reglas globales del usuario en `~/.claude/rules/` se cargan automáticamente
147
+ y aplican a todos los proyectos. Las reglas del sistema en `reglas/` se cargan
148
+ por matcher de archivos o vía `@reglas/<nombre>.md` desde el CLAUDE.md del
149
+ proyecto. Reglas de mayor uso:
150
+
151
+ | Regla | Carga cuando |
152
+ |-------|-------------|
153
+ | `brevedad-output.md` | Siempre — idioma español, eficiencia de tokens |
154
+ | `seguridad.md` / `seguridad-agentes.md` | `*.py`, `*.ts`, `auth/`, agentes autónomos |
155
+ | `arreglar-al-detectar.md` | Siempre — detectar → informar → arreglar en mismo turno |
156
+ | `analisis-previo-tareas-grandes.md` | Solicitudes >10 archivos / >500 LOC / cross-módulo |
157
+ | `usar-context7.md` | Al generar código que importe librerías externas |
158
+ | `git-workflow.md` | Siempre |
159
+ | `skills-estandar.md` / `fragmentos-compartidos.md` | Crear/auditar skills o fragmentos |
160
+ | `registro-componentes-nuevos.md` | Crear cualquier componente nuevo (agente/skill/comando/hook/regla) — registro obligatorio en manifiestos + plugin.json + INVENTARIO en mismo commit |
161
+ | `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 |
162
+
163
+ Catálogo completo y matchers en `@INVENTARIO.md` sección Reglas.
164
+
165
+ <!-- La regla de la sección "Uso obligatorio del sistema SWL" NO se importa con @: la copia global ya carga sola; el @import duplicaba ~250 líneas/sesión. Depurado Fase 09 (commit 7273c9e). -->
166
+
167
+ ## Estrategia de modelos (Model-Tier)
168
+
169
+ Tiers por alias (se actualizan solos, NUNCA ID pineado en frontmatter): `fable` solo orquestador (coordinación central); `opus` decisiones irreversibles (arquitecto, revisor-seguridad, producto-prd, abogado-diablo); `sonnet` implementación y revisión; `haiku` operaciones deterministas; `inherit` sub-agentes del orquestador. NUNCA un tier superior para lo que el inferior resuelve igual. Detalle (alias vs API cruda, workflow de delegación, effort levels): `@docs/model-tier.md`.
170
+
171
+ ---
172
+
173
+ ## Convenciones operacionales
174
+
175
+ Detalle completo en `@docs/convenciones-operacionales.md`. Resumen mínimo:
176
+
177
+ - **Score mínimo de calidad**: **9.0/10** para aprobar trabajo.
178
+ - **Modos de desarrollo**: `dev`, `review`, `research` (vía `/swl:contexto`).
179
+ - **`respositorios-git/` y `temp/` son material de referencia** — no modificar ni commitear.
180
+ - **Dependencias externas educativas son opt-in NO-dependencia** — el sistema funciona sin ellas.
181
+ - **Patrón "validar antes de invocar"** para herramientas externas opt-in (markitdown, MinerU, gh).
182
+ - **`skillsInvocables` requiere `Skill` en `tools:`** del agente.
183
+
184
+ ## Mapa de propagación de cambios
185
+
186
+ Al modificar o agregar cualquier componente del sistema, **invocar
187
+ `Skill("doc-sync")` antes del commit final** para cargar el protocolo
188
+ proactivo completo. La tabla y checklist completos viven en
189
+ `@docs/mapa-propagacion.md` para mantener este archivo bajo el umbral
190
+ de 200 líneas (regla `auditar-claudemd.js`).
191
+
192
+ Resumen mínimo para uso inmediato:
193
+
194
+ - 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.
195
+ - **Skill responsable**: `Skill("doc-sync") § Protocolo proactivo` (sub-secciones Tipo 1 a Tipo 8) tiene el detalle prescriptivo.
196
+ - **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`.
197
+ - Si cualquier gate falla, **NO commitear** hasta corregir. Regla `arreglar-al-detectar.md` exige resolver en mismo turno.