@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.
- package/CLAUDE.md +197 -197
- package/README.md +600 -600
- package/agentes/_intent-spec.md +73 -73
- package/agentes/_propose-step.md +90 -90
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +932 -932
- package/agentes/backend-csharp-swl.md +420 -420
- package/agentes/backend-go-swl.md +390 -390
- package/agentes/backend-java-swl.md +281 -281
- package/agentes/backend-rust-swl.md +364 -364
- package/agentes/backend-workers-swl.md +482 -482
- package/agentes/cloud-infra-swl.md +509 -509
- package/agentes/consolidador-swl.md +541 -541
- package/agentes/depurador-swl.md +352 -352
- package/agentes/devops-ci-swl.md +400 -400
- package/agentes/disenador-ui-swl.md +569 -569
- package/agentes/documentador-swl.md +345 -345
- package/agentes/frontend-angular-swl.md +621 -621
- package/agentes/frontend-css-swl.md +716 -716
- package/agentes/frontend-react-swl.md +692 -692
- package/agentes/frontend-swl.md +496 -496
- package/agentes/frontend-tailwind-swl.md +826 -826
- package/agentes/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- package/agentes/migrador-swl.md +442 -442
- package/agentes/mobile-android-swl.md +511 -511
- package/agentes/mobile-cross-swl.md +541 -541
- package/agentes/mobile-ios-swl.md +502 -502
- package/agentes/mobile-testing-swl.md +302 -302
- package/agentes/nemesis-auditor-swl.md +285 -285
- package/agentes/observabilidad-swl.md +438 -438
- package/agentes/pagos-swl.md +310 -310
- package/agentes/perfilador-usuario-swl.md +321 -321
- package/agentes/planificador-swl.md +399 -399
- package/agentes/producto-prd-swl.md +589 -589
- package/agentes/red-team-swl.md +218 -218
- package/agentes/release-manager-swl.md +590 -590
- package/agentes/rendimiento-swl.md +713 -713
- package/agentes/revisor-angular-swl.md +278 -278
- package/agentes/revisor-csharp-swl.md +264 -264
- package/agentes/revisor-go-swl.md +259 -259
- package/agentes/revisor-java-swl.md +257 -257
- package/agentes/revisor-kotlin-swl.md +273 -273
- package/agentes/revisor-nextjs-swl.md +281 -281
- package/agentes/revisor-php-swl.md +271 -271
- package/agentes/revisor-react-swl.md +278 -278
- package/agentes/revisor-rust-swl.md +346 -346
- package/agentes/revisor-seguridad-swl.md +399 -399
- package/agentes/revisor-swift-swl.md +268 -268
- package/agentes/revisor-typescript-swl.md +346 -346
- package/agentes/tdd-qa-swl.md +393 -393
- package/comandos/swl/actualizar.md +174 -174
- package/comandos/swl/adoptar-proyecto.md +265 -265
- package/comandos/swl/aprender.md +836 -836
- package/comandos/swl/aprobar-plan.md +146 -146
- package/comandos/swl/auditar-deps.md +134 -134
- package/comandos/swl/autoresearch.md +264 -264
- package/comandos/swl/ayuda.md +224 -224
- package/comandos/swl/brainstorm.md +51 -51
- package/comandos/swl/briefing.md +119 -119
- package/comandos/swl/checkpoint.md +325 -325
- package/comandos/swl/claudemd.md +234 -234
- package/comandos/swl/compactar.md +310 -310
- package/comandos/swl/configurar-ci.md +235 -235
- package/comandos/swl/contexto.md +110 -110
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/crear-skill.md +292 -292
- package/comandos/swl/cron.md +194 -194
- package/comandos/swl/discutir-fase.md +169 -169
- package/comandos/swl/ejecutar-fase.md +233 -233
- package/comandos/swl/evaluar-skill.md +520 -520
- package/comandos/swl/evolucion-continua.md +73 -73
- package/comandos/swl/evolucionar.md +267 -267
- package/comandos/swl/exportar-vault.md +583 -583
- package/comandos/swl/fix.md +118 -118
- package/comandos/swl/gateway.md +158 -158
- package/comandos/swl/inbox.md +116 -116
- package/comandos/swl/instalar.md +220 -220
- package/comandos/swl/instintos.md +86 -86
- package/comandos/swl/mapear-codebase.md +312 -312
- package/comandos/swl/mcp-status.md +175 -175
- package/comandos/swl/modelo.md +100 -100
- package/comandos/swl/nemesis.md +433 -433
- package/comandos/swl/notificaciones.md +299 -299
- package/comandos/swl/nuevo-proyecto.md +251 -251
- package/comandos/swl/planear-fase.md +263 -263
- package/comandos/swl/plugins.md +256 -256
- package/comandos/swl/predecir.md +169 -169
- package/comandos/swl/reflect-skills.md +125 -125
- package/comandos/swl/release.md +450 -450
- package/comandos/swl/revisar-impacto.md +201 -201
- package/comandos/swl/revisar.md +330 -330
- package/comandos/swl/seguridad.md +189 -189
- package/comandos/swl/sesiones.md +200 -200
- package/comandos/swl/skill-search.md +113 -113
- package/comandos/swl/status.md +345 -345
- package/comandos/swl/verificar.md +817 -817
- package/comandos/swl/wiki.md +620 -620
- package/gateway/cron/jobs.example.json +12 -12
- package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
- package/habilidades/backend-async-postgres-testing/SKILL.md +2 -1
- package/habilidades/changelog-generator/SKILL.md +174 -174
- package/habilidades/compactacion-contexto/SKILL.md +2 -1
- package/habilidades/contenedores-docker/SKILL.md +4 -2
- package/habilidades/doubt-driven-review/SKILL.md +207 -207
- package/habilidades/drift-detection/SKILL.md +1 -1
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/extractor-de-aprendizajes/SKILL.md +8 -2
- package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
- package/habilidades/harness-claude-code/SKILL.md +314 -314
- package/habilidades/instalar-sistema/SKILL.md +227 -227
- package/habilidades/planear-fase/SKILL.md +358 -358
- package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
- package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
- package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
- package/habilidades/release-semver/SKILL.md +2 -2
- package/habilidades/tdd-workflow/SKILL.md +749 -749
- package/hooks/agente-lifecycle.js +1 -1
- package/hooks/audit-trail.js +1 -1
- package/hooks/auto-consolidacion.js +1 -1
- package/hooks/captura-acciones-post.js +1 -1
- package/hooks/captura-acciones-session.js +1 -1
- package/hooks/captura-feedback-usuario.js +1 -1
- package/hooks/contexto-iteracion.js +1 -1
- package/hooks/contexto-subagente.js +68 -68
- package/hooks/degradacion-instintos.js +1 -1
- package/hooks/grafo-contexto.js +1 -1
- package/hooks/guardrail-modelo.js +1 -1
- package/hooks/inbox-aviso.js +1 -1
- package/hooks/inyeccion-contexto.js +1 -1
- package/hooks/lib/agent-matcher.js +1 -1
- package/hooks/lib/agent-routing.js +1 -1
- package/hooks/lib/captura-acciones.js +1 -1
- package/hooks/lib/etapa-metricas.js +1 -1
- package/hooks/lib/evolution-tracker.js +1 -1
- package/hooks/lib/gateway-notify.js +193 -193
- package/hooks/lib/mcp-health.js +1 -1
- package/hooks/lib/notificacion-formato.js +58 -0
- package/hooks/lib/nudge-tracker.js +1 -1
- package/hooks/lib/otlp-exporter.js +1 -1
- package/hooks/lib/propose-step.js +1 -1
- package/hooks/lib/raiz-proyecto.js +127 -102
- package/hooks/lib/run-log.js +1 -1
- package/hooks/lib/singleton-guard.js +20 -13
- package/hooks/lib/telegram-cliente.js +11 -3
- package/hooks/notificacion-telegram.js +13 -3
- package/hooks/preservar-estado-pre-compact.js +1 -1
- package/hooks/registro-turnos.js +1 -1
- package/hooks/resumen-sesion.js +1 -1
- package/hooks/risk-scoring.js +1 -1
- package/hooks/session-briefing.js +1 -1
- package/hooks/spec-gate.js +1 -1
- package/hooks/sugerir-regenerar-inventario.js +1 -1
- package/hooks/tdd-gate.js +1 -1
- package/hooks/telemetria-agentes.js +1 -1
- package/hooks/telemetria-skill-routing.js +1 -1
- package/hooks/tracking-costos.js +1 -1
- package/hooks/validar-formato-post-subagente.js +1 -1
- package/hooks/validar-intent-spec.js +1 -1
- package/hooks/validar-planning-paths.js +1 -1
- package/llms.txt +29 -29
- package/manifiestos/canonical-hashes.json +5588 -5257
- package/manifiestos/hooks-config.json +469 -469
- package/manifiestos/invariantes-criticos.json +30 -30
- package/manifiestos/modulos.json +1429 -1428
- package/manifiestos/skills-lock.json +1275 -1275
- package/package.json +94 -94
- package/plugin.json +369 -369
- package/scripts/auditar-clases-conocidas.js +134 -134
- package/scripts/bootstrap-instintos.js +85 -14
- package/scripts/canario-hooks.js +166 -166
- package/scripts/cli/autonomia.js +23 -23
- package/scripts/cli/benchmark-memoria.js +37 -37
- package/scripts/cli/ciclo-autonomo.js +73 -73
- package/scripts/cli/ciclo-fase-b.js +102 -102
- package/scripts/cli/guardrail-metrics.js +39 -39
- package/scripts/cli/memoria-search.js +69 -69
- package/scripts/cli/nudge-accionar.js +39 -39
- package/scripts/cli/run-eval.js +38 -38
- package/scripts/doctor.js +26 -3
- package/scripts/evidencia-valor.js +101 -101
- package/scripts/field-report.js +16 -16
- package/scripts/instalador.js +13 -0
- package/scripts/lib/activar-hooks-proyecto.js +116 -116
- package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
- package/scripts/lib/ciclo-autonomo/config.js +165 -165
- package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
- package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
- package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
- package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
- package/scripts/lib/ciclo-autonomo/index.js +301 -301
- package/scripts/lib/ciclo-autonomo/lock.js +124 -124
- package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
- package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
- package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
- package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
- package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -535
- package/scripts/lib/evidencia-valor.js +228 -228
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/limpiar-basura-global.js +161 -0
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/tui/pantallas/install-wizard.js +403 -403
- package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
- 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.
|
|
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.
|
|
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.
|