@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.
Files changed (123) hide show
  1. package/CLAUDE.md +242 -240
  2. package/README.md +597 -597
  3. package/agentes/_intent-spec.md +73 -73
  4. package/agentes/_propose-step.md +90 -90
  5. package/agentes/accesibilidad-wcag-swl.md +690 -690
  6. package/agentes/arquitecto-swl.md +267 -267
  7. package/agentes/auto-evolucion-swl.md +908 -908
  8. package/agentes/backend-api-swl.md +472 -472
  9. package/agentes/backend-csharp-swl.md +420 -420
  10. package/agentes/backend-go-swl.md +390 -390
  11. package/agentes/backend-java-swl.md +281 -281
  12. package/agentes/backend-node-swl.md +479 -479
  13. package/agentes/backend-python-swl.md +605 -605
  14. package/agentes/backend-rust-swl.md +364 -364
  15. package/agentes/backend-workers-swl.md +482 -482
  16. package/agentes/cloud-infra-swl.md +509 -509
  17. package/agentes/consolidador-swl.md +541 -541
  18. package/agentes/datos-swl.md +605 -605
  19. package/agentes/depurador-swl.md +352 -352
  20. package/agentes/devops-ci-swl.md +400 -400
  21. package/agentes/disenador-ui-swl.md +569 -569
  22. package/agentes/documentador-swl.md +345 -345
  23. package/agentes/frontend-angular-swl.md +621 -621
  24. package/agentes/frontend-css-swl.md +716 -716
  25. package/agentes/frontend-react-swl.md +692 -692
  26. package/agentes/frontend-swl.md +496 -496
  27. package/agentes/frontend-tailwind-swl.md +826 -826
  28. package/agentes/gh-fix-ci-swl.md +275 -275
  29. package/agentes/implementador-swl.md +328 -328
  30. package/agentes/investigador-swl.md +432 -432
  31. package/agentes/investigador-ux-swl.md +505 -505
  32. package/agentes/llm-apps-swl.md +278 -278
  33. package/agentes/migrador-swl.md +442 -442
  34. package/agentes/mobile-android-swl.md +511 -511
  35. package/agentes/mobile-cross-swl.md +541 -541
  36. package/agentes/mobile-ios-swl.md +502 -502
  37. package/agentes/mobile-testing-swl.md +302 -302
  38. package/agentes/nemesis-auditor-swl.md +285 -285
  39. package/agentes/notificador-swl.md +918 -918
  40. package/agentes/observabilidad-swl.md +438 -438
  41. package/agentes/orquestador-swl.md +1053 -1026
  42. package/agentes/pagos-swl.md +310 -310
  43. package/agentes/perfilador-usuario-swl.md +321 -321
  44. package/agentes/planificador-swl.md +399 -399
  45. package/agentes/producto-prd-swl.md +589 -589
  46. package/agentes/red-team-swl.md +218 -218
  47. package/agentes/release-manager-swl.md +590 -590
  48. package/agentes/rendimiento-swl.md +713 -713
  49. package/agentes/resolutor-build-swl.md +245 -245
  50. package/agentes/revisor-angular-swl.md +278 -278
  51. package/agentes/revisor-codigo-swl.md +538 -505
  52. package/agentes/revisor-csharp-swl.md +264 -264
  53. package/agentes/revisor-go-swl.md +259 -259
  54. package/agentes/revisor-java-swl.md +257 -257
  55. package/agentes/revisor-kotlin-swl.md +273 -273
  56. package/agentes/revisor-nextjs-swl.md +281 -281
  57. package/agentes/revisor-php-swl.md +271 -271
  58. package/agentes/revisor-react-swl.md +278 -278
  59. package/agentes/revisor-rust-swl.md +346 -346
  60. package/agentes/revisor-seguridad-swl.md +399 -399
  61. package/agentes/revisor-swift-swl.md +268 -268
  62. package/agentes/revisor-typescript-swl.md +346 -346
  63. package/agentes/sre-swl.md +291 -291
  64. package/agentes/tdd-qa-swl.md +393 -393
  65. package/comandos/swl/contexto.md +0 -2
  66. package/comandos/swl/deuda-codigo.md +97 -0
  67. package/habilidades/angular-moderno/SKILL.md +5 -1
  68. package/habilidades/contenedores-docker/SKILL.md +3 -1
  69. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  70. package/habilidades/harness-claude-code/SKILL.md +5 -4
  71. package/habilidades/harness-claude-code/recursos/disciplina-harness-regla.md +6 -5
  72. package/habilidades/legacy-code-rescue/SKILL.md +2 -1
  73. package/habilidades/meta-skills-estandar/SKILL.md +1 -1
  74. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +2 -2
  75. package/habilidades/postgresql-experto/SKILL.md +3 -1
  76. package/habilidades/prevencion-sobreingenieria/SKILL.md +70 -92
  77. package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -0
  78. package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -0
  79. package/habilidades/tdd-workflow/SKILL.md +3 -1
  80. package/hooks/audit-trail.js +4 -4
  81. package/hooks/calidad-pre-commit.js +15 -11
  82. package/hooks/captura-acciones-post.js +3 -2
  83. package/hooks/captura-acciones-session.js +3 -2
  84. package/hooks/contexto-iteracion.js +2 -1
  85. package/hooks/contexto-subagente.js +68 -0
  86. package/hooks/guardrail-modelo.js +13 -3
  87. package/hooks/inyeccion-contexto.js +12 -12
  88. package/hooks/registro-turnos.js +5 -4
  89. package/hooks/spec-gate.js +2 -1
  90. package/hooks/sugerir-contribuir.js +2 -1
  91. package/hooks/sugerir-regenerar-inventario.js +3 -2
  92. package/hooks/tdd-gate.js +2 -1
  93. package/llms.txt +3 -3
  94. package/manifiestos/canonical-hashes.json +995 -10
  95. package/manifiestos/hook-profiles.json +0 -2
  96. package/manifiestos/hooks-config.json +469 -477
  97. package/manifiestos/invariantes-criticos.json +30 -0
  98. package/manifiestos/modulos.json +1390 -1390
  99. package/manifiestos/skills-lock.json +24 -24
  100. package/package.json +93 -93
  101. package/plugin.json +369 -371
  102. package/reglas/arreglar-al-detectar.md +16 -0
  103. package/reglas/pruebas.md +7 -3
  104. package/schemas/agent-frontmatter.schema.json +3 -1
  105. package/scripts/actualizar.js +253 -254
  106. package/scripts/doctor.js +25 -17
  107. package/scripts/instalador.js +4 -1
  108. package/scripts/lib/detectar-runtime.js +58 -0
  109. package/scripts/lib/expandir-targets.js +71 -71
  110. package/scripts/lib/hooks-settings.js +40 -3
  111. package/scripts/lib/preservar-usuario.js +39 -5
  112. package/scripts/lib/toml-merge.js +204 -204
  113. package/scripts/mcp-server/auth.js +105 -105
  114. package/scripts/mcp-server/cache.js +106 -106
  115. package/scripts/tui/pantallas/inspect.js +175 -173
  116. package/scripts/tui/pantallas/uninstall-wizard.js +210 -208
  117. package/scripts/tui/pantallas/update-wizard.js +234 -232
  118. package/scripts/tui/pantallas/welcome.js +189 -187
  119. package/scripts/validar.js +1 -1
  120. package/scripts/verificar-release.js +51 -0
  121. package/hooks/lib/context-compressor.js +0 -657
  122. package/hooks/linea-estado.js +0 -328
  123. package/hooks/monitor-contexto.js +0 -373
@@ -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.2"
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.2"
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.