@saulwade/swl-ses 1.3.3 → 1.3.5

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 (102) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +1 -1
  3. package/bin/swl-mcp-server.js +187 -187
  4. package/bin/swl-ses.js +4 -62
  5. package/comandos/swl/.evolved.json +22 -22
  6. package/comandos/swl/adoptar-proyecto.md +207 -207
  7. package/comandos/swl/contribuir.md +233 -233
  8. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  9. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  10. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  11. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  12. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  13. package/habilidades/eval-framework/SKILL.md +212 -212
  14. package/habilidades/extractor-de-aprendizajes/SKILL.md +321 -321
  15. package/habilidades/harness-claude-code/SKILL.md +299 -299
  16. package/habilidades/infra-github-actions/SKILL.md +166 -166
  17. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  18. package/habilidades/manejo-errores/.evolved.json +8 -8
  19. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  20. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  21. package/habilidades/patrones-python/SKILL.md +229 -229
  22. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  23. package/habilidades/planear-fase/SKILL.md +319 -319
  24. package/habilidades/release-semver/.evolved.json +8 -8
  25. package/habilidades/swl-claudemd/SKILL.md +220 -220
  26. package/habilidades/testing-python/SKILL.md +340 -340
  27. package/hooks/claudemd-bloat-detector.js +161 -161
  28. package/hooks/extraccion-aprendizajes.js +43 -12
  29. package/hooks/lib/agent-routing.js +107 -107
  30. package/hooks/lib/auto-consolidator.js +335 -335
  31. package/hooks/lib/error-classifier.js +308 -308
  32. package/hooks/lib/merkle-audit.js +96 -96
  33. package/hooks/lib/provenance-tracker.js +191 -191
  34. package/hooks/lib/rate-limit-tracker.js +253 -253
  35. package/hooks/lib/resource-quota.js +122 -122
  36. package/hooks/lib/retry-jitter.js +165 -165
  37. package/hooks/lib/skill-auditor.js +588 -588
  38. package/hooks/lib/sync-status.js +228 -228
  39. package/hooks/lib/taint-tracker.js +107 -107
  40. package/hooks/lib/text-similarity.js +241 -241
  41. package/hooks/lib/toon-compressor.js +245 -245
  42. package/hooks/registro-turnos.js +209 -209
  43. package/hooks/sugerir-regenerar-inventario.js +170 -170
  44. package/hooks/validar-formato-post-subagente.js +140 -140
  45. package/hooks/validar-memoria-hook.js +218 -218
  46. package/instintos/prompt-appendices.yaml +57 -57
  47. package/manifiestos/agent-output-schemas.json +57 -57
  48. package/manifiestos/skills-lock.json +27 -27
  49. package/package.json +1 -1
  50. package/plantillas/auditor-veto-template.md +105 -105
  51. package/plantillas/github-workflows/README.md +47 -47
  52. package/plantillas/github-workflows/release-please.yml +44 -44
  53. package/plantillas/github-workflows/swl-ci.yml +107 -107
  54. package/plantillas/github-workflows/swl-security.yml +51 -51
  55. package/plugin.json +1 -1
  56. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  57. package/reglas/arreglar-al-detectar.md +147 -147
  58. package/reglas/fragmentos-compartidos.md +152 -152
  59. package/reglas/harness-claude-code.md +213 -213
  60. package/reglas/usar-context7.md +226 -226
  61. package/schemas/diary-entry.schema.json +80 -80
  62. package/scripts/benchmark-memoria.js +167 -167
  63. package/scripts/configurar-branch-protection.js +418 -418
  64. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  65. package/scripts/doctor.js +77 -3
  66. package/scripts/field-report.js +199 -199
  67. package/scripts/generar-checklists-consolidados.js +273 -273
  68. package/scripts/generar-inventario.js +420 -420
  69. package/scripts/generar-matriz-lenguajes.js +271 -271
  70. package/scripts/instalador.js +38 -1
  71. package/scripts/lib/artefactos-python.js +43 -43
  72. package/scripts/lib/benchmark-metrics.js +160 -160
  73. package/scripts/lib/budget-enforcer.js +252 -252
  74. package/scripts/lib/configurar-ci.js +380 -380
  75. package/scripts/lib/contadores-inventario.js +217 -217
  76. package/scripts/lib/detectar-stack-detallado.js +307 -307
  77. package/scripts/lib/diary-entry.js +234 -234
  78. package/scripts/lib/eval-metrics-store.js +218 -218
  79. package/scripts/lib/eval-quality.js +171 -171
  80. package/scripts/lib/eval-schemas.js +144 -144
  81. package/scripts/lib/eval-self-correct.js +106 -106
  82. package/scripts/lib/eval-validator.js +185 -185
  83. package/scripts/lib/jaccard-similarity.js +98 -98
  84. package/scripts/lib/longmemeval-runner.js +125 -125
  85. package/scripts/lib/npm-version.js +261 -261
  86. package/scripts/lib/paquetes-conocidos.js +50 -50
  87. package/scripts/lib/parsear-opciones.js +136 -0
  88. package/scripts/lib/prompt-builder.js +264 -264
  89. package/scripts/lib/rrf-fusion.js +175 -175
  90. package/scripts/lib/scoring-instintos.js +277 -277
  91. package/scripts/lib/semantic-search.js +252 -252
  92. package/scripts/lib/transformadores/claude.js +200 -200
  93. package/scripts/limpiar-artefactos-python.js +131 -131
  94. package/scripts/mcp-server/README.md +128 -128
  95. package/scripts/mcp-server/handlers.js +206 -206
  96. package/scripts/migrar-csv-a-array.js +168 -168
  97. package/scripts/migrar-fase-dominio.js +201 -201
  98. package/scripts/publicar.js +511 -511
  99. package/scripts/run-eval.js +141 -141
  100. package/scripts/validar-manifest.js +195 -195
  101. package/scripts/validar-userland-vacio.js +110 -110
  102. package/scripts/verificar-release.js +5 -1
@@ -1,57 +1,57 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "descripcion": "Schemas de output esperado por agente — formato compacto declarado en reglas/brevedad-output.md. El hook validar-formato-post-subagente.js usa estos patrones para detectar cuándo un agente devuelve output fuera de contrato.",
4
- "version": "1.0.0",
5
- "schemas": {
6
- "revisor-codigo-swl": {
7
- "descripcion": "Revisión de calidad — formato compacto",
8
- "patronesRequeridos": [
9
- "(?im)VEREDICTO\\s*:\\s*(APROBADO|APROBADO_CON_OBSERVACIONES|RECHAZADO|REQUIERE_CORRECCIONES|CUMPLE|PARCIAL|NO\\s+CUMPLE)",
10
- "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
11
- "(?im)MAYORES\\s*:\\s*\\d+",
12
- "(?im)MENORES\\s*:\\s*\\d+",
13
- "(?im)HALLAZGOS\\s*:"
14
- ]
15
- },
16
- "revisor-seguridad-swl": {
17
- "descripcion": "Revisión de seguridad OWASP — formato compacto",
18
- "patronesRequeridos": [
19
- "(?im)VEREDICTO\\s*:\\s*(APROBADO|APROBADO_CON_OBSERVACIONES|RECHAZADO|REQUIERE_CORRECCIONES)",
20
- "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
21
- "(?im)MAYORES\\s*:\\s*\\d+",
22
- "(?im)HALLAZGOS\\s*:"
23
- ]
24
- },
25
- "revisor-typescript-swl": {
26
- "descripcion": "Revisión TypeScript — formato compacto",
27
- "patronesRequeridos": [
28
- "(?im)VEREDICTO\\s*:\\s*\\w+",
29
- "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
30
- "(?im)HALLAZGOS\\s*:"
31
- ]
32
- },
33
- "revisor-react-swl": {
34
- "descripcion": "Revisión React — formato compacto",
35
- "patronesRequeridos": [
36
- "(?im)VEREDICTO\\s*:\\s*\\w+",
37
- "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
38
- "(?im)HALLAZGOS\\s*:"
39
- ]
40
- },
41
- "revisor-angular-swl": {
42
- "descripcion": "Revisión Angular — formato compacto",
43
- "patronesRequeridos": [
44
- "(?im)VEREDICTO\\s*:\\s*\\w+",
45
- "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
46
- "(?im)HALLAZGOS\\s*:"
47
- ]
48
- },
49
- "tdd-qa-swl": {
50
- "descripcion": "QA con TDD — reporte de implementación",
51
- "patronesRequeridos": [
52
- "(?im)ESTADO\\s*:\\s*(COMPLETADO|PARCIAL|BLOQUEADO)",
53
- "(?im)(SLICES|TESTS)\\s*:"
54
- ]
55
- }
56
- }
57
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "descripcion": "Schemas de output esperado por agente — formato compacto declarado en reglas/brevedad-output.md. El hook validar-formato-post-subagente.js usa estos patrones para detectar cuándo un agente devuelve output fuera de contrato.",
4
+ "version": "1.0.0",
5
+ "schemas": {
6
+ "revisor-codigo-swl": {
7
+ "descripcion": "Revisión de calidad — formato compacto",
8
+ "patronesRequeridos": [
9
+ "(?im)VEREDICTO\\s*:\\s*(APROBADO|APROBADO_CON_OBSERVACIONES|RECHAZADO|REQUIERE_CORRECCIONES|CUMPLE|PARCIAL|NO\\s+CUMPLE)",
10
+ "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
11
+ "(?im)MAYORES\\s*:\\s*\\d+",
12
+ "(?im)MENORES\\s*:\\s*\\d+",
13
+ "(?im)HALLAZGOS\\s*:"
14
+ ]
15
+ },
16
+ "revisor-seguridad-swl": {
17
+ "descripcion": "Revisión de seguridad OWASP — formato compacto",
18
+ "patronesRequeridos": [
19
+ "(?im)VEREDICTO\\s*:\\s*(APROBADO|APROBADO_CON_OBSERVACIONES|RECHAZADO|REQUIERE_CORRECCIONES)",
20
+ "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
21
+ "(?im)MAYORES\\s*:\\s*\\d+",
22
+ "(?im)HALLAZGOS\\s*:"
23
+ ]
24
+ },
25
+ "revisor-typescript-swl": {
26
+ "descripcion": "Revisión TypeScript — formato compacto",
27
+ "patronesRequeridos": [
28
+ "(?im)VEREDICTO\\s*:\\s*\\w+",
29
+ "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
30
+ "(?im)HALLAZGOS\\s*:"
31
+ ]
32
+ },
33
+ "revisor-react-swl": {
34
+ "descripcion": "Revisión React — formato compacto",
35
+ "patronesRequeridos": [
36
+ "(?im)VEREDICTO\\s*:\\s*\\w+",
37
+ "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
38
+ "(?im)HALLAZGOS\\s*:"
39
+ ]
40
+ },
41
+ "revisor-angular-swl": {
42
+ "descripcion": "Revisión Angular — formato compacto",
43
+ "patronesRequeridos": [
44
+ "(?im)VEREDICTO\\s*:\\s*\\w+",
45
+ "(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
46
+ "(?im)HALLAZGOS\\s*:"
47
+ ]
48
+ },
49
+ "tdd-qa-swl": {
50
+ "descripcion": "QA con TDD — reporte de implementación",
51
+ "patronesRequeridos": [
52
+ "(?im)ESTADO\\s*:\\s*(COMPLETADO|PARCIAL|BLOQUEADO)",
53
+ "(?im)(SLICES|TESTS)\\s*:"
54
+ ]
55
+ }
56
+ }
57
+ }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "lockfileVersion": 1,
3
- "generatedAt": "2026-05-11T18:32:19.402Z",
3
+ "generatedAt": "2026-05-11T20:58:20.028Z",
4
4
  "skillsCount": 155,
5
- "lockHash": "sha256:92e415132658a0de593795e73b5561d952194f39a138fdb429f16743bb5837ff",
5
+ "lockHash": "sha256:32199636eb3c585dd1090cb9f6081aaaaef886241b304c697b2eaf27fd0303ca",
6
6
  "skills": [
7
7
  {
8
8
  "nombre": "accesibilidad-a11y",
@@ -105,15 +105,15 @@
105
105
  {
106
106
  "nombre": "backend-production-resilience",
107
107
  "path": "habilidades/backend-production-resilience/SKILL.md",
108
- "hash": "sha256:82e47b4e1d4296fd10f0d0610963fdc9f2b7b931dfc0fc1d8af73730657b7fb2",
109
- "bytes": 13620,
108
+ "hash": "sha256:965f048f705172d01c38829662a74653f649f753e0315854c3f874fb2af54456",
109
+ "bytes": 13908,
110
110
  "version": "\"1.0.0\""
111
111
  },
112
112
  {
113
113
  "nombre": "benchmark-memoria",
114
114
  "path": "habilidades/benchmark-memoria/SKILL.md",
115
- "hash": "sha256:9f2c36b648fb667d6edce9135e04226d2f932f6b23eef6b27625ef72eee9c77e",
116
- "bytes": 7484,
115
+ "hash": "sha256:73f9701cc0df2caa0e24193173cac241cbafbd9a1ce8b097f2fb95a1df73a6aa",
116
+ "bytes": 7670,
117
117
  "version": "\"1.0.0\""
118
118
  },
119
119
  {
@@ -378,8 +378,8 @@
378
378
  {
379
379
  "nombre": "doubt-driven-review",
380
380
  "path": "habilidades/doubt-driven-review/SKILL.md",
381
- "hash": "sha256:5677f6c92a0fc183f9bbe06171cca14e3ad85695dba055acd1de56d81bff182b",
382
- "bytes": 7620,
381
+ "hash": "sha256:f47f47edc6030bdea685f3b9d8e12ec5911302b663956d9b98b537e1b78e0f27",
382
+ "bytes": 7791,
383
383
  "version": null
384
384
  },
385
385
  {
@@ -413,8 +413,8 @@
413
413
  {
414
414
  "nombre": "eval-framework",
415
415
  "path": "habilidades/eval-framework/SKILL.md",
416
- "hash": "sha256:0b00cfaa631e0bd6af0bf5d9a01aa54fcc7d0656b8c9760c97d56f8493fdfb5d",
417
- "bytes": 7778,
416
+ "hash": "sha256:812a1560e3209c4e2ab10b2385ac9513e63b22d1801bc4ada34bf63d4f937432",
417
+ "bytes": 7990,
418
418
  "version": "\"1.0.0\""
419
419
  },
420
420
  {
@@ -441,8 +441,8 @@
441
441
  {
442
442
  "nombre": "extractor-de-aprendizajes",
443
443
  "path": "habilidades/extractor-de-aprendizajes/SKILL.md",
444
- "hash": "sha256:9335433c8897ea0d6bc2bad2996eeff3b6c5e87f574268daa74100eadb696bee",
445
- "bytes": 17220,
444
+ "hash": "sha256:2e791dc7c05395272e7de47573daac087faa99142023a22c29e24b3f749b8cd3",
445
+ "bytes": 17541,
446
446
  "version": "\"1.0.3\""
447
447
  },
448
448
  {
@@ -525,8 +525,8 @@
525
525
  {
526
526
  "nombre": "harness-claude-code",
527
527
  "path": "habilidades/harness-claude-code/SKILL.md",
528
- "hash": "sha256:cc548661287c0b321994428e59ae685c9e0c53e197d1b4ffae7183f158878db3",
529
- "bytes": 12687,
528
+ "hash": "sha256:609a77cb5ae5c87d539cef20353a997dc8a0888490630aabaec337ab84d518a0",
529
+ "bytes": 12986,
530
530
  "version": "\"1.0.0\""
531
531
  },
532
532
  {
@@ -539,8 +539,8 @@
539
539
  {
540
540
  "nombre": "infra-github-actions",
541
541
  "path": "habilidades/infra-github-actions/SKILL.md",
542
- "hash": "sha256:50b85b21dd0e5f5fa8f211f6d0f31f4649bbe20c9480e0017184f1dd0b7fc8dc",
543
- "bytes": 7189,
542
+ "hash": "sha256:16dfeb02c736c03dfaff2350d105606974a3f4e60dfbc333a21fec8a72de391a",
543
+ "bytes": 7355,
544
544
  "version": null
545
545
  },
546
546
  {
@@ -609,8 +609,8 @@
609
609
  {
610
610
  "nombre": "legacy-code-rescue",
611
611
  "path": "habilidades/legacy-code-rescue/SKILL.md",
612
- "hash": "sha256:8c3834a022c7ef47f1da1aee5dabb935285c05f400196eaa375e6d824e222378",
613
- "bytes": 12918,
612
+ "hash": "sha256:8faac07a7308f86493a7fc14ecc35a40ac74b91527a55449ef05e1837c9102c5",
613
+ "bytes": 13185,
614
614
  "version": "\"1.0.0\""
615
615
  },
616
616
  {
@@ -749,8 +749,8 @@
749
749
  {
750
750
  "nombre": "patrones-python",
751
751
  "path": "habilidades/patrones-python/SKILL.md",
752
- "hash": "sha256:cd6dc3154b9392f1be705cfe93b9b66366484f36647770cd3dc09abbd7285fa2",
753
- "bytes": 10425,
752
+ "hash": "sha256:c762a681d0192f71a1e0c4c5d338aa31e468a7ddccb71a76e5bf813d815d72e5",
753
+ "bytes": 10654,
754
754
  "version": "\"1.3.1\""
755
755
  },
756
756
  {
@@ -791,8 +791,8 @@
791
791
  {
792
792
  "nombre": "planear-fase",
793
793
  "path": "habilidades/planear-fase/SKILL.md",
794
- "hash": "sha256:199b9abb865739d17b0654a3a67d116d95a2133140ffde92bda89d3ed9f41b98",
795
- "bytes": 14372,
794
+ "hash": "sha256:ab580a293a0c228c6a30cc18e60c6c905eda589853c72ef385cedff3330eb9a5",
795
+ "bytes": 14691,
796
796
  "version": "\"1.2.0\""
797
797
  },
798
798
  {
@@ -952,9 +952,9 @@
952
952
  {
953
953
  "nombre": "swl-claudemd",
954
954
  "path": "habilidades/swl-claudemd/SKILL.md",
955
- "hash": "sha256:8b8b0cd03c815e0cfadeffc81a49f0858105be9c564eb5f8e83dfd1cb78dd05e",
956
- "bytes": 10312,
957
- "version": "\"1.0.0\""
955
+ "hash": "sha256:18f56f2c9d19e0671a42b47186465b04246ac38c41ec058440c25d683a57b92b",
956
+ "bytes": 10578,
957
+ "version": "\"1.0.1\""
958
958
  },
959
959
  {
960
960
  "nombre": "swl-dashboard",
@@ -1001,8 +1001,8 @@
1001
1001
  {
1002
1002
  "nombre": "testing-python",
1003
1003
  "path": "habilidades/testing-python/SKILL.md",
1004
- "hash": "sha256:701ec10d954d9e2d08820aa46d8f72ff7eba5a0ff96695d10bdce5c7d15b233d",
1005
- "bytes": 16984,
1004
+ "hash": "sha256:edc86364dd5289da75b1a6276fa2e9743e85c734a67621443f67871ce43ee24b",
1005
+ "bytes": 17324,
1006
1006
  "version": "\"1.2.1\""
1007
1007
  },
1008
1008
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saulwade/swl-ses",
3
- "version": "1.3.3",
3
+ "version": "1.3.5",
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