@saulwade/swl-ses 1.6.1 → 1.6.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 (85) hide show
  1. package/CLAUDE.md +3 -3
  2. package/README.md +4 -4
  3. package/agentes/_intent-spec.md +73 -0
  4. package/agentes/auto-evolucion-swl.md +24 -0
  5. package/agentes/cloud-infra-swl.md +25 -0
  6. package/agentes/datos-swl.md +23 -0
  7. package/agentes/devops-ci-swl.md +24 -0
  8. package/agentes/gh-fix-ci-swl.md +275 -0
  9. package/agentes/migrador-swl.md +22 -0
  10. package/agentes/nemesis-auditor-swl.md +90 -1
  11. package/agentes/pagos-swl.md +25 -0
  12. package/agentes/release-manager-swl.md +24 -0
  13. package/agentes/sre-swl.md +24 -0
  14. package/comandos/swl/exportar-vault.md +106 -14
  15. package/comandos/swl/nemesis.md +70 -3
  16. package/comandos/swl/planear-fase.md +16 -0
  17. package/comandos/swl/release.md +62 -2
  18. package/comandos/swl/salud.md +32 -0
  19. package/comandos/swl/verificar.md +116 -2
  20. package/habilidades/agent-browser/SKILL.md +111 -4
  21. package/habilidades/agent-deep-links/SKILL.md +148 -0
  22. package/habilidades/aprender-de-git-diff/SKILL.md +288 -0
  23. package/habilidades/backend-async-postgres-testing/SKILL.md +215 -0
  24. package/habilidades/backend-error-design/SKILL.md +221 -0
  25. package/habilidades/browser-interaction-patterns/SKILL.md +514 -0
  26. package/habilidades/browser-research-domains/SKILL.md +635 -0
  27. package/habilidades/changelog-generator/SKILL.md +172 -0
  28. package/habilidades/changelog-generator/scripts/parse-commits.js +354 -0
  29. package/habilidades/devsecops-pipeline-security/SKILL.md +3 -0
  30. package/habilidades/diseno-herramientas-agente/SKILL.md +17 -1
  31. package/habilidades/fastapi-experto/SKILL.md +49 -4
  32. package/habilidades/harness-claude-code/SKILL.md +4 -1
  33. package/habilidades/meta-skills-estandar/SKILL.md +6 -0
  34. package/habilidades/meta-skills-estandar/recursos/skill-judge-rubrica.md +281 -0
  35. package/habilidades/postgresql-experto/SKILL.md +80 -4
  36. package/habilidades/proceso-autoverificacion-evidencias/SKILL.md +258 -0
  37. package/habilidades/proceso-confianza-pre-implementacion/SKILL.md +246 -0
  38. package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -0
  39. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -0
  40. package/habilidades/proceso-discovery-machote/SKILL.md +157 -0
  41. package/habilidades/proceso-intent-engineering/SKILL.md +269 -0
  42. package/habilidades/proceso-modular-split/SKILL.md +256 -0
  43. package/habilidades/reducir-entropia/SKILL.md +219 -0
  44. package/habilidades/tdd-workflow/SKILL.md +12 -5
  45. package/hooks/extraccion-aprendizajes.js +8 -0
  46. package/hooks/lib/deep-links.js +185 -0
  47. package/hooks/lib/evolution-tracker.js +115 -18
  48. package/hooks/lib/gateway-notify.js +70 -7
  49. package/hooks/lib/task-budget.js +218 -0
  50. package/hooks/validar-intent-spec.js +222 -0
  51. package/manifiestos/hooks-config.json +9 -0
  52. package/manifiestos/modulos.json +22 -3
  53. package/manifiestos/skills-lock.json +1247 -1142
  54. package/package.json +3 -3
  55. package/plugin.json +18 -2
  56. package/reglas/arquitectura.md +38 -0
  57. package/reglas/arreglar-al-detectar.md +93 -0
  58. package/reglas/auditorias-documentales-estructurales.md +38 -0
  59. package/reglas/fragmentos-compartidos.md +26 -0
  60. package/reglas/intent-engineering.md +214 -0
  61. package/reglas/registro-componentes-nuevos.md +52 -0
  62. package/reglas/tests-cleanup.md +220 -0
  63. package/schemas/agent-frontmatter.schema.json +294 -167
  64. package/schemas/agent-message.schema.json +73 -53
  65. package/schemas/agent-output-implementacion.schema.json +114 -85
  66. package/schemas/agent-output-planificacion.schema.json +150 -113
  67. package/schemas/agent-output-review.schema.json +98 -78
  68. package/schemas/diary-entry.schema.json +42 -10
  69. package/schemas/hook-profiles.schema.json +54 -39
  70. package/schemas/hooks-config.schema.json +89 -74
  71. package/schemas/instinct.schema.json +152 -115
  72. package/schemas/modulos.schema.json +38 -29
  73. package/schemas/perfiles.schema.json +36 -28
  74. package/schemas/plugin.schema.json +77 -64
  75. package/schemas/skill-evals.schema.json +119 -95
  76. package/schemas/skill-frontmatter.schema.json +245 -170
  77. package/scripts/generar-inventario.js +3 -1
  78. package/scripts/lib/mcp_config.py +29 -14
  79. package/scripts/lib/schema-version.js +164 -0
  80. package/scripts/mcp-orchestrator.py +153 -131
  81. package/scripts/mcp-pool-manager.py +132 -107
  82. package/scripts/mcp-telemetry.py +139 -120
  83. package/scripts/validar-manifest.js +1 -1
  84. package/scripts/validar.js +3 -2
  85. package/scripts/verificar-release.js +199 -1
@@ -0,0 +1,220 @@
1
+ # Regla: Cleanup obligatorio de directorios temporales en tests
2
+
3
+ Esta regla es **OBLIGATORIA** y aplica a todo test Node.js del sistema SWL
4
+ que cree directorios temporales bajo `os.tmpdir()` (típicamente
5
+ `C:\Users\<usuario>\AppData\Local\Temp` en Windows, `/tmp` en POSIX).
6
+
7
+ Promueve a regla obligatoria el aprendizaje L1 #19 + entrada extensa de
8
+ APRENDIZAJES.md (2026-05-17 "Tests sin cleanup acumularon 5,800+ carpetas
9
+ en %TEMP%") tras reincidencia documentada el 2026-05-18 en
10
+ `tests/hooks/validar-intent-spec.test.js` (192 residuos acumulados).
11
+
12
+ ---
13
+
14
+ ## Principio
15
+
16
+ > Todo test que necesite un directorio temporal DEBE usar
17
+ > `setupSandboxes(prefix)` de `tests/_helpers/sandbox.js`. NUNCA
18
+ > `fs.mkdtempSync(path.join(os.tmpdir(), ...))` directo.
19
+
20
+ El helper registra automáticamente `after()` del módulo `node:test` para
21
+ limpiar al final del archivo. Sin él, cada corrida de `npm test:all` deja
22
+ N carpetas residuales (N = número de tests × archivos sin cleanup).
23
+
24
+ ---
25
+
26
+ ## Patrón obligatorio
27
+
28
+ ### MAL — `mkdtempSync` directo sin cleanup
29
+
30
+ ```javascript
31
+ const fs = require('node:fs');
32
+ const os = require('node:os');
33
+ const path = require('node:path');
34
+ const { test } = require('node:test');
35
+
36
+ function crearSandbox() {
37
+ return fs.mkdtempSync(path.join(os.tmpdir(), 'mi-test-'));
38
+ // ✗ Nunca se limpia. Acumula residuos en %TEMP%.
39
+ }
40
+
41
+ test('hace algo', () => {
42
+ const dir = crearSandbox();
43
+ // ... usar dir ...
44
+ // ✗ Sin try/finally con rmSync.
45
+ });
46
+ ```
47
+
48
+ ### BIEN — `setupSandboxes` con cleanup automático
49
+
50
+ ```javascript
51
+ const { test } = require('node:test');
52
+ const { setupSandboxes } = require('../_helpers/sandbox');
53
+
54
+ const sandboxes = setupSandboxes('mi-test-');
55
+ // ✓ setupSandboxes registra after() global del archivo.
56
+
57
+ test('hace algo', () => {
58
+ const dir = sandboxes.create();
59
+ // ... usar dir ...
60
+ // ✓ Cleanup automático al terminar el archivo de tests.
61
+ });
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Cuándo aplicar
67
+
68
+ OBLIGATORIO en:
69
+
70
+ - Cualquier archivo `tests/**/*.test.js` que cree dirs temporales para
71
+ aislar el test del CWD del proyecto.
72
+ - Tests de hooks que necesitan sandbox con `.planning/`, `agentes/`, etc.
73
+ - Tests de scripts que escriben archivos generados (`generar-*`,
74
+ `auditar-*`).
75
+ - Cualquier helper de fixtures que cree filesystem temporal.
76
+
77
+ NO aplicar (excepciones legítimas):
78
+
79
+ - Tests que NO crean dirs temporales (unit tests puros con stubs/mocks).
80
+ - Tests que usan `process.chdir` sin crear directorio nuevo (raros).
81
+
82
+ ---
83
+
84
+ ## Convención del prefijo
85
+
86
+ El prefijo pasado a `setupSandboxes(prefix)` DEBE:
87
+
88
+ 1. Empezar con `swl-` para identificar el origen del proyecto.
89
+ 2. Incluir el nombre del componente bajo test (corto).
90
+ 3. Terminar con guión final (el helper NO lo añade automáticamente).
91
+
92
+ Ejemplos válidos:
93
+
94
+ - `setupSandboxes('swl-mi-hook-')`
95
+ - `setupSandboxes('swl-claudemd-')`
96
+ - `setupSandboxes('swl-evolucion-')`
97
+
98
+ Ejemplos inválidos:
99
+
100
+ - `setupSandboxes('test')` — sin prefijo `swl-`, indistinguible de otros proyectos.
101
+ - `setupSandboxes('swl-hook')` — falta guión final, `mkdtemp` añade chars random pegados al nombre.
102
+
103
+ ---
104
+
105
+ ## Casos especiales: `process.chdir` en tests
106
+
107
+ Si el test hace `process.chdir(sandbox)` en top-level, registrar
108
+ **ANTES** de `setupSandboxes()` un `after()` que restaure el CWD:
109
+
110
+ ```javascript
111
+ const originalCwd = process.cwd();
112
+ const { after } = require('node:test');
113
+ after(() => process.chdir(originalCwd));
114
+ // ↑ chdir-restore registrado primero
115
+ const sandboxes = setupSandboxes('swl-mi-test-');
116
+ // ↑ cleanup de sandboxes registrado segundo
117
+ // FIFO en node:test: restaurar CWD primero, luego limpiar dirs.
118
+ ```
119
+
120
+ Sin esto, Windows EBUSY al intentar `rmSync` un directorio que es el CWD activo.
121
+
122
+ ---
123
+
124
+ ## Verificación
125
+
126
+ ### Test de regresión post-suite
127
+
128
+ Tras ejecutar `npm test:all`, verificar 0 residuos:
129
+
130
+ ```bash
131
+ # Bash
132
+ ls "$LOCALAPPDATA/Temp" 2>/dev/null | grep -c "^swl-" || echo "0"
133
+
134
+ # PowerShell
135
+ (Get-ChildItem $env:TEMP -Directory -Filter "swl-*").Count
136
+ ```
137
+
138
+ Resultado esperado: `0`.
139
+
140
+ ### Auditoría continua del repo
141
+
142
+ Para detectar archivos de test que ignoran la regla:
143
+
144
+ ```bash
145
+ # Archivos con mkdtempSync directo SIN usar el helper
146
+ grep -rlE "mkdtempSync\(.*os\.tmpdir|fs\.mkdtempSync" tests/ \
147
+ | grep -v "_helpers" \
148
+ | xargs -I {} grep -L "setupSandboxes" {}
149
+ ```
150
+
151
+ Resultado esperado tras migración completa: `0` archivos.
152
+
153
+ ---
154
+
155
+ ## Anti-patrones explícitos
156
+
157
+ - **Copiar de un test "legacy" como referencia**: si el patrón a copiar
158
+ usa `mkdtempSync` directo, el nuevo test heredará el bug. Verificar
159
+ que el test fuente use `setupSandboxes` antes de copiar como
160
+ plantilla.
161
+ - **`afterEach` con `rmSync` manual cuando ya existe `setupSandboxes`**:
162
+ duplica responsabilidad. Si necesitas cleanup por test (no por
163
+ archivo), el helper expone `sandboxes.cleanup()` invocable.
164
+ - **Path construido manualmente** con `path.join(os.tmpdir(),
165
+ \`prefix-${Date.now()}\`)` + `mkdirSync`: escapa al regex de
166
+ auditoría que busca `mkdtempSync`. Si el patrón aparece, refactorizar
167
+ a `setupSandboxes` igual.
168
+ - **Ignorar Windows EBUSY**: si en CI Linux pasa pero localmente
169
+ Windows falla con `EBUSY: resource busy or locked`, casi siempre es
170
+ cleanup intentando borrar el CWD. Aplicar el patrón `chdir-restore
171
+ ANTES de setupSandboxes`.
172
+
173
+ ---
174
+
175
+ ## Excepciones documentadas
176
+
177
+ Si un test legítimamente NO puede usar `setupSandboxes` (caso raro), DEBE:
178
+
179
+ 1. Documentar en comentario al inicio del archivo por qué no aplica.
180
+ 2. Implementar cleanup manual con `after()` + `try/finally`.
181
+ 3. Incluir test de regresión: tras el test, `Get-ChildItem $env:TEMP` no debe mostrar el dir.
182
+
183
+ Sin esos 3 elementos, el test será marcado como violación de la regla
184
+ en `/swl:revisar`.
185
+
186
+ ---
187
+
188
+ ## Origen
189
+
190
+ - **Aprendizaje L1 #19** (2026-05-17): "Test nuevo que necesita
191
+ directorio temporal | Usar `setupSandboxes('prefix-')` de
192
+ `tests/_helpers/sandbox.js`; nunca `fs.mkdtempSync` directo sin
193
+ cleanup".
194
+ - **Entrada extensa APRENDIZAJES.md líneas 6793-6852**: el usuario
195
+ descubrió manualmente más de 5,800 carpetas con prefijo `swl-*` en
196
+ `C:\Users\Saul\AppData\Local\Temp` y las limpió con CCleaner.
197
+ Investigación reveló 14 archivos de test sin cleanup en refactor PR #35.
198
+ - **Reincidencia 2026-05-18**: tras refactor de 14 archivos quedaron
199
+ 32 sin migrar. Yo creé `tests/hooks/validar-intent-spec.test.js`
200
+ copiando patrón de `claudemd-bloat-detector.test.js` (no migrado) →
201
+ 192 residuos en 1 sesión. La regla estaba en APRENDIZAJES.md pero NO
202
+ era obligatoria en `reglas/` ni `~/.claude/rules/pruebas.md`.
203
+
204
+ Esta regla cierra ese gap promoviendo el aprendizaje a regla obligatoria
205
+ del proyecto + actualización del skill `tdd-workflow` para enseñar el
206
+ patrón correcto.
207
+
208
+ ---
209
+
210
+ ## Relación con otras reglas
211
+
212
+ - `~/.claude/rules/pruebas.md § Tests deterministas — sin sleep ni delays`
213
+ — esta regla extiende el principio "Limpiar estado en teardown" al
214
+ caso específico de directorios temporales.
215
+ - `~/.claude/rules/arreglar-al-detectar.md` — la deuda silenciosa que
216
+ esta regla cierra es exactamente el tipo de deuda que esa regla
217
+ prohíbe acumular.
218
+ - `reglas/registro-componentes-nuevos.md` — al crear un test nuevo se
219
+ considera componente nuevo del sistema; la regla aplica como parte
220
+ del registro.