@saulwade/swl-ses 2.3.1 → 2.4.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.
- package/CLAUDE.md +242 -240
- package/README.md +597 -597
- package/agentes/_intent-spec.md +73 -73
- package/agentes/_propose-step.md +90 -90
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +908 -908
- package/agentes/backend-api-swl.md +472 -472
- package/agentes/backend-csharp-swl.md +420 -420
- package/agentes/backend-go-swl.md +390 -390
- package/agentes/backend-java-swl.md +281 -281
- package/agentes/backend-node-swl.md +479 -479
- package/agentes/backend-python-swl.md +605 -605
- package/agentes/backend-rust-swl.md +364 -364
- package/agentes/backend-workers-swl.md +482 -482
- package/agentes/cloud-infra-swl.md +509 -509
- package/agentes/consolidador-swl.md +541 -541
- package/agentes/datos-swl.md +605 -605
- package/agentes/depurador-swl.md +352 -352
- package/agentes/devops-ci-swl.md +400 -400
- package/agentes/disenador-ui-swl.md +569 -569
- package/agentes/documentador-swl.md +345 -345
- package/agentes/frontend-angular-swl.md +621 -621
- package/agentes/frontend-css-swl.md +716 -716
- package/agentes/frontend-react-swl.md +692 -692
- package/agentes/frontend-swl.md +496 -496
- package/agentes/frontend-tailwind-swl.md +826 -826
- package/agentes/gh-fix-ci-swl.md +275 -275
- package/agentes/implementador-swl.md +328 -328
- package/agentes/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- package/agentes/llm-apps-swl.md +278 -278
- package/agentes/migrador-swl.md +442 -442
- package/agentes/mobile-android-swl.md +511 -511
- package/agentes/mobile-cross-swl.md +541 -541
- package/agentes/mobile-ios-swl.md +502 -502
- package/agentes/mobile-testing-swl.md +302 -302
- package/agentes/nemesis-auditor-swl.md +285 -285
- package/agentes/notificador-swl.md +918 -918
- package/agentes/observabilidad-swl.md +438 -438
- package/agentes/orquestador-swl.md +1053 -1026
- package/agentes/pagos-swl.md +310 -310
- package/agentes/perfilador-usuario-swl.md +321 -321
- package/agentes/planificador-swl.md +399 -399
- package/agentes/producto-prd-swl.md +589 -589
- package/agentes/red-team-swl.md +218 -218
- package/agentes/release-manager-swl.md +590 -590
- package/agentes/rendimiento-swl.md +713 -713
- package/agentes/resolutor-build-swl.md +245 -245
- package/agentes/revisor-angular-swl.md +278 -278
- package/agentes/revisor-codigo-swl.md +538 -505
- package/agentes/revisor-csharp-swl.md +264 -264
- package/agentes/revisor-go-swl.md +259 -259
- package/agentes/revisor-java-swl.md +257 -257
- package/agentes/revisor-kotlin-swl.md +273 -273
- package/agentes/revisor-nextjs-swl.md +281 -281
- package/agentes/revisor-php-swl.md +271 -271
- package/agentes/revisor-react-swl.md +278 -278
- package/agentes/revisor-rust-swl.md +346 -346
- package/agentes/revisor-seguridad-swl.md +399 -399
- package/agentes/revisor-swift-swl.md +268 -268
- package/agentes/revisor-typescript-swl.md +346 -346
- package/agentes/sre-swl.md +291 -291
- package/agentes/tdd-qa-swl.md +393 -393
- package/comandos/swl/contexto.md +0 -2
- package/comandos/swl/deuda-codigo.md +97 -0
- package/habilidades/angular-moderno/SKILL.md +5 -1
- package/habilidades/contenedores-docker/SKILL.md +3 -1
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/harness-claude-code/SKILL.md +5 -4
- package/habilidades/harness-claude-code/recursos/disciplina-harness-regla.md +6 -5
- package/habilidades/legacy-code-rescue/SKILL.md +2 -1
- package/habilidades/meta-skills-estandar/SKILL.md +1 -1
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +2 -2
- package/habilidades/postgresql-experto/SKILL.md +3 -1
- package/habilidades/prevencion-sobreingenieria/SKILL.md +70 -92
- package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -0
- package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -0
- package/habilidades/tdd-workflow/SKILL.md +3 -1
- package/hooks/audit-trail.js +4 -4
- package/hooks/calidad-pre-commit.js +15 -11
- package/hooks/captura-acciones-post.js +3 -2
- package/hooks/captura-acciones-session.js +3 -2
- package/hooks/contexto-iteracion.js +2 -1
- package/hooks/contexto-subagente.js +68 -0
- package/hooks/guardrail-modelo.js +13 -3
- package/hooks/inyeccion-contexto.js +12 -12
- package/hooks/registro-turnos.js +5 -4
- package/hooks/spec-gate.js +2 -1
- package/hooks/sugerir-contribuir.js +2 -1
- package/hooks/sugerir-regenerar-inventario.js +3 -2
- package/hooks/tdd-gate.js +2 -1
- package/llms.txt +3 -3
- package/manifiestos/canonical-hashes.json +995 -10
- package/manifiestos/hook-profiles.json +0 -2
- package/manifiestos/hooks-config.json +469 -477
- package/manifiestos/invariantes-criticos.json +30 -0
- package/manifiestos/modulos.json +1390 -1390
- package/manifiestos/skills-lock.json +24 -24
- package/package.json +93 -93
- package/plugin.json +369 -371
- package/reglas/arreglar-al-detectar.md +16 -0
- package/reglas/pruebas.md +7 -3
- package/schemas/agent-frontmatter.schema.json +3 -1
- package/scripts/actualizar.js +253 -254
- package/scripts/doctor.js +25 -17
- package/scripts/instalador.js +4 -1
- package/scripts/lib/detectar-runtime.js +58 -0
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/hooks-settings.js +40 -3
- package/scripts/lib/preservar-usuario.js +39 -5
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/tui/pantallas/inspect.js +175 -173
- package/scripts/tui/pantallas/uninstall-wizard.js +210 -208
- package/scripts/tui/pantallas/update-wizard.js +234 -232
- package/scripts/tui/pantallas/welcome.js +189 -187
- package/scripts/validar.js +1 -1
- package/scripts/verificar-release.js +51 -0
- package/hooks/lib/context-compressor.js +0 -657
- package/hooks/linea-estado.js +0 -328
- package/hooks/monitor-contexto.js +0 -373
package/comandos/swl/contexto.md
CHANGED
|
@@ -100,8 +100,6 @@ Agentes desactivados: {lista resumida}
|
|
|
100
100
|
|
|
101
101
|
- El **orquestador-swl** lee `.planning/CONTEXTO.md` al inicio de cada delegación
|
|
102
102
|
para decidir qué agentes invocar.
|
|
103
|
-
- El hook **`linea-estado.js`** lee el modo activo para mostrar `[DEV]`, `[REVIEW]`
|
|
104
|
-
o `[RESEARCH]` en la barra de estado del terminal.
|
|
105
103
|
- Los agentes marcados como desactivados en el contexto **no se invocan** aunque
|
|
106
104
|
la tarea lo justifique — se registra en ESTADO.md que están inhibidos por el contexto.
|
|
107
105
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swl:deuda-codigo
|
|
3
|
+
description: Cosecha los marcadores `simplificado:` del código (simplificaciones deliberadas con techo y trigger de upgrade) hacia un ledger visible, detecta marcadores sin trigger (riesgo de rot) y sincroniza opcionalmente con .planning/DEUDA-TECNICA.md. Cargar cuando el usuario pida "qué simplificamos", "deuda de código", "cosecha los marcadores", o tras una fase que dejó marcadores simplificado:.
|
|
4
|
+
allowed_tools: ["Grep", "Read", "Edit", "Bash"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:deuda-codigo — Cosecha de simplificaciones deliberadas
|
|
8
|
+
|
|
9
|
+
Todo atajo intencional marcado con `simplificado: <techo>, <trigger>` (convención
|
|
10
|
+
de `Skill("prevencion-sobreingenieria")`, adaptada del patrón `ponytail:` de
|
|
11
|
+
ponytail, MIT) se cosecha aquí en un ledger — para que un "después" no se
|
|
12
|
+
convierta en "nunca" (regla `arreglar-al-detectar.md`).
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/swl:deuda-codigo — Reporte en pantalla (no escribe nada)
|
|
18
|
+
/swl:deuda-codigo --sync — Además sincroniza a .planning/DEUDA-TECNICA.md
|
|
19
|
+
/swl:deuda-codigo --owners — Agrega autor por marcador (git blame)
|
|
20
|
+
/swl:deuda-codigo <directorio> — Limita la cosecha a un subárbol
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Paso 1 — Cosechar los marcadores
|
|
24
|
+
|
|
25
|
+
Buscar con Grep (herramienta, no shell) el patrón sobre el árbol del proyecto,
|
|
26
|
+
excluyendo `node_modules`, `.git`, `dist`, `build`, `temp`, `respositorios-git`:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Grep(pattern: "(#|//|--|<!--|/\\*)\\s?simplificado:", output_mode: "content", -n: true)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Cada hit es una fila del ledger. El prefijo de comentario evita capturar prosa
|
|
33
|
+
que solo menciona la convención (como este archivo o el SKILL.md).
|
|
34
|
+
|
|
35
|
+
## Paso 2 — Parsear techo y trigger
|
|
36
|
+
|
|
37
|
+
La convención es `simplificado: <techo>, <trigger de upgrade>`:
|
|
38
|
+
|
|
39
|
+
- **techo**: el límite conocido del atajo (lock global, O(n²), heurística naive).
|
|
40
|
+
- **trigger**: la condición observable que obliga el upgrade ("si throughput > X",
|
|
41
|
+
"cuando haya un segundo consumidor", "antes del primer deploy productivo").
|
|
42
|
+
|
|
43
|
+
Si el texto tras `simplificado:` no contiene una condición observable,
|
|
44
|
+
etiquetar la fila `sin-trigger` — esos son los que rotan en silencio.
|
|
45
|
+
|
|
46
|
+
## Paso 3 — Reporte
|
|
47
|
+
|
|
48
|
+
Una fila por marcador, agrupado por archivo:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
## Ledger de simplificaciones — [fecha]
|
|
52
|
+
|
|
53
|
+
| Ubicación | Qué se simplificó | Techo | Trigger de upgrade | Estado |
|
|
54
|
+
|---|---|---|---|---|
|
|
55
|
+
| src/locks.py:42 | lock global | contención con N workers | throughput > 500 rps | ok |
|
|
56
|
+
| api/cache.js:17 | TTL fijo 5 min | staleness | (ninguno) | sin-trigger |
|
|
57
|
+
|
|
58
|
+
Total: N marcadores, M sin trigger.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Con `--owners`: agregar columna con `git blame -L<línea>,<línea> --porcelain <archivo>`
|
|
62
|
+
(solo el autor, una llamada por fila).
|
|
63
|
+
|
|
64
|
+
Si no hay marcadores: `Sin deuda simplificado:. Ledger limpio.` — y terminar.
|
|
65
|
+
|
|
66
|
+
## Paso 4 — Sincronizar al ledger formal (solo con --sync)
|
|
67
|
+
|
|
68
|
+
Para cada marcador `sin-trigger` o de techo relevante que no exista ya en
|
|
69
|
+
`.planning/DEUDA-TECNICA.md`:
|
|
70
|
+
|
|
71
|
+
1. Leer el ledger actual y verificar duplicados por ubicación (`archivo:línea`).
|
|
72
|
+
2. Agregar entrada `### DT-SIMPLIFICADO-<n>` con: ubicación, techo, trigger
|
|
73
|
+
(o `PENDIENTE DE TRIGGER` marcado como acción requerida), fecha de cosecha.
|
|
74
|
+
3. Los `sin-trigger` NO se sincronizan como DT válidas hasta tener trigger:
|
|
75
|
+
reportarlos al usuario como acción inmediata — una DT sin trigger verificable
|
|
76
|
+
viola `arreglar-al-detectar.md § DT formal`.
|
|
77
|
+
|
|
78
|
+
NUNCA borrar ni editar los marcadores del código durante la cosecha: el
|
|
79
|
+
comando lee y reporta; el código solo cambia cuando el trigger se cumple y
|
|
80
|
+
el upgrade se implementa.
|
|
81
|
+
|
|
82
|
+
## Cuándo usarlo
|
|
83
|
+
|
|
84
|
+
- Cierre de fase (`/swl:verificar` lo puede invocar como pasada complementaria).
|
|
85
|
+
- Antes de un release: los `sin-trigger` son bloqueo blando (reportar en el gate).
|
|
86
|
+
- Auditorías de deuda: junto con la sección "Sobre-ingeniería" de `/swl:revisar`.
|
|
87
|
+
|
|
88
|
+
## Gotchas
|
|
89
|
+
|
|
90
|
+
- **Marcadores en fixtures o docs**: los hits dentro de `tests/fixtures/`,
|
|
91
|
+
ejemplos de skills o este propio comando son material de referencia, no deuda
|
|
92
|
+
— excluirlos del conteo y decir cuántos se excluyeron (sin caps silenciosos).
|
|
93
|
+
- **Prefijos de comentario por stack**: el patrón cubre `#` (Python/shell),
|
|
94
|
+
`//` (JS/TS/Go/Rust/C#/Java), `--` (SQL/Lua), `<!--` (HTML/MD) y `/*` (CSS/C).
|
|
95
|
+
Si el proyecto usa otro prefijo, agregarlo al patrón y decirlo en el reporte.
|
|
96
|
+
- **`git blame` sobre archivos renombrados**: usar `git blame -M -C` si el
|
|
97
|
+
autor aparece como el commit del rename.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: angular-moderno
|
|
3
3
|
description: Angular v17+/v20+. Signals, standalone components, OnPush, host bindings, nueva sintaxis de control flow (@if/@for/@switch), defer blocks y patrones modernos.
|
|
4
|
-
version: "1.0.
|
|
4
|
+
version: "1.0.3"
|
|
5
5
|
herramientasPermitidas: [Read]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar para patrones Angular avanzados (zoneless, SSR, Resource API, interceptores funcionales) — para eso cargar `angular-avanzado`."
|
|
@@ -177,6 +177,10 @@ Para ejemplos completos de host bindings con clases dinámicas, services store c
|
|
|
177
177
|
|
|
178
178
|
## Gotchas / Errores comunes no obvios
|
|
179
179
|
|
|
180
|
+
**`NativeDateAdapter.parse()` de Angular Material ignora `MAT_DATE_LOCALE` al parsear texto tecleado a mano — solo `.format()` respeta el locale vía `Intl`**: con locale `es-MX`, las fechas se MUESTRAN como dd/MM/yyyy, pero al TECLEAR "31/12/2026" en un `matInput` con datepicker el parse usa el orden de `Date.parse` (MM/DD) — "31/12/2026" se rechaza sin mensaje visible y "01/08/2026" se guarda invertido como 8 de enero sin ninguna advertencia. Causa: `NativeDateAdapter.parse()` delega en `new Date(string)`, que no consulta el locale. Fix: proveer un `DateAdapter` custom que parsee dd/MM/yyyy explícitamente (regex + `new Date(y, m-1, d)`) y registrarlo como provider en cada componente que importe `MatDatepickerModule` — o global en `app.config.ts`. Origen: SIGAF 2026-07-02, 45 archivos afectados, verificado E2E con persistencia real.
|
|
181
|
+
|
|
182
|
+
**Verificar la corrección de un provider faltante NO basta con `grep` del patrón viejo — comparar "quién importa el módulo" contra "quién ya tiene el provider" con `comm -23`**: un barrido que solo busca el provider INCORRECTO tiene falso negativo con los componentes que importan `MatDatepickerModule` sin NINGÚN provider (ni roto ni correcto) — estado más grave: `NullInjectorError` en runtime. Fix: generar dos listas ordenadas (`grep -rl "MatDatepickerModule" | sort` y `grep -rl "provideDateAdapter" | sort`) y `comm -23` para obtener los huérfanos. Origen: SIGAF 2026-07-02 — el barrido inicial de 43 archivos dejó 2 huérfanos descubiertos después.
|
|
183
|
+
|
|
180
184
|
**`@for` sin `track` compila con advertencia en v17 pero causa re-renderizado completo de la lista**: si se omite `track` (o se usa `track $index` en listas mutables), Angular recrea todos los elementos DOM al cambiar el array en lugar de hacer reconciliación. Causa: sin `track`, Angular no puede identificar qué elemento cambió. Fix: usar `track item.id` con el identificador estable del elemento; solo usar `track $index` en listas de solo lectura que nunca cambian de orden.
|
|
181
185
|
|
|
182
186
|
**`computed()` que lee otra signal dentro de un `effect()` no re-ejecuta el efecto cuando cambia la computed**: si un `effect()` lee `this.total()` que es un `computed()`, el efecto sí se suscribe a la computed — pero si dentro del `effect` se llama a un método que modifica otra signal no leída directamente en el efecto, ese efecto no se re-ejecuta. Causa: Angular rastrea solo las signals leídas síncronamente dentro del cuerpo del efecto. Fix: leer explícitamente todas las signals de las que depende el efecto en su cuerpo, no mediante funciones intermedias.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contenedores-docker
|
|
3
3
|
description: Docker y containerización. Dockerfiles optimizados con multi-stage builds, docker-compose, volúmenes, networking, health checks, security scanning, build caching, distroless images. Anti-patrones comunes.
|
|
4
|
-
version: "1.0.
|
|
4
|
+
version: "1.0.3"
|
|
5
5
|
herramientasPermitidas: [Read]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar para orquestación Kubernetes (Deployments, Services, Helm, HPA) — para Kubernetes cargar `kubernetes-orquestacion`."
|
|
@@ -138,4 +138,6 @@ Para ejemplos completos de multi-stage Node.js/Angular, .dockerignore, docker-co
|
|
|
138
138
|
|
|
139
139
|
**Scripts en `database/init/` (mounted a `/docker-entrypoint-initdb.d`) no pueden depender de binarios fuera de la imagen base**: un script con `set -e` que invoca `mc` (cliente MinIO), `aws`, `gh`, `kubectl` o cualquier binario no presente en la imagen `postgres`/`postgis` aborta el initdb con `command not found` (exit 127). El contenedor sale con error y los scripts SQL que iban después (incluido schemas/seeds completos) NUNCA se ejecutan. Caso real (SIGM 2026-05-04): `02-crear-buckets-minio.sh` con `mc alias set` aborta `postgis/postgis:17-3.5` antes de cargar el schema; ningún schema se aplicaba aunque el archivo init.sh estaba bien. Causa: el directorio `/docker-entrypoint-initdb.d` ejecuta todos los archivos `.sh` y `.sql` en orden alfabético; cualquier fallo aborta toda la cadena. Fix: scripts que invocan binarios externos van en `scripts/setup/` o `scripts/init-deps/` y se ejecutan manualmente o via `docker compose run --rm --entrypoint /scripts/setup/X.sh <servicio_que_tiene_el_binario>`. Solo SQL puro o bash que use `psql` pueden vivir en `database/init/`.
|
|
140
140
|
|
|
141
|
+
**Proxy de desarrollo del frontend (Angular CLI, Vite, webpack-dev-server) con target hardcodeado a `localhost` es deuda invisible hasta el primer `docker compose up`**: en local todo funciona porque frontend y backend comparten host; en cuanto corren en contenedores separados, `localhost` dentro del contenedor del frontend apunta a sí mismo — el proxy devuelve 500/ECONNREFUSED en cada llamada a la API (síntoma típico: el login falla solo en Docker). Causa: el target del proxy es configuración de entorno, no constante del repo. Fix: usar `proxy.conf.js` (no `.json`) que lea `process.env.BACKEND_URL || 'http://localhost:8000'` y pasar `BACKEND_URL=http://backend:8000` (nombre del servicio de compose) vía `environment:` del servicio frontend. Origen: SIGAF 2026-07-02.
|
|
142
|
+
|
|
141
143
|
**`docker exec ... psql` lanzado en background contra una BD donde el rol no autentica cuelga y congestiona el subsistema `docker exec` de Docker Desktop (Windows)**: lanzar en background (`run_in_background`/`&`) un `docker exec <contenedor> psql -U rol -d db -c "..."` donde el rol no puede autenticar deja la sesión `exec` colgada esperando; varias de esas sesiones huérfanas **saturan el subsistema de `docker exec`** y luego TODO `docker exec` (incluso `echo`) y hasta `docker restart` hacen timeout, aunque `docker ps`/`version` sigan respondiendo. Causa: cada `exec` abre una sesión que no termina; el daemon las acumula. Síntoma distintivo: `docker ps` responde pero cualquier `docker exec` cuelga. Fix: `docker restart <contenedor>` mata las sesiones `exec` huérfanas y destraba el daemon — detener el bash local con TaskStop NO mata el `psql` que corre dentro del contenedor. Prevención: NUNCA lanzar `docker exec ... psql` en background contra una BD/rol cuya autenticación no esté confirmada; correrlo en foreground con timeout corto y verificar el `psql` interactivo primero. En Git Bash (Windows), pasar `MSYS_NO_PATHCONV=1` cuando el comando lleva rutas POSIX (`/tmp/...`) a `docker exec`/`docker cp` para que MSYS no las convierta.
|