@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
@@ -1,174 +1,174 @@
1
- ---
2
- name: changelog-generator
3
- description: >
4
- Generador automático de entradas CHANGELOG.md en formato Keep a Changelog
5
- desde commits Conventional Commits. Parser determinista que clasifica feat/
6
- fix/perf/refactor/docs/etc. en categorías user-facing en español, detecta
7
- breaking changes (marca '!' o trailer 'BREAKING CHANGE:') y reporta nivel
8
- de conformidad para decidir fallback manual. Cargar en /swl:release Paso 7
9
- cuando hay commits Conventional, o manualmente para previsualizar el
10
- changelog antes de un release.
11
- version: 1.1.1
12
- nivelRiesgo: BAJO
13
- herramientasPermitidas: [Read, Bash]
14
- skillsInvocables: [release-semver]
15
- exclusiones:
16
- - "No invocar para generar release notes con marketing copy o anuncios para usuarios finales — este skill produce listado técnico-legible, no narrativa."
17
- - "No invocar si el repo no usa Conventional Commits — el parser detecta <80% conformidad y el caller debe abortar a flujo manual de release-semver."
18
- - "No invocar para reescribir CHANGELOG histórico — solo agrega entrada de la próxima versión al inicio."
19
- ---
20
-
21
- # /habilidades/changelog-generator — CHANGELOG automático desde Conventional Commits
22
-
23
- ## Cuándo cargar
24
-
25
- - Durante `/swl:release` Paso 7 (Generar CHANGELOG), cuando el flujo automático
26
- está disponible y los commits del rango siguen Conventional Commits.
27
- - Para previsualizar el changelog candidato antes de bumpear versión:
28
- `node habilidades/changelog-generator/scripts/parse-commits.js --version X`
29
- - Cuando un colaborador pide un resumen legible de cambios entre dos refs
30
- arbitrarias del repo.
31
-
32
- ## Cuándo NO cargar
33
-
34
- - Repo sin Conventional Commits (<80% de conformidad): el parser detecta y
35
- reporta; el caller debe usar `Skill("release-semver")` flujo manual.
36
- - Generación de **release notes** (texto narrativo con contexto de producto):
37
- este skill produce CHANGELOG técnico-legible; las release notes con marketing
38
- son tarea aparte (`documentador-swl` con plantilla específica).
39
- - Reescritura histórica del CHANGELOG (squash de varias versiones, corrección
40
- de entradas antiguas): solo se agrega entrada de la versión nueva al inicio.
41
-
42
- ## Qué hace el skill
43
-
44
- 1. **Lee commits** desde la última tag (o entre dos refs arbitrarias) con
45
- `git log --format=...` usando un separador único para parsear subject + body
46
- sin colisiones.
47
- 2. **Parsea con Conventional Commits 1.0.0**: regex que captura tipo, scope,
48
- marca `!`, descripción. Soporta tipos extendidos del proyecto SWL:
49
- `evolucion` (cambios de skills/agentes), además de `feat/fix/perf/refactor/
50
- docs/style/test/ci/build/chore/revert`. Tolera el prefijo opcional de
51
- trazabilidad `[T-NN]` / `[REQ-NN]` de la convención de `ejecutar-fase`
52
- (no altera la semántica CC — el tipo+scope+descripción siguen presentes).
53
- 3. **Detecta breaking changes** por marca `!` después del tipo o trailer
54
- `BREAKING CHANGE:` en el body. Los breaking siempre van al inicio del
55
- release, sin importar el tipo original.
56
- 4. **Transforma descripción técnica → legible**:
57
- - Elimina referencias a issues al final (`(#123)`, `Refs #456`).
58
- - Capitaliza primera letra.
59
- - Elimina punto final (Keep a Changelog usa bullets sin punto).
60
- 5. **Agrupa en categorías** con orden canónico:
61
- 1. Breaking changes
62
- 2. Nuevas funcionalidades (feat)
63
- 3. Correcciones (fix)
64
- 4. Mejoras de rendimiento (perf)
65
- 5. Cambios internos (refactor)
66
- 6. Reversiones (revert)
67
- 7. Evoluciones de skills/agentes (evolucion — SWL-specific)
68
- 8. Mantenimiento (docs/style/test/ci/build/chore — colapsadas)
69
- 9. Otros (commits sin prefijo CC válido)
70
- 6. **Reporta conformidad**: ratio commits conformes / total. Si <80%, el
71
- caller debe decidir si abortar o seguir manualmente.
72
-
73
- ## Helper programático
74
-
75
- ```js
76
- const {
77
- parsearCommits,
78
- leerCommitsGit,
79
- generarChangelog,
80
- } = require('./habilidades/changelog-generator/scripts/parse-commits');
81
-
82
- // 1. Leer commits desde la última tag hasta HEAD
83
- const commits = leerCommitsGit({ to: 'HEAD' });
84
-
85
- // 2. Parsear y clasificar
86
- const { categorias, conformidad, totalCommits, conformes } = parsearCommits(commits);
87
-
88
- // 3. Si conformidad < 0.8, abortar o avisar al usuario
89
- if (conformidad < 0.8) {
90
- console.warn(`Conformidad CC: ${conformes}/${totalCommits}. Revisar "Otros".`);
91
- }
92
-
93
- // 4. Generar markdown listo para insertar en CHANGELOG.md
94
- const md = generarChangelog(categorias, {
95
- version: '1.6.5',
96
- fecha: '2026-05-22', // opcional, default = hoy
97
- incluirHash: true, // muestra hash corto al inicio de cada bullet
98
- });
99
- ```
100
-
101
- ## Uso CLI
102
-
103
- Previsualizar changelog candidato sin escribir nada:
104
-
105
- ```bash
106
- node habilidades/changelog-generator/scripts/parse-commits.js \
107
- --version 1.6.5 \
108
- --format markdown
109
- ```
110
-
111
- Filtrar por rango específico:
112
-
113
- ```bash
114
- node habilidades/changelog-generator/scripts/parse-commits.js \
115
- --from v1.6.4 \
116
- --to HEAD \
117
- --version 1.6.5
118
- ```
119
-
120
- Salida JSON estructurado para post-procesamiento:
121
-
122
- ```bash
123
- node habilidades/changelog-generator/scripts/parse-commits.js \
124
- --from v1.6.4 \
125
- --format json > /tmp/changelog-candidato.json
126
- ```
127
-
128
- ## Reglas de uso desde /swl:release
129
-
130
- 1. Llamar a `leerCommitsGit` con la última tag detectada en el Paso 1 del
131
- release.
132
- 2. Verificar `conformidad >= 0.8`. Si menor, presentar al usuario los commits
133
- bajo "Otros" y pedir decisión: (a) continuar con el changelog, (b) abortar
134
- y reescribir commits, (c) editar manualmente la categoría "Otros".
135
- 3. Si `--dry-run` está activo en `/swl:release`, mostrar el output de
136
- `generarChangelog` sin escribir a disco.
137
- 4. Si conformidad OK: leer CHANGELOG.md actual, insertar el bloque generado
138
- al inicio después del header `# Changelog`, escribir atómicamente.
139
- 5. NO hacer commit aquí — eso lo hace el Paso 8 de `/swl:release`.
140
-
141
- ## Gotchas observables
142
-
143
- - **Conventional Commits sin scope son válidos**: `fix: corregir X` parsea
144
- igual que `fix(modulo): corregir X`. El parser no exige scope.
145
- - **El subject debe ir en una sola línea**: si un commit usa newline en el
146
- subject, el parser lo trata como completo pero `git log %s` ya lo trunca.
147
- - **Tipos no estándar van a "Otros"**: si un equipo usa `mejora:`, `cambio:`,
148
- el parser los marca como no conformes. El usuario debe ajustar la lista
149
- `CATEGORIAS` en `parse-commits.js` o adoptar tipos estándar.
150
- - **El skill NO escribe a disco directamente**: solo retorna markdown. El
151
- caller (`/swl:release` Paso 7) es responsable de leer el CHANGELOG actual,
152
- insertar al inicio y escribir atómicamente.
153
- - **Commits revert vienen del propio git**: `git revert` genera mensajes
154
- `Revert "Subject original"` que el parser categoriza correctamente bajo
155
- Reversiones (regex matchea `revert:` sin que el usuario lo escriba si usa
156
- `git revert -e` para editar el mensaje al formato CC).
157
- - **El hash corto se trunca a 7 chars**: alineado con el formato `git log
158
- --oneline` estándar.
159
-
160
- ## Origen
161
-
162
- Adaptado del skill `changelog-generator` de
163
- `temp/awesome-codex-skills-master/changelog-generator/` (ComposioHQ, MIT) con:
164
-
165
- - Frontmatter al estándar SWL (es-MX, `nivelRiesgo: BAJO`, `exclusiones`).
166
- - Parser determinista en Node.js (`parse-commits.js`) — el origen es solo
167
- documentación; este skill agrega la implementación ejecutable.
168
- - Tipo `evolucion:` específico de SWL agregado al parser.
169
- - Soporte para breaking changes `!` y trailer `BREAKING CHANGE:` (origen
170
- solo menciona el segundo).
171
- - Reporte de conformidad <80% como gate explícita para fallback manual.
172
- - Integración con `/swl:release` Paso 7 documentada en `comandos/swl/release.md`.
173
-
174
- Documentado en ADR-0029 (integración parcial awesome-codex-skills, Opción B).
1
+ ---
2
+ name: changelog-generator
3
+ description: >
4
+ Generador automático de entradas CHANGELOG.md en formato Keep a Changelog
5
+ desde commits Conventional Commits. Parser determinista que clasifica feat/
6
+ fix/perf/refactor/docs/etc. en categorías user-facing en español, detecta
7
+ breaking changes (marca '!' o trailer 'BREAKING CHANGE:') y reporta nivel
8
+ de conformidad para decidir fallback manual. Cargar en /swl:release Paso 7
9
+ cuando hay commits Conventional, o manualmente para previsualizar el
10
+ changelog antes de un release.
11
+ version: 1.1.1
12
+ nivelRiesgo: BAJO
13
+ herramientasPermitidas: [Read, Bash]
14
+ skillsInvocables: [release-semver]
15
+ exclusiones:
16
+ - "No invocar para generar release notes con marketing copy o anuncios para usuarios finales — este skill produce listado técnico-legible, no narrativa."
17
+ - "No invocar si el repo no usa Conventional Commits — el parser detecta <80% conformidad y el caller debe abortar a flujo manual de release-semver."
18
+ - "No invocar para reescribir CHANGELOG histórico — solo agrega entrada de la próxima versión al inicio."
19
+ ---
20
+
21
+ # /habilidades/changelog-generator — CHANGELOG automático desde Conventional Commits
22
+
23
+ ## Cuándo cargar
24
+
25
+ - Durante `/swl:release` Paso 7 (Generar CHANGELOG), cuando el flujo automático
26
+ está disponible y los commits del rango siguen Conventional Commits.
27
+ - Para previsualizar el changelog candidato antes de bumpear versión:
28
+ `node habilidades/changelog-generator/scripts/parse-commits.js --version X`
29
+ - Cuando un colaborador pide un resumen legible de cambios entre dos refs
30
+ arbitrarias del repo.
31
+
32
+ ## Cuándo NO cargar
33
+
34
+ - Repo sin Conventional Commits (<80% de conformidad): el parser detecta y
35
+ reporta; el caller debe usar `Skill("release-semver")` flujo manual.
36
+ - Generación de **release notes** (texto narrativo con contexto de producto):
37
+ este skill produce CHANGELOG técnico-legible; las release notes con marketing
38
+ son tarea aparte (`documentador-swl` con plantilla específica).
39
+ - Reescritura histórica del CHANGELOG (squash de varias versiones, corrección
40
+ de entradas antiguas): solo se agrega entrada de la versión nueva al inicio.
41
+
42
+ ## Qué hace el skill
43
+
44
+ 1. **Lee commits** desde la última tag (o entre dos refs arbitrarias) con
45
+ `git log --format=...` usando un separador único para parsear subject + body
46
+ sin colisiones.
47
+ 2. **Parsea con Conventional Commits 1.0.0**: regex que captura tipo, scope,
48
+ marca `!`, descripción. Soporta tipos extendidos del proyecto SWL:
49
+ `evolucion` (cambios de skills/agentes), además de `feat/fix/perf/refactor/
50
+ docs/style/test/ci/build/chore/revert`. Tolera el prefijo opcional de
51
+ trazabilidad `[T-NN]` / `[REQ-NN]` de la convención de `ejecutar-fase`
52
+ (no altera la semántica CC — el tipo+scope+descripción siguen presentes).
53
+ 3. **Detecta breaking changes** por marca `!` después del tipo o trailer
54
+ `BREAKING CHANGE:` en el body. Los breaking siempre van al inicio del
55
+ release, sin importar el tipo original.
56
+ 4. **Transforma descripción técnica → legible**:
57
+ - Elimina referencias a issues al final (`(#123)`, `Refs #456`).
58
+ - Capitaliza primera letra.
59
+ - Elimina punto final (Keep a Changelog usa bullets sin punto).
60
+ 5. **Agrupa en categorías** con orden canónico:
61
+ 1. Breaking changes
62
+ 2. Nuevas funcionalidades (feat)
63
+ 3. Correcciones (fix)
64
+ 4. Mejoras de rendimiento (perf)
65
+ 5. Cambios internos (refactor)
66
+ 6. Reversiones (revert)
67
+ 7. Evoluciones de skills/agentes (evolucion — SWL-specific)
68
+ 8. Mantenimiento (docs/style/test/ci/build/chore — colapsadas)
69
+ 9. Otros (commits sin prefijo CC válido)
70
+ 6. **Reporta conformidad**: ratio commits conformes / total. Si <80%, el
71
+ caller debe decidir si abortar o seguir manualmente.
72
+
73
+ ## Helper programático
74
+
75
+ ```js
76
+ const {
77
+ parsearCommits,
78
+ leerCommitsGit,
79
+ generarChangelog,
80
+ } = require('./habilidades/changelog-generator/scripts/parse-commits');
81
+
82
+ // 1. Leer commits desde la última tag hasta HEAD
83
+ const commits = leerCommitsGit({ to: 'HEAD' });
84
+
85
+ // 2. Parsear y clasificar
86
+ const { categorias, conformidad, totalCommits, conformes } = parsearCommits(commits);
87
+
88
+ // 3. Si conformidad < 0.8, abortar o avisar al usuario
89
+ if (conformidad < 0.8) {
90
+ console.warn(`Conformidad CC: ${conformes}/${totalCommits}. Revisar "Otros".`);
91
+ }
92
+
93
+ // 4. Generar markdown listo para insertar en CHANGELOG.md
94
+ const md = generarChangelog(categorias, {
95
+ version: '1.6.5',
96
+ fecha: '2026-05-22', // opcional, default = hoy
97
+ incluirHash: true, // muestra hash corto al inicio de cada bullet
98
+ });
99
+ ```
100
+
101
+ ## Uso CLI
102
+
103
+ Previsualizar changelog candidato sin escribir nada:
104
+
105
+ ```bash
106
+ node habilidades/changelog-generator/scripts/parse-commits.js \
107
+ --version 1.6.5 \
108
+ --format markdown
109
+ ```
110
+
111
+ Filtrar por rango específico:
112
+
113
+ ```bash
114
+ node habilidades/changelog-generator/scripts/parse-commits.js \
115
+ --from v1.6.4 \
116
+ --to HEAD \
117
+ --version 1.6.5
118
+ ```
119
+
120
+ Salida JSON estructurado para post-procesamiento:
121
+
122
+ ```bash
123
+ node habilidades/changelog-generator/scripts/parse-commits.js \
124
+ --from v1.6.4 \
125
+ --format json > /tmp/changelog-candidato.json
126
+ ```
127
+
128
+ ## Reglas de uso desde /swl:release
129
+
130
+ 1. Llamar a `leerCommitsGit` con la última tag detectada en el Paso 1 del
131
+ release.
132
+ 2. Verificar `conformidad >= 0.8`. Si menor, presentar al usuario los commits
133
+ bajo "Otros" y pedir decisión: (a) continuar con el changelog, (b) abortar
134
+ y reescribir commits, (c) editar manualmente la categoría "Otros".
135
+ 3. Si `--dry-run` está activo en `/swl:release`, mostrar el output de
136
+ `generarChangelog` sin escribir a disco.
137
+ 4. Si conformidad OK: leer CHANGELOG.md actual, insertar el bloque generado
138
+ al inicio después del header `# Changelog`, escribir atómicamente.
139
+ 5. NO hacer commit aquí — eso lo hace el Paso 8 de `/swl:release`.
140
+
141
+ ## Gotchas observables
142
+
143
+ - **Conventional Commits sin scope son válidos**: `fix: corregir X` parsea
144
+ igual que `fix(modulo): corregir X`. El parser no exige scope.
145
+ - **El subject debe ir en una sola línea**: si un commit usa newline en el
146
+ subject, el parser lo trata como completo pero `git log %s` ya lo trunca.
147
+ - **Tipos no estándar van a "Otros"**: si un equipo usa `mejora:`, `cambio:`,
148
+ el parser los marca como no conformes. El usuario debe ajustar la lista
149
+ `CATEGORIAS` en `parse-commits.js` o adoptar tipos estándar.
150
+ - **El skill NO escribe a disco directamente**: solo retorna markdown. El
151
+ caller (`/swl:release` Paso 7) es responsable de leer el CHANGELOG actual,
152
+ insertar al inicio y escribir atómicamente.
153
+ - **Commits revert vienen del propio git**: `git revert` genera mensajes
154
+ `Revert "Subject original"` que el parser categoriza correctamente bajo
155
+ Reversiones (regex matchea `revert:` sin que el usuario lo escriba si usa
156
+ `git revert -e` para editar el mensaje al formato CC).
157
+ - **El hash corto se trunca a 7 chars**: alineado con el formato `git log
158
+ --oneline` estándar.
159
+
160
+ ## Origen
161
+
162
+ Adaptado del skill `changelog-generator` de
163
+ `temp/awesome-codex-skills-master/changelog-generator/` (ComposioHQ, MIT) con:
164
+
165
+ - Frontmatter al estándar SWL (es-MX, `nivelRiesgo: BAJO`, `exclusiones`).
166
+ - Parser determinista en Node.js (`parse-commits.js`) — el origen es solo
167
+ documentación; este skill agrega la implementación ejecutable.
168
+ - Tipo `evolucion:` específico de SWL agregado al parser.
169
+ - Soporte para breaking changes `!` y trailer `BREAKING CHANGE:` (origen
170
+ solo menciona el segundo).
171
+ - Reporte de conformidad <80% como gate explícita para fallback manual.
172
+ - Integración con `/swl:release` Paso 7 documentada en `comandos/swl/release.md`.
173
+
174
+ Documentado en ADR-0029 (integración parcial awesome-codex-skills, Opción B).
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: compactacion-contexto
3
3
  description: Anti-context-rot. Detectar cuándo compactar el contexto, guardar estado antes de compactar, técnicas de resumen progresivo y handoff limpio entre contextos. Recalibrado para el tokenizer de Opus 4.8 (+15-30% tokens vs 4.6).
4
- version: "1.1.0"
4
+ version: "1.1.1"
5
5
  herramientasPermitidas: [Read]
6
6
  exclusiones:
7
7
  - "No cargar si el contexto está por debajo del 50% y no hay señales cualitativas de degradación — compactar sin necesidad solo interrumpe el flujo."
@@ -235,6 +235,7 @@ instrucción más conservadora o compactar por secciones individuales.
235
235
  - **Invariante de headings violada silenciosamente**: el contexto compactado pierde dos secciones `##` del original porque el modelo resumió párrafos en lugar de preservar la estructura. Causa: no se ejecutó la validación post-compactación. Solución: antes de descartar el contexto original, contar `#` en ambos con regex y comparar — tolerancia 0% para headings perdidos.
236
236
  - **Compactar todo el codebase al inicio de sesión**: el agente lee 20 archivos en el nuevo contexto "para orientarse" y los compacta de inmediato. Causa: se interpretó "cargar contexto fresco" como cargar y compactar todo. Solución: en el contexto entrante, cargar ESTADO.md + DECISIONS.md + 3 últimos commits, y solo los archivos de la tarea inmediata — no más.
237
237
  - **Umbral de 70% sin recalibrar para Opus 4.8**: en proyectos que migraron de Opus 4.6 a 4.7, el umbral de compactación sigue configurado al 70% del contexto cuando debe ser 50%. Causa: el tokenizer de 4.7 produce 1.0-1.35× más tokens y el umbral efectivo llega antes. Solución: al actualizar modelo, ajustar el umbral de compactación a 50% como documenta este skill en su sección de señales cuantitativas.
238
+ - **Análisis forense de un transcript JSONL gigante = digest determinista + lectores paralelos, nunca `Read` directo** [VALIDADO 2026-07-11, sesión de 61.6 MB / 24,862 líneas cubierta al 100%]: para analizar la sesión de otro agente (post-mortem, auditoría, extracción de decisiones), (1) script Node línea-por-línea que emite SOLO el contenido conversacional — mensajes de usuario íntegros, texto del asistente, tool calls como `>> Tool: args` de una línea, tool_results truncados a 200-400 chars (1,200 si `is_error`), resúmenes de compactación completos — en chunks de ~350 KB; (2) un agente por chunk con mandato de leer el 100% (Read con offset/limit hasta cubrir) y reporte estructurado fijo (cronología, intervenciones del usuario con cita+línea, bugs con estado, deudas, hallazgos QA/adversarial, pendientes, problemas de proceso); (3) el driver verifica las citas críticas de cada reporte antes de usarlas. Gotcha descubierto: **los mensajes del usuario que solo sobreviven dentro de un resumen de compactación NO son diálogo crudo** — el digest debe marcarlos como "cobertura parcial" y el análisis debe declararlo en vez de citarlos como verbatim; en la sesión analizada, 3 de 6 instrucciones del usuario del tramo final solo existían en resúmenes de compactación.
238
239
 
239
240
  ## Anti-patrones a evitar
240
241
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: contenedores-docker
3
3
  description: Docker y containerización. Dockerfiles optimizados con multi-stage builds, docker-compose, volúmenes, networking, health checks, security scanning, build caching, distroless images. Anti-patrones comunes.
4
- version: "1.0.3"
4
+ version: "1.0.4"
5
5
  herramientasPermitidas: [Read]
6
6
  exclusiones:
7
7
  - "No cargar para orquestación Kubernetes (Deployments, Services, Helm, HPA) — para Kubernetes cargar `kubernetes-orquestacion`."
@@ -140,4 +140,6 @@ Para ejemplos completos de multi-stage Node.js/Angular, .dockerignore, docker-co
140
140
 
141
141
  **Proxy de desarrollo del frontend (Angular CLI, Vite, webpack-dev-server) con target hardcodeado a `localhost` es deuda invisible hasta el primer `docker compose up`**: en local todo funciona porque frontend y backend comparten host; en cuanto corren en contenedores separados, `localhost` dentro del contenedor del frontend apunta a sí mismo — el proxy devuelve 500/ECONNREFUSED en cada llamada a la API (síntoma típico: el login falla solo en Docker). Causa: el target del proxy es configuración de entorno, no constante del repo. Fix: usar `proxy.conf.js` (no `.json`) que lea `process.env.BACKEND_URL || 'http://localhost:8000'` y pasar `BACKEND_URL=http://backend:8000` (nombre del servicio de compose) vía `environment:` del servicio frontend. Origen: SIGAF 2026-07-02.
142
142
 
143
- **`docker exec ... psql` lanzado en background contra una BD donde el rol no autentica cuelga y congestiona el subsistema `docker exec` de Docker Desktop (Windows)**: lanzar en background (`run_in_background`/`&`) un `docker exec <contenedor> psql -U rol -d db -c "..."` donde el rol no puede autenticar deja la sesión `exec` colgada esperando; varias de esas sesiones huérfanas **saturan el subsistema de `docker exec`** y luego TODO `docker exec` (incluso `echo`) y hasta `docker restart` hacen timeout, aunque `docker ps`/`version` sigan respondiendo. Causa: cada `exec` abre una sesión que no termina; el daemon las acumula. Síntoma distintivo: `docker ps` responde pero cualquier `docker exec` cuelga. Fix: `docker restart <contenedor>` mata las sesiones `exec` huérfanas y destraba el daemon — detener el bash local con TaskStop NO mata el `psql` que corre dentro del contenedor. Prevención: NUNCA lanzar `docker exec ... psql` en background contra una BD/rol cuya autenticación no esté confirmada; correrlo en foreground con timeout corto y verificar el `psql` interactivo primero. En Git Bash (Windows), pasar `MSYS_NO_PATHCONV=1` cuando el comando lleva rutas POSIX (`/tmp/...`) a `docker exec`/`docker cp` para que MSYS no las convierta.
143
+ **`docker exec ... psql` lanzado en background contra una BD donde el rol no autentica cuelga y congestiona el subsistema `docker exec` de Docker Desktop (Windows)**: lanzar en background (`run_in_background`/`&`) un `docker exec <contenedor> psql -U rol -d db -c "..."` donde el rol no puede autenticar deja la sesión `exec` colgada esperando; varias de esas sesiones huérfanas **saturan el subsistema de `docker exec`** y luego TODO `docker exec` (incluso `echo`) y hasta `docker restart` hacen timeout, aunque `docker ps`/`version` sigan respondiendo. Causa: cada `exec` abre una sesión que no termina; el daemon las acumula. Síntoma distintivo: `docker ps` responde pero cualquier `docker exec` cuelga. Fix: `docker restart <contenedor>` mata las sesiones `exec` huérfanas y destraba el daemon — detener el bash local con TaskStop NO mata el `psql` que corre dentro del contenedor. Prevención: NUNCA lanzar `docker exec ... psql` en background contra una BD/rol cuya autenticación no esté confirmada; correrlo en foreground con timeout corto y verificar el `psql` interactivo primero. En Git Bash (Windows), pasar `MSYS_NO_PATHCONV=1` cuando el comando lleva rutas POSIX (`/tmp/...`) a `docker exec`/`docker cp` para que MSYS no las convierta [CONFIRMADO x2 — aplica igual de necesario a `docker cp` que a `docker exec`, no solo al segundo].
144
+
145
+ **`docker cp <dir-local> contenedor:<dir-remoto>` cuando `<dir-remoto>` YA EXISTE dentro del contenedor NO reemplaza su contenido — lo anida un nivel más profundo** [CONFIRMADO]: un segundo `docker cp database/tests contenedor:/tmp/verify/database/tests` sobre un `/tmp/verify/database/tests/` ya poblado por una corrida anterior crea `/tmp/verify/database/tests/tests/` con los archivos actualizados, mientras el path original sigue con los archivos VIEJOS — silenciosamente, sin error. Causa real de confusión de debugging: un fix a un `.sql` de test parece "no surtir efecto" porque el script verificador (`find /tmp/verify/database/tests -name "*.sql"`) sigue recogiendo la copia vieja en el path esperado; la copia nueva, correcta, queda un nivel más abajo sin que nada la use. Fix: SIEMPRE `docker exec <contenedor> rm -rf <dir-remoto>` inmediatamente antes de cada `docker cp` hacia ese mismo destino — nunca asumir semántica de overwrite en `docker cp` de directorios.