@saulwade/swl-ses 1.5.0 → 1.5.2

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 (134) hide show
  1. package/CLAUDE.md +19 -2
  2. package/README.md +561 -561
  3. package/agentes/arquitecto-swl.md +33 -1
  4. package/agentes/nemesis-auditor-swl.md +59 -19
  5. package/bin/swl-mcp-server.js +214 -214
  6. package/comandos/swl/.evolved.json +22 -22
  7. package/comandos/swl/contribuir.md +233 -233
  8. package/comandos/swl/nemesis.md +230 -56
  9. package/gateway/lib/event-channel.js +191 -191
  10. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  11. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  12. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  13. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  14. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  15. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  16. package/habilidades/eval-framework/SKILL.md +212 -212
  17. package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
  18. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  19. package/habilidades/harness-claude-code/SKILL.md +299 -299
  20. package/habilidades/infra-github-actions/SKILL.md +166 -166
  21. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  22. package/habilidades/manejo-errores/.evolved.json +8 -8
  23. package/habilidades/meta-skills-estandar/SKILL.md +225 -1
  24. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  25. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  26. package/habilidades/nemesis-evaluacion-json/SKILL.md +266 -0
  27. package/habilidades/nemesis-redistribuir/SKILL.md +341 -0
  28. package/habilidades/node-experto/SKILL.md +105 -4
  29. package/habilidades/patrones-python/SKILL.md +229 -229
  30. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  31. package/habilidades/planear-fase/SKILL.md +319 -319
  32. package/habilidades/protocolo-revision-swl/SKILL.md +350 -276
  33. package/habilidades/release-semver/.evolved.json +8 -8
  34. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
  35. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  36. package/habilidades/tdd-workflow/SKILL.md +150 -4
  37. package/habilidades/testing-python/SKILL.md +340 -340
  38. package/habilidades/verificar-trabajo/SKILL.md +8 -3
  39. package/habilidades/web-fetcher-routing/SKILL.md +75 -75
  40. package/hooks/check-update.js +31 -3
  41. package/hooks/claudemd-bloat-detector.js +161 -161
  42. package/hooks/lib/agent-routing.js +107 -107
  43. package/hooks/lib/auto-consolidator.js +335 -335
  44. package/hooks/lib/error-classifier.js +308 -308
  45. package/hooks/lib/merkle-audit.js +96 -96
  46. package/hooks/lib/provenance-tracker.js +191 -191
  47. package/hooks/lib/rate-limit-tracker.js +253 -253
  48. package/hooks/lib/resource-quota.js +122 -122
  49. package/hooks/lib/retry-jitter.js +165 -165
  50. package/hooks/lib/security-net.js +201 -201
  51. package/hooks/lib/skill-auditor.js +588 -588
  52. package/hooks/lib/sync-status.js +228 -228
  53. package/hooks/lib/taint-tracker.js +107 -107
  54. package/hooks/lib/text-similarity.js +241 -241
  55. package/hooks/lib/toon-compressor.js +245 -245
  56. package/hooks/registro-turnos.js +209 -209
  57. package/hooks/sugerir-regenerar-inventario.js +170 -170
  58. package/hooks/validar-formato-post-subagente.js +140 -140
  59. package/hooks/validar-memoria-hook.js +218 -218
  60. package/instintos/prompt-appendices.yaml +57 -57
  61. package/manifiestos/agent-output-schemas.json +57 -57
  62. package/manifiestos/modulos.json +1324 -1321
  63. package/manifiestos/skills-lock.json +1114 -1114
  64. package/package.json +2 -2
  65. package/plantillas/auditor-veto-template.md +105 -105
  66. package/plantillas/github-workflows/README.md +47 -47
  67. package/plantillas/github-workflows/release-please.yml +44 -44
  68. package/plantillas/github-workflows/swl-ci.yml +107 -107
  69. package/plantillas/github-workflows/swl-security.yml +51 -51
  70. package/plugin.json +353 -351
  71. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  72. package/reglas/arreglar-al-detectar.md +147 -147
  73. package/reglas/fragmentos-compartidos.md +152 -152
  74. package/reglas/harness-claude-code.md +213 -213
  75. package/reglas/registro-componentes-nuevos.md +192 -0
  76. package/reglas/usar-context7.md +226 -226
  77. package/schemas/diary-entry.schema.json +80 -80
  78. package/scripts/actualizar.js +110 -1
  79. package/scripts/audit-tools/audit-history.js +330 -330
  80. package/scripts/audit-tools/bundle-tracker.js +290 -290
  81. package/scripts/audit-tools/canary-monitor.js +352 -352
  82. package/scripts/audit-tools/code-profiler.js +605 -605
  83. package/scripts/audit-tools/dep-doctor.js +320 -320
  84. package/scripts/audit-tools/env-validator.js +206 -206
  85. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  86. package/scripts/audit-tools/lib/output.js +23 -23
  87. package/scripts/audit-tools/migration-checker.js +392 -392
  88. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  89. package/scripts/benchmark-memoria.js +167 -167
  90. package/scripts/configurar-branch-protection.js +418 -418
  91. package/scripts/derivar-feature-list.js +489 -489
  92. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  93. package/scripts/doctor.js +58 -4
  94. package/scripts/field-report.js +199 -199
  95. package/scripts/generar-checklists-consolidados.js +273 -273
  96. package/scripts/generar-inventario.js +420 -420
  97. package/scripts/generar-matriz-lenguajes.js +271 -271
  98. package/scripts/lib/artefactos-python.js +43 -43
  99. package/scripts/lib/benchmark-metrics.js +160 -160
  100. package/scripts/lib/budget-enforcer.js +252 -252
  101. package/scripts/lib/configurar-ci.js +380 -380
  102. package/scripts/lib/contadores-inventario.js +217 -217
  103. package/scripts/lib/detectar-stack-detallado.js +307 -307
  104. package/scripts/lib/diary-entry.js +234 -234
  105. package/scripts/lib/eval-metrics-store.js +218 -218
  106. package/scripts/lib/eval-quality.js +171 -171
  107. package/scripts/lib/eval-schemas.js +144 -144
  108. package/scripts/lib/eval-self-correct.js +106 -106
  109. package/scripts/lib/eval-validator.js +185 -185
  110. package/scripts/lib/expandir-targets.js +71 -71
  111. package/scripts/lib/jaccard-similarity.js +98 -98
  112. package/scripts/lib/longmemeval-runner.js +125 -125
  113. package/scripts/lib/mcp_config.py +127 -0
  114. package/scripts/lib/npm-version.js +261 -261
  115. package/scripts/lib/paquetes-conocidos.js +50 -50
  116. package/scripts/lib/prompt-builder.js +264 -264
  117. package/scripts/lib/rrf-fusion.js +175 -175
  118. package/scripts/lib/scoring-instintos.js +277 -277
  119. package/scripts/lib/semantic-search.js +252 -252
  120. package/scripts/lib/toml-merge.js +204 -204
  121. package/scripts/lib/transformadores/codex.js +375 -375
  122. package/scripts/lib/transformadores/cursor.js +359 -359
  123. package/scripts/limpiar-artefactos-python.js +131 -131
  124. package/scripts/mcp-orchestrator.py +8 -18
  125. package/scripts/mcp-pool-manager.py +12 -23
  126. package/scripts/mcp-server/README.md +170 -170
  127. package/scripts/mcp-server/auth.js +105 -105
  128. package/scripts/mcp-server/cache.js +106 -106
  129. package/scripts/mcp-server/telemetry.js +78 -78
  130. package/scripts/migrar-csv-a-array.js +168 -168
  131. package/scripts/migrar-fase-dominio.js +201 -201
  132. package/scripts/publicar.js +511 -511
  133. package/scripts/run-eval.js +141 -141
  134. package/scripts/validar-userland-vacio.js +110 -110
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@saulwade/swl-ses",
3
- "version": "1.5.0",
4
- "description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 60 agentes, 158 habilidades, 44 comandos, 65 reglas y 41 hooks. Soporta 11 lenguajes y 7 runtimes: Claude Code, OpenClaude, OpenCode, Gemini CLI (soporte completo), Cursor, Codex CLI y GitHub Copilot (soporte parcial — reglas + MCP swl-memory v1.0.0 con auth opt-in). 100% en espanol (Mexico). Multi-target install (--target CSV / --all-runtimes) y autoconfig MCP en Cursor/Codex con --with-mcp. Gateway bidireccional con relay Telegram y auditoria profunda Nemesis con 8 tools ejecutables.",
3
+ "version": "1.5.2",
4
+ "description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 60 agentes, 162 habilidades, 44 comandos, 66 reglas y 41 hooks. Soporta 11 lenguajes y 7 runtimes: Claude Code, OpenClaude, OpenCode, Gemini CLI, Cursor, Codex CLI (soporte completo); GitHub Copilot (soporte parcial). 100% en espanol (Mexico). Multi-target install (--target CSV / --all-runtimes), autoconfig MCP en Cursor/Codex con --with-mcp, agentes Codex en TOML, hooks Cursor (17 eventos) y Codex (6 eventos). Gateway bidireccional con relay Telegram y auditoria profunda Nemesis con loop evaluator-optimizer opt-in (ADR-0021) y 8 tools ejecutables.",
5
5
  "bin": {
6
6
  "swl-ses": "bin/swl-ses.js",
7
7
  "swl-telegram-bot": "bin/swl-telegram-bot.js",
@@ -1,105 +1,105 @@
1
- # Plantilla: Auditor con Veto Items + Cap Enforcement
2
-
3
- Plantilla reusable para revisores SWL que aplican el patrón "veto items + cap
4
- enforcement". Ver `reglas/gobernanza.md` sección "Veto items y cap enforcement".
5
-
6
- ---
7
-
8
- ## Cuándo usar esta plantilla
9
-
10
- Cuando crees o actualices un revisor (`revisor-*-swl.md`) que:
11
-
12
- - Audita cumplimiento de reglas globales del sistema (`reglas/*.md`).
13
- - Necesita comunicar al lector cuáles violaciones son **no negociables**.
14
- - Debe evitar que un score promedio "redondeado" oculte un problema crítico.
15
-
16
- ---
17
-
18
- ## Estructura a copiar (insertar antes de "Formato de reporte obligatorio")
19
-
20
- ```markdown
21
- ## Veto items — cap enforcement a [LÍMITE]
22
-
23
- Ciertos hallazgos son **no negociables**. Si encuentras CUALQUIERA de los
24
- siguientes, el `score` del reporte queda **CAP a [LÍMITE] como máximo absoluto**,
25
- independientemente de qué tan limpio esté el resto del código. Patrón adaptado
26
- del modelo de auditor con veto items (ver `reglas/gobernanza.md`).
27
-
28
- **Lista de veto items**:
29
-
30
- 1. **[Nombre del veto]**: [descripción específica + regla que viola].
31
- 2. ...
32
- N. ...
33
-
34
- **Reglas del cap**:
35
-
36
- - Encontrar 1 veto item → `score ≤ [LÍMITE]`. Veredicto automático:
37
- `RECHAZADO` o `APROBADO CON CORRECCIONES` (nunca `APROBADO` limpio).
38
- - Encontrar 2+ veto items → `score ≤ [LÍMITE_ESTRICTO]`. Bloqueo absoluto.
39
- - El veto NO se puede negociar bajando severidad.
40
- - El cap se levanta SOLO cuando se demuestra remediación (commit + test) y el
41
- revisor re-ejecuta la auditoría.
42
-
43
- Reportar al inicio del reporte con bloque dedicado:
44
-
45
- \`\`\`
46
- ### VETO ITEMS DETECTADOS
47
- - [VI-1] <descripción>: \`archivo:linea\` — <evidencia>
48
- - [VI-N] <descripción>: \`archivo:linea\` — <evidencia>
49
- → score CAP a [VALOR] ([N] veto items). Veredicto: [VEREDICTO].
50
- \`\`\`
51
-
52
- Si no se detecta ninguno: \`### VETO ITEMS DETECTADOS\n- Ninguno\`.
53
- ```
54
-
55
- ---
56
-
57
- ## Reglas para definir veto items
58
-
59
- Antes de declarar un veto item, verifica:
60
-
61
- 1. **¿Existe una regla global que lo respalde?** Si no, no es veto. Crear o
62
- actualizar la regla primero (`reglas/<dominio>.md`).
63
- 2. **¿Es objetivamente detectable?** Un veto debe ser binario (presente o
64
- ausente). Criterios subjetivos como "código feo" no califican.
65
- 3. **¿Su presencia justifica bloquear el merge?** Si el equipo puede aprobar
66
- el código sin corregirlo, no es veto — es hallazgo regular.
67
- 4. **¿Es proporcional al dominio del revisor?** Un revisor de seguridad no
68
- declara vetos de estilo. Cada revisor solo veta lo de su dominio.
69
- 5. **¿Está la lista cerrada?** Una lista de 50 veto items es señal de mala
70
- curación. Lo razonable: 8-15 items por revisor.
71
-
72
- ---
73
-
74
- ## Escalas recomendadas
75
-
76
- | Tipo de reporte | Cap con 1 veto | Cap con 2+ vetos |
77
- |-----------------|---------------|-----------------|
78
- | Score 0-100 (CVSSv3-like) | 60/100 | 30/100 |
79
- | Score 0-10 promedio por dimensión | 6.0/10 | 3.0/10 |
80
- | Score 0-1 (probabilístico) | 0.6 | 0.3 |
81
-
82
- ---
83
-
84
- ## Ejemplos en agentes existentes
85
-
86
- - `agentes/revisor-seguridad-swl.md` — 10 veto items de OWASP Top 10 + secrets + CVEs
87
- - `agentes/revisor-codigo-swl.md` — 10 veto items mapeando a `reglas/estilo-codigo.md`
88
- y `reglas/arquitectura.md`
89
-
90
- ---
91
-
92
- ## Cómo el ejecutor responde a un cap
93
-
94
- Si recibes un reporte con veto items detectados:
95
-
96
- 1. **NO negocies la severidad**. El cap está justificado por regla global.
97
- 2. **Aplica las correcciones específicas** que el revisor indica con
98
- archivo:línea.
99
- 3. **Agrega un test que pruebe la corrección** (regression test). Sin test,
100
- el veto puede regresar.
101
- 4. **Solicita re-revisión** al mismo revisor. Si el veto desapareció, el cap
102
- se levanta y el score se recalcula sin penalización.
103
- 5. **Si NO puedes corregir** (limitación externa, blocker técnico): documenta
104
- en `.planning/AUDITORIA.md` y escala al humano. NUNCA marques el trabajo
105
- como completado con vetos abiertos.
1
+ # Plantilla: Auditor con Veto Items + Cap Enforcement
2
+
3
+ Plantilla reusable para revisores SWL que aplican el patrón "veto items + cap
4
+ enforcement". Ver `reglas/gobernanza.md` sección "Veto items y cap enforcement".
5
+
6
+ ---
7
+
8
+ ## Cuándo usar esta plantilla
9
+
10
+ Cuando crees o actualices un revisor (`revisor-*-swl.md`) que:
11
+
12
+ - Audita cumplimiento de reglas globales del sistema (`reglas/*.md`).
13
+ - Necesita comunicar al lector cuáles violaciones son **no negociables**.
14
+ - Debe evitar que un score promedio "redondeado" oculte un problema crítico.
15
+
16
+ ---
17
+
18
+ ## Estructura a copiar (insertar antes de "Formato de reporte obligatorio")
19
+
20
+ ```markdown
21
+ ## Veto items — cap enforcement a [LÍMITE]
22
+
23
+ Ciertos hallazgos son **no negociables**. Si encuentras CUALQUIERA de los
24
+ siguientes, el `score` del reporte queda **CAP a [LÍMITE] como máximo absoluto**,
25
+ independientemente de qué tan limpio esté el resto del código. Patrón adaptado
26
+ del modelo de auditor con veto items (ver `reglas/gobernanza.md`).
27
+
28
+ **Lista de veto items**:
29
+
30
+ 1. **[Nombre del veto]**: [descripción específica + regla que viola].
31
+ 2. ...
32
+ N. ...
33
+
34
+ **Reglas del cap**:
35
+
36
+ - Encontrar 1 veto item → `score ≤ [LÍMITE]`. Veredicto automático:
37
+ `RECHAZADO` o `APROBADO CON CORRECCIONES` (nunca `APROBADO` limpio).
38
+ - Encontrar 2+ veto items → `score ≤ [LÍMITE_ESTRICTO]`. Bloqueo absoluto.
39
+ - El veto NO se puede negociar bajando severidad.
40
+ - El cap se levanta SOLO cuando se demuestra remediación (commit + test) y el
41
+ revisor re-ejecuta la auditoría.
42
+
43
+ Reportar al inicio del reporte con bloque dedicado:
44
+
45
+ \`\`\`
46
+ ### VETO ITEMS DETECTADOS
47
+ - [VI-1] <descripción>: \`archivo:linea\` — <evidencia>
48
+ - [VI-N] <descripción>: \`archivo:linea\` — <evidencia>
49
+ → score CAP a [VALOR] ([N] veto items). Veredicto: [VEREDICTO].
50
+ \`\`\`
51
+
52
+ Si no se detecta ninguno: \`### VETO ITEMS DETECTADOS\n- Ninguno\`.
53
+ ```
54
+
55
+ ---
56
+
57
+ ## Reglas para definir veto items
58
+
59
+ Antes de declarar un veto item, verifica:
60
+
61
+ 1. **¿Existe una regla global que lo respalde?** Si no, no es veto. Crear o
62
+ actualizar la regla primero (`reglas/<dominio>.md`).
63
+ 2. **¿Es objetivamente detectable?** Un veto debe ser binario (presente o
64
+ ausente). Criterios subjetivos como "código feo" no califican.
65
+ 3. **¿Su presencia justifica bloquear el merge?** Si el equipo puede aprobar
66
+ el código sin corregirlo, no es veto — es hallazgo regular.
67
+ 4. **¿Es proporcional al dominio del revisor?** Un revisor de seguridad no
68
+ declara vetos de estilo. Cada revisor solo veta lo de su dominio.
69
+ 5. **¿Está la lista cerrada?** Una lista de 50 veto items es señal de mala
70
+ curación. Lo razonable: 8-15 items por revisor.
71
+
72
+ ---
73
+
74
+ ## Escalas recomendadas
75
+
76
+ | Tipo de reporte | Cap con 1 veto | Cap con 2+ vetos |
77
+ |-----------------|---------------|-----------------|
78
+ | Score 0-100 (CVSSv3-like) | 60/100 | 30/100 |
79
+ | Score 0-10 promedio por dimensión | 6.0/10 | 3.0/10 |
80
+ | Score 0-1 (probabilístico) | 0.6 | 0.3 |
81
+
82
+ ---
83
+
84
+ ## Ejemplos en agentes existentes
85
+
86
+ - `agentes/revisor-seguridad-swl.md` — 10 veto items de OWASP Top 10 + secrets + CVEs
87
+ - `agentes/revisor-codigo-swl.md` — 10 veto items mapeando a `reglas/estilo-codigo.md`
88
+ y `reglas/arquitectura.md`
89
+
90
+ ---
91
+
92
+ ## Cómo el ejecutor responde a un cap
93
+
94
+ Si recibes un reporte con veto items detectados:
95
+
96
+ 1. **NO negocies la severidad**. El cap está justificado por regla global.
97
+ 2. **Aplica las correcciones específicas** que el revisor indica con
98
+ archivo:línea.
99
+ 3. **Agrega un test que pruebe la corrección** (regression test). Sin test,
100
+ el veto puede regresar.
101
+ 4. **Solicita re-revisión** al mismo revisor. Si el veto desapareció, el cap
102
+ se levanta y el score se recalcula sin penalización.
103
+ 5. **Si NO puedes corregir** (limitación externa, blocker técnico): documenta
104
+ en `.planning/AUDITORIA.md` y escala al humano. NUNCA marques el trabajo
105
+ como completado con vetos abiertos.
@@ -1,47 +1,47 @@
1
- # Plantillas de GitHub Actions — swl-ses
2
-
3
- Tres workflows listos para copiar a `.github/workflows/` de cualquier proyecto.
4
-
5
- ## Cómo instalar
6
-
7
- La forma recomendada es via el comando interactivo:
8
-
9
- ```bash
10
- /swl:configurar-ci init
11
- ```
12
-
13
- O manualmente: copiar los archivos de esta carpeta a `.github/workflows/` de tu proyecto.
14
-
15
- ## Workflows disponibles
16
-
17
- ### `swl-security.yml` — Revisión de seguridad con Claude
18
-
19
- Corre en cada PR a `main`. Analiza el diff con `anthropics/claude-code-security-review`
20
- y comenta hallazgos directamente en el PR.
21
-
22
- **Requiere**: secret `CLAUDE_API_KEY` en GitHub Settings → Secrets and variables → Actions.
23
-
24
- ### `swl-ci.yml` — CI estándar
25
-
26
- Corre en push y PRs a `main`. Detecta Node.js automáticamente. Incluye secciones
27
- comentadas para Python, Rust y Go — activar las que correspondan al proyecto.
28
-
29
- - Matrix Node 22 + 24
30
- - `npm ci` → lint → type-check (si hay tsconfig.json) → tests
31
- - `concurrency: cancel-in-progress: true`
32
-
33
- **No requiere** secrets adicionales.
34
-
35
- ### `release-please.yml` — Releases automáticos
36
-
37
- Tras merge a `main`, crea un Release PR con el bump de versión y CHANGELOG
38
- generados desde conventional commits. Al mergear el Release PR, crea el tag
39
- y el GitHub Release.
40
-
41
- **No requiere** secrets adicionales (usa `GITHUB_TOKEN`). Requiere conventional commits.
42
-
43
- Ver `docs/RELEASE-PLEASE-MIGRATION.md` para comparativa con el flujo manual actual.
44
-
45
- ## Skill de referencia
46
-
47
- Para guía completa de setup, troubleshooting y gotchas: `Skill("infra-github-actions")`.
1
+ # Plantillas de GitHub Actions — swl-ses
2
+
3
+ Tres workflows listos para copiar a `.github/workflows/` de cualquier proyecto.
4
+
5
+ ## Cómo instalar
6
+
7
+ La forma recomendada es via el comando interactivo:
8
+
9
+ ```bash
10
+ /swl:configurar-ci init
11
+ ```
12
+
13
+ O manualmente: copiar los archivos de esta carpeta a `.github/workflows/` de tu proyecto.
14
+
15
+ ## Workflows disponibles
16
+
17
+ ### `swl-security.yml` — Revisión de seguridad con Claude
18
+
19
+ Corre en cada PR a `main`. Analiza el diff con `anthropics/claude-code-security-review`
20
+ y comenta hallazgos directamente en el PR.
21
+
22
+ **Requiere**: secret `CLAUDE_API_KEY` en GitHub Settings → Secrets and variables → Actions.
23
+
24
+ ### `swl-ci.yml` — CI estándar
25
+
26
+ Corre en push y PRs a `main`. Detecta Node.js automáticamente. Incluye secciones
27
+ comentadas para Python, Rust y Go — activar las que correspondan al proyecto.
28
+
29
+ - Matrix Node 22 + 24
30
+ - `npm ci` → lint → type-check (si hay tsconfig.json) → tests
31
+ - `concurrency: cancel-in-progress: true`
32
+
33
+ **No requiere** secrets adicionales.
34
+
35
+ ### `release-please.yml` — Releases automáticos
36
+
37
+ Tras merge a `main`, crea un Release PR con el bump de versión y CHANGELOG
38
+ generados desde conventional commits. Al mergear el Release PR, crea el tag
39
+ y el GitHub Release.
40
+
41
+ **No requiere** secrets adicionales (usa `GITHUB_TOKEN`). Requiere conventional commits.
42
+
43
+ Ver `docs/RELEASE-PLEASE-MIGRATION.md` para comparativa con el flujo manual actual.
44
+
45
+ ## Skill de referencia
46
+
47
+ Para guía completa de setup, troubleshooting y gotchas: `Skill("infra-github-actions")`.
@@ -1,44 +1,44 @@
1
- name: release-please
2
-
3
- # Plantilla distribuida por swl-ses.
4
- # Copiar este archivo a .github/workflows/ de tu proyecto.
5
- # Para setup automatizado: /swl:configurar-ci --with-release-please
6
- #
7
- # Release Please automatiza:
8
- # - Crea un "Release PR" con el bump de versión y CHANGELOG generado
9
- # automáticamente al detectar commits convencionales en main.
10
- # - Al mergear el Release PR, crea el tag git y el GitHub Release.
11
- #
12
- # Requiere conventional commits (feat:, fix:, chore(release):, etc.)
13
- # No requiere secrets adicionales — usa el GITHUB_TOKEN automático.
14
- #
15
- # Referencia oficial: https://github.com/googleapis/release-please-action
16
- # Versión en uso: v4
17
-
18
- on:
19
- push:
20
- branches:
21
- - main
22
-
23
- # release-please necesita escribir en el repo y abrir PRs.
24
- permissions:
25
- contents: write
26
- pull-requests: write
27
-
28
- name: release-please
29
-
30
- jobs:
31
- release-please:
32
- runs-on: ubuntu-latest
33
- steps:
34
- - uses: googleapis/release-please-action@v4
35
- with:
36
- # GITHUB_TOKEN es suficiente en la mayoría de repos.
37
- # Si el repo es de organización y las Actions no tienen permiso
38
- # de crear PRs, crear un PAT y usar secrets.MY_RELEASE_TOKEN.
39
- token: ${{ secrets.GITHUB_TOKEN }}
40
- # Estrategia de release. Opciones comunes:
41
- # "node" — para proyectos Node.js con package.json
42
- # "python" — para pyproject.toml / setup.cfg
43
- # "simple" — para cualquier stack (actualiza VERSION file)
44
- release-type: node
1
+ name: release-please
2
+
3
+ # Plantilla distribuida por swl-ses.
4
+ # Copiar este archivo a .github/workflows/ de tu proyecto.
5
+ # Para setup automatizado: /swl:configurar-ci --with-release-please
6
+ #
7
+ # Release Please automatiza:
8
+ # - Crea un "Release PR" con el bump de versión y CHANGELOG generado
9
+ # automáticamente al detectar commits convencionales en main.
10
+ # - Al mergear el Release PR, crea el tag git y el GitHub Release.
11
+ #
12
+ # Requiere conventional commits (feat:, fix:, chore(release):, etc.)
13
+ # No requiere secrets adicionales — usa el GITHUB_TOKEN automático.
14
+ #
15
+ # Referencia oficial: https://github.com/googleapis/release-please-action
16
+ # Versión en uso: v4
17
+
18
+ on:
19
+ push:
20
+ branches:
21
+ - main
22
+
23
+ # release-please necesita escribir en el repo y abrir PRs.
24
+ permissions:
25
+ contents: write
26
+ pull-requests: write
27
+
28
+ name: release-please
29
+
30
+ jobs:
31
+ release-please:
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: googleapis/release-please-action@v4
35
+ with:
36
+ # GITHUB_TOKEN es suficiente en la mayoría de repos.
37
+ # Si el repo es de organización y las Actions no tienen permiso
38
+ # de crear PRs, crear un PAT y usar secrets.MY_RELEASE_TOKEN.
39
+ token: ${{ secrets.GITHUB_TOKEN }}
40
+ # Estrategia de release. Opciones comunes:
41
+ # "node" — para proyectos Node.js con package.json
42
+ # "python" — para pyproject.toml / setup.cfg
43
+ # "simple" — para cualquier stack (actualiza VERSION file)
44
+ release-type: node
@@ -1,107 +1,107 @@
1
- name: CI
2
-
3
- # Plantilla distribuida por swl-ses.
4
- # Copiar este archivo a .github/workflows/ de tu proyecto.
5
- # Para setup automatizado: /swl:configurar-ci init
6
- #
7
- # Este workflow corre en push y PRs a main.
8
- # Detecta automáticamente Node.js; los stacks adicionales están comentados.
9
- # Activar las secciones que correspondan a tu proyecto.
10
- #
11
- # Para extender con Python, Rust o Go: descomentar las secciones al final
12
- # y combinar con el job principal o crear jobs separados según convenga.
13
-
14
- on:
15
- push:
16
- branches: [main]
17
- pull_request:
18
- branches: [main]
19
-
20
- # Cancela runs anteriores del mismo PR para evitar deploys simultáneos.
21
- concurrency:
22
- group: ${{ github.workflow }}-${{ github.ref }}
23
- cancel-in-progress: true
24
-
25
- jobs:
26
- test:
27
- runs-on: ubuntu-latest
28
- strategy:
29
- fail-fast: false
30
- matrix:
31
- # Node 22 (LTS) + Node 24 (current). Ajustar si el proyecto requiere
32
- # solo una versión.
33
- node-version: [22, 24]
34
-
35
- steps:
36
- - uses: actions/checkout@v5
37
-
38
- - name: Configurar Node.js ${{ matrix.node-version }}
39
- uses: actions/setup-node@v5
40
- with:
41
- node-version: ${{ matrix.node-version }}
42
- cache: npm
43
-
44
- # ── Node.js / JavaScript / TypeScript ────────────────────────────────
45
-
46
- - name: Instalar dependencias
47
- if: hashFiles('package.json') != ''
48
- run: npm ci
49
-
50
- - name: Lint
51
- if: hashFiles('package.json') != ''
52
- # Ajustar el script según cómo esté configurado en package.json.
53
- # Alternativas comunes: "lint", "lint:check", "eslint"
54
- run: npm run lint --if-present
55
-
56
- - name: Verificar tipos (TypeScript)
57
- if: hashFiles('tsconfig.json') != ''
58
- run: npx tsc --noEmit
59
-
60
- - name: Ejecutar tests
61
- if: hashFiles('package.json') != ''
62
- run: npm test
63
-
64
- # ── Python ────────────────────────────────────────────────────────────
65
- # Descomentar si el proyecto tiene código Python.
66
- #
67
- # - name: Configurar Python
68
- # if: hashFiles('pyproject.toml', 'setup.py', 'requirements.txt') != ''
69
- # uses: actions/setup-python@v5
70
- # with:
71
- # python-version: "3.11"
72
- # cache: pip
73
- #
74
- # - name: Instalar dependencias Python
75
- # if: hashFiles('pyproject.toml') != ''
76
- # run: pip install -e ".[dev]"
77
- #
78
- # - name: Lint Python (ruff)
79
- # run: ruff check .
80
- #
81
- # - name: Tests Python
82
- # run: pytest --cov-fail-under=80
83
-
84
- # ── Rust ─────────────────────────────────────────────────────────────
85
- # Descomentar si el proyecto tiene código Rust.
86
- #
87
- # - name: Configurar Rust
88
- # if: hashFiles('Cargo.toml') != ''
89
- # uses: dtolnay/rust-toolchain@stable
90
- #
91
- # - name: Lint Rust (clippy)
92
- # run: cargo clippy -- -D warnings
93
- #
94
- # - name: Tests Rust
95
- # run: cargo test
96
-
97
- # ── Go ───────────────────────────────────────────────────────────────
98
- # Descomentar si el proyecto tiene código Go.
99
- #
100
- # - name: Configurar Go
101
- # if: hashFiles('go.mod') != ''
102
- # uses: actions/setup-go@v5
103
- # with:
104
- # go-version: stable
105
- #
106
- # - name: Tests Go
107
- # run: go test ./...
1
+ name: CI
2
+
3
+ # Plantilla distribuida por swl-ses.
4
+ # Copiar este archivo a .github/workflows/ de tu proyecto.
5
+ # Para setup automatizado: /swl:configurar-ci init
6
+ #
7
+ # Este workflow corre en push y PRs a main.
8
+ # Detecta automáticamente Node.js; los stacks adicionales están comentados.
9
+ # Activar las secciones que correspondan a tu proyecto.
10
+ #
11
+ # Para extender con Python, Rust o Go: descomentar las secciones al final
12
+ # y combinar con el job principal o crear jobs separados según convenga.
13
+
14
+ on:
15
+ push:
16
+ branches: [main]
17
+ pull_request:
18
+ branches: [main]
19
+
20
+ # Cancela runs anteriores del mismo PR para evitar deploys simultáneos.
21
+ concurrency:
22
+ group: ${{ github.workflow }}-${{ github.ref }}
23
+ cancel-in-progress: true
24
+
25
+ jobs:
26
+ test:
27
+ runs-on: ubuntu-latest
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ # Node 22 (LTS) + Node 24 (current). Ajustar si el proyecto requiere
32
+ # solo una versión.
33
+ node-version: [22, 24]
34
+
35
+ steps:
36
+ - uses: actions/checkout@v5
37
+
38
+ - name: Configurar Node.js ${{ matrix.node-version }}
39
+ uses: actions/setup-node@v5
40
+ with:
41
+ node-version: ${{ matrix.node-version }}
42
+ cache: npm
43
+
44
+ # ── Node.js / JavaScript / TypeScript ────────────────────────────────
45
+
46
+ - name: Instalar dependencias
47
+ if: hashFiles('package.json') != ''
48
+ run: npm ci
49
+
50
+ - name: Lint
51
+ if: hashFiles('package.json') != ''
52
+ # Ajustar el script según cómo esté configurado en package.json.
53
+ # Alternativas comunes: "lint", "lint:check", "eslint"
54
+ run: npm run lint --if-present
55
+
56
+ - name: Verificar tipos (TypeScript)
57
+ if: hashFiles('tsconfig.json') != ''
58
+ run: npx tsc --noEmit
59
+
60
+ - name: Ejecutar tests
61
+ if: hashFiles('package.json') != ''
62
+ run: npm test
63
+
64
+ # ── Python ────────────────────────────────────────────────────────────
65
+ # Descomentar si el proyecto tiene código Python.
66
+ #
67
+ # - name: Configurar Python
68
+ # if: hashFiles('pyproject.toml', 'setup.py', 'requirements.txt') != ''
69
+ # uses: actions/setup-python@v5
70
+ # with:
71
+ # python-version: "3.11"
72
+ # cache: pip
73
+ #
74
+ # - name: Instalar dependencias Python
75
+ # if: hashFiles('pyproject.toml') != ''
76
+ # run: pip install -e ".[dev]"
77
+ #
78
+ # - name: Lint Python (ruff)
79
+ # run: ruff check .
80
+ #
81
+ # - name: Tests Python
82
+ # run: pytest --cov-fail-under=80
83
+
84
+ # ── Rust ─────────────────────────────────────────────────────────────
85
+ # Descomentar si el proyecto tiene código Rust.
86
+ #
87
+ # - name: Configurar Rust
88
+ # if: hashFiles('Cargo.toml') != ''
89
+ # uses: dtolnay/rust-toolchain@stable
90
+ #
91
+ # - name: Lint Rust (clippy)
92
+ # run: cargo clippy -- -D warnings
93
+ #
94
+ # - name: Tests Rust
95
+ # run: cargo test
96
+
97
+ # ── Go ───────────────────────────────────────────────────────────────
98
+ # Descomentar si el proyecto tiene código Go.
99
+ #
100
+ # - name: Configurar Go
101
+ # if: hashFiles('go.mod') != ''
102
+ # uses: actions/setup-go@v5
103
+ # with:
104
+ # go-version: stable
105
+ #
106
+ # - name: Tests Go
107
+ # run: go test ./...