@saulwade/swl-ses 2.5.1 → 2.5.3
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 +4 -2
- package/README.md +1 -1
- package/bin/swl-ses.js +1 -0
- package/habilidades/harness-claude-code/SKILL.md +4 -2
- package/habilidades/release-semver/SKILL.md +4 -2
- package/llms.txt +1 -1
- package/manifiestos/canonical-hashes.json +660 -0
- package/manifiestos/skills-lock.json +8 -8
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/scripts/evidencia-valor.js +14 -6
- package/scripts/field-report.js +17 -1
- package/scripts/instalador.js +21 -0
- package/scripts/instalar-git-hook.js +8 -1
- package/scripts/lib/activar-hooks-proyecto.js +104 -0
- package/scripts/lib/evidencia-valor.js +42 -3
- package/scripts/tui/index.js +10 -1
- package/scripts/tui/pantallas/inspect.js +1 -1
- package/scripts/tui/pantallas/install-wizard.js +21 -8
- package/scripts/tui/pantallas/uninstall-wizard.js +1 -1
- package/scripts/tui/pantallas/update-wizard.js +1 -1
- package/scripts/tui/pantallas/welcome.js +1 -2
package/CLAUDE.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# CLAUDE.md — @saulwade/swl-ses v2.5.
|
|
1
|
+
# CLAUDE.md — @saulwade/swl-ses v2.5.3
|
|
2
2
|
|
|
3
3
|
## Reglas de máxima prioridad (aplican SIEMPRE, sin excepción)
|
|
4
4
|
|
|
@@ -63,7 +63,9 @@ NUNCA asumir, sugerir como hecho consumado, ni escribir en ADRs/manifiestos/CHAN
|
|
|
63
63
|
- **JSONL para alta frecuencia**: usar `fs.appendFileSync(ruta, JSON.stringify(evento) + '\n')` en hooks de telemetría/auditoría — no `atomicWriteJSON` que reescribe todo
|
|
64
64
|
- **Fechas de artefactos generados SIEMPRE locales**: `toLocaleDateString('sv')`, NUNCA `toISOString().slice(0,10)` — desde México la tarde ya es "mañana" en UTC (x7 sitios corregidos 2026-07-08)
|
|
65
65
|
- **Reemplazos con backticks/regex vía `node -e` en bash mangean escapes en silencio** ("aplica" sin aplicar): usar heredoc `node <<'EOF'` + `String.raw` (x3 incidentes 2026-07-08)
|
|
66
|
-
- **`plugin.json#agents`/`#skills` son alfabéticos**: insertar en posición — ningún gate valida el orden
|
|
66
|
+
- **`plugin.json#agents`/`#skills` son alfabéticos**: insertar en posición — ningún gate valida el orden
|
|
67
|
+
- **Todo gate de escaneo nuevo lleva test anti-regresión viva** ("el repo real pasa con exit 0") en `npm test`: pre-commit el gate no se escanea a sí mismo (`git ls-files` ignora untracked) y su doc NO escribe el patrón prohibido literal (se auto-detectó y tumbó el publish v2.5.1)
|
|
68
|
+
- **Contrato del CLI (`bin/swl-ses.js`)**: todo subcomando exporta UNA función(opciones) sin efectos al require — test viviente `bin-contrato-comandos.test.js` (3 violaciones cazadas, una en campo)
|
|
67
69
|
- **YAML inline en frontmatter**: `tools: [Read, Write]`, `skillsInvocables: [skill-a]`. NUNCA CSV string ni mezcla con lista multilínea
|
|
68
70
|
- **Mensajes de commit**: imperativo en español, formato `<tipo>(<scope>): <descripción>`
|
|
69
71
|
- **Sin `console.log` en producción** — excepto en `scripts/`, `bin/`, `hooks/`, `gateway/` (CLIs y daemons)
|
package/README.md
CHANGED
package/bin/swl-ses.js
CHANGED
|
@@ -166,6 +166,7 @@ COMANDOS PRINCIPALES:
|
|
|
166
166
|
uninstall Desinstala componentes del runtime
|
|
167
167
|
prune Purga componentes retirados del paquete (dry-run; --confirmar ejecuta)
|
|
168
168
|
valor Panel de evidencia de valor del harness (intercepciones, defectos, DORA/CI, uso; --json, --dias N)
|
|
169
|
+
install --solo-hooks Activa hooks (telemetría) a nivel proyecto apuntando al scope global — sin duplicar componentes en la UI
|
|
169
170
|
field-report Reporte de agregados anónimos para compartir con el autor (opt-in, revisión manual)
|
|
170
171
|
check-update Fuerza consulta inmediata de nueva versión en npm (sin throttle)
|
|
171
172
|
install-git-hook [--force] Instala pre-commit hook que avisa de nuevas versiones.
|
|
@@ -10,7 +10,7 @@ description: >
|
|
|
10
10
|
Cargar cuando el usuario reporte "se acabó la cuota", se prepare una
|
|
11
11
|
sesión Opus larga (>2h), se planifique adopción de MCP servers, o se
|
|
12
12
|
detecte context-rot recurrente.
|
|
13
|
-
version: "1.0.
|
|
13
|
+
version: "1.0.5"
|
|
14
14
|
evolved: false
|
|
15
15
|
herramientasPermitidas: [Read]
|
|
16
16
|
exclusiones:
|
|
@@ -264,7 +264,9 @@ Sin observar la métrica, no puedes optimizarla.
|
|
|
264
264
|
|
|
265
265
|
---
|
|
266
266
|
|
|
267
|
-
## Gotchas / Errores comunes no obvios
|
|
267
|
+
## Gotchas / Errores comunes no obvios
|
|
268
|
+
|
|
269
|
+
- **El exit code de un pipeline es el del ÚLTIMO comando — verificar suites con `cmd | grep` enmascara fallos** [caso real 2026-07-09: `npm run test:all | grep ℹ | head` reportó "verde" durante horas sobre una suite que fallaba; el único runner sin máscara fue el `prepublishOnly` del usuario, que tumbó el publish]: en bash, `a | b` sale con el código de `b` (grep=0 si matcheó algo). Patrón correcto para verificar comandos largos: `cmd > /tmp/x.log 2>&1; echo "exit=$?"` y decidir por el exit explícito; el grep va DESPUÉS, sobre el log. Alternativa: `set -o pipefail` al inicio del script. Aplica a todo: suites, builds, linters, gates.
|
|
268
270
|
|
|
269
271
|
- **Matriz de canales de hooks — stderr con exit 0 es un canal INVISIBLE** [origen: check-update 2026-07-08, el aviso de nuevas versiones se emitió al vacío desde su creación]: en Claude Code, el canal correcto depende del exit code. **exit 0 (éxito)**: solo el stdout llega — como contexto del turno en UserPromptSubmit/SessionStart (o `hookSpecificOutput.additionalContext`); el stderr no lo lee nadie. **exit 2 (bloqueo)**: solo el stderr llega al modelo con la razón del bloqueo; stdout con exit 2 = bloqueo ciego (regla ya conocida, L1 #4 de APRENDIZAJES). Anti-patrón resultante: "hook que funciona perfecto y nadie ve" — todo aviso al usuario desde un hook exitoso DEBE ir a stdout, idealmente con instrucción explícita ("INFORMA AL USUARIO...") para que el modelo lo retransmita. Verificación: correr el hook a mano con un flag de forzado y confirmar en qué canal aparece el mensaje.
|
|
270
272
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: release-semver
|
|
3
3
|
description: Versionado semántico (SemVer). Cuándo bumpar major/minor/patch, changelogs convencionales, estrategia de tags y proceso de release completo.
|
|
4
|
-
version: "1.0.
|
|
4
|
+
version: "1.0.4"
|
|
5
5
|
herramientasPermitidas: [Read, Bash]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar para versionar el sistema SWL — el bump de versión de swl-ses sigue el checklist de 15 ubicaciones documentado en `/swl:release`; este skill cubre SemVer general para proyectos de usuario, no el proceso interno de release del sistema."
|
|
@@ -318,7 +318,9 @@ de token inválido.
|
|
|
318
318
|
- `semantic-release` ya está configurado en CI — si el release está automatizado, el número de versión se calcula desde los commits sin intervención manual; cargar este skill duplicaría el trabajo.
|
|
319
319
|
- El proyecto es una herramienta interna sin consumidores que dependan de compatibilidad de versión — SemVer completo compensa cuando hay consumidores que confían en los números de versión para evaluar breaking changes.
|
|
320
320
|
|
|
321
|
-
## Gotchas / Errores comunes no obvios
|
|
321
|
+
## Gotchas / Errores comunes no obvios
|
|
322
|
+
|
|
323
|
+
- **El registry espejo NUNCA publica cuando el canónico falló sus gates** [caso real: v2.5.0 y v2.5.1 quedaron huérfanas en GitHub Packages, 2026-07-08/09]: un publisher dual que publica el mirror desde un directorio temporal preparado (donde `prepublishOnly`/gates NO corren) debe condicionar el paso 2 al éxito del paso 1 — si el canónico falló, el mirror se OMITE con aviso visible. Publicar tras el fallo sube un tarball sin validar y desalinea los registries: la misma versión no puede re-subirse, forzando un "republish de coordinación" (bump PATCH) que es puro costo. Verificar además que el flujo del mirror realmente corre gates en alguna parte — "los pre-publish ya pasaron en el intento 1" es una suposición, no una garantía.
|
|
322
324
|
|
|
323
325
|
- **Tag ligero creado en lugar de anotado para el release**: `git tag v2.1.0` sin la flag `-a` crea un tag ligero que no incluye metadata de autor, fecha ni mensaje. Causa: olvidar la flag `-a` o la costumbre de usar tags ligeros para marcado temporal. Solución: siempre `git tag -a v2.1.0 -m "Release v2.1.0"` para releases — los tags anotados son los que `git describe` y las herramientas de changelog usan correctamente.
|
|
324
326
|
- **MAJOR evitado por considerar el breaking change "pequeño"**: el equipo sube de `1.4.2` a `1.5.0` un endpoint que cambió su contrato de respuesta. Causa: subestimar el impacto del breaking change para evitar el salto de versión mayor. Solución: si un consumidor tiene que actualizar su código para seguir funcionando, es MAJOR sin importar el tamaño del cambio — el anti-patrón "Nunca saltarse MAJOR por miedo" es explícito en el skill.
|
package/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# swl-ses (@saulwade/swl-ses)
|
|
2
2
|
|
|
3
|
-
> Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo), distribuido como paquete npm y plugin de Claude Code. 61 agentes, 181 habilidades, 47 comandos, 37 reglas base y 49 hooks. Soporta 11 lenguajes y 7 runtimes (Claude Code, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot). Versión 2.5.
|
|
3
|
+
> Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo), distribuido como paquete npm y plugin de Claude Code. 61 agentes, 181 habilidades, 47 comandos, 37 reglas base y 49 hooks. Soporta 11 lenguajes y 7 runtimes (Claude Code, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot). Versión 2.5.3.
|
|
4
4
|
|
|
5
5
|
Archivo generado por `node scripts/generar-inventario.js` — no editar a mano. Las cifras se sincronizan con INVENTARIO.md en cada regeneración.
|
|
6
6
|
|