@saulwade/swl-ses 2.4.2 → 2.5.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 +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 +989 -0
- 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 +52 -59
- 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 +93 -0
- package/scripts/field-report.js +1 -1
- 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/lib/configurar-ci.js +10 -3
- package/scripts/lib/detectar-runtime.js +12 -3
- package/scripts/lib/diary-entry.js +3 -1
- package/scripts/lib/drift-detector.js +1 -1
- package/scripts/lib/evidencia-valor.js +189 -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/pantallas/inspect.js +175 -175
- package/scripts/tui/pantallas/uninstall-wizard.js +210 -210
- package/scripts/tui/pantallas/update-wizard.js +234 -234
- package/scripts/tui/pantallas/welcome.js +189 -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
|
@@ -89,9 +89,24 @@ Espera confirmación ("sí", "correcto", "adelante") o correcciones. Si hay corr
|
|
|
89
89
|
Una vez confirmado el resumen, delega la investigación del stack al agente `investigador-swl`:
|
|
90
90
|
|
|
91
91
|
- Instrucción al agente: investigar el stack tecnológico elegido, sus versiones estables actuales, patrones recomendados, y generar el directorio `research/` dentro de `.planning/`.
|
|
92
|
-
- El agente debe producir al menos: `research/STACK.md`, `research/PATRONES.md`, `research/RIESGOS.md`.
|
|
92
|
+
- El agente debe producir al menos: `research/STACK.md`, `research/PATRONES.md`, `research/RIESGOS.md`. Estos archivos NO tienen plantilla en `plantillas/research/` — el investigador los genera desde cero (las plantillas `ARQUITECTURA/FUNCIONALIDADES/RESUMEN/TRAMPAS` son del flujo de adopción, donde hay código que mapear).
|
|
93
93
|
- Mientras el agente investiga, tú avanzas con la creación de los archivos de planeación base (Paso 5).
|
|
94
94
|
|
|
95
|
+
### Paso 4b — PRD y ADRs iniciales (opcional, proyectos no triviales)
|
|
96
|
+
|
|
97
|
+
Si el proyecto tiene ≥3 fases estimadas, dominio regulado (pregunta 14) o
|
|
98
|
+
integraciones externas complejas, ofrecer al usuario ANTES de generar la
|
|
99
|
+
planeación base:
|
|
100
|
+
|
|
101
|
+
- **`producto-prd-swl`** → PRD formal (historias de usuario, criterios de
|
|
102
|
+
aceptación de negocio, MoSCoW) que enriquece REQUISITOS.md.
|
|
103
|
+
- **`arquitecto-swl`** → ADRs iniciales en `.planning/adrs/` (elección de
|
|
104
|
+
stack, arquitectura de módulos, decisiones difíciles de revertir) + índice
|
|
105
|
+
`README.md` con estados.
|
|
106
|
+
|
|
107
|
+
Para proyectos simples (1-2 fases, CRUD, sin regulación), saltar este paso —
|
|
108
|
+
la ceremonia no compensa (`Skill("prevencion-sobreingenieria")`).
|
|
109
|
+
|
|
95
110
|
## Paso 5 — Creación de archivos de planeación
|
|
96
111
|
|
|
97
112
|
Crea el directorio `.planning/` con la siguiente estructura:
|
|
@@ -101,7 +116,9 @@ Crea el directorio `.planning/` con la siguiente estructura:
|
|
|
101
116
|
├── PROYECTO.md
|
|
102
117
|
├── REQUISITOS.md
|
|
103
118
|
├── HOJA-RUTA.md
|
|
119
|
+
├── ESTADO.md
|
|
104
120
|
├── fases/
|
|
121
|
+
├── adrs/ (si corrió el Paso 4b)
|
|
105
122
|
└── research/
|
|
106
123
|
```
|
|
107
124
|
|
|
@@ -135,6 +152,25 @@ Estructura:
|
|
|
135
152
|
- Si el usuario no definió fases claras, propón una división lógica basada en las respuestas del Bloque C
|
|
136
153
|
- Estado inicial de todas las fases: "Pendiente"
|
|
137
154
|
|
|
155
|
+
### .planning/ESTADO.md
|
|
156
|
+
|
|
157
|
+
Poblarlo desde la entrevista (NUNCA dejarlo como plantilla vacía — la plantilla
|
|
158
|
+
de `swl-ses init` es solo el esqueleto):
|
|
159
|
+
- Fase actual: "Ninguna — proyecto inicializado, siguiente paso `/swl:discutir-fase 1`"
|
|
160
|
+
- Prioridad declarada (pregunta 11), deadline (pregunta 10)
|
|
161
|
+
- Bloqueos conocidos y puntos `[POR DEFINIR]` de la entrevista
|
|
162
|
+
|
|
163
|
+
### Paso 5b — Control de versiones
|
|
164
|
+
|
|
165
|
+
Con la respuesta de la pregunta 15:
|
|
166
|
+
|
|
167
|
+
1. Si el directorio NO es un repo git: `git init -b main`.
|
|
168
|
+
2. Si no existe `.gitignore`: generarlo según el stack elegido, incluyendo
|
|
169
|
+
SIEMPRE `.env`, `.env.*`, `.claude/settings.local.json` y los dirs de
|
|
170
|
+
artefactos del stack (`node_modules/`, `__pycache__/`, `dist/`, etc.).
|
|
171
|
+
3. Commit inicial de la planeación (`chore: inicializar proyecto con planeación SWL`)
|
|
172
|
+
SOLO si el usuario confirmó usar git — nunca commitear sin preguntar.
|
|
173
|
+
|
|
138
174
|
## Paso 6 — Generar CLAUDE.md inicial del proyecto
|
|
139
175
|
|
|
140
176
|
Si NO existe `CLAUDE.md` en la raíz del proyecto, generarlo con la estructura
|
|
@@ -180,14 +216,29 @@ de continuar.
|
|
|
180
216
|
|
|
181
217
|
Detalle del contrato cruzado en `@docs/contrato-aprender-claudemd.md`.
|
|
182
218
|
|
|
183
|
-
## Paso 7 —
|
|
219
|
+
## Paso 7 — Checklist de arranque (ejecutable, no informativo)
|
|
220
|
+
|
|
221
|
+
Antes de reportar, verifica cada ítem y corrige lo que falle (Fase 4 del
|
|
222
|
+
skill `nuevo-proyecto` — este paso la hace obligatoria en el comando):
|
|
223
|
+
|
|
224
|
+
- [ ] Ningún `[TBD]`/`[POR DEFINIR]` en ítems críticos (nombre, problema, funcionalidad core) — los no críticos pueden quedar documentados
|
|
225
|
+
- [ ] Cada requisito funcional tiene etiqueta de prioridad
|
|
226
|
+
- [ ] Cada fase de HOJA-RUTA.md tiene objetivo medible y criterio de éxito
|
|
227
|
+
- [ ] ESTADO.md poblado (no plantilla vacía)
|
|
228
|
+
- [ ] CLAUDE.md auditado con veredicto OK (Paso 6)
|
|
229
|
+
- [ ] Git inicializado y `.gitignore` presente (si el usuario eligió git)
|
|
230
|
+
|
|
231
|
+
## Paso 8 — Reporte al usuario
|
|
184
232
|
|
|
185
233
|
Al terminar, reporta:
|
|
186
234
|
|
|
187
235
|
1. Lista de archivos creados con sus rutas absolutas (incluyendo CLAUDE.md
|
|
188
236
|
si se generó o se modificó)
|
|
189
237
|
2. Resumen de la investigación del agente (cuando esté disponible)
|
|
190
|
-
3.
|
|
238
|
+
3. Próximos pasos recomendados:
|
|
239
|
+
- "Para comenzar a trabajar en la Fase 1, usa `/swl:discutir-fase 1`"
|
|
240
|
+
- Si el repo vive (o vivirá) en GitHub: "`/swl:configurar-ci init` instala
|
|
241
|
+
los pipelines de CI y seguridad (lint, tests, review con Claude en PRs)"
|
|
191
242
|
4. Si encontraste riesgos o ambigüedades durante la entrevista, listarlos aquí como "Puntos a resolver"
|
|
192
243
|
|
|
193
244
|
## Reglas de comportamiento
|
package/comandos/swl/predecir.md
CHANGED
|
@@ -8,8 +8,10 @@ description: >
|
|
|
8
8
|
acuerdo. Usar antes de /swl:planear-fase en fases de riesgo, antes de un
|
|
9
9
|
refactor grande, o cuando el costo de descubrir un problema DESPUÉS de
|
|
10
10
|
implementar es alto. Con --adversarial usa el set atacante (Rompedor,
|
|
11
|
-
Tramposo, Escalador, Novato, Insider).
|
|
12
|
-
|
|
11
|
+
Tramposo, Escalador, Novato, Insider). Con --abogado-diablo delega al agente
|
|
12
|
+
abogado-diablo-swl una crítica profunda de la decisión (pre-mortem +
|
|
13
|
+
doubt-driven review) cuyo dictamen puede ser NO PROCEDER.
|
|
14
|
+
argument-hint: "[descripción del cambio] [--scope <glob>] [--adversarial] [--abogado-diablo] [--presupuesto N] [--chain planear-fase]"
|
|
13
15
|
allowed-tools: [Read, Grep, Glob, Bash, Write, Agent, Skill]
|
|
14
16
|
---
|
|
15
17
|
|
|
@@ -42,6 +44,7 @@ propuesta, el debate compara varias).
|
|
|
42
44
|
[descripción] La propuesta de cambio a analizar (obligatoria; si falta, preguntar)
|
|
43
45
|
--scope <glob> Archivos relevantes para grounding (default: derivar del texto)
|
|
44
46
|
--adversarial Set de personas atacantes en vez del set default
|
|
47
|
+
--abogado-diablo Crítica profunda de la decisión (agente abogado-diablo-swl) en vez del panel
|
|
45
48
|
--presupuesto N Máximo de hallazgos totales (default: 40 → 8 por persona)
|
|
46
49
|
--chain planear-fase Al terminar, ofrecer arrancar /swl:planear-fase con los hallazgos como contexto
|
|
47
50
|
```
|
|
@@ -120,6 +123,33 @@ Personas: [set] | Hallazgos brutos: N | Tras dedup: M
|
|
|
120
123
|
[PROCEDER | PROCEDER CON AJUSTES (lista) | REPLANTEAR (razón)]
|
|
121
124
|
```
|
|
122
125
|
|
|
126
|
+
## Modo `--abogado-diablo` — crítica de la decisión, no del cambio
|
|
127
|
+
|
|
128
|
+
El panel de personas **asume que el cambio se hará** y enumera problemas de
|
|
129
|
+
implementación. Cuando la duda es anterior — *¿deberíamos hacer esto?* — el
|
|
130
|
+
modo abogado del diablo reemplaza los Pasos 2-3 por UNA invocación profunda:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
Agent(abogado-diablo-swl) con:
|
|
134
|
+
- La propuesta + el paquete de conocimiento del Paso 1
|
|
135
|
+
- Instrucción: ejecutar su protocolo completo (pre-mortem ×2-3 +
|
|
136
|
+
doubt-driven review + steelman) y emitir dictamen
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Diferencias con el panel:
|
|
140
|
+
|
|
141
|
+
| | Panel (default/adversarial) | `--abogado-diablo` |
|
|
142
|
+
|---|---|---|
|
|
143
|
+
| Pregunta que responde | "¿Qué problemas causará este cambio?" | "¿Deberíamos hacer este cambio?" |
|
|
144
|
+
| Veredicto posible | PROCEDER / AJUSTES / REPLANTEAR | PROCEDER / CON CONDICIONES / **NO PROCEDER** |
|
|
145
|
+
| Técnica | 5 perspectivas en frío + anti-herd | Pre-mortem + alternativas descartadas + contraevidencia + trigger de reversión |
|
|
146
|
+
| Profundidad | Amplitud (5 ángulos, ~8 hallazgos c/u) | Profundidad (1 crítica exhaustiva de la decisión) |
|
|
147
|
+
|
|
148
|
+
El Paso 4 (persistencia y reporte) aplica igual — el dictamen se persiste en el
|
|
149
|
+
mismo directorio de handoff con `tipo: 'predecir-abogado-diablo'`. Combinable
|
|
150
|
+
en secuencia: primero `--abogado-diablo` (¿hacerlo?); si el dictamen es
|
|
151
|
+
PROCEDER, corrida normal del panel (¿qué cuidar al hacerlo?).
|
|
152
|
+
|
|
123
153
|
## Paso 5 — Encadenamiento (si `--chain planear-fase`)
|
|
124
154
|
|
|
125
155
|
Ofrecer arrancar `/swl:planear-fase` indicando el directorio del handoff. El
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swl:seguridad
|
|
3
|
+
description: >
|
|
4
|
+
Chequeo de seguridad del PROYECTO COMPLETO (no del diff): escaneo de secretos
|
|
5
|
+
en el repo, auditoría de dependencias con CVEs, revisión OWASP dirigida a los
|
|
6
|
+
módulos críticos vía revisor-seguridad-swl, verificación de gates de seguridad
|
|
7
|
+
del pipeline CI, y detección de superficie LLM (prompt injection) cuando
|
|
8
|
+
aplica. Consolida todo en un reporte de postura de seguridad con score, veto
|
|
9
|
+
items y acciones priorizadas. Usar al adoptar un proyecto, antes de un release
|
|
10
|
+
mayor, tras un incidente, o periódicamente. Para revisar solo los cambios de
|
|
11
|
+
una fase usar /swl:verificar --solo-seguridad; para el diff usar /swl:revisar
|
|
12
|
+
seguridad.
|
|
13
|
+
argument-hint: "[--rapido] [--threat-model] [--llm] [--json]"
|
|
14
|
+
allowed-tools: [Read, Grep, Glob, Bash, Write, Agent, Skill]
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# /swl:seguridad — Postura de seguridad del proyecto completo
|
|
18
|
+
|
|
19
|
+
Eres el coordinador de un chequeo de seguridad integral. A diferencia de
|
|
20
|
+
`/swl:verificar` (que audita el diff de una fase) y de `/swl:revisar seguridad`
|
|
21
|
+
(que revisa cambios recientes), este comando evalúa la **postura del proyecto
|
|
22
|
+
entero**: secretos, dependencias, código, pipeline y superficie LLM.
|
|
23
|
+
|
|
24
|
+
## Cuándo usar
|
|
25
|
+
|
|
26
|
+
- Al adoptar un proyecto existente (complemento natural de `/swl:adoptar-proyecto`).
|
|
27
|
+
- Antes de un release mayor o del primer despliegue productivo.
|
|
28
|
+
- Tras un incidente de seguridad o la rotación de un secreto filtrado.
|
|
29
|
+
- Periódicamente (candidato a `/swl:cron` mensual).
|
|
30
|
+
|
|
31
|
+
**Cuándo NO usar**: para el diff de una fase (→ `/swl:verificar
|
|
32
|
+
--solo-seguridad`), para revisar un PR (→ `/swl:revisar seguridad`), o para
|
|
33
|
+
auditar artefactos de skills/plugins antes de instalarlos (→
|
|
34
|
+
`Skill("seguridad-skills-ia")`).
|
|
35
|
+
|
|
36
|
+
## Flags
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
--rapido Solo capas 1-2 (secretos + dependencias). ~2 minutos.
|
|
40
|
+
--threat-model Añade la capa 6: genera/actualiza THREAT-MODEL.md con Skill("threat-model-lite").
|
|
41
|
+
--llm Fuerza la capa 5 (ai-runtime-security) aunque la detección automática no encuentre stack LLM.
|
|
42
|
+
--json Además del reporte Markdown, emite el resumen como JSON (para CI).
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Paso 0 — Carga y alcance
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
Skill("checklist-seguridad")
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Detectar el stack (lockfiles, extensiones dominantes) y enumerar los módulos
|
|
52
|
+
críticos del proyecto: auth/, endpoints/rutas públicas, manejo de archivos,
|
|
53
|
+
pagos, todo lo que toque datos de usuario. Si existe `.planning/`, revisar
|
|
54
|
+
reportes previos de este comando en `.planning/audit/` para comparar postura.
|
|
55
|
+
|
|
56
|
+
## Capa 1 — Secretos en el repositorio
|
|
57
|
+
|
|
58
|
+
Escaneo del repo completo (tracked files + historial reciente), no solo del
|
|
59
|
+
working tree:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Working tree — patrones de credenciales (mismas familias que el hook escaneo-secretos)
|
|
63
|
+
git grep -nIE "(sk-(ant|proj|live|test)-|AKIA[0-9A-Z]{16}|ghp_[A-Za-z0-9]{36}|glpat-|xox[baprs]-|-----BEGIN (RSA|EC|OPENSSH) PRIVATE KEY-----)" -- . ':!*.lock' ':!node_modules'
|
|
64
|
+
# Claves genéricas asignadas
|
|
65
|
+
git grep -nIE "(password|passwd|secret|api[_-]?key|token)\s*[=:]\s*['\"][^'\"]{8,}['\"]" -- '*.py' '*.js' '*.ts' '*.env*' '*.yaml' '*.yml' '*.json' ':!*test*' ':!*spec*'
|
|
66
|
+
# Historial: archivos .env commiteados alguna vez
|
|
67
|
+
git log --all --diff-filter=A --name-only --pretty=format: -- '*.env' '.env.*' | sort -u
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Si `gitleaks` está instalado, preferirlo (`gitleaks detect --no-banner`) —
|
|
71
|
+
cubre historial completo con menos falsos positivos. Complemento del sistema:
|
|
72
|
+
el audit-tool `pentest-scanner.js` y el hook `escaneo-secretos.js` (mismas
|
|
73
|
+
familias de patrones) están disponibles cuando swl-ses está instalado; el flujo
|
|
74
|
+
`/swl:verificar --full` los orquesta sobre el diff.
|
|
75
|
+
|
|
76
|
+
**Todo hallazgo de secreto en historial es CRÍTICO aunque ya esté rotado o
|
|
77
|
+
gitignoreado** — sigue el protocolo Hallazgo A/B/C de
|
|
78
|
+
`arreglar-al-detectar.md` (limpiar historial es operación destructiva →
|
|
79
|
+
Hallazgo C, decisión del usuario).
|
|
80
|
+
|
|
81
|
+
## Capa 2 — Dependencias (supply chain)
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
Skill("dependencias-auditoria")
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Ejecutar el auditor del ecosistema detectado (`npm audit` / `pip-audit` /
|
|
88
|
+
`cargo audit` / `govulncheck` / `composer audit` / `mvn dependency-check`).
|
|
89
|
+
Reglas de severidad de `reglas/seguridad.md`: CVE crítico → 72 horas, medio →
|
|
90
|
+
2 semanas. Registrar también: dependencias abandonadas (>18 meses sin release)
|
|
91
|
+
y pins abiertos (`^`, `>=`, `*`) en producción.
|
|
92
|
+
|
|
93
|
+
## Capa 3 — Código (OWASP, proyecto completo dirigido)
|
|
94
|
+
|
|
95
|
+
Delegar a `revisor-seguridad-swl` vía Agent con alcance de proyecto:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
Agent(revisor-seguridad-swl) con:
|
|
99
|
+
- Alcance: los módulos críticos del Paso 0 (no un diff)
|
|
100
|
+
- Instrucción: auditoría OWASP Top 10 + path traversal + CSRF con severidad
|
|
101
|
+
CVSSv3 y veto items. Priorizar auth/autz, validación de entradas, queries,
|
|
102
|
+
manejo de archivos y sanitización de salida. Cargar Skill("checklist-seguridad")
|
|
103
|
+
y Skill("auth-patrones") / Skill("iam-secretos") según lo que encuentre.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
En proyectos grandes (>500 archivos), dividir en 2-3 invocaciones por dominio
|
|
107
|
+
(auth, API pública, manejo de datos) y consolidar.
|
|
108
|
+
|
|
109
|
+
## Capa 4 — Pipeline CI (gates de seguridad)
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Skill("devsecops-pipeline-security")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Verificar contra los 5 gates del skill qué existe en `.github/workflows/` (o
|
|
116
|
+
equivalente GitLab/Azure): secret scanning (gitleaks), SAST, dependency audit,
|
|
117
|
+
container scanning, DAST. Reportar la matriz presente/ausente. Para
|
|
118
|
+
materializar los faltantes: `/swl:configurar-ci --seguridad` (instala los
|
|
119
|
+
workflows opt-in).
|
|
120
|
+
|
|
121
|
+
## Capa 5 — Superficie LLM (condicional)
|
|
122
|
+
|
|
123
|
+
Detectar stack LLM (deps `anthropic`, `openai`, `langchain`, `llama-index`,
|
|
124
|
+
servidores MCP propios, prompts en el repo). Si existe — o con `--llm`:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Skill("ai-runtime-security")
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Auditar: manejo de input no confiable hacia prompts (injection directa e
|
|
131
|
+
indirecta), guardrails de salida, secretos en system prompts, gates de
|
|
132
|
+
autonomía previos a tool-calls.
|
|
133
|
+
|
|
134
|
+
## Capa 6 — Threat model (solo con `--threat-model`)
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
Skill("threat-model-lite")
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Generar o actualizar `THREAT-MODEL.md` (STRIDE ligero: superficie de ataque,
|
|
141
|
+
activos críticos, matriz de riesgo). Si ya existe uno, actualizarlo contra los
|
|
142
|
+
endpoints/módulos nuevos en vez de regenerarlo desde cero.
|
|
143
|
+
|
|
144
|
+
## Paso final — Reporte de postura consolidado
|
|
145
|
+
|
|
146
|
+
Escribir `.planning/audit/seguridad-postura-[YYYY-MM-DD].md` (si no hay
|
|
147
|
+
`.planning/`, ofrecer la raíz del proyecto):
|
|
148
|
+
|
|
149
|
+
```markdown
|
|
150
|
+
# Postura de seguridad — [proyecto] — [fecha]
|
|
151
|
+
|
|
152
|
+
## Score por capa
|
|
153
|
+
| Capa | Score | Veredicto |
|
|
154
|
+
|------|-------|-----------|
|
|
155
|
+
| 1. Secretos | N/100 | ... |
|
|
156
|
+
| 2. Dependencias | N/100 | ... |
|
|
157
|
+
| 3. Código OWASP | N/100 | ... |
|
|
158
|
+
| 4. Pipeline CI | N/100 | ... |
|
|
159
|
+
| 5. Superficie LLM | N/100 o N/A | ... |
|
|
160
|
+
|
|
161
|
+
## VETO ITEMS DETECTADOS
|
|
162
|
+
[secreto en historial, SQL injection, eval con input, CVE crítico sin parche…
|
|
163
|
+
→ score global CAP a 60/100 con 1 veto, 30/100 con 2+. Formato de
|
|
164
|
+
reglas/gobernanza.md § Veto items]
|
|
165
|
+
|
|
166
|
+
## Hallazgos priorizados
|
|
167
|
+
| # | Severidad (CVSSv3) | Capa | archivo:línea | Hallazgo | Remediación |
|
|
168
|
+
|
|
169
|
+
## Acciones recomendadas (en orden)
|
|
170
|
+
1. [acción — comando SWL que la ejecuta si existe]
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Reportar al usuario el resumen con el score global y las top 3 acciones. Si
|
|
174
|
+
hay hallazgos CRÍTICOS, recordar el flujo de remediación: `/swl:fix` (triage y
|
|
175
|
+
reparación) o `/swl:verificar --solo-seguridad --until-converge` tras corregir.
|
|
176
|
+
|
|
177
|
+
## Reglas de comportamiento
|
|
178
|
+
|
|
179
|
+
- **Este comando NO modifica código ni secretos** — diagnostica y prioriza.
|
|
180
|
+
La remediación pasa por el flujo fix/verificar con el usuario al tanto.
|
|
181
|
+
- Toda cita archivo:línea del reporte sale de `Read`/`Grep` reales de esta
|
|
182
|
+
corrida (`verificar-citas-normativas.md § Familia 2`).
|
|
183
|
+
- Los veto items no se negocian ni se suavizan por presión de entrega
|
|
184
|
+
(`reglas/gobernanza.md`).
|
|
185
|
+
- Con `--rapido`, decir explícitamente qué capas NO corrieron — un reporte
|
|
186
|
+
parcial presentado como completo es degradación silenciosa.
|
|
187
|
+
- Falsos positivos de secretos (fixtures, ejemplos): verificarlos leyendo el
|
|
188
|
+
archivo antes de reportar; si son fixtures legítimos, recomendar renombrarlos
|
|
189
|
+
al patrón reconocible (`placeholder`, `example`, `dummy_`).
|
package/comandos/swl/status.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: swl:status
|
|
3
|
-
description: Comando unificado de observabilidad del sistema y la sesión. Enruta a subcomandos [salud | metricas | loops | evolucion | historico | dashboard] que reportan salud del sistema SWL, métricas de la sesión actual, trayectorias de loops iterativos, estado del ciclo de auto-evolución y dashboard histórico multi-sesión. Reemplaza los comandos previos /swl:salud, /swl:metricas, /swl:dashboard y /swl:evolucion-estado (fusionados en este desde la Fase 09).
|
|
3
|
+
description: Comando unificado de observabilidad del sistema y la sesión. Enruta a subcomandos [salud | metricas | loops | evolucion | historico | dashboard | valor] que reportan salud del sistema SWL, métricas de la sesión actual, trayectorias de loops iterativos, estado del ciclo de auto-evolución y dashboard histórico multi-sesión. Reemplaza los comandos previos /swl:salud, /swl:metricas, /swl:dashboard y /swl:evolucion-estado (fusionados en este desde la Fase 09).
|
|
4
4
|
allowed_tools: ["Read", "Write", "Bash", "Glob", "Grep"]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -17,7 +17,8 @@ funcionalidad ni de flags.
|
|
|
17
17
|
/swl:status salud — Diagnóstico de salud del sistema SWL (genera SALUD.md)
|
|
18
18
|
/swl:status metricas — Métricas de la sesión actual (tokens, costo, herramientas)
|
|
19
19
|
/swl:status metricas detalle — Desglose completo por herramienta, agente y timeline
|
|
20
|
-
/swl:status metricas fases — Progreso de fases del proyecto (desde feature-list.json)
|
|
20
|
+
/swl:status metricas fases — Progreso de fases del proyecto (desde feature-list.json)
|
|
21
|
+
/swl:status valor — Evidencia de valor del harness en ESTE proyecto (intercepciones, defectos/escapes, DORA/CI, uso — con procedencia por métrica)
|
|
21
22
|
/swl:status loops — Trayectorias de loops iterativos (.planning/loops/)
|
|
22
23
|
/swl:status evolucion — Estado del ciclo de auto-evolución (health_score, nudges…)
|
|
23
24
|
/swl:status evolucion --json — JSON crudo de metricas.json (para pipes)
|
|
@@ -44,7 +45,8 @@ como vista por defecto si el contexto lo sugiere.
|
|
|
44
45
|
| `metricas` (+ `detalle`, `fases`) | scripts de métricas de sesión + `derivar-feature-list.js` | `/swl:metricas` |
|
|
45
46
|
| `loops` | `hooks/lib/loop-telemetry.js` | `/swl:metricas loops` |
|
|
46
47
|
| `evolucion` | `hooks/ciclo-evolucion.js` (etapa métricas) + `.planning/evolution/metricas.json` | `/swl:evolucion-estado` |
|
|
47
|
-
| `dora` | `scripts/lib/metricas-dora.js` + `.planning/evolution/metricas-dora.json` | nuevo (Fase 15, ADR-0039) |
|
|
48
|
+
| `dora` | `scripts/lib/metricas-dora.js` + `.planning/evolution/metricas-dora.json` | nuevo (Fase 15, ADR-0039) |
|
|
49
|
+
| `valor` | CLI cross-scope `swl-ses valor` (`scripts/evidencia-valor.js`) — datos 100% locales; frontera y reglas anti-gaming en `docs/evidencia-valor.md` | nuevo (v2.5.1) |
|
|
48
50
|
| `historico` / `dashboard` | `Skill("swl-dashboard")` | `/swl:dashboard` |
|
|
49
51
|
|
|
50
52
|
---
|
|
@@ -6,7 +6,7 @@ description: >
|
|
|
6
6
|
tres scopes (proyecto/dominio/global), degradacion automatica por contradiccion,
|
|
7
7
|
promocion a skills/comandos/agentes, evolucion (merge, split, deprecate) y
|
|
8
8
|
proteccion contra contaminacion cross-proyecto.
|
|
9
|
-
version: "1.0.
|
|
9
|
+
version: "1.0.2"
|
|
10
10
|
herramientasPermitidas: [Read]
|
|
11
11
|
exclusiones:
|
|
12
12
|
- "No cargar para consultar instintos ya cargados en la sesión actual — si el perfil fue leído, re-cargarlo es desperdicio de contexto."
|
|
@@ -137,6 +137,8 @@ ver [recursos/referencia-instintos.md](recursos/referencia-instintos.md).
|
|
|
137
137
|
|
|
138
138
|
## Gotchas / Errores comunes no obvios
|
|
139
139
|
|
|
140
|
+
- **El relleno real de un sistema de agentes no son componentes muertos sino conocimiento sin cablear** [auditoría 2026-07-08 sobre 182 skills]: la cross-referencia de cableado mostró 120/182 skills con >5 referencias (sistema sano) y solo 2 genuinamente fuera de dominio; las 7 "huérfanas" restantes eran conocimiento de ALTO valor (doubt-driven-review, devsecops-pipeline-security, ai-runtime-security…) que ningún flujo aprovechaba — bajaron a 1 tras cablearlas a comandos y `skillsInvocables`. Método correcto de auditoría de bloat: (1) cross-referencia estática (`scripts/audit-tools/auditar-relleno-inventario.js`), (2) telemetría de uso real (`.planning/skill-metrics.json` del hook `telemetria-skill-routing`), (3) filtro de dominio del proyecto. El instinto de "borrar lo que no se usa" está mal calibrado sin el paso 3: la acción correcta para huérfanas de valor es CABLEAR, no eliminar.
|
|
141
|
+
|
|
140
142
|
- **Instinto de scope global demasiado específico de un framework**: un instinto como "En FastAPI siempre usar `selectinload`" se promueve a `global.yaml` porque tuvo alta confianza. Causa: el criterio de promoción no verificó que el patrón sea cross-proyecto y no de dominio. Solución: antes de mover a global, aplicar el filtro "¿le sirve esto a un ingeniero en cualquier stack?"; si no, mantenerlo en `dominio.yaml` o `proyecto.yaml`.
|
|
141
143
|
- **Hooks de observación con exit code != 0 interrumpen la sesión**: el hook `observe-pre.js` lanza una excepción y Claude Code detiene la tarea en curso. Causa: violación de la regla "los hooks de observación NUNCA deben producir exit code != 0". Solución: envolver toda la lógica del hook en `try/catch` y loggear el error al stderr sin propagarlo — la observabilidad nunca debe bloquear el trabajo productivo.
|
|
142
144
|
- **Duplicación de instintos entre `proyecto.yaml` y `APRENDIZAJES.md`**: el mismo anti-patrón existe en ambos canales con información inconsistente. Causa: el instinto se creó manualmente sin verificar si ya había una entrada en APRENDIZAJES.md. Solución: antes de crear un instinto nuevo, ejecutar `memoria-busqueda` para verificar si ya existe en otro canal; si existe, actualizar el canal correcto según `reglas/memoria-consolidada.md`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: discutir-fase
|
|
3
|
-
description: Cuestionario adaptativo que se ejecuta antes de planear una fase de desarrollo. Extrae decisiones técnicas y de negocio
|
|
4
|
-
version: "1.
|
|
3
|
+
description: Cuestionario adaptativo canónico que se ejecuta antes de planear una fase de desarrollo (única fuente de la entrevista — el comando /swl:discutir-fase la consume de aquí). Extrae decisiones técnicas y de negocio con bloque universal + bloques por dominio (backend, frontend, infra, integración, datos/migración), clasifica respuestas como "cerradas" (no negociables) o "abiertas" (decisión delegada al agente), y produce un CONTEXTO.md que alimenta al planificador. Inicia con discovery routing (5 paths) que evita el cuestionario completo cuando no aplica.
|
|
4
|
+
version: "1.3.0"
|
|
5
5
|
herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar si el usuario ya tiene un CONTEXTO.md poblado para la fase en curso — ir directo a `planear-fase`."
|
|
@@ -57,8 +57,8 @@ Si no hay `.planning/`, marca **proyecto verde** y salta al cuestionario complet
|
|
|
57
57
|
|------|--------------|--------|
|
|
58
58
|
| **RUTA_A** — Extiende fase existente | La petición es una extensión, fix o enhancement dentro del scope de una fase ya planeada. Cabe en `tasks` de un PLAN.md existente. | NO ejecutar cuestionario. Informar al usuario: "Esto encaja en la fase `<N>`. ¿Procedo a actualizar su PLAN.md o lanzar `/swl:ejecutar-fase <N>` directo?" |
|
|
59
59
|
| **RUTA_B** — Sin fase necesaria | Fix trivial (<5 archivos, 1 tarea, sin decisiones de scope). Bug puntual, typo, dependencia, refactor menor. | NO ejecutar cuestionario. Informar al usuario: "Esto no requiere fase formal. Procedo directo con `implementador-swl` o el agente de stack. ¿De acuerdo?" |
|
|
60
|
-
| **RUTA_C** — Nueva fase single-scope | Petición nueva, no encaja en fases existentes, single-domain. | Ejecutar cuestionario completo (Bloques 1-
|
|
61
|
-
| **RUTA_D** —
|
|
60
|
+
| **RUTA_C** — Nueva fase single-scope | Petición nueva, no encaja en fases existentes, single-domain. | Ejecutar cuestionario completo (Bloques 1-5, con el bloque de dominio que aplique). |
|
|
61
|
+
| **RUTA_D** — Nueva fase multi-domain (ADR-0020) | Petición nueva que cruza múltiples dominios y requiere sub-tareas paralelas. | Cuestionario completo (Bloques 1-5, combinando los bloques de dominio aplicables) + planificación de paralelización. Si además produciría >20 tareas en una sola fase, sugerir descomposición en N fases y confirmar con el usuario. |
|
|
62
62
|
| **RUTA_E** — Mixto | La petición combina: extensión de fase existente + nueva fase + posiblemente fix trivial. | Presentar al usuario la decomposición propuesta y confirmar antes de proceder. Para la parte "nueva fase" ejecutar cuestionario reducido. |
|
|
63
63
|
|
|
64
64
|
### Heurísticas de matching
|
|
@@ -107,41 +107,85 @@ notifica explícitamente antes de proceder.
|
|
|
107
107
|
|
|
108
108
|
## Bloque 1 — Contexto de la fase (siempre preguntar)
|
|
109
109
|
|
|
110
|
-
1. ¿Cuál es el objetivo principal de esta fase en una oración?
|
|
111
|
-
2. ¿Qué debe existir y funcionar al finalizar
|
|
112
|
-
3. ¿Hay
|
|
113
|
-
4. ¿
|
|
110
|
+
1. ¿Cuál es el objetivo principal de esta fase en una oración? ¿Cuál es el entregable más importante?
|
|
111
|
+
2. ¿Qué debe existir y funcionar al finalizar para considerarla exitosa? ¿Cómo sabremos que está terminada?
|
|
112
|
+
3. ¿Hay algo de esta fase que NO quedó claro en el roadmap y debemos aclarar ahora?
|
|
113
|
+
4. ¿Hay restricciones de tiempo (deadline, demo, sprint) o de presupuesto (costo de infra, servicios de terceros, licencias)?
|
|
114
|
+
5. ¿Alguna decisión de fases anteriores (o de producto) afecta el alcance de esta?
|
|
115
|
+
6. ¿Qué estamos asumiendo como cierto sin haberlo verificado? (supuestos explícitos — "ningún supuesto" es respuesta sospechosa: indagar al menos uno)
|
|
114
116
|
|
|
115
117
|
---
|
|
116
118
|
|
|
117
|
-
## Bloque 2 —
|
|
119
|
+
## Bloque 2 — Dominio (adaptativo: elegir según el tipo de fase)
|
|
120
|
+
|
|
121
|
+
Determina el tipo leyendo la descripción de la fase. Las fases mixtas combinan
|
|
122
|
+
los bloques aplicables. **Si hay código nuevo, al menos un bloque de dominio
|
|
123
|
+
siempre aplica** — omitirlo por considerarlo "técnico" es el error más común.
|
|
124
|
+
|
|
125
|
+
**Backend/API:**
|
|
126
|
+
- ¿Qué entidades de datos nuevas introduce? Campos principales.
|
|
127
|
+
- ¿Qué endpoints o servicios expone? ¿Se modifica alguno existente? ¿Rompe compatibilidad con consumidores actuales?
|
|
128
|
+
- ¿Hay reglas de negocio complejas o cálculos? ¿Qué validaciones son críticas — qué datos nunca deben llegar corruptos a la BD?
|
|
129
|
+
- ¿Quién tiene permiso de acceder a qué? ¿Cambia autenticación, roles o restricciones?
|
|
130
|
+
- ¿Se manejan datos personales o sensibles (PII)? ¿Hay requisitos de retención o regulatorios?
|
|
131
|
+
|
|
132
|
+
**Frontend/UI:**
|
|
133
|
+
- ¿Qué pantallas o vistas nuevas introduce? Descríbelas.
|
|
134
|
+
- ¿Cuál es el flujo principal del usuario? (de dónde viene, qué hace, adónde va) ¿Qué usuarios/segmentos se ven afectados?
|
|
135
|
+
- ¿Hay componentes reutilizables del sistema de diseño existente?
|
|
136
|
+
- ¿Qué datos consume cada pantalla y de qué endpoints?
|
|
137
|
+
- ¿Estados de carga, error y vacío considerados explícitamente?
|
|
138
|
+
|
|
139
|
+
**Infraestructura:**
|
|
140
|
+
- ¿Entorno objetivo? (dev/staging/prod y sus diferencias)
|
|
141
|
+
- ¿Secretos o variables de entorno nuevas?
|
|
142
|
+
- ¿Qué servicios gestionados (cloud) se usan? ¿Costo estimado?
|
|
143
|
+
- ¿Estrategia de rollback si el despliegue sale mal?
|
|
144
|
+
- ¿Se documenta el proceso de despliegue para el equipo (runbook)?
|
|
145
|
+
|
|
146
|
+
**Integración:**
|
|
147
|
+
- ¿Qué sistema externo se integra? ¿Hay documentación de su API y sandbox de pruebas?
|
|
148
|
+
- ¿Qué pasa si el sistema externo no responde? ¿Timeout y retry definidos?
|
|
149
|
+
- ¿Sincronización en tiempo real o batch? ¿Transformaciones de datos entre formatos?
|
|
150
|
+
- ¿Qué versión del contrato externo se asume y qué pasa si cambia?
|
|
151
|
+
|
|
152
|
+
**Datos/Migración:**
|
|
153
|
+
- ¿Qué volumen de datos se migra o transforma? ¿Hay ventana de mantenimiento o debe ser sin downtime (expand-contract)?
|
|
154
|
+
- ¿Cuál es el plan de rollback si la migración falla a la mitad? ¿Los cambios de schema son reversibles?
|
|
155
|
+
- ¿Cómo se verifica la integridad post-migración (conteos, checksums, muestreo)?
|
|
156
|
+
- ¿Hay consumidores del schema viejo que deben seguir funcionando durante la transición?
|
|
157
|
+
- ¿Se necesita respaldo previo verificado? ¿Quién lo autoriza?
|
|
118
158
|
|
|
119
|
-
|
|
159
|
+
---
|
|
120
160
|
|
|
121
|
-
|
|
122
|
-
6. ¿Se expone una nueva API pública o se modifican endpoints existentes?
|
|
123
|
-
7. ¿Hay integraciones con sistemas externos en esta fase?
|
|
124
|
-
8. ¿Se espera algún cambio en la autenticación o los permisos?
|
|
125
|
-
9. ¿Hay requerimientos de rendimiento específicos para esta fase?
|
|
161
|
+
## Bloque 3 — Calidad, proceso y operación (preguntar si aplica)
|
|
126
162
|
|
|
127
|
-
|
|
163
|
+
- ¿Se requieren tests unitarios, de integración o ambos? (TDD es default ON — gate G2; solo registrar opt-out con razón)
|
|
164
|
+
- ¿Hay features que requieren revisión de seguridad antes de merge?
|
|
165
|
+
- ¿Requerimientos no funcionales: latencia objetivo, carga esperada, concurrencia, disponibilidad?
|
|
166
|
+
- ¿Qué observabilidad debe emitir la fase (logs estructurados, métricas, alertas)? ¿Cómo sabremos en producción que funciona — o que dejó de funcionar?
|
|
167
|
+
- ¿Deployment independiente o junto con otras fases? ¿Reversible?
|
|
168
|
+
- ¿Features "nice to have" que pueden salir del scope si falta tiempo?
|
|
128
169
|
|
|
129
|
-
|
|
170
|
+
---
|
|
130
171
|
|
|
131
|
-
|
|
172
|
+
## Bloque 4 — Dependencias y riesgos (siempre preguntar)
|
|
132
173
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
13. ¿Hay features marcadas como "nice to have" que pueden salir del scope si hay tiempo?
|
|
174
|
+
- ¿Hay tareas que dependen de trabajo de otro equipo o sistema externo?
|
|
175
|
+
- ¿Cuáles son los riesgos más grandes de esta fase? ¿Alguno podría bloquear una tarea?
|
|
176
|
+
- ¿Hay deuda técnica que DEBE resolverse antes o durante esta fase?
|
|
137
177
|
|
|
138
178
|
---
|
|
139
179
|
|
|
140
|
-
## Bloque
|
|
180
|
+
## Bloque 5 — Criterios de aceptación (siempre, al final)
|
|
141
181
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
182
|
+
- ¿Qué debe demostrarse al usuario/cliente para que la fase se apruebe?
|
|
183
|
+
- ¿Hay pruebas específicas que deben pasar? (humo, carga, usuario)
|
|
184
|
+
- ¿Quién da el visto bueno final?
|
|
185
|
+
- ¿Cómo se medirá el éxito en producción — qué outcome observable mejora para el usuario, y qué NO debe degradarse? (métrica de outcome ≠ criterio de aceptación; ver `Skill("proceso-intent-engineering")` § Desired Outcomes cuando la fase lo amerite)
|
|
186
|
+
|
|
187
|
+
Los criterios se registran como REQ-IDs binarios verificables (`REQ-<fase>-NN`,
|
|
188
|
+
trazabilidad G4) — formato exacto en `recursos/plantilla-contexto.md`.
|
|
145
189
|
|
|
146
190
|
---
|
|
147
191
|
|
|
@@ -163,66 +207,22 @@ Señalar la contradicción explícitamente: "Mencionaste X antes pero ahora Y.
|
|
|
163
207
|
|
|
164
208
|
## Plantilla de salida: `.planning/fases/0N-CONTEXTO.md`
|
|
165
209
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
[Respuesta del usuario a pregunta 1 y 2]
|
|
173
|
-
|
|
174
|
-
## Criterio de éxito
|
|
175
|
-
[Lo que debe existir y funcionar al terminar]
|
|
176
|
-
|
|
177
|
-
## Restricciones de tiempo
|
|
178
|
-
- Deadline: [fecha o "sin deadline definido"]
|
|
179
|
-
- Sprint: [número si aplica]
|
|
180
|
-
|
|
181
|
-
## Decisiones técnicas
|
|
182
|
-
|
|
183
|
-
| ID | Decisión | Tipo | Notas |
|
|
184
|
-
|-----|---------|------|-------|
|
|
185
|
-
| D-01 | [decisión] | CERRADA | [contexto] |
|
|
186
|
-
| D-02 | [decisión] | ABIERTA | [el agente decidirá X porque Y] |
|
|
187
|
-
| D-03 | [decisión] | PENDIENTE | [bloquea tarea T] |
|
|
188
|
-
|
|
189
|
-
## Alcance confirmado
|
|
190
|
-
### Incluido en esta fase
|
|
191
|
-
- Feature A
|
|
192
|
-
- Feature B
|
|
193
|
-
|
|
194
|
-
### Explícitamente excluido
|
|
195
|
-
- Feature C (pasa a siguiente fase)
|
|
196
|
-
|
|
197
|
-
## Dependencias externas
|
|
198
|
-
| Dependencia | Equipo/Sistema | Estado | Riesgo |
|
|
199
|
-
|------------|---------------|--------|--------|
|
|
200
|
-
| | | | |
|
|
201
|
-
|
|
202
|
-
## Riesgos identificados
|
|
203
|
-
| Riesgo | Probabilidad | Impacto | Mitigación |
|
|
204
|
-
|--------|-------------|---------|-----------|
|
|
205
|
-
| | | | |
|
|
206
|
-
|
|
207
|
-
## Deuda técnica a resolver
|
|
208
|
-
- [ ] [deuda 1] — obligatoria
|
|
209
|
-
- [ ] [deuda 2] — si hay tiempo
|
|
210
|
-
|
|
211
|
-
## Decisiones pendientes (bloqueos)
|
|
212
|
-
- [ ] [decisión] — necesaria antes de [tarea]
|
|
213
|
-
|
|
214
|
-
## Notas de la discusión
|
|
215
|
-
[Contexto adicional, cambios de opinión, razonamiento detrás de decisiones]
|
|
216
|
-
```
|
|
210
|
+
La estructura canónica del archivo (frontmatter con gate TDD, tabla de
|
|
211
|
+
decisiones CERRADA/ABIERTA/PENDIENTE, supuestos, no-goals, criterios de
|
|
212
|
+
aceptación con REQ-IDs G4, métrica de outcome, NFRs, rollback, riesgos y
|
|
213
|
+
dependencias) vive en **`recursos/plantilla-contexto.md`** — única fuente,
|
|
214
|
+
compartida con el comando `/swl:discutir-fase`. Leerla antes de escribir el
|
|
215
|
+
archivo; no reconstruirla de memoria.
|
|
217
216
|
|
|
218
217
|
---
|
|
219
218
|
|
|
220
219
|
## Gotchas / Errores comunes no obvios
|
|
221
220
|
|
|
222
221
|
- **Respuesta "como siempre" archivada sin verificar**: el usuario dice "igual que en la fase anterior" y el agente asume que el patrón aplica sin leer el CONTEXTO.md previo. Causa: confianza en el modelo mental sin verificación. Solución: siempre leer el CONTEXTO.md de la fase anterior antes de aceptar la respuesta.
|
|
223
|
-
- **Decisiones PENDIENTE que bloquean el plan ignoradas**: el agente avanza a `planear-fase` con ítems de los Bloques 1 o
|
|
222
|
+
- **Decisiones PENDIENTE que bloquean el plan ignoradas**: el agente avanza a `planear-fase` con ítems de los Bloques 1, 4 o 5 en estado PENDIENTE. Causa: no se aplicó la Regla 3. Solución: verificar explícitamente que ningún ítem crítico quede PENDIENTE antes de cerrar la discusión.
|
|
224
223
|
- **CONTEXTO.md escrito sin confirmar criterio de éxito verificable**: el usuario da un objetivo vago ("mejorar rendimiento") y se registra sin cuestionarlo. Causa: el agente no aplica la prueba de observabilidad. Solución: pedir reformulación hasta que el criterio sea binario y observable.
|
|
225
|
-
- **Bloque
|
|
224
|
+
- **Bloque de dominio omitido cuando sí aplica**: la fase incluye nuevas entidades de BD o endpoints pero el agente saltó el Bloque 2 por considerarlo "técnico". Causa: interpretación laxa de "preguntar si aplica". Solución: si hay código nuevo, al menos un bloque de dominio siempre aplica.
|
|
225
|
+
- **Fase con migración de datos sin preguntas de rollback**: la fase toca schema o migra datos pero el agente usó solo el bloque backend y nunca preguntó por reversibilidad ni verificación de integridad. Causa: no combinar bloques en fases mixtas. Solución: cualquier cambio destructivo de datos activa el bloque Datos/Migración completo.
|
|
226
226
|
|
|
227
227
|
## Checklist de cierre de discusión
|
|
228
228
|
|
|
@@ -230,7 +230,10 @@ Antes de pasar a `planear-fase`, verificar:
|
|
|
230
230
|
|
|
231
231
|
- [ ] El objetivo de la fase es una oración accionable (no "mejorar el sistema")
|
|
232
232
|
- [ ] El criterio de éxito es verificable (observable sin ambigüedad)
|
|
233
|
-
- [ ] No hay decisiones PENDIENTE en ítems de los Bloques 1 y
|
|
233
|
+
- [ ] No hay decisiones PENDIENTE en ítems de los Bloques 1, 4 y 5
|
|
234
234
|
- [ ] Todas las decisiones ABIERTA tienen una nota de qué decidirá el agente
|
|
235
235
|
- [ ] Las features excluidas están documentadas explícitamente
|
|
236
|
-
- [ ]
|
|
236
|
+
- [ ] Los supuestos explícitos quedaron registrados (al menos uno, o justificación de por qué no hay)
|
|
237
|
+
- [ ] Si la fase toca datos/schema: rollback y verificación de integridad respondidos
|
|
238
|
+
- [ ] Los criterios de aceptación tienen REQ-IDs binarios verificables
|
|
239
|
+
- [ ] CONTEXTO.md guardado en `.planning/fases/` siguiendo `recursos/plantilla-contexto.md`
|