@saulwade/swl-ses 2.4.3 → 2.5.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 +194 -241
- package/README.md +600 -597
- package/agentes/_intent-spec.md +73 -73
- package/agentes/_propose-step.md +90 -90
- package/agentes/abogado-diablo-swl.md +145 -0
- 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 +1 -1
- 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 +1 -1
- package/agentes/backend-python-swl.md +1 -1
- 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 +1 -1
- 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 +6 -1
- package/agentes/implementador-swl.md +1 -1
- package/agentes/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- package/agentes/llm-apps-swl.md +1 -1
- 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 +1 -1
- package/agentes/observabilidad-swl.md +438 -438
- 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 +10 -1
- package/agentes/revisor-angular-swl.md +278 -278
- package/agentes/revisor-codigo-swl.md +1 -1
- 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 +1 -1
- package/agentes/tdd-qa-swl.md +393 -393
- package/bin/lib/bot-comandos.js +1 -1
- package/bin/swl-ses.js +6 -0
- package/comandos/swl/adoptar-proyecto.md +14 -2
- package/comandos/swl/configurar-ci.md +8 -1
- package/comandos/swl/deuda-codigo.md +97 -97
- package/comandos/swl/discutir-fase.md +22 -118
- package/comandos/swl/fix.md +118 -0
- package/comandos/swl/nuevo-proyecto.md +54 -3
- package/comandos/swl/predecir.md +32 -2
- package/comandos/swl/seguridad.md +189 -0
- package/comandos/swl/status.md +5 -3
- package/habilidades/aprendizaje-continuo/SKILL.md +3 -1
- package/habilidades/discutir-fase/SKILL.md +84 -81
- package/habilidades/discutir-fase/recursos/plantilla-contexto.md +136 -0
- package/habilidades/doc-sync/SKILL.md +3 -1
- package/habilidades/doubt-driven-review/SKILL.md +15 -1
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/estructura-proyecto-claude/SKILL.md +11 -2
- package/habilidades/harness-claude-code/SKILL.md +3 -1
- package/habilidades/instalar-sistema/SKILL.md +3 -1
- package/habilidades/meta-reglas-extendido/SKILL.md +92 -0
- package/habilidades/meta-reglas-extendido/recursos/analisis-previo-tareas-grandes.md +186 -0
- package/habilidades/meta-reglas-extendido/recursos/analizar-directorios-antes-de-escribir.md +235 -0
- package/habilidades/meta-reglas-extendido/recursos/api-diseno.md +413 -0
- package/habilidades/meta-reglas-extendido/recursos/arquitectura.md +491 -0
- package/habilidades/meta-reglas-extendido/recursos/arreglar-al-detectar.md +264 -0
- package/habilidades/meta-reglas-extendido/recursos/debatir-antes-de-aceptar.md +152 -0
- package/habilidades/meta-reglas-extendido/recursos/git-workflow.md +259 -0
- package/habilidades/meta-reglas-extendido/recursos/gobernanza.md +291 -0
- package/habilidades/meta-reglas-extendido/recursos/memoria-consolidada.md +263 -0
- package/habilidades/meta-reglas-extendido/recursos/seguridad-agentes.md +443 -0
- package/habilidades/meta-reglas-extendido/recursos/sesiones-paralelas.md +190 -0
- package/habilidades/meta-reglas-extendido/recursos/sin-duplicacion-reglas-globales.md +179 -0
- package/habilidades/meta-reglas-extendido/recursos/skills-estandar.md +394 -0
- package/habilidades/meta-reglas-extendido/recursos/usar-code-review-graph.md +156 -0
- package/habilidades/meta-reglas-extendido/recursos/usar-context7.md +236 -0
- package/habilidades/meta-reglas-extendido/recursos/usar-sistema-swl.md +253 -0
- package/habilidades/meta-reglas-extendido/recursos/verificar-citas-normativas.md +527 -0
- package/habilidades/meta-skills-estandar/SKILL.md +3 -1
- package/habilidades/nuevo-proyecto/SKILL.md +20 -3
- package/habilidades/php-experto/SKILL.md +10 -3
- package/habilidades/{filament-admin/SKILL.md → php-experto/recursos/filament-admin.md} +23 -39
- package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
- package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
- package/habilidades/proceso-debate-adversarial/recursos/personas.md +5 -4
- package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -0
- package/hooks/check-update.js +19 -10
- package/hooks/contexto-subagente.js +68 -68
- package/hooks/degradacion-instintos.js +1 -1
- package/hooks/extraccion-aprendizajes.js +2 -2
- package/hooks/lib/briefing.js +3 -3
- package/hooks/lib/nudge-tracker.js +1 -1
- package/hooks/lib/otlp-exporter.js +1 -1
- package/hooks/lib/webhook-dedup.js +1 -1
- package/hooks/session-briefing.js +1 -1
- package/llms.txt +6 -6
- package/manifiestos/canonical-hashes.json +1043 -52
- package/manifiestos/hooks-config.json +469 -469
- package/manifiestos/invariantes-criticos.json +30 -30
- package/manifiestos/modulos.json +168 -135
- package/manifiestos/perfiles.json +0 -2
- package/manifiestos/skills-lock.json +49 -56
- package/package.json +7 -5
- package/plantillas/github-workflows/README.md +15 -1
- package/plantillas/github-workflows/swl-devsecops.yml +70 -0
- package/plugin.json +5 -5
- package/reglas/analisis-previo-tareas-grandes.md +30 -156
- package/reglas/analizar-directorios-antes-de-escribir.md +30 -211
- package/reglas/api-diseno.md +28 -398
- package/reglas/arquitectura.md +35 -456
- package/reglas/arreglar-al-detectar.md +30 -230
- package/reglas/debatir-antes-de-aceptar.md +30 -143
- package/reglas/docs.md +7 -0
- package/reglas/estilo-codigo.md +9 -0
- package/reglas/fragmentos-compartidos.md +6 -0
- package/reglas/git-workflow.md +44 -240
- package/reglas/gobernanza.md +23 -262
- package/reglas/memoria-consolidada.md +34 -228
- package/reglas/performance.md +8 -0
- package/reglas/pruebas.md +12 -0
- package/reglas/seguridad-agentes.md +37 -418
- package/reglas/seguridad.md +12 -0
- package/reglas/sesiones-paralelas.md +29 -162
- package/reglas/sin-duplicacion-reglas-globales.md +25 -166
- package/reglas/skills-estandar.md +23 -373
- package/reglas/usar-code-review-graph.md +31 -140
- package/reglas/usar-context7.md +30 -208
- package/reglas/usar-sistema-swl.md +47 -242
- package/reglas/verificar-citas-normativas.md +47 -537
- package/scripts/actualizar.js +253 -253
- package/scripts/audit-tools/auditar-relleno-inventario.js +145 -0
- package/scripts/auditar-clases-conocidas.js +106 -0
- package/scripts/bootstrap-instintos.js +2 -2
- package/scripts/canario-hooks.js +166 -0
- package/scripts/cli/configurar-ci.js +2 -1
- package/scripts/evidencia-valor.js +101 -0
- package/scripts/field-report.js +18 -2
- package/scripts/generar-comandos.js +143 -0
- package/scripts/generar-inventario.js +236 -23
- package/scripts/generar-matriz-lenguajes.js +1 -1
- package/scripts/instalador.js +15 -1
- package/scripts/instalar-git-hook.js +8 -1
- package/scripts/lib/configurar-ci.js +10 -3
- package/scripts/lib/diary-entry.js +3 -1
- package/scripts/lib/drift-detector.js +1 -1
- package/scripts/lib/evidencia-valor.js +228 -0
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/frontmatter-md.js +63 -0
- package/scripts/lib/parsear-opciones.js +2 -0
- package/scripts/lib/prune-componentes.js +180 -0
- package/scripts/lib/reglas-globales-conocidas.json +16 -2
- package/scripts/lib/scoring-instintos.js +2 -2
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/lib/transformadores/claude.js +1 -1
- package/scripts/lib/transformadores/codex.js +1 -1
- package/scripts/lib/transformadores/copilot.js +1 -1
- package/scripts/lib/transformadores/cursor.js +1 -1
- package/scripts/lib/transformadores/gemini.js +22 -2
- package/scripts/lib/transformadores/opencode.js +1 -1
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/prune.js +102 -0
- package/scripts/publicar.js +18 -2
- package/scripts/tui/index.js +10 -1
- package/scripts/tui/pantallas/inspect.js +175 -175
- package/scripts/tui/pantallas/install-wizard.js +21 -8
- package/scripts/tui/pantallas/uninstall-wizard.js +210 -210
- package/scripts/tui/pantallas/update-wizard.js +234 -234
- package/scripts/tui/pantallas/welcome.js +188 -189
- package/habilidades/paid-media-tracking/SKILL.md +0 -269
- package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +0 -220
- package/habilidades/paid-media-tracking/recursos/google-ads-api.md +0 -215
- package/habilidades/tracking-measurement/SKILL.md +0 -239
- package/habilidades/tracking-measurement/recursos/consent-mode.md +0 -231
- package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +0 -216
- package/habilidades/tracking-measurement/recursos/meta-capi.md +0 -262
package/bin/lib/bot-comandos.js
CHANGED
|
@@ -696,7 +696,7 @@ function cmdCosto(argDias) {
|
|
|
696
696
|
bindParam = limiteSeg;
|
|
697
697
|
} else {
|
|
698
698
|
// ISO 8601 string — usar comparación de string (funciona para fechas ISO)
|
|
699
|
-
const fechaIso = new Date(limiteMs).
|
|
699
|
+
const fechaIso = new Date(limiteMs).toLocaleDateString('sv');
|
|
700
700
|
whereClause = `WHERE ${colTimestamp} >= ?`;
|
|
701
701
|
bindParam = fechaIso;
|
|
702
702
|
}
|
package/bin/swl-ses.js
CHANGED
|
@@ -106,6 +106,9 @@ const COMANDOS = {
|
|
|
106
106
|
doctor: '../scripts/doctor.js',
|
|
107
107
|
update: '../scripts/actualizar.js',
|
|
108
108
|
uninstall: '../scripts/desinstalar.js',
|
|
109
|
+
prune: '../scripts/prune.js',
|
|
110
|
+
valor: '../scripts/evidencia-valor.js',
|
|
111
|
+
'field-report': '../scripts/field-report.js',
|
|
109
112
|
'check-update': '../scripts/check-update.js',
|
|
110
113
|
'install-git-hook': '../scripts/instalar-git-hook.js',
|
|
111
114
|
'audit-claudemd': '../scripts/cli/audit-claudemd.js',
|
|
@@ -161,6 +164,9 @@ COMANDOS PRINCIPALES:
|
|
|
161
164
|
doctor Diagnóstica problemas de instalación
|
|
162
165
|
update Actualiza componentes instalados
|
|
163
166
|
uninstall Desinstala componentes del runtime
|
|
167
|
+
prune Purga componentes retirados del paquete (dry-run; --confirmar ejecuta)
|
|
168
|
+
valor Panel de evidencia de valor del harness (intercepciones, defectos, DORA/CI, uso; --json, --dias N)
|
|
169
|
+
field-report Reporte de agregados anónimos para compartir con el autor (opt-in, revisión manual)
|
|
164
170
|
check-update Fuerza consulta inmediata de nueva versión en npm (sin throttle)
|
|
165
171
|
install-git-hook [--force] Instala pre-commit hook que avisa de nuevas versiones.
|
|
166
172
|
Útil para CLIs que no son Claude Code (Codex, Copilot,
|
|
@@ -237,10 +237,22 @@ Hallazgos clave:
|
|
|
237
237
|
|
|
238
238
|
Riesgo principal: [descripción]
|
|
239
239
|
|
|
240
|
-
|
|
241
|
-
/swl:discutir-fase 1
|
|
240
|
+
Próximos pasos recomendados:
|
|
241
|
+
/swl:discutir-fase 1 ← para definir la primera fase de trabajo
|
|
242
|
+
/swl:seguridad --rapido ← baseline de seguridad del proyecto adoptado
|
|
243
|
+
(secretos en repo+historial + CVEs en deps);
|
|
244
|
+
obligatorio recomendarlo si TRAMPAS.md detectó
|
|
245
|
+
manejo de auth, pagos o datos personales
|
|
246
|
+
/swl:configurar-ci init ← si el repo vive en GitHub y no tiene pipelines
|
|
247
|
+
(documentar la ausencia de CI ya es hallazgo)
|
|
242
248
|
```
|
|
243
249
|
|
|
250
|
+
Si el usuario acepta correr `/swl:seguridad --rapido`, su reporte de postura
|
|
251
|
+
queda en `.planning/audit/` y los hallazgos CRÍTICOS se listan como "Puntos a
|
|
252
|
+
resolver" del arranque — un proyecto adoptado con secretos en el historial no
|
|
253
|
+
debe empezar fases nuevas sin decidir qué hacer con ellos (Hallazgo C de
|
|
254
|
+
`arreglar-al-detectar.md`).
|
|
255
|
+
|
|
244
256
|
## Reglas de comportamiento
|
|
245
257
|
|
|
246
258
|
- NUNCA inventar información que no se detectó ni el usuario proporcionó. Si un campo no se puede inferir, dejarlo con nota "Pendiente — definir con `/swl:discutir-fase`".
|
|
@@ -48,12 +48,19 @@ Mostrar al usuario qué se detectó y confirmar que es el proyecto correcto.
|
|
|
48
48
|
|
|
49
49
|
[ ] release-please.yml — Releases automáticos desde conventional commits
|
|
50
50
|
Sin secrets adicionales. Requiere conventional commits.
|
|
51
|
+
|
|
52
|
+
[ ] swl-devsecops.yml — Gates de seguridad del pipeline: gitleaks (secretos,
|
|
53
|
+
historial completo) + auditoría de dependencias por ecosistema (npm/pip/cargo)
|
|
54
|
+
Sin secrets en repos personales; en repos de ORGANIZACIÓN gitleaks exige
|
|
55
|
+
GITLEAKS_LICENSE (gratuita para individuos). Los gates avanzados
|
|
56
|
+
(SAST/Trivy/DAST) se configuran por proyecto — ver Skill("devsecops-pipeline-security").
|
|
51
57
|
```
|
|
52
58
|
|
|
53
59
|
Si el usuario omite `init` e invoca con flags directos, respetar esos flags sin preguntar:
|
|
54
60
|
- `--with-security` / `--no-security`
|
|
55
61
|
- `--with-ci` / `--no-ci`
|
|
56
62
|
- `--with-release-please`
|
|
63
|
+
- `--with-devsecops`
|
|
57
64
|
- `--dry-run`
|
|
58
65
|
- `--force`
|
|
59
66
|
|
|
@@ -65,7 +72,7 @@ Invocar el subcomando del CLI (resuelve cross-scope; ver
|
|
|
65
72
|
|
|
66
73
|
```bash
|
|
67
74
|
swl-ses configurar-ci init
|
|
68
|
-
# flags: --no-security --no-ci --with-release-please --dry-run --force
|
|
75
|
+
# flags: --no-security --no-ci --with-release-please --with-devsecops --dry-run --force
|
|
69
76
|
# fallback: npx -y @saulwade/swl-ses@latest configurar-ci init
|
|
70
77
|
```
|
|
71
78
|
|
|
@@ -1,97 +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
|
+
---
|
|
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.
|
|
@@ -25,8 +25,8 @@ Antes del cuestionario adaptativo completo, el agente clasifica la petición en
|
|
|
25
25
|
|------|--------------|--------|
|
|
26
26
|
| **RUTA_A** — Extender fase existente | La petición agrega tareas a una fase ya planeada. | Saltar cuestionario; cargar el CONTEXTO.md existente y agregar tareas. |
|
|
27
27
|
| **RUTA_B** — Sin fase formal | Fix trivial o tarea de <2 horas sin impacto cross-módulo. | Saltar cuestionario; proceder con `/swl:ejecutar-fase` directamente. |
|
|
28
|
-
| **RUTA_C** — Nueva fase single-scope | Petición nueva, no encaja en fases existentes, single-domain. | Ejecutar cuestionario completo (Bloques 1-
|
|
29
|
-
| **RUTA_D** — Nueva fase multi-domain | Petición nueva, requiere decomposición en sub-tareas paralelas. | Cuestionario completo + planificación de paralelización. |
|
|
28
|
+
| **RUTA_C** — Nueva fase single-scope | Petición nueva, no encaja en fases existentes, single-domain. | Ejecutar cuestionario completo (Bloques 1-5 del skill). |
|
|
29
|
+
| **RUTA_D** — Nueva fase multi-domain | Petición nueva, requiere decomposición en sub-tareas paralelas. | Cuestionario completo (bloques de dominio combinados) + planificación de paralelización. Si produciría >20 tareas, sugerir descomposición en N fases. |
|
|
30
30
|
| **RUTA_E** — Mixto | La petición combina: extensión + nueva fase + posiblemente fix trivial. | Presentar decomposición propuesta y confirmar antes de proceder. |
|
|
31
31
|
|
|
32
32
|
El agente identifica la ruta en la primera respuesta al cargar `Skill("discutir-fase")` analizando: la petición textual, el estado de `.planning/HOJA-RUTA.md` y el último `RESUMEN.md`. Solo si la ruta es C o D se ejecuta el cuestionario completo descrito a continuación.
|
|
@@ -73,61 +73,19 @@ Haré algunas preguntas para entender los detalles. Puedes responder con todo el
|
|
|
73
73
|
|
|
74
74
|
## Paso 3 — Entrevista adaptativa por bloques
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
**El cuestionario canónico vive en `Skill("discutir-fase")`** — este comando NO
|
|
77
|
+
define preguntas propias (única fuente, evita deriva). Aplica los 5 bloques del
|
|
78
|
+
skill en orden:
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- **Fase mixta**: combina bloques relevantes
|
|
80
|
+
1. **Bloque 1 — Contexto** (siempre): objetivo, criterio de terminación, claridad del roadmap, restricciones de tiempo/presupuesto, decisiones previas, supuestos explícitos.
|
|
81
|
+
2. **Bloque 2 — Dominio** (adaptativo): backend/API, frontend/UI, infraestructura, integración, datos/migración. Determina el tipo leyendo la descripción de la fase; las fases mixtas combinan bloques. Cambios destructivos de datos activan SIEMPRE el bloque Datos/Migración (rollback, integridad, expand-contract).
|
|
82
|
+
3. **Bloque 3 — Calidad, proceso y operación** (si aplica): tests, revisión de seguridad, NFRs, observabilidad, deployment.
|
|
83
|
+
4. **Bloque 4 — Dependencias y riesgos** (siempre).
|
|
84
|
+
5. **Bloque 5 — Criterios de aceptación** (siempre, al final): demostración, pruebas, visto bueno, métrica de outcome.
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
1. ¿Cuál es el entregable más importante de esta fase? ¿Cómo sabremos que está terminada?
|
|
90
|
-
2. ¿Hay algo en esta fase que NO quedó claro en el roadmap y que debemos aclarar ahora?
|
|
91
|
-
3. ¿Cuáles son los riesgos más grandes que ves en esta fase?
|
|
92
|
-
4. ¿Hay decisiones técnicas o de producto que debemos tomar antes de empezar a planear?
|
|
93
|
-
|
|
94
|
-
### Bloque de dominio (según tipo de fase)
|
|
95
|
-
|
|
96
|
-
**Si la fase es de backend/API:**
|
|
97
|
-
5. ¿Qué entidades de datos nuevas introduce esta fase? Describe sus campos principales.
|
|
98
|
-
6. ¿Qué endpoints o servicios necesita exponer esta fase?
|
|
99
|
-
7. ¿Hay reglas de negocio complejas o cálculos que deben procesarse?
|
|
100
|
-
8. ¿Qué validaciones son críticas? ¿Qué datos nunca deben llegar corruptos a la BD?
|
|
101
|
-
9. ¿Quién tiene permiso de acceder a qué? ¿Hay roles o restricciones de seguridad?
|
|
102
|
-
|
|
103
|
-
**Si la fase es de frontend/UI:**
|
|
104
|
-
5. ¿Qué pantallas o vistas nuevas introduce esta fase? Descríbelas.
|
|
105
|
-
6. ¿Cuál es el flujo principal del usuario en esta fase? (de dónde viene, qué hace, adónde va)
|
|
106
|
-
7. ¿Hay componentes que deben reutilizarse del diseño existente o del sistema de diseño?
|
|
107
|
-
8. ¿Qué datos consume cada pantalla? ¿De qué endpoints los obtiene?
|
|
108
|
-
9. ¿Hay estados de carga, error y vacío que debemos considerar explícitamente?
|
|
109
|
-
|
|
110
|
-
**Si la fase es de infraestructura:**
|
|
111
|
-
5. ¿Cuál es el entorno objetivo? (dev, staging, prod — con diferencias entre ellos)
|
|
112
|
-
6. ¿Hay secretos o variables de entorno que esta fase introduce?
|
|
113
|
-
7. ¿Qué servicios gestionados (cloud) se van a usar?
|
|
114
|
-
8. ¿Cuál es la estrategia de rollback si algo sale mal en despliegue?
|
|
115
|
-
9. ¿Se necesita documentar el proceso de despliegue para el equipo?
|
|
116
|
-
|
|
117
|
-
**Si la fase es de integración:**
|
|
118
|
-
5. ¿Qué sistema externo se integra? ¿Tienes la documentación de su API?
|
|
119
|
-
6. ¿El sistema externo tiene ambiente de pruebas (sandbox)?
|
|
120
|
-
7. ¿Qué pasa si el sistema externo no responde? ¿Hay timeout y retry definidos?
|
|
121
|
-
8. ¿Se sincronizan datos en tiempo real o en batch?
|
|
122
|
-
9. ¿Hay transformaciones de datos entre los formatos de ambos sistemas?
|
|
123
|
-
|
|
124
|
-
### Bloque de criterios de aceptación
|
|
125
|
-
|
|
126
|
-
Siempre al final:
|
|
127
|
-
|
|
128
|
-
10. ¿Qué debe demostrarle el equipo al usuario/cliente para que la fase se apruebe?
|
|
129
|
-
11. ¿Hay pruebas específicas que deben pasar? (pruebas de humo, de carga, de usuario)
|
|
130
|
-
12. ¿Quién da el visto bueno final de esta fase?
|
|
86
|
+
Respeta las reglas del skill: máximo 4 preguntas por mensaje, clasificar cada
|
|
87
|
+
respuesta como CERRADA / ABIERTA / PENDIENTE al recibirla, no avanzar con
|
|
88
|
+
PENDIENTE en ítems críticos.
|
|
131
89
|
|
|
132
90
|
## Paso 4 — Preguntas de seguimiento
|
|
133
91
|
|
|
@@ -137,7 +95,7 @@ Después de las respuestas del Bloque de dominio, revisa si hay ambigüedades. P
|
|
|
137
95
|
- "Dijiste que los datos se sincronizan 'frecuentemente' — ¿cada cuánto tiempo exactamente?"
|
|
138
96
|
- "Mencionaste 'validación del lado del cliente' — ¿también se valida en el servidor, o solo en frontend?"
|
|
139
97
|
|
|
140
|
-
Máximo 5 preguntas de seguimiento por fase. Si hay más de 5 ambigüedades, documenta las restantes
|
|
98
|
+
Máximo 5 preguntas de seguimiento por fase. Si hay más de 5 ambigüedades, documenta las restantes en el CONTEXTO.md con la taxonomía del skill: `ABIERTA` si el usuario delega la decisión, `PENDIENTE` si bloquea el plan.
|
|
141
99
|
|
|
142
100
|
## Paso 5 — Confirmación del entendimiento
|
|
143
101
|
|
|
@@ -184,67 +142,13 @@ el usuario pida desactivarlo explícitamente. Si lo desactiva: exige la razón,
|
|
|
184
142
|
en el campo `**TDD**` del CONTEXTO y anota la excepción en `.planning/AUDITORIA.md`
|
|
185
143
|
(el opt-out se declara y registra — nunca es silencioso).
|
|
186
144
|
|
|
187
|
-
Estructura del archivo:
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
**Fecha de discusión**: [fecha actual]
|
|
195
|
-
**Estado**: Listo para planear
|
|
196
|
-
**TDD**: on <!-- default. Si el usuario lo desactiva: `off — razón: [...]` + entry en AUDITORIA.md -->
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
## Objetivo de la fase
|
|
200
|
-
[descripción clara del objetivo]
|
|
201
|
-
|
|
202
|
-
## Entregables esperados
|
|
203
|
-
[lista con formato de checklist: - [ ] entregable]
|
|
204
|
-
|
|
205
|
-
## Requisitos técnicos
|
|
206
|
-
[lista detallada]
|
|
207
|
-
|
|
208
|
-
## Reglas de negocio
|
|
209
|
-
[lista de reglas, numeradas]
|
|
210
|
-
|
|
211
|
-
## Modelos de datos (si aplica)
|
|
212
|
-
[descripción de entidades y campos clave]
|
|
213
|
-
|
|
214
|
-
## Endpoints / servicios (si aplica)
|
|
215
|
-
[lista de endpoints con método, ruta y propósito]
|
|
216
|
-
|
|
217
|
-
## Pantallas / vistas (si aplica)
|
|
218
|
-
[descripción de pantallas]
|
|
219
|
-
|
|
220
|
-
## Criterios de aceptación (REQ)
|
|
221
|
-
[criterios binarios y verificables con ID estable namespaceado por fase
|
|
222
|
-
`REQ-<fase>-NN` (DT-IDS-NAMESPACE, fases ≥12) — trazabilidad G4:
|
|
223
|
-
- **REQ-12-01**: [criterio binario verificable]
|
|
224
|
-
- **REQ-12-02**: [criterio binario verificable]
|
|
225
|
-
Las fases 01-11 conservan el formato plano `REQ-NN` (gracia legacy permanente,
|
|
226
|
-
no se renumeran). `verificar-trazabilidad.js` acepta ambos formatos.
|
|
227
|
-
Un REQ emitido NUNCA se renumera ni se reusa: si un criterio se descarta, marcarlo
|
|
228
|
-
"RETIRADO — razón" conservando el número. planear-fase exige que cada tarea T-NN
|
|
229
|
-
declare qué REQ verifica (matriz REQ×T) y aprobar-plan rechaza planes con REQ
|
|
230
|
-
huérfanos. verificar-trazabilidad.js valida la cadena REQ→T→commit→test al cierre.
|
|
231
|
-
Método de verificación: por default cada REQ exige un test con marker
|
|
232
|
-
`verifica: REQ-<fase>-NN`; los REQ satisfechos por prosa/docs/configuración llevan
|
|
233
|
-
la anotación `(verificación: inspección)` en el criterio — exigen tarea y commit
|
|
234
|
-
pero no test automatizado.]
|
|
235
|
-
|
|
236
|
-
## Riesgos identificados
|
|
237
|
-
[lista con nivel de impacto: ALTO/MEDIO/BAJO]
|
|
238
|
-
|
|
239
|
-
## Dependencias
|
|
240
|
-
[qué fases previas deben estar completas, qué sistemas externos se necesitan]
|
|
241
|
-
|
|
242
|
-
## Decisiones pendientes
|
|
243
|
-
[preguntas que quedaron abiertas y deben resolverse antes o durante la ejecución]
|
|
244
|
-
|
|
245
|
-
## Notas adicionales
|
|
246
|
-
[todo lo que no encajó en las categorías anteriores pero es importante]
|
|
247
|
-
```
|
|
145
|
+
Estructura del archivo: usar la **plantilla canónica**
|
|
146
|
+
`habilidades/discutir-fase/recursos/plantilla-contexto.md` (única fuente,
|
|
147
|
+
compartida con el skill). Leerla antes de escribir; incluye el frontmatter con
|
|
148
|
+
gate TDD, la tabla de decisiones CERRADA/ABIERTA/PENDIENTE, supuestos
|
|
149
|
+
explícitos, no-goals, los criterios de aceptación con REQ-IDs namespaceados
|
|
150
|
+
(`REQ-<fase>-NN`, trazabilidad G4), métrica de outcome, NFRs/observabilidad y
|
|
151
|
+
rollback. Las secciones *(si aplica)* se omiten cuando la fase no las toca.
|
|
248
152
|
|
|
249
153
|
## Paso 7 — Reporte al usuario
|
|
250
154
|
|
|
@@ -262,4 +166,4 @@ Al terminar:
|
|
|
262
166
|
- Si el usuario dice "como siempre" o "igual que antes", pregunta para verificar — las asunciones son la fuente principal de retrabajo.
|
|
263
167
|
- El archivo CONTEXTO.md debe ser comprensible sin haber participado en la conversación.
|
|
264
168
|
- Escribe el archivo en español-MX con formato Markdown limpio.
|
|
265
|
-
- Si el usuario no sabe algo importante
|
|
169
|
+
- Si el usuario no sabe algo importante: regístralo como `ABIERTA` (si delega la decisión al agente) o `PENDIENTE` (si bloquea el plan) y continúa — no bloquees el proceso, pero NUNCA cierres la discusión con `PENDIENTE` en ítems críticos (Regla 3 del skill).
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swl:fix
|
|
3
|
+
description: >
|
|
4
|
+
Punto de entrada único para reparar fallas: recibe un síntoma (stack trace,
|
|
5
|
+
test rojo, build roto, CI en rojo, hallazgo de revisión) y hace triage para
|
|
6
|
+
rutear al fixer correcto — depurador-swl (bug runtime/lógica),
|
|
7
|
+
resolutor-build-swl (build local), gh-fix-ci-swl (GitHub Actions),
|
|
8
|
+
/swl:verificar --until-converge (hallazgos de review) o /swl:nemesis
|
|
9
|
+
--remediar (bugs de lógica profunda). Aplica la política de convergencia
|
|
10
|
+
común (caps de iteración + escalación) y el contrato transversal de
|
|
11
|
+
regresión obligatoria post-fix. Usar cuando algo falla y no sabes (o no
|
|
12
|
+
quieres decidir) qué componente de reparación invocar.
|
|
13
|
+
argument-hint: "[descripción del síntoma / pega el error] [--tipo bug|build|ci|hallazgos]"
|
|
14
|
+
allowed-tools: [Read, Grep, Glob, Bash, Agent, Skill]
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# /swl:fix — Triage y despacho de reparaciones
|
|
18
|
+
|
|
19
|
+
Eres el despachador de reparaciones del sistema. El usuario te da un síntoma;
|
|
20
|
+
tú clasificas, ruteas al fixer especializado correcto y garantizas que el fix
|
|
21
|
+
cierre con regresión verificada. NO reparas directamente — despachas y
|
|
22
|
+
supervisas el contrato de cierre.
|
|
23
|
+
|
|
24
|
+
## Cuándo usar
|
|
25
|
+
|
|
26
|
+
- "Esto falla y no sé por qué" — cualquier falla sin fixer obvio.
|
|
27
|
+
- Tras `/swl:seguridad` o `/swl:verificar` con hallazgos CRÍTICOS a remediar.
|
|
28
|
+
- Cuando un push dejó el CI en rojo.
|
|
29
|
+
|
|
30
|
+
**Cuándo NO usar**: si ya sabes exactamente qué fixer necesitas, invócalo
|
|
31
|
+
directo (el triage es overhead); para features nuevas (→ flujo GSD
|
|
32
|
+
discutir→planear→ejecutar); para deuda técnica planificada (→ `/swl:deuda-codigo`).
|
|
33
|
+
|
|
34
|
+
## Paso 1 — Triage (clasificación del síntoma)
|
|
35
|
+
|
|
36
|
+
Recolectar la evidencia mínima ANTES de rutear — nunca clasificar por la
|
|
37
|
+
descripción sola:
|
|
38
|
+
|
|
39
|
+
| Señal observada | Verificación | Ruta |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Stack trace en runtime, comportamiento inesperado, bug reportado | Reproducir el error una vez (o pedir pasos de repro) | **A — Bug** |
|
|
42
|
+
| `npm run build` / `tsc` / `cargo build` / compilación falla local | Correr el build y capturar el error real | **B — Build** |
|
|
43
|
+
| GitHub Actions en rojo tras push/PR | `gh run list --limit 3` y verificar SHA | **C — CI** |
|
|
44
|
+
| Reporte de verificación/auditoría con hallazgos (VERIFICACION.md, nemesis, postura de seguridad) | Leer el reporte y verificar 2-3 citas archivo:línea contra el código actual (Familia 2) | **D — Hallazgos** |
|
|
45
|
+
| Test rojo sin cambio de código reciente (flaky o regresión externa) | Correr el test 2 veces; revisar `git log` del área | **A — Bug** (si determinista) o reportar flakiness |
|
|
46
|
+
|
|
47
|
+
Síntomas mixtos (ej: CI rojo porque el build falla): rutear por la **causa más
|
|
48
|
+
local** primero (build local → B); el CI se re-verifica solo al pushear el fix.
|
|
49
|
+
|
|
50
|
+
## Paso 2 — Despacho
|
|
51
|
+
|
|
52
|
+
- **Ruta A — Bug**: `Agent(depurador-swl)` con la evidencia de repro. Su método
|
|
53
|
+
científico incluye la regresión obligatoria (Fase 7) y test de no-regresión
|
|
54
|
+
(Fase 8). Si el fix excede el diagnóstico (feature faltante, decisión de
|
|
55
|
+
producto), el depurador escala — no fuerces el fix por esta vía.
|
|
56
|
+
- **Ruta B — Build**: `Agent(resolutor-build-swl)` — detecta lenguaje, carga el
|
|
57
|
+
`build-errors-*` correspondiente, fix mínimo.
|
|
58
|
+
- **Ruta C — CI**: `Agent(gh-fix-ci-swl)` — loop fix→push→monitor con HITL
|
|
59
|
+
approval por fix y verificación por SHA.
|
|
60
|
+
- **Ruta D — Hallazgos**: según el origen del reporte:
|
|
61
|
+
- Hallazgos de código/seguridad de una fase → `/swl:verificar --aplicar-iteracion`
|
|
62
|
+
o `--until-converge` (delega la corrección a `implementador-swl` y re-verifica).
|
|
63
|
+
- Bugs de lógica profunda (estado acoplado, invariantes) → `/swl:nemesis --remediar`.
|
|
64
|
+
- Hallazgos de postura de seguridad (`/swl:seguridad`): los de código van por
|
|
65
|
+
`verificar --solo-seguridad`; secretos en historial y cambios de infra son
|
|
66
|
+
Hallazgo C (decisión del usuario, no automatizar).
|
|
67
|
+
|
|
68
|
+
## Política de convergencia común (aplica a todas las rutas)
|
|
69
|
+
|
|
70
|
+
Cada fixer conserva su cap interno; este es el mapa unificado y la regla de
|
|
71
|
+
escalación compartida:
|
|
72
|
+
|
|
73
|
+
| Fixer / loop | Cap | Al agotar el cap |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| depurador-swl | 3 intentos de fix | Escalar con hipótesis descartadas documentadas |
|
|
76
|
+
| resolutor-build-swl | 1 fix mínimo verificado | Si el fix rompe la suite: revertir y reportar bloqueado |
|
|
77
|
+
| gh-fix-ci-swl | 3 iteraciones fix→push→monitor (maxTurnos 12) | Escalar al usuario |
|
|
78
|
+
| /swl:verificar --until-converge | 5 iteraciones (default) | Salida por plateau/adversarial |
|
|
79
|
+
| /swl:nemesis --remediar | 3 iteraciones | Recovery Catalog (reprompt→reduce-autonomy→escalate) |
|
|
80
|
+
| verificar-trabajo (por claim) | 2 intentos | Escalar |
|
|
81
|
+
|
|
82
|
+
Reglas transversales:
|
|
83
|
+
|
|
84
|
+
1. **NUNCA re-despachar en círculo**: si la Ruta A escala y el síntoma "parece"
|
|
85
|
+
de build, NO relanzar Ruta B con el mismo síntoma sin evidencia nueva — eso
|
|
86
|
+
es el loop de reparación infinito que `gobernanza.md` prohíbe (máximo 2
|
|
87
|
+
despachos por síntoma, luego reporte al usuario con lo aprendido).
|
|
88
|
+
2. **Escalar ≠ fracasar**: el reporte de escalación incluye qué se intentó, qué
|
|
89
|
+
se descartó y la recomendación — nunca "no pude" a secas (anti-degradación
|
|
90
|
+
silenciosa, `seguridad-agentes.md`).
|
|
91
|
+
|
|
92
|
+
## Contrato de cierre — regresión obligatoria
|
|
93
|
+
|
|
94
|
+
Ningún fix se reporta como completado sin:
|
|
95
|
+
|
|
96
|
+
1. **La suite de tests del proyecto en verde** (no solo el build/step que
|
|
97
|
+
falló). Un fix de build que rompe lógica de negocio no está terminado.
|
|
98
|
+
Si el proyecto NO tiene suite: reportarlo como hallazgo del triage —
|
|
99
|
+
no como excusa.
|
|
100
|
+
2. **Test de no-regresión** cuando la ruta fue A (bug): el test que reproduce
|
|
101
|
+
el bug queda en la suite (lo garantiza el método del depurador).
|
|
102
|
+
3. **Commit atómico** del fix, separado de cualquier otra mejora.
|
|
103
|
+
|
|
104
|
+
## Cierre — captura de aprendizaje
|
|
105
|
+
|
|
106
|
+
Si el fix fue CRÍTICO o el bug era recurrente (≥2ª vez con el mismo patrón),
|
|
107
|
+
ofrecer `/swl:aprender` para capturar el anti-patrón en APRENDIZAJES.md — la
|
|
108
|
+
causa de la causa vale más que el fix.
|
|
109
|
+
|
|
110
|
+
## Reglas de comportamiento
|
|
111
|
+
|
|
112
|
+
- El triage verifica evidencia real (correr el build, reproducir el error,
|
|
113
|
+
leer el reporte) — clasificar por descripción textual produce despachos
|
|
114
|
+
erróneos.
|
|
115
|
+
- Este comando NO aplica fixes por sí mismo; el trabajo lo hacen los fixers
|
|
116
|
+
especializados con sus permisos declarados.
|
|
117
|
+
- Reportar siempre qué ruta se eligió y por qué — el usuario debe poder
|
|
118
|
+
invocar el fixer directo la próxima vez.
|