@saulwade/swl-ses 2.6.0 → 2.8.0

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 (435) hide show
  1. package/CLAUDE.md +209 -197
  2. package/README.md +647 -600
  3. package/agentes/accesibilidad-wcag-swl.md +690 -690
  4. package/agentes/arquitecto-swl.md +267 -267
  5. package/agentes/auto-evolucion-swl.md +932 -932
  6. package/agentes/backend-csharp-swl.md +420 -420
  7. package/agentes/backend-go-swl.md +390 -390
  8. package/agentes/backend-java-swl.md +281 -281
  9. package/agentes/backend-rust-swl.md +364 -364
  10. package/agentes/backend-workers-swl.md +482 -482
  11. package/agentes/cloud-infra-swl.md +509 -509
  12. package/agentes/consolidador-swl.md +541 -541
  13. package/agentes/depurador-swl.md +352 -352
  14. package/agentes/devops-ci-swl.md +400 -400
  15. package/agentes/disenador-ui-swl.md +569 -569
  16. package/agentes/documentador-swl.md +345 -345
  17. package/agentes/frontend-angular-swl.md +621 -621
  18. package/agentes/frontend-css-swl.md +716 -716
  19. package/agentes/frontend-react-swl.md +692 -692
  20. package/agentes/frontend-swl.md +496 -496
  21. package/agentes/frontend-tailwind-swl.md +826 -826
  22. package/agentes/investigador-swl.md +432 -432
  23. package/agentes/investigador-ux-swl.md +505 -505
  24. package/agentes/migrador-swl.md +442 -442
  25. package/agentes/mobile-android-swl.md +511 -511
  26. package/agentes/mobile-cross-swl.md +541 -541
  27. package/agentes/mobile-ios-swl.md +502 -502
  28. package/agentes/mobile-testing-swl.md +302 -302
  29. package/agentes/nemesis-auditor-swl.md +285 -285
  30. package/agentes/observabilidad-swl.md +438 -438
  31. package/agentes/pagos-swl.md +310 -310
  32. package/agentes/perfilador-usuario-swl.md +321 -321
  33. package/agentes/planificador-swl.md +399 -399
  34. package/agentes/producto-prd-swl.md +589 -589
  35. package/agentes/red-team-swl.md +218 -218
  36. package/agentes/release-manager-swl.md +590 -590
  37. package/agentes/rendimiento-swl.md +713 -713
  38. package/agentes/revisor-angular-swl.md +278 -278
  39. package/agentes/revisor-csharp-swl.md +264 -264
  40. package/agentes/revisor-go-swl.md +259 -259
  41. package/agentes/revisor-java-swl.md +257 -257
  42. package/agentes/revisor-kotlin-swl.md +273 -273
  43. package/agentes/revisor-nextjs-swl.md +281 -281
  44. package/agentes/revisor-php-swl.md +271 -271
  45. package/agentes/revisor-react-swl.md +278 -278
  46. package/agentes/revisor-rust-swl.md +346 -346
  47. package/agentes/revisor-seguridad-swl.md +399 -399
  48. package/agentes/revisor-swift-swl.md +268 -268
  49. package/agentes/revisor-typescript-swl.md +346 -346
  50. package/agentes/tdd-qa-swl.md +393 -393
  51. package/bin/swl-ses.js +10 -0
  52. package/comandos/swl/actualizar.md +174 -174
  53. package/comandos/swl/adoptar-proyecto.md +265 -265
  54. package/comandos/swl/aprender.md +836 -836
  55. package/comandos/swl/aprobar-plan.md +146 -146
  56. package/comandos/swl/auditar-deps.md +134 -134
  57. package/comandos/swl/autoresearch.md +264 -264
  58. package/comandos/swl/ayuda.md +224 -224
  59. package/comandos/swl/brainstorm.md +52 -51
  60. package/comandos/swl/checkpoint.md +325 -325
  61. package/comandos/swl/claudemd.md +234 -234
  62. package/comandos/swl/compactar.md +310 -310
  63. package/comandos/swl/configurar-ci.md +235 -235
  64. package/comandos/swl/contexto.md +110 -110
  65. package/comandos/swl/crear-skill.md +292 -292
  66. package/comandos/swl/cron.md +194 -194
  67. package/comandos/swl/deuda-codigo.md +97 -97
  68. package/comandos/swl/discutir-fase.md +169 -169
  69. package/comandos/swl/ejecutar-fase.md +233 -233
  70. package/comandos/swl/evaluar-skill.md +520 -520
  71. package/comandos/swl/evolucion-continua.md +73 -73
  72. package/comandos/swl/evolucionar.md +267 -267
  73. package/comandos/swl/exportar-vault.md +583 -583
  74. package/comandos/swl/fix.md +118 -118
  75. package/comandos/swl/gateway.md +158 -158
  76. package/comandos/swl/inbox.md +116 -116
  77. package/comandos/swl/instalar.md +220 -220
  78. package/comandos/swl/instintos.md +86 -86
  79. package/comandos/swl/mapear-codebase.md +312 -312
  80. package/comandos/swl/mcp-status.md +176 -175
  81. package/comandos/swl/modelo.md +100 -100
  82. package/comandos/swl/nemesis.md +433 -433
  83. package/comandos/swl/notificaciones.md +299 -299
  84. package/comandos/swl/nuevo-proyecto.md +251 -251
  85. package/comandos/swl/planear-fase.md +263 -263
  86. package/comandos/swl/plugins.md +256 -256
  87. package/comandos/swl/predecir.md +169 -169
  88. package/comandos/swl/reflect-skills.md +125 -125
  89. package/comandos/swl/release.md +450 -450
  90. package/comandos/swl/revisar-impacto.md +201 -201
  91. package/comandos/swl/revisar.md +330 -330
  92. package/comandos/swl/seguridad.md +189 -189
  93. package/comandos/swl/sesiones.md +200 -200
  94. package/comandos/swl/skill-search.md +113 -113
  95. package/comandos/swl/status.md +345 -345
  96. package/comandos/swl/verificar.md +817 -817
  97. package/comandos/swl/wiki.md +620 -620
  98. package/gateway/cron/jobs.example.json +12 -12
  99. package/gateway/lib/event-channel.js +191 -191
  100. package/habilidades/agent-deep-links/SKILL.md +148 -148
  101. package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
  102. package/habilidades/backend-async-postgres-testing/SKILL.md +216 -215
  103. package/habilidades/backend-error-design/SKILL.md +221 -221
  104. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  105. package/habilidades/calidad-anti-patrones-universales/SKILL.md +105 -1
  106. package/habilidades/calidad-contract-testing/SKILL.md +165 -165
  107. package/habilidades/calidad-mutation-testing/SKILL.md +25 -1
  108. package/habilidades/changelog-generator/SKILL.md +174 -174
  109. package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
  110. package/habilidades/ci-cd-pipelines/SKILL.md +5 -1
  111. package/habilidades/compactacion-contexto/SKILL.md +2 -1
  112. package/habilidades/contenedores-docker/SKILL.md +4 -2
  113. package/habilidades/css-moderno/SKILL.md +7 -1
  114. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  115. package/habilidades/doubt-driven-review/SKILL.md +207 -207
  116. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  117. package/habilidades/drift-detection/SKILL.md +1 -1
  118. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  119. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
  120. package/habilidades/extractor-de-aprendizajes/SKILL.md +12 -2
  121. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  122. package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
  123. package/habilidades/harness-claude-code/SKILL.md +315 -314
  124. package/habilidades/instalar-sistema/SKILL.md +227 -227
  125. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  126. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  127. package/habilidades/perfil-usuario/SKILL.md +200 -200
  128. package/habilidades/planear-fase/SKILL.md +358 -358
  129. package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
  130. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
  131. package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
  132. package/habilidades/proceso-dynamic-workflows/SKILL.md +60 -0
  133. package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
  134. package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
  135. package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
  136. package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
  137. package/habilidades/proceso-modular-split/SKILL.md +256 -256
  138. package/habilidades/release-semver/SKILL.md +2 -2
  139. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  140. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
  141. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
  142. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
  143. package/habilidades/tdd-workflow/SKILL.md +749 -749
  144. package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
  145. package/hooks/agente-lifecycle.js +1 -1
  146. package/hooks/audit-trail.js +1 -1
  147. package/hooks/auto-consolidacion.js +1 -1
  148. package/hooks/calidad-pre-commit.js +159 -10
  149. package/hooks/captura-acciones-post.js +1 -1
  150. package/hooks/captura-acciones-session.js +1 -1
  151. package/hooks/captura-feedback-usuario.js +1 -1
  152. package/hooks/ciclo-evolucion-subagente.js +26 -26
  153. package/hooks/ciclo-evolucion.js +26 -26
  154. package/hooks/contexto-iteracion.js +1 -1
  155. package/hooks/degradacion-instintos.js +1 -1
  156. package/hooks/grafo-contexto.js +1 -1
  157. package/hooks/guardrail-modelo.js +1 -1
  158. package/hooks/inbox-aviso.js +1 -1
  159. package/hooks/inyeccion-contexto.js +1 -1
  160. package/hooks/lib/agent-matcher.js +1 -1
  161. package/hooks/lib/agent-routing.js +1 -1
  162. package/hooks/lib/auto-consolidator.js +335 -335
  163. package/hooks/lib/captura-acciones.js +1 -1
  164. package/hooks/lib/ciclo-evolucion.js +47 -47
  165. package/hooks/lib/deep-links.js +185 -185
  166. package/hooks/lib/error-classifier.js +308 -308
  167. package/hooks/lib/etapa-metricas.js +1 -1
  168. package/hooks/lib/evolution-tracker.js +1 -1
  169. package/hooks/lib/gateway-notify.js +193 -193
  170. package/hooks/lib/mcp-health.js +1 -1
  171. package/hooks/lib/notificacion-formato.js +92 -0
  172. package/hooks/lib/nudge-tracker.js +1 -1
  173. package/hooks/lib/otlp-exporter.js +1 -1
  174. package/hooks/lib/propose-step.js +1 -1
  175. package/hooks/lib/provenance-tracker.js +191 -191
  176. package/hooks/lib/raiz-proyecto.js +158 -102
  177. package/hooks/lib/resource-quota.js +122 -122
  178. package/hooks/lib/retry-jitter.js +165 -165
  179. package/hooks/lib/run-log.js +1 -1
  180. package/hooks/lib/security-net.js +201 -201
  181. package/hooks/lib/singleton-guard.js +20 -13
  182. package/hooks/lib/skill-auditor.js +588 -588
  183. package/hooks/lib/sync-status.js +228 -228
  184. package/hooks/lib/taint-tracker.js +107 -107
  185. package/hooks/lib/telegram-cliente.js +11 -3
  186. package/hooks/lib/text-similarity.js +241 -241
  187. package/hooks/lib/toon-compressor.js +245 -245
  188. package/hooks/notificacion-telegram.js +17 -13
  189. package/hooks/preservar-estado-pre-compact.js +1 -1
  190. package/hooks/registro-turnos.js +1 -1
  191. package/hooks/resumen-sesion.js +1 -1
  192. package/hooks/risk-scoring.js +1 -1
  193. package/hooks/session-briefing.js +13 -5
  194. package/hooks/spec-gate.js +1 -1
  195. package/hooks/sugerir-regenerar-inventario.js +1 -1
  196. package/hooks/tdd-gate.js +1 -1
  197. package/hooks/telemetria-agentes.js +1 -1
  198. package/hooks/telemetria-skill-routing.js +1 -1
  199. package/hooks/tracking-costos.js +1 -1
  200. package/hooks/validar-formato-post-subagente.js +1 -1
  201. package/hooks/validar-intent-spec.js +1 -1
  202. package/hooks/validar-planning-paths.js +1 -1
  203. package/instintos/autonomia.yaml +27 -27
  204. package/instintos/prompt-appendices.yaml +57 -57
  205. package/llms.txt +29 -29
  206. package/manifiestos/agent-output-schemas.json +57 -57
  207. package/manifiestos/canonical-hashes.json +6250 -5257
  208. package/manifiestos/harness-ir.json +47536 -0
  209. package/manifiestos/modulos.json +1429 -1428
  210. package/manifiestos/policy-bundle.json +2065 -0
  211. package/manifiestos/policy-corpus-w2.json +3926 -0
  212. package/manifiestos/runtime-adapters-core3.json +208 -0
  213. package/manifiestos/runtime-conformance.json +139 -0
  214. package/manifiestos/skills-lock.json +1275 -1275
  215. package/package.json +94 -94
  216. package/plantillas/auditor-veto-template.md +105 -105
  217. package/plantillas/github-workflows/release-please.yml +44 -44
  218. package/plantillas/github-workflows/swl-ci.yml +107 -107
  219. package/plantillas/github-workflows/swl-security.yml +51 -51
  220. package/plugin.json +369 -369
  221. package/reglas/accesibilidad.md +10 -10
  222. package/reglas/auditorias-documentales-estructurales.md +7 -7
  223. package/reglas/cloud-infra.md +8 -8
  224. package/reglas/consultar-vault-primero.md +195 -195
  225. package/reglas/git-workflow.md +1 -0
  226. package/reglas/hooks.md +6 -6
  227. package/reglas/intent-engineering.md +218 -218
  228. package/reglas/markitdown.md +8 -8
  229. package/reglas/monitor-ci.md +12 -0
  230. package/reglas/patrones.md +6 -6
  231. package/reglas/testing.md +7 -7
  232. package/reglas/tests-cleanup.md +224 -224
  233. package/schemas/agent-message.schema.json +73 -73
  234. package/schemas/agent-output-implementacion.schema.json +114 -114
  235. package/schemas/agent-output-planificacion.schema.json +150 -150
  236. package/schemas/agent-output-review.schema.json +98 -98
  237. package/schemas/diary-entry.schema.json +112 -112
  238. package/schemas/gate-state.schema.json +76 -0
  239. package/schemas/harness-ir.schema.json +369 -0
  240. package/schemas/hook-profiles.schema.json +54 -54
  241. package/schemas/hooks-config.schema.json +89 -89
  242. package/schemas/legacy-gates.schema.json +45 -0
  243. package/schemas/modulos.schema.json +38 -38
  244. package/schemas/perfiles.schema.json +36 -36
  245. package/schemas/plugin.schema.json +77 -77
  246. package/schemas/policy-bundle.schema.json +140 -0
  247. package/schemas/policy-enforcement.schema.json +117 -0
  248. package/schemas/policy-operation.schema.json +261 -0
  249. package/schemas/runtime-adapter.schema.json +176 -0
  250. package/schemas/runtime-build-attestation.schema.json +100 -0
  251. package/schemas/runtime-conformance.schema.json +239 -0
  252. package/schemas/runtime-diagnostic.schema.json +395 -0
  253. package/schemas/skill-evals.schema.json +119 -119
  254. package/schemas/skill-frontmatter.schema.json +245 -245
  255. package/schemas/w4-certification-request.schema.json +72 -0
  256. package/schemas/w4-certification-verdict.schema.json +224 -0
  257. package/schemas/w4-corpus.schema.json +172 -0
  258. package/schemas/w4-mutation-report.schema.json +116 -0
  259. package/schemas/w4-replay-result.schema.json +164 -0
  260. package/schemas/w4-scoring-report.schema.json +89 -0
  261. package/scripts/audit-tools/audit-history.js +330 -330
  262. package/scripts/audit-tools/bundle-tracker.js +290 -290
  263. package/scripts/audit-tools/canary-monitor.js +352 -352
  264. package/scripts/audit-tools/code-profiler.js +605 -605
  265. package/scripts/audit-tools/dep-doctor.js +320 -320
  266. package/scripts/audit-tools/env-validator.js +206 -206
  267. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  268. package/scripts/audit-tools/lib/output.js +23 -23
  269. package/scripts/audit-tools/migration-checker.js +392 -392
  270. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  271. package/scripts/auditar-clases-conocidas.js +134 -134
  272. package/scripts/bootstrap-instintos.js +88 -14
  273. package/scripts/canario-hooks.js +166 -166
  274. package/scripts/cli/aprobar-plan.js +73 -73
  275. package/scripts/cli/autonomia.js +23 -23
  276. package/scripts/cli/benchmark-memoria.js +37 -37
  277. package/scripts/cli/briefing.js +23 -23
  278. package/scripts/cli/ciclo-autonomo.js +73 -73
  279. package/scripts/cli/ciclo-evolucion.js +26 -26
  280. package/scripts/cli/ciclo-fase-b.js +102 -102
  281. package/scripts/cli/derivar-feature-list.js +25 -25
  282. package/scripts/cli/detectar-host.js +27 -27
  283. package/scripts/cli/diary-entry.js +69 -69
  284. package/scripts/cli/execution-state.js +18 -18
  285. package/scripts/cli/gateway-notify.js +41 -41
  286. package/scripts/cli/guardrail-metrics.js +39 -39
  287. package/scripts/cli/liberar-fase.js +42 -42
  288. package/scripts/cli/mark-evolved.js +56 -56
  289. package/scripts/cli/memoria-search.js +69 -69
  290. package/scripts/cli/metricas-dora.js +26 -26
  291. package/scripts/cli/near-duplicate.js +55 -55
  292. package/scripts/cli/notificaciones.js +123 -123
  293. package/scripts/cli/nudge-accionar.js +39 -39
  294. package/scripts/cli/propose-step.js +29 -29
  295. package/scripts/cli/run-eval.js +38 -38
  296. package/scripts/cli/schedule-parse.js +19 -19
  297. package/scripts/cli/sugerir-modelo.js +20 -20
  298. package/scripts/cli/verificar-plan.js +36 -36
  299. package/scripts/cli/verificar-trazabilidad.js +35 -35
  300. package/scripts/comandos/install-asistido.js +8 -7
  301. package/scripts/configurar-branch-protection.js +418 -418
  302. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  303. package/scripts/doctor.js +61 -13
  304. package/scripts/evidencia-valor.js +101 -101
  305. package/scripts/field-report.js +16 -16
  306. package/scripts/generar-checklists-consolidados.js +273 -273
  307. package/scripts/generar-claims-runtime.js +1342 -0
  308. package/scripts/generar-harness-ir.js +257 -0
  309. package/scripts/generar-inventario.js +52 -54
  310. package/scripts/generar-policy-bundle.js +202 -0
  311. package/scripts/instalador.js +39 -7
  312. package/scripts/lib/activar-hooks-proyecto.js +116 -116
  313. package/scripts/lib/approval-receipts.js +190 -0
  314. package/scripts/lib/artefactos-python.js +43 -43
  315. package/scripts/lib/benchmark-metrics.js +160 -160
  316. package/scripts/lib/budget-enforcer.js +252 -252
  317. package/scripts/lib/certificacion-loop-state.js +421 -0
  318. package/scripts/lib/ci-reader.js +193 -193
  319. package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
  320. package/scripts/lib/ciclo-autonomo/config.js +165 -165
  321. package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
  322. package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
  323. package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
  324. package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
  325. package/scripts/lib/ciclo-autonomo/index.js +301 -301
  326. package/scripts/lib/ciclo-autonomo/lock.js +124 -124
  327. package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
  328. package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
  329. package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
  330. package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
  331. package/scripts/lib/ciclo-autonomo/yaml-instintos.js +591 -535
  332. package/scripts/lib/clasificar-directorio.js +92 -0
  333. package/scripts/lib/contadores-inventario.js +217 -217
  334. package/scripts/lib/detectar-host-swl.js +175 -175
  335. package/scripts/lib/detectar-runtime.js +29 -20
  336. package/scripts/lib/detectar-stack-detallado.js +307 -307
  337. package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
  338. package/scripts/lib/detector-reglas-duplicadas.js +220 -220
  339. package/scripts/lib/eval-metrics-store.js +218 -218
  340. package/scripts/lib/eval-quality.js +171 -171
  341. package/scripts/lib/eval-schemas.js +144 -144
  342. package/scripts/lib/eval-self-correct.js +106 -106
  343. package/scripts/lib/eval-validator.js +185 -185
  344. package/scripts/lib/evidence-verifier.js +192 -0
  345. package/scripts/lib/evidencia-release.js +322 -322
  346. package/scripts/lib/evidencia-valor.js +228 -228
  347. package/scripts/lib/expandir-targets.js +71 -71
  348. package/scripts/lib/frontmatter-canonico.js +509 -0
  349. package/scripts/lib/gate-engine.js +871 -0
  350. package/scripts/lib/gate-hooks-requires.js +249 -249
  351. package/scripts/lib/gate-licencias.js +212 -212
  352. package/scripts/lib/git-config-preflight.js +48 -0
  353. package/scripts/lib/git-metricas.js +257 -257
  354. package/scripts/lib/harness-ir.js +778 -0
  355. package/scripts/lib/harness-source-snapshot.js +309 -0
  356. package/scripts/lib/integrity-ledger.js +1147 -0
  357. package/scripts/lib/jaccard-similarity.js +98 -98
  358. package/scripts/lib/legacy-gate-migration.js +324 -0
  359. package/scripts/lib/limpiar-basura-global.js +204 -0
  360. package/scripts/lib/longmemeval-runner.js +125 -125
  361. package/scripts/lib/metricas-dora.js +204 -204
  362. package/scripts/lib/notificaciones-telegram.js +1 -0
  363. package/scripts/lib/npm-version.js +1 -0
  364. package/scripts/lib/paquetes-conocidos.js +50 -50
  365. package/scripts/lib/plan-lock.js +61 -13
  366. package/scripts/lib/policy-broker.js +338 -0
  367. package/scripts/lib/policy-bundle.js +342 -0
  368. package/scripts/lib/policy-context-provider.js +310 -0
  369. package/scripts/lib/policy-contract.js +479 -0
  370. package/scripts/lib/policy-verifier-utils.js +65 -0
  371. package/scripts/lib/pr-analyzer.js +399 -399
  372. package/scripts/lib/principal-verifier.js +178 -0
  373. package/scripts/lib/prompt-builder.js +264 -264
  374. package/scripts/lib/resolver-plan-fase.js +37 -37
  375. package/scripts/lib/rrf-fusion.js +175 -175
  376. package/scripts/lib/runtime-adapter-contract.js +267 -0
  377. package/scripts/lib/runtime-artifact-verifier.js +426 -0
  378. package/scripts/lib/runtime-build-attestation.js +127 -0
  379. package/scripts/lib/runtime-bundle-installer.js +586 -0
  380. package/scripts/lib/runtime-compiler.js +327 -0
  381. package/scripts/lib/runtime-conformance.js +202 -0
  382. package/scripts/lib/runtime-doctor-core3.js +567 -0
  383. package/scripts/lib/runtime-doctor-input.js +59 -0
  384. package/scripts/lib/runtime-operation-adapter.js +267 -0
  385. package/scripts/lib/schema-version.js +164 -164
  386. package/scripts/lib/semantic-search.js +252 -252
  387. package/scripts/lib/signed-envelope.js +545 -0
  388. package/scripts/lib/single-use-store.js +359 -0
  389. package/scripts/lib/skills-externas.js +31 -0
  390. package/scripts/lib/toml-merge.js +204 -204
  391. package/scripts/lib/transformadores/codex.js +15 -8
  392. package/scripts/lib/transformadores/gemini.js +79 -5
  393. package/scripts/lib/w4-attestation-adapter.js +158 -0
  394. package/scripts/lib/w4-canario.js +337 -0
  395. package/scripts/lib/w4-claims.js +182 -0
  396. package/scripts/lib/w4-corpus-generador.js +542 -0
  397. package/scripts/lib/w4-gate-c5.js +115 -0
  398. package/scripts/lib/w4-harness-bajo-prueba.js +155 -0
  399. package/scripts/lib/w4-matriz-combos.js +55 -0
  400. package/scripts/lib/w4-motor-mutacion.js +1348 -0
  401. package/scripts/lib/w4-motor-replay.js +735 -0
  402. package/scripts/lib/w4-pin-origen.js +54 -0
  403. package/scripts/lib/w4-publicar-request.js +132 -0
  404. package/scripts/lib/w4-revocacion.js +62 -0
  405. package/scripts/lib/w4-runtimes-core3.js +38 -0
  406. package/scripts/lib/w4-scorer-certificacion.js +692 -0
  407. package/scripts/lib/w4-superficie-candidato.js +49 -0
  408. package/scripts/lib/w4-veredicto.js +452 -0
  409. package/scripts/lib/w4-verificar-veredicto.js +302 -0
  410. package/scripts/limpiar-artefactos-python.js +131 -131
  411. package/scripts/mcp-server/auth.js +105 -105
  412. package/scripts/mcp-server/cache.js +106 -106
  413. package/scripts/migrar-csv-a-array.js +168 -168
  414. package/scripts/migrar-fase-dominio.js +200 -200
  415. package/scripts/migrar-gates-legacy.js +108 -0
  416. package/scripts/publicar-certification-request.js +115 -0
  417. package/scripts/runtime-doctor.js +107 -0
  418. package/scripts/tui/componentes/selector-multi.js +189 -189
  419. package/scripts/tui/componentes/selector-unico.js +158 -158
  420. package/scripts/tui/ejecutores.js +375 -375
  421. package/scripts/tui/lib/colores.js +129 -129
  422. package/scripts/tui/lib/render.js +264 -264
  423. package/scripts/tui/lib/teclas.js +113 -113
  424. package/scripts/tui/pantallas/install-wizard.js +408 -403
  425. package/scripts/tui/pantallas/menu-principal.js +52 -52
  426. package/scripts/tui/pantallas/progreso.js +274 -274
  427. package/scripts/tui/pantallas/resumen.js +132 -132
  428. package/scripts/validar-userland-vacio.js +110 -110
  429. package/scripts/verificar-aislamiento-swl-eval.js +87 -0
  430. package/scripts/verificar-empaquetado-downstream.js +375 -0
  431. package/scripts/verificar-loop-constructor.js +215 -0
  432. package/scripts/verificar-trazabilidad.js +13 -6
  433. package/scripts/verificar-veredicto-real.js +84 -0
  434. package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
  435. package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +0 -372
@@ -1,450 +1,450 @@
1
- ---
2
- name: swl:release
3
- description: Gestión del ciclo de release del proyecto. Genera versión siguiendo SemVer, crea changelog automático desde commits con Conventional Commits, valida que los tests pasan, crea tag de git y genera release notes. Flags: --tipo=patch|minor|major, --dry-run, --skip-tests.
4
- allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
5
- ---
6
-
7
- # /swl:release — Gestión del ciclo de release
8
-
9
- Eres el gestor de releases del proyecto. Orquestas el proceso completo de crear una nueva versión: calcular el número de versión, recopilar cambios, validar estado publicable y crear artefactos de release.
10
-
11
- **Carga**: `Skill("release-semver")` — contiene las reglas de SemVer, Conventional Commits, estrategia de tags y proceso detallado de release. Delega toda lógica de versionado al skill.
12
-
13
- ## Cuándo usar este comando
14
-
15
- - Al completar un conjunto de features o fixes listos para producción
16
- - Al final de un sprint cuando hay cambios acumulados
17
- - Para hotfixes críticos (patch release)
18
- - Antes de una demo o entrega a cliente
19
-
20
- ## Flags soportados
21
-
22
- ```
23
- --tipo=patch Incrementa PATCH (0.0.X) — bugs y correcciones menores
24
- --tipo=minor Incrementa MINOR (0.X.0) — features nuevas sin breaking changes
25
- --tipo=major Incrementa MAJOR (X.0.0) — breaking changes
26
- --dry-run Muestra qué haría sin ejecutar nada
27
- --skip-tests Omite tests. Requiere justificación y confirmación explícita.
28
- ```
29
-
30
- Si no se pasa `--tipo`, se determina automáticamente según los commits (ver skill).
31
-
32
- ## Paso 0 — Verificación de prerrequisitos
33
-
34
- ```bash
35
- git rev-parse --is-inside-work-tree 2>&1
36
- git branch --show-current
37
- git status --porcelain
38
- git remote -v
39
- ```
40
-
41
- - Si hay cambios sin commitear, DETENER y listar archivos pendientes.
42
- - Si la rama no es la principal, advertir y pedir confirmación.
43
-
44
- ## Paso 1 — Leer versión actual
45
-
46
- ```bash
47
- cat package.json 2>/dev/null | grep '"version"' | head -1
48
- cat pyproject.toml 2>/dev/null | grep "^version" | head -1
49
- cat VERSION 2>/dev/null
50
- git describe --tags --abbrev=0 2>/dev/null || echo "Sin tags previos"
51
- ```
52
-
53
- Si hay múltiples fuentes, pedir al usuario que confirme la canónica. Sin versión en ningún lugar: `0.0.0`.
54
-
55
- ## Paso 2 — Recopilar y clasificar commits
56
-
57
- ```bash
58
- LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)
59
- if [ -z "$LAST_TAG" ]; then
60
- git log --oneline --format="%H %s"
61
- else
62
- git log --oneline --format="%H %s" ${LAST_TAG}..HEAD
63
- fi
64
- ```
65
-
66
- Clasifica cada commit según Conventional Commits (tipos y su impacto en versión definidos en `Skill("release-semver")`).
67
-
68
- ## Paso 3 — Calcular tipo de versión
69
-
70
- Si no se especificó `--tipo`, usar reglas del skill:
71
- - Breaking change en algún commit -> MAJOR
72
- - feat: sin breaking changes -> MINOR
73
- - Cualquier otro caso -> PATCH
74
-
75
- Si el usuario pasó `--tipo` y hay discrepancia (ej: breaking changes con --tipo=patch), advertir y pedir confirmación.
76
-
77
- ## Paso 4 — Calcular nueva versión
78
-
79
- Aplica reglas SemVer del skill: MAJOR resets MINOR y PATCH a 0, MINOR resets PATCH a 0.
80
-
81
- Si `--dry-run`, mostrar preview del changelog y terminar sin modificar nada.
82
-
83
- ## Paso 5 — Ejecutar tests
84
-
85
- Si NO se pasó `--skip-tests`, detectar runner y ejecutar:
86
-
87
- ```bash
88
- ls package.json pytest.ini setup.cfg pyproject.toml Makefile 2>/dev/null
89
- npm test 2>&1 || pytest 2>&1 || make test 2>&1
90
- ```
91
-
92
- Si fallan, DETENER. Si `--skip-tests`, pedir confirmación explícita ("confirmo").
93
-
94
- ## Paso 6 — Actualizar archivos de versión
95
-
96
- Actualiza la versión en TODOS los archivos que la contienen. Para proyectos SWL-SES, la checklist obligatoria es:
97
-
98
- ```
99
- [ ] package.json
100
- [ ] package-lock.json (2 ubicaciones: líneas 3 y 9)
101
- [ ] plugin.json
102
- [ ] CLAUDE.md
103
- [ ] README.md
104
- [ ] AGENTS.md
105
- [ ] COMANDOS.md
106
- [ ] MANUAL_USO.md
107
- [ ] INSTALACION.md
108
- [ ] SALUD.md
109
- [ ] INVENTARIO.md
110
- [ ] CHANGELOG.md (entrada nueva)
111
- [ ] .planning/COMPACTACION.md
112
- [ ] .planning/ESTADO.md
113
- [ ] .swl-install-state.json (si existe)
114
- ```
115
-
116
- Para proyectos no-SWL: actualiza los archivos detectados en Paso 1 (package.json, pyproject.toml, VERSION).
117
-
118
- ### Tres capas de versionado — NO confundir
119
-
120
- El sistema SWL versiona en tres capas independientes. El bump de versión del SISTEMA toca SOLO la capa 1:
121
-
122
- | Capa | Qué versiona | Cuándo cambia | Tocar en `/swl:release`? |
123
- |------|--------------|---------------|--------------------------|
124
- | **1. Sistema** | El paquete `@saulwade/swl-ses` como conjunto | En cada release | **SÍ — los 15 archivos del checklist arriba** |
125
- | **2. Componente individual** | Frontmatter `version:` de cada agente o skill (`agentes/*.md`, `habilidades/*/SKILL.md`) | Cuando el componente específico cambia (ver `/swl:aprender` Paso 6 acción 2) | **NO — cada componente versiona independiente** |
126
- | **3. Histórico** | Referencias a versiones pasadas en `CHANGELOG.md`, `CHANGELOG-LEGACY.md`, ADRs, RELEASE-NOTES, comentarios `Histórico: hasta vX.Y...` | Nunca (son inmutables por definición) | **NO — son registros históricos** |
127
-
128
- Verificación post-bump con `grep -rn "<versión-anterior>"` revelará decenas o cientos de matches en capas 2 y 3 — eso es esperado y correcto. Filtrar ruido para confirmar que las únicas líneas modificadas son de la capa 1:
129
-
130
- ```bash
131
- # Después del bump, validar consistencia SOLO en archivos canónicos del sistema
132
- node -e "
133
- const p=require('./package.json'),l=require('./plugin.json');
134
- const lock=require('./package-lock.json');
135
- const ok = p.version===l.version && l.version===lock.version;
136
- console.log(ok ? 'OK consistente: '+p.version : 'INCONSISTENTE');
137
- "
138
- ```
139
-
140
- Si el chequeo del nodo arriba dice OK pero `grep` aún muestra matches de la versión anterior, esos matches son **capa 2 (frontmatter)** o **capa 3 (histórico)** y son legítimos — no tocarlos.
141
-
142
- ### Republish-only entre registries (caso especial)
143
-
144
- Si el publish dual falla en uno de los 2 registries (typically npmjs o GitHub
145
- Packages) pero el otro queda publicado, **NO se puede reintentar la misma versión**
146
- — ningún registry permite sobreescribir versiones. Ejecutar inmediatamente un bump
147
- PATCH (1.X.Y → 1.X.(Y+1)) siguiendo el checklist arriba, y publicar solo al
148
- registry faltante con `node scripts/publicar.js --solo-npmjs` o `--solo-github`.
149
-
150
- Documentar el republish exclusivamente como "republish de coordinación entre
151
- registries" en CHANGELOG, sin atribuirle cambios funcionales que no existen.
152
-
153
- Ver `Skill("release-semver")` sección "Publish a múltiples registries" para detalles.
154
-
155
- ## Paso 6.5 — Regenerar skills-lock.json
156
-
157
- Antes del CHANGELOG, regenerar el lock de skills para capturar el estado de
158
- los 151 SKILL.md de la release:
159
-
160
- ```bash
161
- node scripts/generar-skills-lock.js
162
- git add manifiestos/skills-lock.json
163
- ```
164
-
165
- El lock contiene SHA256 de cada SKILL.md y permite que `/swl:status salud` detecte
166
- drift silencioso entre releases. Si el lock no cambió respecto al anterior,
167
- el commit lo refleja como no-op (idempotente). El archivo es pequeño (~37KB)
168
- y debe versionarse.
169
-
170
- ## Paso 6.6 — Regenerar canonical-hashes.json (baseline del discriminador A/B)
171
-
172
- Regenerar el manifiesto de hashes canónicos para la versión nueva. Es la baseline
173
- que el instalador usa (Fase 16) para distinguir evolución del usuario (merge) de
174
- shipped-evolved (actualizable) en cada upgrade. Debe incluir la versión que se
175
- publica para que clientes que evolucionen desde ella se clasifiquen bien.
176
-
177
- ```bash
178
- node scripts/generar-canonical-hashes.js
179
- git add manifiestos/canonical-hashes.json
180
- ```
181
-
182
- Idempotente (no-op si no cambió). El gate `node scripts/verificar-release.js`
183
- (Paso 10.1) verifica que el manifiesto esté al día y que el fuente no porte
184
- marcadores `evolved` espurios — si falla, ejecutar
185
- `node scripts/verificar-evolucion.js --gate-inverso --fix`. El test e2e
186
- `tests/scripts/release-e2e-evolved.test.js` (en `npm test`) bloquea el release
187
- si la propagación A/B regresa.
188
-
189
- ## Paso 7 — Generar CHANGELOG
190
-
191
- Desde v1.6.5 este paso usa el skill `changelog-generator` para parsear
192
- Conventional Commits y producir el bloque listo para insertar (ADR-0029).
193
-
194
- ### Paso 7.1 — Cargar skill y previsualizar
195
-
196
- ```
197
- Skill("changelog-generator")
198
- ```
199
-
200
- Ejecutar el parser determinista contra los commits del rango actual:
201
-
202
- ```bash
203
- node habilidades/changelog-generator/scripts/parse-commits.js \
204
- --from <tag-anterior> --to HEAD --version <nueva-version> --format markdown
205
- ```
206
-
207
- El script imprime el bloque markdown listo para insertar Y reporta a stderr
208
- el ratio de conformidad Conventional Commits. Categorías generadas en orden
209
- canónico: Breaking changes → Nuevas funcionalidades → Correcciones →
210
- Mejoras de rendimiento → Cambios internos → Reversiones → Evoluciones de
211
- skills/agentes → Mantenimiento → Otros.
212
-
213
- ### Paso 7.2 — Gate de conformidad
214
-
215
- Verificar la conformidad (impresa a stderr o vía `--format json`):
216
-
217
- - **>= 80% conformidad**: continuar a 7.3.
218
- - **< 80% conformidad**: detenerse y reportar al usuario los commits caídos
219
- bajo "Otros". Pedir decisión:
220
- 1. Continuar con el bloque generado (los "Otros" quedan al final del CHANGELOG).
221
- 2. Abortar release y reescribir commits no conformes (`git rebase -i`).
222
- 3. Editar manualmente la sección "Otros" antes de insertar.
223
-
224
- NO continuar automáticamente con conformidad baja — el changelog público
225
- queda confuso.
226
-
227
- ### Paso 7.3 — Insertar en CHANGELOG.md
228
-
229
- Leer `CHANGELOG.md` actual:
230
- - Si no existe: crear con header `# Changelog\n\n` y luego el bloque nuevo.
231
- - Si existe: insertar el bloque nuevo inmediatamente después del header
232
- `# Changelog` (antes de la entrada anterior).
233
-
234
- Escritura atómica obligatoria (regla CLAUDE.md). Usar `atomicWriteSync` desde
235
- `hooks/lib/atomic-write.js` cuando se llame programáticamente.
236
-
237
- ### Paso 7.4 — Verificar entrada generada
238
-
239
- ```bash
240
- head -40 CHANGELOG.md
241
- ```
242
-
243
- Confirmar:
244
- - Header `## [<nueva-version>] - YYYY-MM-DD` presente.
245
- - Categorías generadas tienen contenido coherente con los commits del rango.
246
- - Breaking changes (si los hay) aparecen al inicio.
247
-
248
- ### Fallback manual (legacy v1.6.4 y anterior)
249
-
250
- Si el parser falla o el skill no está disponible, mantener el flujo manual
251
- de versiones previas:
252
- - Secciones: Funcionalidades nuevas, Correcciones, Mejoras de rendimiento,
253
- Cambios internos, Breaking Changes, Estadísticas.
254
- - Descripciones legibles por humanos (sin prefijo feat:/fix:).
255
- - Omitir commits style: y test: del changelog público.
256
-
257
- ## Paso 8 — Commit de release y tag
258
-
259
- ```bash
260
- git add package.json pyproject.toml setup.py VERSION CHANGELOG.md 2>/dev/null
261
- git commit -m "chore(release): versión [nueva-versión]"
262
- git tag -a "v[nueva-versión]" -m "Release v[nueva-versión]"
263
- ```
264
-
265
- Usar tags anotados siempre (regla del skill).
266
-
267
- ## Paso 9 — Generar RELEASE-NOTES
268
-
269
- Crea `releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md` con: resumen,
270
- cambios, instrucciones de actualización y guía de migración si hay breaking changes.
271
-
272
- ```bash
273
- mkdir -p releases/v[nueva-versión]
274
- # escribir releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md
275
- ```
276
-
277
- **NUNCA crear las RELEASE-NOTES en la raíz del repo.** La convención (todos los
278
- releases previos en `releases/`) es que las RELEASE-NOTES viven SOLO en
279
- `releases/vX.Y.Z/` — no se versiona ninguna copia en raíz. El directorio
280
- `releases/v[nueva-versión]/` también lo crea `evidencia-release.js` (Paso 9.5);
281
- si ese paso corre primero, el `mkdir -p` es no-op.
282
-
283
- ## Paso 9.5 — Evidencia de procedencia (cadena de suministro, ADR-0038)
284
-
285
- Genera la evidencia de cadena de suministro del release: SBOM CycloneDX del
286
- árbol runtime + SHA256SUMS del tarball. No publica nada; produce artefactos
287
- versionados en `releases/v[nueva-versión]/`.
288
-
289
- ```bash
290
- node scripts/lib/evidencia-release.js --version [nueva-versión]
291
- ```
292
-
293
- Esto escribe (vía `scripts/lib/evidencia-release.js`):
294
- - `releases/v[nueva-versión]/sbom-v[nueva-versión].cdx.json` — SBOM CycloneDX
295
- runtime-only (`npm sbom --sbom-format cyclonedx --omit dev`).
296
- - `releases/v[nueva-versión]/SHA256SUMS` — checksum del tarball de `npm pack`.
297
-
298
- Luego:
299
-
300
- 1. **Insertar la sección "Integridad y verificación"** en
301
- `releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md`, justo después de
302
- la sección de correcciones. La genera `seccionVerificacionNotas` de la lib:
303
-
304
- ```bash
305
- node -e "const {seccionVerificacionNotas}=require('./scripts/lib/evidencia-release');const fs=require('fs');const v='[nueva-versión]';const sums=fs.readFileSync('releases/v'+v+'/SHA256SUMS','utf8').trim().split(/\s+/);const md=seccionVerificacionNotas({version:v,hash:sums[0],tarball:sums[1]});console.log(md)"
306
- ```
307
-
308
- Anexar ese markdown a `releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md`
309
- (tras "Correcciones").
310
-
311
- 2. **Versionar la evidencia** del release. Las RELEASE-NOTES ya viven en
312
- `releases/v[nueva-versión]/` (Paso 9) — NO hacer `cp` desde la raíz (no debe
313
- existir copia en raíz):
314
-
315
- ```bash
316
- git add releases/v[nueva-versión]/
317
- ```
318
-
319
- `releases/` NO viaja en el tarball npm (`package.json#files` es allowlist y no
320
- lo incluye) — es evidencia del repo, no del paquete. Verificar con
321
- `npm pack --dry-run | grep -c "releases/"` → debe ser `0`.
322
-
323
- **Provenance (opt-in)**: el publish default sigue siendo local
324
- (`scripts/publicar.js`). Para publicar a npmjs con `npm publish --provenance`
325
- (que exige OIDC desde CI) usar el workflow opt-in
326
- `.github/workflows/publish-npm.yml` (trigger `workflow_dispatch`, `dry_run`
327
- default true). GitHub Packages permanece local. Runbook de verificación para
328
- el consumidor: `docs/verificacion-consumidor.md`.
329
-
330
- ## Paso 10 — Verificación final
331
-
332
- ### 10.1 Gate automática anti-gap (OBLIGATORIA antes del push)
333
-
334
- Ejecutar `scripts/verificar-release.js` que valida que la versión nueva esté reflejada en las 14 ubicaciones canónicas de la checklist (y avisa sobre MANUAL_USO opcional):
335
-
336
- ```bash
337
- node scripts/verificar-release.js
338
- ```
339
-
340
- Exit codes:
341
- - `0` — todas las ubicaciones obligatorias con la versión correcta, puedes continuar al push
342
- - `1` — al menos un archivo quedó en versión anterior. **NO hacer push hasta corregir**. El reporte indica el archivo y el problema específico
343
- - `2` — error de invocación (package.json ausente, versión inválida)
344
-
345
- Ejemplo de output en éxito:
346
- ```
347
- [OK] package.json: version=5.10.5
348
- [OK] plugin.json: version=5.10.5
349
- [OK] package-lock.json: version=5.10.5, packages[""].version=5.10.5
350
- ...
351
- [OK] CHANGELOG.md: seccion [5.10.5] presente con fecha
352
- Resultado: 14/15 OK, 1 WARN opcional(es)
353
- ```
354
-
355
- Ejemplo de output en fallo que obliga a corregir:
356
- ```
357
- [FALLA] .planning/MAPEO_SKILLS_AGENTES.md: solo 0 ocurrencia(s) de 5.10.5 (minimo 1)
358
- [FALLA] README.md: primera linea no menciona 5.10.5 — actual: "# swl-software-engineering-system v5.10.4"
359
- Resultado: 13/15 OK, 2 FALLA(S) obligatoria(s)
360
- ```
361
-
362
- Esta gate existe porque el agente `release-manager-swl` ha omitido archivos en 3 releases consecutivos (5.10.3, 5.10.4, 5.10.5 — ver APRENDIZAJES.md) pese a tener la checklist documentada en su frontmatter. Un checklist textual no basta: se necesita ejecución.
363
-
364
- ### 10.1.1 Gate de cobertura por lenguaje (regeneración obligatoria)
365
-
366
- Tras el verificar-release.js, regenerar la matriz lenguaje × cobertura SWL:
367
-
368
- ```bash
369
- node scripts/generar-matriz-lenguajes.js
370
- ```
371
-
372
- El script reescribe `.planning/cobertura-lenguajes.md` con el estado actual.
373
- Comparar contra el commit anterior:
374
-
375
- ```bash
376
- git diff .planning/cobertura-lenguajes.md
377
- ```
378
-
379
- Si algún lenguaje **bajó de status** (completo → parcial, parcial → faltante)
380
- sin ADR documentado en `.planning/adrs/` justificando la regresión, **NO hacer
381
- release**. La regresión silenciosa de cobertura erosiona la promesa "polyglot"
382
- del repo.
383
-
384
- Si el cambio es esperado (eliminación deliberada de un componente), el ADR
385
- debe existir con número y fecha y referenciarse en el commit del release.
386
-
387
- Lo mismo aplica para releases con incremento de cobertura: la nueva matriz se
388
- commitea junto al release y se menciona en RELEASE-NOTES.
389
-
390
- ### 10.2 Verificación manual post-gate
391
-
392
- ```bash
393
- git tag -l "v[nueva-versión]"
394
- git log --oneline -3
395
- head -30 CHANGELOG.md
396
- ```
397
-
398
- ## Paso 11 — Reporte final
399
-
400
- ```
401
- === Release v[nueva-versión] completado ===
402
-
403
- Versión anterior: v[versión-anterior]
404
- Nueva versión: v[nueva-versión]
405
- Tipo: [PATCH | MINOR | MAJOR]
406
-
407
- Archivos actualizados: [lista]
408
- Git: Commit [hash], Tag v[nueva-versión]
409
- Commits incluidos: [N] (feat: [N], fix: [N], otros: [N])
410
- Tests: [ejecutados OK | omitidos (--skip-tests)]
411
-
412
- Próximos pasos:
413
- 1. Revisar releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md
414
- 2. git push origin v[nueva-versión]
415
- 3. Publicar release en GitHub/GitLab si aplica
416
- 4. Notificar al equipo
417
- ```
418
-
419
- ## Reglas de comportamiento
420
-
421
- - NUNCA crear release con repositorio dirty.
422
- - NUNCA omitir actualización de archivos de versión — inconsistencias causan errores de build.
423
- - NUNCA usar `--skip-tests` sin documentarlo en CHANGELOG y sin confirmación.
424
- - Si tipo calculado es MAJOR pero usuario pidió --tipo=patch, reportar discrepancia y esperar confirmación.
425
- - CHANGELOG legible por alguien que no conoce el código.
426
- - Si es monorepo, reportar que no se soporta y sugerir lerna/changesets.
427
- - **Crear el tag anotado AL FINAL del proceso, cuando el contenido está congelado
428
- y verificado** (tras evidencia + RELEASE-NOTES). Commitear ENCIMA de un tag de
429
- release ya creado pero aún-no-publicado obliga a mover el tag + regenerar la
430
- evidencia (el SHA del tarball cambia si el commit toca archivos de
431
- `package.json#files`) — churn evitable. Si hay que iterar, hacerlo antes de taggear.
432
- - **Si el usuario alimenta archivos de forma incremental para la MISMA versión
433
- ("faltan N archivos que agregar a esta versión, espera"), NO finalizar el
434
- release** (no congelar tag, no regenerar evidencia final, no proponer push)
435
- hasta que el usuario confirme que ya están TODOS los archivos. Mantener el
436
- commit de release como HEAD entre tandas para que cada incorporación sea un
437
- `amend` limpio + mover tag; regenerar la evidencia (SBOM/SHA256SUMS) SOLO en la
438
- última tanda, porque el SHA del tarball cambia con cada archivo nuevo que entre
439
- en `package.json#files`. Cerrar el release antes de tiempo obliga a rehacer
440
- evidencia y tag por cada archivo tardío.
441
- - **El agente NUNCA corre `npm` (test/pack/build/publish) en paralelo a un
442
- `npm run publish:*` que está ejecutando el usuario.** `test:release` incluye
443
- `test:smoke` (install/uninstall a temp + lectura de estado global); dos suites
444
- simultáneas colisionan y rompen `prepublishOnly` con fallos espurios que parecen
445
- bugs de test pero son concurrencia. La preparación del release (bump, manifests,
446
- evidencia, push, GitHub release) termina ANTES de que el usuario publique; durante
447
- el publish del usuario, el agente no ejecuta `npm`.
448
- - Si `prepublishOnly` falla y no se ve la causa: npm v10 NO guarda el stdout del
449
- script fallido en su debug log. Capturar con el log síncrono de `publicar.js`
450
- (`.planning/logs/publish-<v>-<ts>.log`) o `... *>&1 | Tee-Object`. No diagnosticar a ciegas.
1
+ ---
2
+ name: swl:release
3
+ description: Gestión del ciclo de release del proyecto. Genera versión siguiendo SemVer, crea changelog automático desde commits con Conventional Commits, valida que los tests pasan, crea tag de git y genera release notes. Flags: --tipo=patch|minor|major, --dry-run, --skip-tests.
4
+ allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
5
+ ---
6
+
7
+ # /swl:release — Gestión del ciclo de release
8
+
9
+ Eres el gestor de releases del proyecto. Orquestas el proceso completo de crear una nueva versión: calcular el número de versión, recopilar cambios, validar estado publicable y crear artefactos de release.
10
+
11
+ **Carga**: `Skill("release-semver")` — contiene las reglas de SemVer, Conventional Commits, estrategia de tags y proceso detallado de release. Delega toda lógica de versionado al skill.
12
+
13
+ ## Cuándo usar este comando
14
+
15
+ - Al completar un conjunto de features o fixes listos para producción
16
+ - Al final de un sprint cuando hay cambios acumulados
17
+ - Para hotfixes críticos (patch release)
18
+ - Antes de una demo o entrega a cliente
19
+
20
+ ## Flags soportados
21
+
22
+ ```
23
+ --tipo=patch Incrementa PATCH (0.0.X) — bugs y correcciones menores
24
+ --tipo=minor Incrementa MINOR (0.X.0) — features nuevas sin breaking changes
25
+ --tipo=major Incrementa MAJOR (X.0.0) — breaking changes
26
+ --dry-run Muestra qué haría sin ejecutar nada
27
+ --skip-tests Omite tests. Requiere justificación y confirmación explícita.
28
+ ```
29
+
30
+ Si no se pasa `--tipo`, se determina automáticamente según los commits (ver skill).
31
+
32
+ ## Paso 0 — Verificación de prerrequisitos
33
+
34
+ ```bash
35
+ git rev-parse --is-inside-work-tree 2>&1
36
+ git branch --show-current
37
+ git status --porcelain
38
+ git remote -v
39
+ ```
40
+
41
+ - Si hay cambios sin commitear, DETENER y listar archivos pendientes.
42
+ - Si la rama no es la principal, advertir y pedir confirmación.
43
+
44
+ ## Paso 1 — Leer versión actual
45
+
46
+ ```bash
47
+ cat package.json 2>/dev/null | grep '"version"' | head -1
48
+ cat pyproject.toml 2>/dev/null | grep "^version" | head -1
49
+ cat VERSION 2>/dev/null
50
+ git describe --tags --abbrev=0 2>/dev/null || echo "Sin tags previos"
51
+ ```
52
+
53
+ Si hay múltiples fuentes, pedir al usuario que confirme la canónica. Sin versión en ningún lugar: `0.0.0`.
54
+
55
+ ## Paso 2 — Recopilar y clasificar commits
56
+
57
+ ```bash
58
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)
59
+ if [ -z "$LAST_TAG" ]; then
60
+ git log --oneline --format="%H %s"
61
+ else
62
+ git log --oneline --format="%H %s" ${LAST_TAG}..HEAD
63
+ fi
64
+ ```
65
+
66
+ Clasifica cada commit según Conventional Commits (tipos y su impacto en versión definidos en `Skill("release-semver")`).
67
+
68
+ ## Paso 3 — Calcular tipo de versión
69
+
70
+ Si no se especificó `--tipo`, usar reglas del skill:
71
+ - Breaking change en algún commit -> MAJOR
72
+ - feat: sin breaking changes -> MINOR
73
+ - Cualquier otro caso -> PATCH
74
+
75
+ Si el usuario pasó `--tipo` y hay discrepancia (ej: breaking changes con --tipo=patch), advertir y pedir confirmación.
76
+
77
+ ## Paso 4 — Calcular nueva versión
78
+
79
+ Aplica reglas SemVer del skill: MAJOR resets MINOR y PATCH a 0, MINOR resets PATCH a 0.
80
+
81
+ Si `--dry-run`, mostrar preview del changelog y terminar sin modificar nada.
82
+
83
+ ## Paso 5 — Ejecutar tests
84
+
85
+ Si NO se pasó `--skip-tests`, detectar runner y ejecutar:
86
+
87
+ ```bash
88
+ ls package.json pytest.ini setup.cfg pyproject.toml Makefile 2>/dev/null
89
+ npm test 2>&1 || pytest 2>&1 || make test 2>&1
90
+ ```
91
+
92
+ Si fallan, DETENER. Si `--skip-tests`, pedir confirmación explícita ("confirmo").
93
+
94
+ ## Paso 6 — Actualizar archivos de versión
95
+
96
+ Actualiza la versión en TODOS los archivos que la contienen. Para proyectos SWL-SES, la checklist obligatoria es:
97
+
98
+ ```
99
+ [ ] package.json
100
+ [ ] package-lock.json (2 ubicaciones: líneas 3 y 9)
101
+ [ ] plugin.json
102
+ [ ] CLAUDE.md
103
+ [ ] README.md
104
+ [ ] AGENTS.md
105
+ [ ] COMANDOS.md
106
+ [ ] MANUAL_USO.md
107
+ [ ] INSTALACION.md
108
+ [ ] SALUD.md
109
+ [ ] INVENTARIO.md
110
+ [ ] CHANGELOG.md (entrada nueva)
111
+ [ ] .planning/COMPACTACION.md
112
+ [ ] .planning/ESTADO.md
113
+ [ ] .swl-install-state.json (si existe)
114
+ ```
115
+
116
+ Para proyectos no-SWL: actualiza los archivos detectados en Paso 1 (package.json, pyproject.toml, VERSION).
117
+
118
+ ### Tres capas de versionado — NO confundir
119
+
120
+ El sistema SWL versiona en tres capas independientes. El bump de versión del SISTEMA toca SOLO la capa 1:
121
+
122
+ | Capa | Qué versiona | Cuándo cambia | Tocar en `/swl:release`? |
123
+ |------|--------------|---------------|--------------------------|
124
+ | **1. Sistema** | El paquete `@saulwade/swl-ses` como conjunto | En cada release | **SÍ — los 15 archivos del checklist arriba** |
125
+ | **2. Componente individual** | Frontmatter `version:` de cada agente o skill (`agentes/*.md`, `habilidades/*/SKILL.md`) | Cuando el componente específico cambia (ver `/swl:aprender` Paso 6 acción 2) | **NO — cada componente versiona independiente** |
126
+ | **3. Histórico** | Referencias a versiones pasadas en `CHANGELOG.md`, `CHANGELOG-LEGACY.md`, ADRs, RELEASE-NOTES, comentarios `Histórico: hasta vX.Y...` | Nunca (son inmutables por definición) | **NO — son registros históricos** |
127
+
128
+ Verificación post-bump con `grep -rn "<versión-anterior>"` revelará decenas o cientos de matches en capas 2 y 3 — eso es esperado y correcto. Filtrar ruido para confirmar que las únicas líneas modificadas son de la capa 1:
129
+
130
+ ```bash
131
+ # Después del bump, validar consistencia SOLO en archivos canónicos del sistema
132
+ node -e "
133
+ const p=require('./package.json'),l=require('./plugin.json');
134
+ const lock=require('./package-lock.json');
135
+ const ok = p.version===l.version && l.version===lock.version;
136
+ console.log(ok ? 'OK consistente: '+p.version : 'INCONSISTENTE');
137
+ "
138
+ ```
139
+
140
+ Si el chequeo del nodo arriba dice OK pero `grep` aún muestra matches de la versión anterior, esos matches son **capa 2 (frontmatter)** o **capa 3 (histórico)** y son legítimos — no tocarlos.
141
+
142
+ ### Republish-only entre registries (caso especial)
143
+
144
+ Si el publish dual falla en uno de los 2 registries (typically npmjs o GitHub
145
+ Packages) pero el otro queda publicado, **NO se puede reintentar la misma versión**
146
+ — ningún registry permite sobreescribir versiones. Ejecutar inmediatamente un bump
147
+ PATCH (1.X.Y → 1.X.(Y+1)) siguiendo el checklist arriba, y publicar solo al
148
+ registry faltante con `node scripts/publicar.js --solo-npmjs` o `--solo-github`.
149
+
150
+ Documentar el republish exclusivamente como "republish de coordinación entre
151
+ registries" en CHANGELOG, sin atribuirle cambios funcionales que no existen.
152
+
153
+ Ver `Skill("release-semver")` sección "Publish a múltiples registries" para detalles.
154
+
155
+ ## Paso 6.5 — Regenerar skills-lock.json
156
+
157
+ Antes del CHANGELOG, regenerar el lock de skills para capturar el estado de
158
+ los 151 SKILL.md de la release:
159
+
160
+ ```bash
161
+ node scripts/generar-skills-lock.js
162
+ git add manifiestos/skills-lock.json
163
+ ```
164
+
165
+ El lock contiene SHA256 de cada SKILL.md y permite que `/swl:status salud` detecte
166
+ drift silencioso entre releases. Si el lock no cambió respecto al anterior,
167
+ el commit lo refleja como no-op (idempotente). El archivo es pequeño (~37KB)
168
+ y debe versionarse.
169
+
170
+ ## Paso 6.6 — Regenerar canonical-hashes.json (baseline del discriminador A/B)
171
+
172
+ Regenerar el manifiesto de hashes canónicos para la versión nueva. Es la baseline
173
+ que el instalador usa (Fase 16) para distinguir evolución del usuario (merge) de
174
+ shipped-evolved (actualizable) en cada upgrade. Debe incluir la versión que se
175
+ publica para que clientes que evolucionen desde ella se clasifiquen bien.
176
+
177
+ ```bash
178
+ node scripts/generar-canonical-hashes.js
179
+ git add manifiestos/canonical-hashes.json
180
+ ```
181
+
182
+ Idempotente (no-op si no cambió). El gate `node scripts/verificar-release.js`
183
+ (Paso 10.1) verifica que el manifiesto esté al día y que el fuente no porte
184
+ marcadores `evolved` espurios — si falla, ejecutar
185
+ `node scripts/verificar-evolucion.js --gate-inverso --fix`. El test e2e
186
+ `tests/scripts/release-e2e-evolved.test.js` (en `npm test`) bloquea el release
187
+ si la propagación A/B regresa.
188
+
189
+ ## Paso 7 — Generar CHANGELOG
190
+
191
+ Desde v1.6.5 este paso usa el skill `changelog-generator` para parsear
192
+ Conventional Commits y producir el bloque listo para insertar (ADR-0029).
193
+
194
+ ### Paso 7.1 — Cargar skill y previsualizar
195
+
196
+ ```
197
+ Skill("changelog-generator")
198
+ ```
199
+
200
+ Ejecutar el parser determinista contra los commits del rango actual:
201
+
202
+ ```bash
203
+ node habilidades/changelog-generator/scripts/parse-commits.js \
204
+ --from <tag-anterior> --to HEAD --version <nueva-version> --format markdown
205
+ ```
206
+
207
+ El script imprime el bloque markdown listo para insertar Y reporta a stderr
208
+ el ratio de conformidad Conventional Commits. Categorías generadas en orden
209
+ canónico: Breaking changes → Nuevas funcionalidades → Correcciones →
210
+ Mejoras de rendimiento → Cambios internos → Reversiones → Evoluciones de
211
+ skills/agentes → Mantenimiento → Otros.
212
+
213
+ ### Paso 7.2 — Gate de conformidad
214
+
215
+ Verificar la conformidad (impresa a stderr o vía `--format json`):
216
+
217
+ - **>= 80% conformidad**: continuar a 7.3.
218
+ - **< 80% conformidad**: detenerse y reportar al usuario los commits caídos
219
+ bajo "Otros". Pedir decisión:
220
+ 1. Continuar con el bloque generado (los "Otros" quedan al final del CHANGELOG).
221
+ 2. Abortar release y reescribir commits no conformes (`git rebase -i`).
222
+ 3. Editar manualmente la sección "Otros" antes de insertar.
223
+
224
+ NO continuar automáticamente con conformidad baja — el changelog público
225
+ queda confuso.
226
+
227
+ ### Paso 7.3 — Insertar en CHANGELOG.md
228
+
229
+ Leer `CHANGELOG.md` actual:
230
+ - Si no existe: crear con header `# Changelog\n\n` y luego el bloque nuevo.
231
+ - Si existe: insertar el bloque nuevo inmediatamente después del header
232
+ `# Changelog` (antes de la entrada anterior).
233
+
234
+ Escritura atómica obligatoria (regla CLAUDE.md). Usar `atomicWriteSync` desde
235
+ `hooks/lib/atomic-write.js` cuando se llame programáticamente.
236
+
237
+ ### Paso 7.4 — Verificar entrada generada
238
+
239
+ ```bash
240
+ head -40 CHANGELOG.md
241
+ ```
242
+
243
+ Confirmar:
244
+ - Header `## [<nueva-version>] - YYYY-MM-DD` presente.
245
+ - Categorías generadas tienen contenido coherente con los commits del rango.
246
+ - Breaking changes (si los hay) aparecen al inicio.
247
+
248
+ ### Fallback manual (legacy v1.6.4 y anterior)
249
+
250
+ Si el parser falla o el skill no está disponible, mantener el flujo manual
251
+ de versiones previas:
252
+ - Secciones: Funcionalidades nuevas, Correcciones, Mejoras de rendimiento,
253
+ Cambios internos, Breaking Changes, Estadísticas.
254
+ - Descripciones legibles por humanos (sin prefijo feat:/fix:).
255
+ - Omitir commits style: y test: del changelog público.
256
+
257
+ ## Paso 8 — Commit de release y tag
258
+
259
+ ```bash
260
+ git add package.json pyproject.toml setup.py VERSION CHANGELOG.md 2>/dev/null
261
+ git commit -m "chore(release): versión [nueva-versión]"
262
+ git tag -a "v[nueva-versión]" -m "Release v[nueva-versión]"
263
+ ```
264
+
265
+ Usar tags anotados siempre (regla del skill).
266
+
267
+ ## Paso 9 — Generar RELEASE-NOTES
268
+
269
+ Crea `releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md` con: resumen,
270
+ cambios, instrucciones de actualización y guía de migración si hay breaking changes.
271
+
272
+ ```bash
273
+ mkdir -p releases/v[nueva-versión]
274
+ # escribir releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md
275
+ ```
276
+
277
+ **NUNCA crear las RELEASE-NOTES en la raíz del repo.** La convención (todos los
278
+ releases previos en `releases/`) es que las RELEASE-NOTES viven SOLO en
279
+ `releases/vX.Y.Z/` — no se versiona ninguna copia en raíz. El directorio
280
+ `releases/v[nueva-versión]/` también lo crea `evidencia-release.js` (Paso 9.5);
281
+ si ese paso corre primero, el `mkdir -p` es no-op.
282
+
283
+ ## Paso 9.5 — Evidencia de procedencia (cadena de suministro, ADR-0038)
284
+
285
+ Genera la evidencia de cadena de suministro del release: SBOM CycloneDX del
286
+ árbol runtime + SHA256SUMS del tarball. No publica nada; produce artefactos
287
+ versionados en `releases/v[nueva-versión]/`.
288
+
289
+ ```bash
290
+ node scripts/lib/evidencia-release.js --version [nueva-versión]
291
+ ```
292
+
293
+ Esto escribe (vía `scripts/lib/evidencia-release.js`):
294
+ - `releases/v[nueva-versión]/sbom-v[nueva-versión].cdx.json` — SBOM CycloneDX
295
+ runtime-only (`npm sbom --sbom-format cyclonedx --omit dev`).
296
+ - `releases/v[nueva-versión]/SHA256SUMS` — checksum del tarball de `npm pack`.
297
+
298
+ Luego:
299
+
300
+ 1. **Insertar la sección "Integridad y verificación"** en
301
+ `releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md`, justo después de
302
+ la sección de correcciones. La genera `seccionVerificacionNotas` de la lib:
303
+
304
+ ```bash
305
+ node -e "const {seccionVerificacionNotas}=require('./scripts/lib/evidencia-release');const fs=require('fs');const v='[nueva-versión]';const sums=fs.readFileSync('releases/v'+v+'/SHA256SUMS','utf8').trim().split(/\s+/);const md=seccionVerificacionNotas({version:v,hash:sums[0],tarball:sums[1]});console.log(md)"
306
+ ```
307
+
308
+ Anexar ese markdown a `releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md`
309
+ (tras "Correcciones").
310
+
311
+ 2. **Versionar la evidencia** del release. Las RELEASE-NOTES ya viven en
312
+ `releases/v[nueva-versión]/` (Paso 9) — NO hacer `cp` desde la raíz (no debe
313
+ existir copia en raíz):
314
+
315
+ ```bash
316
+ git add releases/v[nueva-versión]/
317
+ ```
318
+
319
+ `releases/` NO viaja en el tarball npm (`package.json#files` es allowlist y no
320
+ lo incluye) — es evidencia del repo, no del paquete. Verificar con
321
+ `npm pack --dry-run | grep -c "releases/"` → debe ser `0`.
322
+
323
+ **Provenance (opt-in)**: el publish default sigue siendo local
324
+ (`scripts/publicar.js`). Para publicar a npmjs con `npm publish --provenance`
325
+ (que exige OIDC desde CI) usar el workflow opt-in
326
+ `.github/workflows/publish-npm.yml` (trigger `workflow_dispatch`, `dry_run`
327
+ default true). GitHub Packages permanece local. Runbook de verificación para
328
+ el consumidor: `docs/verificacion-consumidor.md`.
329
+
330
+ ## Paso 10 — Verificación final
331
+
332
+ ### 10.1 Gate automática anti-gap (OBLIGATORIA antes del push)
333
+
334
+ Ejecutar `scripts/verificar-release.js` que valida que la versión nueva esté reflejada en las 14 ubicaciones canónicas de la checklist (y avisa sobre MANUAL_USO opcional):
335
+
336
+ ```bash
337
+ node scripts/verificar-release.js
338
+ ```
339
+
340
+ Exit codes:
341
+ - `0` — todas las ubicaciones obligatorias con la versión correcta, puedes continuar al push
342
+ - `1` — al menos un archivo quedó en versión anterior. **NO hacer push hasta corregir**. El reporte indica el archivo y el problema específico
343
+ - `2` — error de invocación (package.json ausente, versión inválida)
344
+
345
+ Ejemplo de output en éxito:
346
+ ```
347
+ [OK] package.json: version=5.10.5
348
+ [OK] plugin.json: version=5.10.5
349
+ [OK] package-lock.json: version=5.10.5, packages[""].version=5.10.5
350
+ ...
351
+ [OK] CHANGELOG.md: seccion [5.10.5] presente con fecha
352
+ Resultado: 14/15 OK, 1 WARN opcional(es)
353
+ ```
354
+
355
+ Ejemplo de output en fallo que obliga a corregir:
356
+ ```
357
+ [FALLA] .planning/MAPEO_SKILLS_AGENTES.md: solo 0 ocurrencia(s) de 5.10.5 (minimo 1)
358
+ [FALLA] README.md: primera linea no menciona 5.10.5 — actual: "# swl-software-engineering-system v5.10.4"
359
+ Resultado: 13/15 OK, 2 FALLA(S) obligatoria(s)
360
+ ```
361
+
362
+ Esta gate existe porque el agente `release-manager-swl` ha omitido archivos en 3 releases consecutivos (5.10.3, 5.10.4, 5.10.5 — ver APRENDIZAJES.md) pese a tener la checklist documentada en su frontmatter. Un checklist textual no basta: se necesita ejecución.
363
+
364
+ ### 10.1.1 Gate de cobertura por lenguaje (regeneración obligatoria)
365
+
366
+ Tras el verificar-release.js, regenerar la matriz lenguaje × cobertura SWL:
367
+
368
+ ```bash
369
+ node scripts/generar-matriz-lenguajes.js
370
+ ```
371
+
372
+ El script reescribe `.planning/cobertura-lenguajes.md` con el estado actual.
373
+ Comparar contra el commit anterior:
374
+
375
+ ```bash
376
+ git diff .planning/cobertura-lenguajes.md
377
+ ```
378
+
379
+ Si algún lenguaje **bajó de status** (completo → parcial, parcial → faltante)
380
+ sin ADR documentado en `.planning/adrs/` justificando la regresión, **NO hacer
381
+ release**. La regresión silenciosa de cobertura erosiona la promesa "polyglot"
382
+ del repo.
383
+
384
+ Si el cambio es esperado (eliminación deliberada de un componente), el ADR
385
+ debe existir con número y fecha y referenciarse en el commit del release.
386
+
387
+ Lo mismo aplica para releases con incremento de cobertura: la nueva matriz se
388
+ commitea junto al release y se menciona en RELEASE-NOTES.
389
+
390
+ ### 10.2 Verificación manual post-gate
391
+
392
+ ```bash
393
+ git tag -l "v[nueva-versión]"
394
+ git log --oneline -3
395
+ head -30 CHANGELOG.md
396
+ ```
397
+
398
+ ## Paso 11 — Reporte final
399
+
400
+ ```
401
+ === Release v[nueva-versión] completado ===
402
+
403
+ Versión anterior: v[versión-anterior]
404
+ Nueva versión: v[nueva-versión]
405
+ Tipo: [PATCH | MINOR | MAJOR]
406
+
407
+ Archivos actualizados: [lista]
408
+ Git: Commit [hash], Tag v[nueva-versión]
409
+ Commits incluidos: [N] (feat: [N], fix: [N], otros: [N])
410
+ Tests: [ejecutados OK | omitidos (--skip-tests)]
411
+
412
+ Próximos pasos:
413
+ 1. Revisar releases/v[nueva-versión]/RELEASE-NOTES-v[nueva-versión].md
414
+ 2. git push origin v[nueva-versión]
415
+ 3. Publicar release en GitHub/GitLab si aplica
416
+ 4. Notificar al equipo
417
+ ```
418
+
419
+ ## Reglas de comportamiento
420
+
421
+ - NUNCA crear release con repositorio dirty.
422
+ - NUNCA omitir actualización de archivos de versión — inconsistencias causan errores de build.
423
+ - NUNCA usar `--skip-tests` sin documentarlo en CHANGELOG y sin confirmación.
424
+ - Si tipo calculado es MAJOR pero usuario pidió --tipo=patch, reportar discrepancia y esperar confirmación.
425
+ - CHANGELOG legible por alguien que no conoce el código.
426
+ - Si es monorepo, reportar que no se soporta y sugerir lerna/changesets.
427
+ - **Crear el tag anotado AL FINAL del proceso, cuando el contenido está congelado
428
+ y verificado** (tras evidencia + RELEASE-NOTES). Commitear ENCIMA de un tag de
429
+ release ya creado pero aún-no-publicado obliga a mover el tag + regenerar la
430
+ evidencia (el SHA del tarball cambia si el commit toca archivos de
431
+ `package.json#files`) — churn evitable. Si hay que iterar, hacerlo antes de taggear.
432
+ - **Si el usuario alimenta archivos de forma incremental para la MISMA versión
433
+ ("faltan N archivos que agregar a esta versión, espera"), NO finalizar el
434
+ release** (no congelar tag, no regenerar evidencia final, no proponer push)
435
+ hasta que el usuario confirme que ya están TODOS los archivos. Mantener el
436
+ commit de release como HEAD entre tandas para que cada incorporación sea un
437
+ `amend` limpio + mover tag; regenerar la evidencia (SBOM/SHA256SUMS) SOLO en la
438
+ última tanda, porque el SHA del tarball cambia con cada archivo nuevo que entre
439
+ en `package.json#files`. Cerrar el release antes de tiempo obliga a rehacer
440
+ evidencia y tag por cada archivo tardío.
441
+ - **El agente NUNCA corre `npm` (test/pack/build/publish) en paralelo a un
442
+ `npm run publish:*` que está ejecutando el usuario.** `test:release` incluye
443
+ `test:smoke` (install/uninstall a temp + lectura de estado global); dos suites
444
+ simultáneas colisionan y rompen `prepublishOnly` con fallos espurios que parecen
445
+ bugs de test pero son concurrencia. La preparación del release (bump, manifests,
446
+ evidencia, push, GitHub release) termina ANTES de que el usuario publique; durante
447
+ el publish del usuario, el agente no ejecuta `npm`.
448
+ - Si `prepublishOnly` falla y no se ve la causa: npm v10 NO guarda el stdout del
449
+ script fallido en su debug log. Capturar con el log síncrono de `publicar.js`
450
+ (`.planning/logs/publish-<v>-<ts>.log`) o `... *>&1 | Tee-Object`. No diagnosticar a ciegas.