@saulwade/swl-ses 1.3.4 → 1.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +2 -2
- package/README.md +34 -34
- package/bin/swl-mcp-server.js +187 -187
- package/bin/swl-ses.js +4 -62
- package/comandos/swl/.evolved.json +22 -22
- package/comandos/swl/adoptar-proyecto.md +207 -207
- package/comandos/swl/contribuir.md +233 -233
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/benchmark-memoria/SKILL.md +186 -186
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/SKILL.md +171 -171
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/eval-framework/SKILL.md +212 -212
- package/habilidades/extractor-de-aprendizajes/SKILL.md +321 -321
- package/habilidades/harness-claude-code/SKILL.md +299 -299
- package/habilidades/infra-github-actions/SKILL.md +166 -166
- package/habilidades/legacy-code-rescue/SKILL.md +267 -267
- package/habilidades/manejo-errores/.evolved.json +8 -8
- package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
- package/habilidades/patrones-python/SKILL.md +229 -229
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
- package/habilidades/planear-fase/SKILL.md +319 -319
- package/habilidades/release-semver/.evolved.json +8 -8
- package/habilidades/swl-claudemd/SKILL.md +220 -220
- package/habilidades/testing-python/SKILL.md +340 -340
- package/hooks/claudemd-bloat-detector.js +161 -161
- package/hooks/extraccion-aprendizajes.js +19 -12
- package/hooks/lib/agent-routing.js +107 -107
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/error-classifier.js +308 -308
- package/hooks/lib/merkle-audit.js +96 -96
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/rate-limit-tracker.js +253 -253
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/skill-auditor.js +588 -588
- package/hooks/lib/sync-status.js +228 -228
- package/hooks/lib/taint-tracker.js +107 -107
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/registro-turnos.js +209 -209
- package/hooks/sugerir-regenerar-inventario.js +170 -170
- package/hooks/validar-formato-post-subagente.js +140 -140
- package/hooks/validar-memoria-hook.js +218 -218
- package/instintos/prompt-appendices.yaml +57 -57
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/skills-lock.json +1093 -1093
- package/package.json +1 -1
- package/plantillas/auditor-veto-template.md +105 -105
- package/plantillas/github-workflows/README.md +47 -47
- package/plantillas/github-workflows/release-please.yml +44 -44
- package/plantillas/github-workflows/swl-ci.yml +107 -107
- package/plantillas/github-workflows/swl-security.yml +51 -51
- package/plugin.json +1 -1
- package/reglas/analisis-previo-tareas-grandes.md +172 -172
- package/reglas/arreglar-al-detectar.md +147 -147
- package/reglas/fragmentos-compartidos.md +152 -152
- package/reglas/harness-claude-code.md +213 -213
- package/reglas/usar-context7.md +226 -226
- package/schemas/diary-entry.schema.json +80 -80
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/comandos/info.js +1 -1
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/doctor.js +77 -3
- package/scripts/field-report.js +199 -199
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-inventario.js +420 -420
- package/scripts/generar-matriz-lenguajes.js +271 -271
- package/scripts/inicializar.js +2 -2
- package/scripts/instalador.js +40 -3
- package/scripts/instalar-git-hook.js +2 -2
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/configurar-ci.js +380 -380
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-stack-detallado.js +307 -307
- package/scripts/lib/diary-entry.js +234 -234
- package/scripts/lib/eval-metrics-store.js +218 -218
- package/scripts/lib/eval-quality.js +171 -171
- package/scripts/lib/eval-schemas.js +144 -144
- package/scripts/lib/eval-self-correct.js +106 -106
- package/scripts/lib/eval-validator.js +185 -185
- package/scripts/lib/gitignore-manifest.js +1 -1
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/parsear-opciones.js +136 -0
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/scoring-instintos.js +277 -277
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/lib/transformadores/claude.js +200 -200
- package/scripts/lib/transformadores/codex.js +1 -1
- package/scripts/lib/transformadores/copilot.js +1 -1
- package/scripts/lib/transformadores/gemini.js +1 -1
- package/scripts/lib/transformadores/opencode.js +1 -1
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-server/README.md +128 -128
- package/scripts/mcp-server/handlers.js +206 -206
- package/scripts/migrar-csv-a-array.js +168 -168
- package/scripts/migrar-fase-dominio.js +201 -201
- package/scripts/publicar.js +511 -511
- package/scripts/run-eval.js +141 -141
- package/scripts/validar-manifest.js +195 -195
- package/scripts/validar-userland-vacio.js +110 -110
- package/scripts/verificar-release.js +5 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saulwade/swl-ses",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.7",
|
|
4
4
|
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 59 agentes, 155 habilidades, 43 comandos, 64 reglas y 41 hooks. Soporta 11 lenguajes y 5 runtimes: Claude Code, Copilot, OpenCode, Codex y Gemini CLI. 100% en espanol (Mexico). Incluye gateway bidireccional con relay Telegram a Claude Code.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"swl-ses": "bin/swl-ses.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 ./...
|