@saulwade/swl-ses 2.6.0 → 2.6.1
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 +197 -197
- package/README.md +600 -600
- 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 +932 -932
- 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-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/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/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- 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/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/revisor-angular-swl.md +278 -278
- 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/tdd-qa-swl.md +393 -393
- package/comandos/swl/actualizar.md +174 -174
- package/comandos/swl/adoptar-proyecto.md +265 -265
- package/comandos/swl/aprender.md +836 -836
- package/comandos/swl/aprobar-plan.md +146 -146
- package/comandos/swl/auditar-deps.md +134 -134
- package/comandos/swl/autoresearch.md +264 -264
- package/comandos/swl/ayuda.md +224 -224
- package/comandos/swl/brainstorm.md +51 -51
- package/comandos/swl/briefing.md +119 -119
- package/comandos/swl/checkpoint.md +325 -325
- package/comandos/swl/claudemd.md +234 -234
- package/comandos/swl/compactar.md +310 -310
- package/comandos/swl/configurar-ci.md +235 -235
- package/comandos/swl/contexto.md +110 -110
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/crear-skill.md +292 -292
- package/comandos/swl/cron.md +194 -194
- package/comandos/swl/discutir-fase.md +169 -169
- package/comandos/swl/ejecutar-fase.md +233 -233
- package/comandos/swl/evaluar-skill.md +520 -520
- package/comandos/swl/evolucion-continua.md +73 -73
- package/comandos/swl/evolucionar.md +267 -267
- package/comandos/swl/exportar-vault.md +583 -583
- package/comandos/swl/fix.md +118 -118
- package/comandos/swl/gateway.md +158 -158
- package/comandos/swl/inbox.md +116 -116
- package/comandos/swl/instalar.md +220 -220
- package/comandos/swl/instintos.md +86 -86
- package/comandos/swl/mapear-codebase.md +312 -312
- package/comandos/swl/mcp-status.md +175 -175
- package/comandos/swl/modelo.md +100 -100
- package/comandos/swl/nemesis.md +433 -433
- package/comandos/swl/notificaciones.md +299 -299
- package/comandos/swl/nuevo-proyecto.md +251 -251
- package/comandos/swl/planear-fase.md +263 -263
- package/comandos/swl/plugins.md +256 -256
- package/comandos/swl/predecir.md +169 -169
- package/comandos/swl/reflect-skills.md +125 -125
- package/comandos/swl/release.md +450 -450
- package/comandos/swl/revisar-impacto.md +201 -201
- package/comandos/swl/revisar.md +330 -330
- package/comandos/swl/seguridad.md +189 -189
- package/comandos/swl/sesiones.md +200 -200
- package/comandos/swl/skill-search.md +113 -113
- package/comandos/swl/status.md +345 -345
- package/comandos/swl/verificar.md +817 -817
- package/comandos/swl/wiki.md +620 -620
- package/gateway/cron/jobs.example.json +12 -12
- package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
- package/habilidades/backend-async-postgres-testing/SKILL.md +2 -1
- package/habilidades/changelog-generator/SKILL.md +174 -174
- package/habilidades/compactacion-contexto/SKILL.md +2 -1
- package/habilidades/contenedores-docker/SKILL.md +4 -2
- package/habilidades/doubt-driven-review/SKILL.md +207 -207
- package/habilidades/drift-detection/SKILL.md +1 -1
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/extractor-de-aprendizajes/SKILL.md +8 -2
- package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
- package/habilidades/harness-claude-code/SKILL.md +314 -314
- package/habilidades/instalar-sistema/SKILL.md +227 -227
- package/habilidades/planear-fase/SKILL.md +358 -358
- 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-ingenieria-requerimientos/SKILL.md +147 -147
- package/habilidades/release-semver/SKILL.md +2 -2
- package/habilidades/tdd-workflow/SKILL.md +749 -749
- package/hooks/agente-lifecycle.js +1 -1
- package/hooks/audit-trail.js +1 -1
- package/hooks/auto-consolidacion.js +1 -1
- package/hooks/captura-acciones-post.js +1 -1
- package/hooks/captura-acciones-session.js +1 -1
- package/hooks/captura-feedback-usuario.js +1 -1
- package/hooks/contexto-iteracion.js +1 -1
- package/hooks/contexto-subagente.js +68 -68
- package/hooks/degradacion-instintos.js +1 -1
- package/hooks/grafo-contexto.js +1 -1
- package/hooks/guardrail-modelo.js +1 -1
- package/hooks/inbox-aviso.js +1 -1
- package/hooks/inyeccion-contexto.js +1 -1
- package/hooks/lib/agent-matcher.js +1 -1
- package/hooks/lib/agent-routing.js +1 -1
- package/hooks/lib/captura-acciones.js +1 -1
- package/hooks/lib/etapa-metricas.js +1 -1
- package/hooks/lib/evolution-tracker.js +1 -1
- package/hooks/lib/gateway-notify.js +193 -193
- package/hooks/lib/mcp-health.js +1 -1
- package/hooks/lib/notificacion-formato.js +58 -0
- package/hooks/lib/nudge-tracker.js +1 -1
- package/hooks/lib/otlp-exporter.js +1 -1
- package/hooks/lib/propose-step.js +1 -1
- package/hooks/lib/raiz-proyecto.js +127 -102
- package/hooks/lib/run-log.js +1 -1
- package/hooks/lib/singleton-guard.js +20 -13
- package/hooks/lib/telegram-cliente.js +11 -3
- package/hooks/notificacion-telegram.js +13 -3
- package/hooks/preservar-estado-pre-compact.js +1 -1
- package/hooks/registro-turnos.js +1 -1
- package/hooks/resumen-sesion.js +1 -1
- package/hooks/risk-scoring.js +1 -1
- package/hooks/session-briefing.js +1 -1
- package/hooks/spec-gate.js +1 -1
- package/hooks/sugerir-regenerar-inventario.js +1 -1
- package/hooks/tdd-gate.js +1 -1
- package/hooks/telemetria-agentes.js +1 -1
- package/hooks/telemetria-skill-routing.js +1 -1
- package/hooks/tracking-costos.js +1 -1
- package/hooks/validar-formato-post-subagente.js +1 -1
- package/hooks/validar-intent-spec.js +1 -1
- package/hooks/validar-planning-paths.js +1 -1
- package/llms.txt +29 -29
- package/manifiestos/canonical-hashes.json +5588 -5257
- package/manifiestos/hooks-config.json +469 -469
- package/manifiestos/invariantes-criticos.json +30 -30
- package/manifiestos/modulos.json +1429 -1428
- package/manifiestos/skills-lock.json +1275 -1275
- package/package.json +94 -94
- package/plugin.json +369 -369
- package/scripts/auditar-clases-conocidas.js +134 -134
- package/scripts/bootstrap-instintos.js +85 -14
- package/scripts/canario-hooks.js +166 -166
- package/scripts/cli/autonomia.js +23 -23
- package/scripts/cli/benchmark-memoria.js +37 -37
- package/scripts/cli/ciclo-autonomo.js +73 -73
- package/scripts/cli/ciclo-fase-b.js +102 -102
- package/scripts/cli/guardrail-metrics.js +39 -39
- package/scripts/cli/memoria-search.js +69 -69
- package/scripts/cli/nudge-accionar.js +39 -39
- package/scripts/cli/run-eval.js +38 -38
- package/scripts/doctor.js +26 -3
- package/scripts/evidencia-valor.js +101 -101
- package/scripts/field-report.js +16 -16
- package/scripts/instalador.js +13 -0
- package/scripts/lib/activar-hooks-proyecto.js +116 -116
- package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
- package/scripts/lib/ciclo-autonomo/config.js +165 -165
- package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
- package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
- package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
- package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
- package/scripts/lib/ciclo-autonomo/index.js +301 -301
- package/scripts/lib/ciclo-autonomo/lock.js +124 -124
- package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
- package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
- package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
- package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
- package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -535
- package/scripts/lib/evidencia-valor.js +228 -228
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/limpiar-basura-global.js +161 -0
- 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/install-wizard.js +403 -403
- package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
- package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +0 -372
|
@@ -1,278 +1,278 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ejecutar-task-iterativo
|
|
3
|
-
description: >
|
|
4
|
-
Modo iterativo de ejecución por tarea (opt-in via /swl:ejecutar-fase --iterative)
|
|
5
|
-
donde cada tarea atómica recibe contexto fresco, implementer dispatched como
|
|
6
|
-
sub-agente independiente, revisión task-local con protocolo-revision-swl,
|
|
7
|
-
auto-debug en BLOCKED, y commit por tarea. Alternativa al modo default
|
|
8
|
-
(oleadas paralelas con verificación al final de fase). Cargar cuando la fase
|
|
9
|
-
tiene tareas con dependencias secuenciales fuertes, módulos críticos donde
|
|
10
|
-
cada tarea merece revisión adversarial inmediata, o cuando la fase tiene
|
|
11
|
-
>12 tareas y el modo paralelo arriesga acumular deuda no detectada.
|
|
12
|
-
version: "1.0.0"
|
|
13
|
-
herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep, Agent]
|
|
14
|
-
exclusiones:
|
|
15
|
-
- "No cargar si /swl:ejecutar-fase NO recibió el flag --iterative — el modo default sigue siendo oleadas paralelas."
|
|
16
|
-
- "No cargar para fases pequeñas (<5 tareas) — el overhead per-task supera el beneficio."
|
|
17
|
-
- "No cargar para tareas que no son atómicas o no tienen verificación clara — la iteración requiere boundary explícito por tarea."
|
|
18
|
-
- "No cargar si PLAN.md no tiene `estado: aprobado` — requirement freeze obligatorio antes de ejecutar."
|
|
19
|
-
evolvable: true
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
# Ejecución iterativa per-task
|
|
23
|
-
|
|
24
|
-
## Propósito
|
|
25
|
-
|
|
26
|
-
El modo default de `/swl:ejecutar-fase` ejecuta tareas en **oleadas paralelas**
|
|
27
|
-
y verifica al final de la fase con `verificar-trabajo` goal-backward. Esto es
|
|
28
|
-
eficiente para fases con tareas independientes y bajo riesgo.
|
|
29
|
-
|
|
30
|
-
Sin embargo, hay casos donde la granularidad task-por-task es superior:
|
|
31
|
-
|
|
32
|
-
- Tareas con dependencias secuenciales fuertes (cada una depende del resultado de la anterior).
|
|
33
|
-
- Módulos críticos (dinero, permisos, datos irreversibles) donde cada tarea merece revisión adversarial.
|
|
34
|
-
- Fases con >12 tareas, donde el modo paralelo arriesga acumular deuda silenciosa.
|
|
35
|
-
- El usuario explícitamente pide "una a una, revisando cada una".
|
|
36
|
-
|
|
37
|
-
Este skill implementa ese modo: 1 tarea por iteración, contexto fresco,
|
|
38
|
-
implementer dispatchado como sub-agente, review task-local con
|
|
39
|
-
`protocolo-revision-swl`, auto-debug en `BLOCKED`, y commit por tarea.
|
|
40
|
-
|
|
41
|
-
Adaptado del patrón `kiro-impl` de cc-sdd, manteniendo identidad SWL.
|
|
42
|
-
|
|
43
|
-
## Cuándo cargar
|
|
44
|
-
|
|
45
|
-
- `/swl:ejecutar-fase N --iterative` (flag explícito del usuario)
|
|
46
|
-
- El usuario pide "ejecuta el plan tarea por tarea con revisión en cada una"
|
|
47
|
-
- El PLAN.md declara en su frontmatter `modo_ejecucion: iterativo`
|
|
48
|
-
|
|
49
|
-
## Cuándo NO cargar
|
|
50
|
-
|
|
51
|
-
Ver `exclusiones` en frontmatter.
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Precondiciones (verificar antes de iterar)
|
|
56
|
-
|
|
57
|
-
1. `.planning/fases/0N-PLAN.md` con `estado: aprobado` (requirement freeze).
|
|
58
|
-
2. `.planning/ESTADO.md` inicializado o actualizado.
|
|
59
|
-
3. Working tree limpio (`git status --porcelain` vacío) o el usuario explícitamente autoriza cambios pendientes.
|
|
60
|
-
4. Tests del proyecto en estado "verde de base" — capturar baseline antes del primer task para detectar regresiones limpiamente.
|
|
61
|
-
5. Validation commands descubiertos del proyecto (test, build, lint, smoke):
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
node -e "const p=require('./package.json');console.log(JSON.stringify(p.scripts||{}))" 2>/dev/null
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Si no se pueden derivar comandos canónicos → reportar al usuario y pedir
|
|
68
|
-
guía antes de iterar.
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## El loop iterativo (1 task por iteración)
|
|
73
|
-
|
|
74
|
-
### Disciplina del loop
|
|
75
|
-
|
|
76
|
-
- **Una sola sub-tarea por iteración** (ej. 3.1, luego 3.2, luego 3.3 — no batch).
|
|
77
|
-
- **Contexto fresco**: al inicio de cada iteración, re-leer `PLAN.md` para
|
|
78
|
-
determinar la siguiente tarea actionable. NO confiar en memoria acumulada
|
|
79
|
-
de iteraciones previas.
|
|
80
|
-
- **Memoria residual mínima**: tras cada iteración, retener solo 1 línea
|
|
81
|
-
("3.1: APPROVED, 3 archivos cambiados"). Descartar status report completo
|
|
82
|
-
y detalles del reviewer.
|
|
83
|
-
- **Re-read tasks.md antes de cada nuevo dispatch** — el implementer previo
|
|
84
|
-
pudo agregar `## Implementation Notes` que aplican a la siguiente tarea.
|
|
85
|
-
|
|
86
|
-
### Iteración estándar
|
|
87
|
-
|
|
88
|
-
Para cada sub-tarea pendiente, en orden:
|
|
89
|
-
|
|
90
|
-
#### Paso 1 — Identificar la siguiente tarea
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
# Re-leer PLAN.md y encontrar primera tarea no marcada [x]
|
|
94
|
-
grep -E "^\s*- \[ \]" .planning/fases/0N-PLAN.md | head -1
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
- Saltear tareas con anotación `_Blocked:_`.
|
|
98
|
-
- Verificar dependencias declaradas en `_Depends:_` — si una dependencia no está `[x]`, ejecutarla primero o pedir resolución al usuario.
|
|
99
|
-
- Leer `_Boundary:_` para identificar los paths/módulos que esta tarea puede tocar.
|
|
100
|
-
|
|
101
|
-
#### Paso 2 — Dispatch del implementer (como sub-agente fresh)
|
|
102
|
-
|
|
103
|
-
Construir prompt con:
|
|
104
|
-
|
|
105
|
-
- Texto literal de la tarea (no parafrasear).
|
|
106
|
-
- Boundary scope.
|
|
107
|
-
- Paths a spec files (`PLAN.md`, `CONTEXTO.md`, otros).
|
|
108
|
-
- IDs literales de requirements/design references (NO inventar `REQ-*` aliases).
|
|
109
|
-
- Validation commands del proyecto (test, build, smoke) relevantes a la tarea.
|
|
110
|
-
- Implementation Notes previas del PLAN.md que apliquen al boundary actual.
|
|
111
|
-
- Indicación de si la tarea es behavioral (requiere feature flag opcional) o no-behavioral.
|
|
112
|
-
|
|
113
|
-
Invocar el sub-agente vía `Agent` tool con `subagent_type` apropiado:
|
|
114
|
-
|
|
115
|
-
- Backend Python → `backend-python-swl`
|
|
116
|
-
- Backend Node → `backend-node-swl`
|
|
117
|
-
- Frontend React → `frontend-react-swl`
|
|
118
|
-
- ... (matriz `usar-sistema-swl.md`)
|
|
119
|
-
- Fallback: `implementador-swl`
|
|
120
|
-
|
|
121
|
-
El sub-agente debe devolver un **Status Report estructurado** con campo
|
|
122
|
-
`STATUS: READY_FOR_REVIEW | BLOCKED | NEEDS_CONTEXT`.
|
|
123
|
-
|
|
124
|
-
#### Paso 3 — Manejar el status del implementer
|
|
125
|
-
|
|
126
|
-
Parsear el status solo del bloque exacto `## Status Report` con campo `STATUS:`.
|
|
127
|
-
Si el status no es parseable, re-dispatch UNA VEZ pidiendo el bloque estructurado.
|
|
128
|
-
Sin status parseable tras 2 dispatches → escalar.
|
|
129
|
-
|
|
130
|
-
| Status | Acción |
|
|
131
|
-
|--------|--------|
|
|
132
|
-
| `READY_FOR_REVIEW` | Continuar al Paso 4 (review) |
|
|
133
|
-
| `NEEDS_CONTEXT` | Re-dispatch UNA VEZ con el contexto adicional solicitado. Si persiste → Paso 5 (debug) |
|
|
134
|
-
| `BLOCKED` | Saltar a Paso 5 (debug). NO marcar la tarea como saltada |
|
|
135
|
-
|
|
136
|
-
#### Paso 4 — Review task-local
|
|
137
|
-
|
|
138
|
-
Invocar el revisor apropiado al stack:
|
|
139
|
-
|
|
140
|
-
- `revisor-codigo-swl` (general)
|
|
141
|
-
- `revisor-react-swl` / `revisor-angular-swl` (frontend)
|
|
142
|
-
- `revisor-typescript-swl` / `revisor-python-*` / etc.
|
|
143
|
-
- `revisor-seguridad-swl` (si la tarea toca auth, secretos, input externo)
|
|
144
|
-
|
|
145
|
-
El revisor carga `Skill("protocolo-revision-swl")` y emite veredicto:
|
|
146
|
-
|
|
147
|
-
| Verdict | Acción |
|
|
148
|
-
|---------|--------|
|
|
149
|
-
| `APPROVED` con score ≥9.0 | Continuar al Paso 6 (commit) |
|
|
150
|
-
| `REJECTED` (1er ciclo) | Re-dispatch del implementer con las findings del revisor. Volver al Paso 3 |
|
|
151
|
-
| `REJECTED` (2do ciclo) | Saltar al Paso 5 (debug) — la remediación no convergió |
|
|
152
|
-
|
|
153
|
-
Veredictos persistidos en `.planning/audit/reviews/<task-id>-<ts>.json`.
|
|
154
|
-
|
|
155
|
-
#### Paso 5 — Auto-debug (cuando BLOCKED o REJECTED persiste)
|
|
156
|
-
|
|
157
|
-
Invocar `depurador-swl` con contexto fresh:
|
|
158
|
-
|
|
159
|
-
- Síntoma exacto del blocker o de los findings que no se resolvieron.
|
|
160
|
-
- Stack trace, output del comando fallido, exit code.
|
|
161
|
-
- Reviewer feedback si aplica.
|
|
162
|
-
- `_Boundary:_` de la tarea.
|
|
163
|
-
- Implementation Notes relacionadas.
|
|
164
|
-
|
|
165
|
-
El depurador retorna:
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
ROOT_CAUSE: <descripción>
|
|
169
|
-
FIX_PLAN: <pasos concretos>
|
|
170
|
-
VERIFICATION: <cómo verificar el fix>
|
|
171
|
-
NEXT_ACTION: RETRY_TASK | BLOCK_TASK | STOP_FOR_HUMAN
|
|
172
|
-
CONFIDENCE: HIGH | MEDIUM | LOW
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
- `RETRY_TASK` con CONFIDENCE HIGH/MEDIUM → re-dispatch implementer con el fix plan. Volver al Paso 3.
|
|
176
|
-
- `BLOCK_TASK` → marcar tarea con `_Blocked:_<razón>_` en PLAN.md. Actualizar ESTADO.md. Continuar con la SIGUIENTE tarea (no esta).
|
|
177
|
-
- `STOP_FOR_HUMAN` → pausar el loop y escalar al usuario con el informe del depurador.
|
|
178
|
-
|
|
179
|
-
#### Paso 6 — Commit atómico de la tarea
|
|
180
|
-
|
|
181
|
-
Tras APPROVED:
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
git add <archivos del diff de esta tarea>
|
|
185
|
-
git commit -m "<tipo>(<scope>): <descripción imperativa de la tarea>
|
|
186
|
-
|
|
187
|
-
Tarea: <task-id> — <texto literal>
|
|
188
|
-
Plan: .planning/fases/0N-PLAN.md
|
|
189
|
-
Review: .planning/audit/reviews/<task-id>-<ts>.json"
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
Marcar la tarea como `[x]` en PLAN.md en el mismo commit (o en commit
|
|
193
|
-
inmediato siguiente atómico).
|
|
194
|
-
|
|
195
|
-
#### Paso 7 — Update de ESTADO.md y memoria
|
|
196
|
-
|
|
197
|
-
- Marcar tarea `[x]` en PLAN.md.
|
|
198
|
-
- Actualizar ESTADO.md con: tarea completada, commit hash, archivos cambiados, score del review.
|
|
199
|
-
- Agregar al final del PLAN.md, en sección `## Implementation Notes`, cualquier learning relevante para tareas futuras del mismo boundary o dependencia.
|
|
200
|
-
- Retener solo 1 línea en memoria de iteración para el siguiente loop.
|
|
201
|
-
|
|
202
|
-
#### Paso 8 — Próxima iteración o cierre
|
|
203
|
-
|
|
204
|
-
- Si quedan tareas pendientes: volver al Paso 1.
|
|
205
|
-
- Si todas las tareas están `[x]` o `_Blocked:_`: cerrar el loop e invocar
|
|
206
|
-
el flujo de cierre estándar de `ejecutar-fase` (RESUMEN.md, actualizar
|
|
207
|
-
HOJA-RUTA.md, verificación goal-backward final con `verificar-trabajo` —
|
|
208
|
-
ver Paso 6-8 del comando `/swl:ejecutar-fase`).
|
|
209
|
-
|
|
210
|
-
---
|
|
211
|
-
|
|
212
|
-
## Persistencia de aprendizajes entre tareas
|
|
213
|
-
|
|
214
|
-
A diferencia del modo paralelo (donde cada wave es relativamente
|
|
215
|
-
independiente), el modo iterativo propaga aprendizajes:
|
|
216
|
-
|
|
217
|
-
### En PLAN.md, sección `## Implementation Notes`:
|
|
218
|
-
|
|
219
|
-
```markdown
|
|
220
|
-
## Implementation Notes
|
|
221
|
-
|
|
222
|
-
- **Tarea 1.2 (POST /facturas)**: `Pydantic v2` cambia `parse_obj` → `model_validate`.
|
|
223
|
-
Aplica a futuras tareas que validen schemas con v2.
|
|
224
|
-
- **Tarea 2.1 (migración)**: `Alembic` no detecta cambios en `JSONB` automáticamente —
|
|
225
|
-
marcar con `nullable=False` explícito.
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
El implementer del paso 2 lee estas notes antes de empezar. Esto evita
|
|
229
|
-
repetir los mismos errores task-a-task.
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## Diferencias clave con el modo default (paralelo por oleadas)
|
|
234
|
-
|
|
235
|
-
| Aspecto | Modo default (paralelo) | Modo iterativo (este skill) |
|
|
236
|
-
|---------|------------------------|----------------------------|
|
|
237
|
-
| Granularidad | Oleada (varias tareas en paralelo) | 1 tarea por iteración |
|
|
238
|
-
| Contexto del implementer | Acumulado entre tareas de la misma oleada | Fresco por tarea (sub-agente nuevo) |
|
|
239
|
-
| Review | Al final de fase con `verificar-trabajo` | Tras cada tarea con `protocolo-revision-swl` |
|
|
240
|
-
| Auto-debug | Manual o post-mortem | Automático en BLOCKED |
|
|
241
|
-
| Commit | Atómico por slice/tarea (similar) | Atómico estricto por tarea + review JSON |
|
|
242
|
-
| Implementation Notes | No requeridas | Propagadas entre tareas |
|
|
243
|
-
| Costo en tokens | Menor | Mayor (~1.5-2× por contexto fresh) |
|
|
244
|
-
| Cuándo preferir | Fases con tareas independientes, riesgo bajo | Tareas con dependencias fuertes, módulos críticos, fases grandes |
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
## Gotchas / Errores comunes no obvios
|
|
249
|
-
|
|
250
|
-
- **Re-usar contexto acumulado del implementer entre iteraciones**: el implementer del task 3.2 NO debe tener en su contexto el reporte completo del task 3.1 — solo el `## Implementation Notes` relevante. Causa: ahorro falso de tokens. Solución: dispatch fresh siempre, los notes son el canal explícito de propagación.
|
|
251
|
-
- **Saltar el Paso 4 (review) "porque la tarea es chica"**: el review per-task es lo que distingue este modo del default. Sin review per-task, el modo iterativo es solo "lento sin beneficio". Solución: si la tarea es realmente trivial, no usar modo iterativo.
|
|
252
|
-
- **Auto-debug que sugiere FIX y se aplica sin re-review**: tras debug → fix → COMMIT directo es anti-patrón. Solución: cada FIX debe volver al Paso 4 (review) antes de commit.
|
|
253
|
-
- **Boundary violations toleradas porque "el implementer tenía que tocar eso"**: si un archivo fuera del boundary aparece en el diff y el revisor lo marca como finding, no se puede aceptar sin extender el boundary EN EL PLAN.md (decisión documentada). Solución: si el boundary necesita extenderse, actualizar PLAN.md primero y volver a iterar.
|
|
254
|
-
- **`MERGED` en main sin marcar la tarea `[x]` en PLAN.md**: deja ESTADO.md y PLAN.md desincronizados. Solución: marcar `[x]` está en el MISMO commit del cambio (no commit aparte).
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Relación con otros componentes SWL
|
|
259
|
-
|
|
260
|
-
| Componente | Relación |
|
|
261
|
-
|-----------|----------|
|
|
262
|
-
| `ejecutar-fase` | Skill padre — el flag `--iterative` cede el control a este skill |
|
|
263
|
-
| `protocolo-revision-swl` | Invocado en Paso 4 por el revisor |
|
|
264
|
-
| `verificar-trabajo` | Invocado al cerrar el loop como verificación goal-backward final |
|
|
265
|
-
| `depurador-swl` | Invocado en Paso 5 cuando hay BLOCKED o REJECTED persistente |
|
|
266
|
-
| `implementador-swl` y agentes de stack | Dispatchados como sub-agentes en Paso 2 |
|
|
267
|
-
| `notificador-swl` | Invocado en STOP_FOR_HUMAN o ESCALATE |
|
|
268
|
-
| `reglas/seguridad-agentes.md` § Recovery Catalog | Marco de escalada (reprompt → reduce-autonomy → escalate → terminate) |
|
|
269
|
-
|
|
270
|
-
## Checklist de cierre del loop
|
|
271
|
-
|
|
272
|
-
- [ ] Todas las tareas pendientes están `[x]` o `_Blocked:_<razón>_`
|
|
273
|
-
- [ ] Cada tarea tiene su review JSON en `.planning/audit/reviews/`
|
|
274
|
-
- [ ] PLAN.md tiene `## Implementation Notes` con aprendizajes relevantes
|
|
275
|
-
- [ ] ESTADO.md actualizado con commit hashes y scores
|
|
276
|
-
- [ ] Verificación goal-backward final ejecutada (`verificar-trabajo`)
|
|
277
|
-
- [ ] RESUMEN.md generado (paso del flujo estándar de `ejecutar-fase`)
|
|
278
|
-
- [ ] Working tree limpio o con cambios pendientes documentados
|
|
1
|
+
---
|
|
2
|
+
name: ejecutar-task-iterativo
|
|
3
|
+
description: >
|
|
4
|
+
Modo iterativo de ejecución por tarea (opt-in via /swl:ejecutar-fase --iterative)
|
|
5
|
+
donde cada tarea atómica recibe contexto fresco, implementer dispatched como
|
|
6
|
+
sub-agente independiente, revisión task-local con protocolo-revision-swl,
|
|
7
|
+
auto-debug en BLOCKED, y commit por tarea. Alternativa al modo default
|
|
8
|
+
(oleadas paralelas con verificación al final de fase). Cargar cuando la fase
|
|
9
|
+
tiene tareas con dependencias secuenciales fuertes, módulos críticos donde
|
|
10
|
+
cada tarea merece revisión adversarial inmediata, o cuando la fase tiene
|
|
11
|
+
>12 tareas y el modo paralelo arriesga acumular deuda no detectada.
|
|
12
|
+
version: "1.0.0"
|
|
13
|
+
herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep, Agent]
|
|
14
|
+
exclusiones:
|
|
15
|
+
- "No cargar si /swl:ejecutar-fase NO recibió el flag --iterative — el modo default sigue siendo oleadas paralelas."
|
|
16
|
+
- "No cargar para fases pequeñas (<5 tareas) — el overhead per-task supera el beneficio."
|
|
17
|
+
- "No cargar para tareas que no son atómicas o no tienen verificación clara — la iteración requiere boundary explícito por tarea."
|
|
18
|
+
- "No cargar si PLAN.md no tiene `estado: aprobado` — requirement freeze obligatorio antes de ejecutar."
|
|
19
|
+
evolvable: true
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Ejecución iterativa per-task
|
|
23
|
+
|
|
24
|
+
## Propósito
|
|
25
|
+
|
|
26
|
+
El modo default de `/swl:ejecutar-fase` ejecuta tareas en **oleadas paralelas**
|
|
27
|
+
y verifica al final de la fase con `verificar-trabajo` goal-backward. Esto es
|
|
28
|
+
eficiente para fases con tareas independientes y bajo riesgo.
|
|
29
|
+
|
|
30
|
+
Sin embargo, hay casos donde la granularidad task-por-task es superior:
|
|
31
|
+
|
|
32
|
+
- Tareas con dependencias secuenciales fuertes (cada una depende del resultado de la anterior).
|
|
33
|
+
- Módulos críticos (dinero, permisos, datos irreversibles) donde cada tarea merece revisión adversarial.
|
|
34
|
+
- Fases con >12 tareas, donde el modo paralelo arriesga acumular deuda silenciosa.
|
|
35
|
+
- El usuario explícitamente pide "una a una, revisando cada una".
|
|
36
|
+
|
|
37
|
+
Este skill implementa ese modo: 1 tarea por iteración, contexto fresco,
|
|
38
|
+
implementer dispatchado como sub-agente, review task-local con
|
|
39
|
+
`protocolo-revision-swl`, auto-debug en `BLOCKED`, y commit por tarea.
|
|
40
|
+
|
|
41
|
+
Adaptado del patrón `kiro-impl` de cc-sdd, manteniendo identidad SWL.
|
|
42
|
+
|
|
43
|
+
## Cuándo cargar
|
|
44
|
+
|
|
45
|
+
- `/swl:ejecutar-fase N --iterative` (flag explícito del usuario)
|
|
46
|
+
- El usuario pide "ejecuta el plan tarea por tarea con revisión en cada una"
|
|
47
|
+
- El PLAN.md declara en su frontmatter `modo_ejecucion: iterativo`
|
|
48
|
+
|
|
49
|
+
## Cuándo NO cargar
|
|
50
|
+
|
|
51
|
+
Ver `exclusiones` en frontmatter.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Precondiciones (verificar antes de iterar)
|
|
56
|
+
|
|
57
|
+
1. `.planning/fases/0N-PLAN.md` con `estado: aprobado` (requirement freeze).
|
|
58
|
+
2. `.planning/ESTADO.md` inicializado o actualizado.
|
|
59
|
+
3. Working tree limpio (`git status --porcelain` vacío) o el usuario explícitamente autoriza cambios pendientes.
|
|
60
|
+
4. Tests del proyecto en estado "verde de base" — capturar baseline antes del primer task para detectar regresiones limpiamente.
|
|
61
|
+
5. Validation commands descubiertos del proyecto (test, build, lint, smoke):
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
node -e "const p=require('./package.json');console.log(JSON.stringify(p.scripts||{}))" 2>/dev/null
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Si no se pueden derivar comandos canónicos → reportar al usuario y pedir
|
|
68
|
+
guía antes de iterar.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## El loop iterativo (1 task por iteración)
|
|
73
|
+
|
|
74
|
+
### Disciplina del loop
|
|
75
|
+
|
|
76
|
+
- **Una sola sub-tarea por iteración** (ej. 3.1, luego 3.2, luego 3.3 — no batch).
|
|
77
|
+
- **Contexto fresco**: al inicio de cada iteración, re-leer `PLAN.md` para
|
|
78
|
+
determinar la siguiente tarea actionable. NO confiar en memoria acumulada
|
|
79
|
+
de iteraciones previas.
|
|
80
|
+
- **Memoria residual mínima**: tras cada iteración, retener solo 1 línea
|
|
81
|
+
("3.1: APPROVED, 3 archivos cambiados"). Descartar status report completo
|
|
82
|
+
y detalles del reviewer.
|
|
83
|
+
- **Re-read tasks.md antes de cada nuevo dispatch** — el implementer previo
|
|
84
|
+
pudo agregar `## Implementation Notes` que aplican a la siguiente tarea.
|
|
85
|
+
|
|
86
|
+
### Iteración estándar
|
|
87
|
+
|
|
88
|
+
Para cada sub-tarea pendiente, en orden:
|
|
89
|
+
|
|
90
|
+
#### Paso 1 — Identificar la siguiente tarea
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Re-leer PLAN.md y encontrar primera tarea no marcada [x]
|
|
94
|
+
grep -E "^\s*- \[ \]" .planning/fases/0N-PLAN.md | head -1
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
- Saltear tareas con anotación `_Blocked:_`.
|
|
98
|
+
- Verificar dependencias declaradas en `_Depends:_` — si una dependencia no está `[x]`, ejecutarla primero o pedir resolución al usuario.
|
|
99
|
+
- Leer `_Boundary:_` para identificar los paths/módulos que esta tarea puede tocar.
|
|
100
|
+
|
|
101
|
+
#### Paso 2 — Dispatch del implementer (como sub-agente fresh)
|
|
102
|
+
|
|
103
|
+
Construir prompt con:
|
|
104
|
+
|
|
105
|
+
- Texto literal de la tarea (no parafrasear).
|
|
106
|
+
- Boundary scope.
|
|
107
|
+
- Paths a spec files (`PLAN.md`, `CONTEXTO.md`, otros).
|
|
108
|
+
- IDs literales de requirements/design references (NO inventar `REQ-*` aliases).
|
|
109
|
+
- Validation commands del proyecto (test, build, smoke) relevantes a la tarea.
|
|
110
|
+
- Implementation Notes previas del PLAN.md que apliquen al boundary actual.
|
|
111
|
+
- Indicación de si la tarea es behavioral (requiere feature flag opcional) o no-behavioral.
|
|
112
|
+
|
|
113
|
+
Invocar el sub-agente vía `Agent` tool con `subagent_type` apropiado:
|
|
114
|
+
|
|
115
|
+
- Backend Python → `backend-python-swl`
|
|
116
|
+
- Backend Node → `backend-node-swl`
|
|
117
|
+
- Frontend React → `frontend-react-swl`
|
|
118
|
+
- ... (matriz `usar-sistema-swl.md`)
|
|
119
|
+
- Fallback: `implementador-swl`
|
|
120
|
+
|
|
121
|
+
El sub-agente debe devolver un **Status Report estructurado** con campo
|
|
122
|
+
`STATUS: READY_FOR_REVIEW | BLOCKED | NEEDS_CONTEXT`.
|
|
123
|
+
|
|
124
|
+
#### Paso 3 — Manejar el status del implementer
|
|
125
|
+
|
|
126
|
+
Parsear el status solo del bloque exacto `## Status Report` con campo `STATUS:`.
|
|
127
|
+
Si el status no es parseable, re-dispatch UNA VEZ pidiendo el bloque estructurado.
|
|
128
|
+
Sin status parseable tras 2 dispatches → escalar.
|
|
129
|
+
|
|
130
|
+
| Status | Acción |
|
|
131
|
+
|--------|--------|
|
|
132
|
+
| `READY_FOR_REVIEW` | Continuar al Paso 4 (review) |
|
|
133
|
+
| `NEEDS_CONTEXT` | Re-dispatch UNA VEZ con el contexto adicional solicitado. Si persiste → Paso 5 (debug) |
|
|
134
|
+
| `BLOCKED` | Saltar a Paso 5 (debug). NO marcar la tarea como saltada |
|
|
135
|
+
|
|
136
|
+
#### Paso 4 — Review task-local
|
|
137
|
+
|
|
138
|
+
Invocar el revisor apropiado al stack:
|
|
139
|
+
|
|
140
|
+
- `revisor-codigo-swl` (general)
|
|
141
|
+
- `revisor-react-swl` / `revisor-angular-swl` (frontend)
|
|
142
|
+
- `revisor-typescript-swl` / `revisor-python-*` / etc.
|
|
143
|
+
- `revisor-seguridad-swl` (si la tarea toca auth, secretos, input externo)
|
|
144
|
+
|
|
145
|
+
El revisor carga `Skill("protocolo-revision-swl")` y emite veredicto:
|
|
146
|
+
|
|
147
|
+
| Verdict | Acción |
|
|
148
|
+
|---------|--------|
|
|
149
|
+
| `APPROVED` con score ≥9.0 | Continuar al Paso 6 (commit) |
|
|
150
|
+
| `REJECTED` (1er ciclo) | Re-dispatch del implementer con las findings del revisor. Volver al Paso 3 |
|
|
151
|
+
| `REJECTED` (2do ciclo) | Saltar al Paso 5 (debug) — la remediación no convergió |
|
|
152
|
+
|
|
153
|
+
Veredictos persistidos en `.planning/audit/reviews/<task-id>-<ts>.json`.
|
|
154
|
+
|
|
155
|
+
#### Paso 5 — Auto-debug (cuando BLOCKED o REJECTED persiste)
|
|
156
|
+
|
|
157
|
+
Invocar `depurador-swl` con contexto fresh:
|
|
158
|
+
|
|
159
|
+
- Síntoma exacto del blocker o de los findings que no se resolvieron.
|
|
160
|
+
- Stack trace, output del comando fallido, exit code.
|
|
161
|
+
- Reviewer feedback si aplica.
|
|
162
|
+
- `_Boundary:_` de la tarea.
|
|
163
|
+
- Implementation Notes relacionadas.
|
|
164
|
+
|
|
165
|
+
El depurador retorna:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
ROOT_CAUSE: <descripción>
|
|
169
|
+
FIX_PLAN: <pasos concretos>
|
|
170
|
+
VERIFICATION: <cómo verificar el fix>
|
|
171
|
+
NEXT_ACTION: RETRY_TASK | BLOCK_TASK | STOP_FOR_HUMAN
|
|
172
|
+
CONFIDENCE: HIGH | MEDIUM | LOW
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
- `RETRY_TASK` con CONFIDENCE HIGH/MEDIUM → re-dispatch implementer con el fix plan. Volver al Paso 3.
|
|
176
|
+
- `BLOCK_TASK` → marcar tarea con `_Blocked:_<razón>_` en PLAN.md. Actualizar ESTADO.md. Continuar con la SIGUIENTE tarea (no esta).
|
|
177
|
+
- `STOP_FOR_HUMAN` → pausar el loop y escalar al usuario con el informe del depurador.
|
|
178
|
+
|
|
179
|
+
#### Paso 6 — Commit atómico de la tarea
|
|
180
|
+
|
|
181
|
+
Tras APPROVED:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
git add <archivos del diff de esta tarea>
|
|
185
|
+
git commit -m "<tipo>(<scope>): <descripción imperativa de la tarea>
|
|
186
|
+
|
|
187
|
+
Tarea: <task-id> — <texto literal>
|
|
188
|
+
Plan: .planning/fases/0N-PLAN.md
|
|
189
|
+
Review: .planning/audit/reviews/<task-id>-<ts>.json"
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Marcar la tarea como `[x]` en PLAN.md en el mismo commit (o en commit
|
|
193
|
+
inmediato siguiente atómico).
|
|
194
|
+
|
|
195
|
+
#### Paso 7 — Update de ESTADO.md y memoria
|
|
196
|
+
|
|
197
|
+
- Marcar tarea `[x]` en PLAN.md.
|
|
198
|
+
- Actualizar ESTADO.md con: tarea completada, commit hash, archivos cambiados, score del review.
|
|
199
|
+
- Agregar al final del PLAN.md, en sección `## Implementation Notes`, cualquier learning relevante para tareas futuras del mismo boundary o dependencia.
|
|
200
|
+
- Retener solo 1 línea en memoria de iteración para el siguiente loop.
|
|
201
|
+
|
|
202
|
+
#### Paso 8 — Próxima iteración o cierre
|
|
203
|
+
|
|
204
|
+
- Si quedan tareas pendientes: volver al Paso 1.
|
|
205
|
+
- Si todas las tareas están `[x]` o `_Blocked:_`: cerrar el loop e invocar
|
|
206
|
+
el flujo de cierre estándar de `ejecutar-fase` (RESUMEN.md, actualizar
|
|
207
|
+
HOJA-RUTA.md, verificación goal-backward final con `verificar-trabajo` —
|
|
208
|
+
ver Paso 6-8 del comando `/swl:ejecutar-fase`).
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Persistencia de aprendizajes entre tareas
|
|
213
|
+
|
|
214
|
+
A diferencia del modo paralelo (donde cada wave es relativamente
|
|
215
|
+
independiente), el modo iterativo propaga aprendizajes:
|
|
216
|
+
|
|
217
|
+
### En PLAN.md, sección `## Implementation Notes`:
|
|
218
|
+
|
|
219
|
+
```markdown
|
|
220
|
+
## Implementation Notes
|
|
221
|
+
|
|
222
|
+
- **Tarea 1.2 (POST /facturas)**: `Pydantic v2` cambia `parse_obj` → `model_validate`.
|
|
223
|
+
Aplica a futuras tareas que validen schemas con v2.
|
|
224
|
+
- **Tarea 2.1 (migración)**: `Alembic` no detecta cambios en `JSONB` automáticamente —
|
|
225
|
+
marcar con `nullable=False` explícito.
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
El implementer del paso 2 lee estas notes antes de empezar. Esto evita
|
|
229
|
+
repetir los mismos errores task-a-task.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Diferencias clave con el modo default (paralelo por oleadas)
|
|
234
|
+
|
|
235
|
+
| Aspecto | Modo default (paralelo) | Modo iterativo (este skill) |
|
|
236
|
+
|---------|------------------------|----------------------------|
|
|
237
|
+
| Granularidad | Oleada (varias tareas en paralelo) | 1 tarea por iteración |
|
|
238
|
+
| Contexto del implementer | Acumulado entre tareas de la misma oleada | Fresco por tarea (sub-agente nuevo) |
|
|
239
|
+
| Review | Al final de fase con `verificar-trabajo` | Tras cada tarea con `protocolo-revision-swl` |
|
|
240
|
+
| Auto-debug | Manual o post-mortem | Automático en BLOCKED |
|
|
241
|
+
| Commit | Atómico por slice/tarea (similar) | Atómico estricto por tarea + review JSON |
|
|
242
|
+
| Implementation Notes | No requeridas | Propagadas entre tareas |
|
|
243
|
+
| Costo en tokens | Menor | Mayor (~1.5-2× por contexto fresh) |
|
|
244
|
+
| Cuándo preferir | Fases con tareas independientes, riesgo bajo | Tareas con dependencias fuertes, módulos críticos, fases grandes |
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Gotchas / Errores comunes no obvios
|
|
249
|
+
|
|
250
|
+
- **Re-usar contexto acumulado del implementer entre iteraciones**: el implementer del task 3.2 NO debe tener en su contexto el reporte completo del task 3.1 — solo el `## Implementation Notes` relevante. Causa: ahorro falso de tokens. Solución: dispatch fresh siempre, los notes son el canal explícito de propagación.
|
|
251
|
+
- **Saltar el Paso 4 (review) "porque la tarea es chica"**: el review per-task es lo que distingue este modo del default. Sin review per-task, el modo iterativo es solo "lento sin beneficio". Solución: si la tarea es realmente trivial, no usar modo iterativo.
|
|
252
|
+
- **Auto-debug que sugiere FIX y se aplica sin re-review**: tras debug → fix → COMMIT directo es anti-patrón. Solución: cada FIX debe volver al Paso 4 (review) antes de commit.
|
|
253
|
+
- **Boundary violations toleradas porque "el implementer tenía que tocar eso"**: si un archivo fuera del boundary aparece en el diff y el revisor lo marca como finding, no se puede aceptar sin extender el boundary EN EL PLAN.md (decisión documentada). Solución: si el boundary necesita extenderse, actualizar PLAN.md primero y volver a iterar.
|
|
254
|
+
- **`MERGED` en main sin marcar la tarea `[x]` en PLAN.md**: deja ESTADO.md y PLAN.md desincronizados. Solución: marcar `[x]` está en el MISMO commit del cambio (no commit aparte).
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Relación con otros componentes SWL
|
|
259
|
+
|
|
260
|
+
| Componente | Relación |
|
|
261
|
+
|-----------|----------|
|
|
262
|
+
| `ejecutar-fase` | Skill padre — el flag `--iterative` cede el control a este skill |
|
|
263
|
+
| `protocolo-revision-swl` | Invocado en Paso 4 por el revisor |
|
|
264
|
+
| `verificar-trabajo` | Invocado al cerrar el loop como verificación goal-backward final |
|
|
265
|
+
| `depurador-swl` | Invocado en Paso 5 cuando hay BLOCKED o REJECTED persistente |
|
|
266
|
+
| `implementador-swl` y agentes de stack | Dispatchados como sub-agentes en Paso 2 |
|
|
267
|
+
| `notificador-swl` | Invocado en STOP_FOR_HUMAN o ESCALATE |
|
|
268
|
+
| `reglas/seguridad-agentes.md` § Recovery Catalog | Marco de escalada (reprompt → reduce-autonomy → escalate → terminate) |
|
|
269
|
+
|
|
270
|
+
## Checklist de cierre del loop
|
|
271
|
+
|
|
272
|
+
- [ ] Todas las tareas pendientes están `[x]` o `_Blocked:_<razón>_`
|
|
273
|
+
- [ ] Cada tarea tiene su review JSON en `.planning/audit/reviews/`
|
|
274
|
+
- [ ] PLAN.md tiene `## Implementation Notes` con aprendizajes relevantes
|
|
275
|
+
- [ ] ESTADO.md actualizado con commit hashes y scores
|
|
276
|
+
- [ ] Verificación goal-backward final ejecutada (`verificar-trabajo`)
|
|
277
|
+
- [ ] RESUMEN.md generado (paso del flujo estándar de `ejecutar-fase`)
|
|
278
|
+
- [ ] Working tree limpio o con cambios pendientes documentados
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: extractor-de-aprendizajes
|
|
3
3
|
description: Convertir errores y patrones descubiertos durante la implementación en nuevas habilidades o reglas. Ciclo de mejora continua del sistema SWL.
|
|
4
|
-
version: "1.0.
|
|
4
|
+
version: "1.0.8"
|
|
5
5
|
herramientasPermitidas: [Read]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar para actualizar el perfil del usuario — las correcciones explícitas del usuario van a `instintos/perfil-usuario.yaml` vía `perfilador-usuario-swl`, no a APRENDIZAJES.md."
|
|
@@ -291,7 +291,7 @@ Durante `/swl:aprender`, aplicar estas reglas:
|
|
|
291
291
|
- **`rating: HIGH` asignado sin verificar criterio de irreversibilidad**: el agente promueve a CLAUDE.md un aprendizaje "MEDIUM" por el entusiasmo del momento. Causa: no se aplicó el criterio de "decisión irreversible o bug crítico". Solución: antes de asignar HIGH, verificar: ¿cambiar esto en el futuro requeriría refactorizar múltiples archivos o migrar datos? Si no, mantener MEDIUM.
|
|
292
292
|
- **Regla incompleta sobre registro de hooks**: una entrada en memoria dice "registrar en modulos.json" pero omite `hooks-config.json`, y en la siguiente iteración se repite el fallo en CI porque ambos manifiestos son obligatorios. Causa: la regla de la lección anterior no cubrió todos los manifiestos afectados. Solución: al documentar una regla sobre registro en manifiestos, listar EXPLÍCITAMENTE cada manifiesto con su responsabilidad distinta (`modulos.json` = qué copiar; `hooks-config.json` = cómo registrar evento). Evidencia: tres incidentes históricos del mismo patrón incompleto (v5.7.1, v5.7.2/3, v5.11.0).
|
|
293
293
|
- **Inventario estimado a mano en vez de regenerar**: el agente cuenta "28 hooks" visualmente y propaga la cifra a 5 archivos (CLAUDE/README/package/plugin/SALUD); al regenerar con `scripts/generar-inventario.js` el número real es 30. Causa: confiar en la observación directa en vez de la fuente de verdad determinista. Solución: antes de modificar cualquier contador en documentación oficial, ejecutar el script de inventario y usar su salida como ground truth.
|
|
294
|
-
- **Sub-agentes (Explore + revisores + agentes de documentación) reportan afirmaciones factuales no verificadas** [CONFIRMADO
|
|
294
|
+
- **Sub-agentes (Explore + revisores + agentes de documentación + agentes de implementación) reportan afirmaciones factuales no verificadas** [CONFIRMADO x9]: aplica a `Explore`, `revisor-codigo-swl`, `revisor-seguridad-swl`, `investigador-swl`, `planificador-swl`, `claude-code-guide`, agentes de implementación en `Agent(isolation:"worktree")`, y en general a cualquier sub-agente que reporte hallazgos sobre código o capacidades de herramientas. **Seis modos de falla observados**:
|
|
295
295
|
|
|
296
296
|
**Modo A — papers académicos** (sesión 2026-04-25): sub-agente Explore propuso 50h+ para implementar SPRT + Lyapunov + compositionality theorem del paper Bhardwaj 2026; costo real validado fue ~5h (solo Drift Score + Recovery Catalog). Causa: el Explore evalúa portabilidad técnica sin aplicar filtro de "datos disponibles" ni "infraestructura zero-deps". Evidencia: 3 papers analizados (evolver, Bhardwaj 2026, Zhang et al. 2026) con descarte sistemático ~70-90% del contenido propuesto.
|
|
297
297
|
|
|
@@ -301,6 +301,10 @@ Durante `/swl:aprender`, aplicar estas reglas:
|
|
|
301
301
|
|
|
302
302
|
**Modo D — agentes de documentación responden por inferencia del contexto local sin consultar la fuente oficial** (sesión 2026-06-11 swl-ses Fase 09; precedente 2026-05-15 con runtimes Cursor/Codex): `claude-code-guide` emitió veredicto categórico "Claude Code NO soporta carga condicional por `paths:` en rules; el frontmatter sería inerte" basándose en que la config local del usuario no usaba ese campo (declinó el WebFetch a docs). Un WebFetch directo a `code.claude.com/docs/en/memory` demostró lo contrario: `paths:` es feature nativa documentada con sintaxis exacta, brace expansion y soporte user-level. Aceptar el veredicto habría descartado un slice completo de la fase. Causa: "ausencia de evidencia en el contexto local" tratada como "evidencia de ausencia en el producto" — mismo patrón del precedente 2026-05-15 ("Cursor no soporta hooks" — falso). Las features recientes nunca aparecen en configs existentes precisamente por ser recientes.
|
|
303
303
|
|
|
304
|
+
**Modo E — agentes de implementación en worktree declaran honestamente una limitación de entorno, pero eso no exime de re-verificar** (caso real 2026-07-11): un agente de implementación en `Agent(isolation:"worktree")` reportó explícitamente "pytest no pudo ejecutarse localmente porque el worktree no tiene el intérprete requerido por `pyproject.toml`; solo verifiqué con `ruff check`/`ruff format`" — a diferencia de los Modos A-D, aquí el agente NO mintió ni infirió mal: describió su limitación con precisión. El riesgo no es la honestidad del agente sino tratar "declaró su limitación" como equivalente a "está verificado". Al re-ejecutar la suite real con el entorno correcto del proyecto principal tras integrar el trabajo, aparecieron 7 fallas reales (mocks con `side_effect` desactualizados por cambios de firma que el agente sí hizo pero no pudo ejercitar). Causa: un worktree nuevo no hereda automáticamente el `.venv`/entorno del checkout principal — puede resolver un intérprete distinto vía el PATH del sistema. Patrón: cualquier declaración de "no pude verificar X" en el reporte de un sub-agente es una BANDERA para verificar X manualmente con la máxima prioridad, nunca una nota informativa a ignorar.
|
|
305
|
+
|
|
306
|
+
**Modo F — sub-agente con mandato explícito de SOLO LECTURA ejecuta un comando destructivo** (caso real 2026-07-11): un agente de auditoría lanzado con "PROHIBIDO modificar cualquier archivo o la BD; solo Read/Grep/Glob y SELECT" ejecutó (vía un sub-agente anidado propio) un `rm -f` que borró un PNG de evidencia en la raíz del repo. El archivo estaba SIN TRACKEAR en git → irrecuperable (los tracked se restauran con `git checkout --`; los untracked no tienen red de seguridad). El agente REPORTÓ el incidente con honestidad en su resultado final — pero el daño ya estaba hecho. Causa: el mandato en el prompt es una instrucción, no una contención; los agentes anidados heredan herramientas, no disciplina. Diferencia con el Modo E: allí el riesgo era aceptar un reporte incompleto; aquí es daño colateral directo al workspace. Patrón doble: (1) `git status` comparativo tras CADA agente; (2) ANTES de lanzar agentes sobre un working tree con archivos untracked valiosos, protegerlos primero — commitearlos, moverlos fuera del repo o copiarlos (el trabajo sin commitear es la única víctima sin recuperación posible).
|
|
307
|
+
|
|
304
308
|
**Solución unificada — protocolo de verificación de afirmaciones factuales antes de aceptar propuesta de CUALQUIER sub-agente**:
|
|
305
309
|
|
|
306
310
|
*Patrón obligatorio aplicable a TODOS los modos*: extraer 2-3 afirmaciones factuales del reporte del sub-agente y verificar cada una con primitivas baratas (`Grep`/`Read`/`wc -l`/`ls`/`git log`) ANTES de aceptar el plan o acción. Tipos de afirmaciones a verificar:
|
|
@@ -316,6 +320,8 @@ Durante `/swl:aprender`, aplicar estas reglas:
|
|
|
316
320
|
*Para revisores de código (Modo C)*: además del patrón obligatorio, **re-clasificar severidad cuando el revisor solo miró parte del flujo**. Si el revisor marca MAYOR un bug del Response, verificar si el Request también está afectado — los happy paths típicamente involucran ambos lados.
|
|
317
321
|
|
|
318
322
|
*Para agentes de documentación (Modo D)*: todo veredicto **NO-EXISTE / NO-SOPORTADO** sobre una feature de un producto externo exige cita a la doc oficial consultada EN ese turno (URL + extracto). Si el agente "verifica" solo contra el contexto local (configs del usuario, código del repo), su veredicto es inferencia, no verificación — re-verificar con 1 WebFetch a la doc oficial antes de tomar decisiones de diseño sobre él. Regla mnemónica: *ausencia en mi config ≠ ausencia en el producto*.
|
|
323
|
+
|
|
324
|
+
*Para agentes de implementación en worktree (Modo E)*: cualquier frase tipo "no pude correr X", "el entorno no tenía Y", "solo verifiqué con Z" en el reporte final es una señal de PRIORIDAD MÁXIMA — re-ejecutar exactamente lo que el agente no pudo ejecutar (suite de tests completa, no solo el archivo que tocó) con el entorno correcto del checkout principal ANTES de dar el trabajo por terminado. Nunca degradar esa frase a "nota informativa" solo porque el resto del reporte suena confiado.
|
|
319
325
|
- **Hooks de calidad pre-commit bloquean fixtures de tests como falsos positivos**: el hook `calidad-pre-commit.js` aplica regex `\b(api_key|password|token|secret)\s*[=:]\s*["'][^"'\s]{4,}["']` que matchea fixtures legítimos en archivos de test. Caso real: test que valida que la función `sanitizar()` redacta `api_key="abc12345xyz"` se bloquea. Causa: el hook no distingue contexto de test vs producción. Solución: en archivos de test, construir fixtures con concatenación de strings (`'api' + '_key'`, `'pass' + 'word'`) o agregar marcador placeholder reconocido por el hook (`fake_`, `dummy_`, `placeholder`, `example`, `os.environ`). NUNCA bypassear el hook con `--no-verify` — el detector cumple su función; ajustar el fixture es lo correcto.
|
|
320
326
|
- **Regex de path-matching `/[\\/]<dir>[\\/]/` falla con paths relativos sin slash inicial** [CONFIRMADO x4]: hooks que filtran archivos por directorio (ej: `hooks/extraccion-aprendizajes.js` con `PATRONES_ARCHIVO_SWL_EXCLUIDO`) usan patrones que requieren un separator ANTES del nombre. Caso real: path `scripts/lib/foo.js` (sin slash inicial) eludía el filtro de exclusión y generaba placeholders espurios en APRENDIZAJES.md cada vez que se hacía `Edit` o `Write` sobre archivos del sistema SWL. Causa: el regex `[\\/]` requiere un caracter slash/backslash previo; cuando el path empieza con el nombre del directorio directamente, no matchea. Solución: usar `/(?:^|[\\/])<dir>[\\/]/` para aceptar tanto el inicio del string como un separator previo. Evidencia: 4 placeholders eliminados manualmente entre v1.3.3-v1.3.5 antes de identificar la causa raíz; fix endurecido aplicado en v1.3.5 (Fix I).
|
|
321
327
|
- **`git ls-files` es preferible a `fs.readdir` recursivo para tests anti-regresión que escanean el repo**: usar `execSync('git ls-files')` limita el escaneo a archivos versionados — evita `node_modules/`, `.git/`, `_userland/`, archivos temporales y backups sin enumerar exclusiones. Caso real: `tests/scripts/no-legacy-npx-pattern.test.js` v1.3.6 escanea 1000+ archivos versionados en <200ms; el equivalente con `fs.readdir` recursivo más exclusiones manuales sería más lento y propenso a olvidar paths. Cuando el test es de "calidad del repo" (no de comportamiento), `git ls-files` es la primitiva correcta.
|