@saulwade/swl-ses 1.3.4 → 1.3.5
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 +1 -1
- package/README.md +1 -1
- package/bin/swl-mcp-server.js +187 -187
- package/bin/swl-ses.js +4 -62
- package/comandos/swl/.evolved.json +22 -22
- package/comandos/swl/adoptar-proyecto.md +207 -207
- package/comandos/swl/contribuir.md +233 -233
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/benchmark-memoria/SKILL.md +186 -186
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/SKILL.md +171 -171
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/eval-framework/SKILL.md +212 -212
- package/habilidades/extractor-de-aprendizajes/SKILL.md +321 -321
- package/habilidades/harness-claude-code/SKILL.md +299 -299
- package/habilidades/infra-github-actions/SKILL.md +166 -166
- package/habilidades/legacy-code-rescue/SKILL.md +267 -267
- package/habilidades/manejo-errores/.evolved.json +8 -8
- package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
- package/habilidades/patrones-python/SKILL.md +229 -229
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
- package/habilidades/planear-fase/SKILL.md +319 -319
- package/habilidades/release-semver/.evolved.json +8 -8
- package/habilidades/swl-claudemd/SKILL.md +220 -220
- package/habilidades/testing-python/SKILL.md +340 -340
- package/hooks/claudemd-bloat-detector.js +161 -161
- package/hooks/extraccion-aprendizajes.js +19 -12
- package/hooks/lib/agent-routing.js +107 -107
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/error-classifier.js +308 -308
- package/hooks/lib/merkle-audit.js +96 -96
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/rate-limit-tracker.js +253 -253
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/skill-auditor.js +588 -588
- package/hooks/lib/sync-status.js +228 -228
- package/hooks/lib/taint-tracker.js +107 -107
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/registro-turnos.js +209 -209
- package/hooks/sugerir-regenerar-inventario.js +170 -170
- package/hooks/validar-formato-post-subagente.js +140 -140
- package/hooks/validar-memoria-hook.js +218 -218
- package/instintos/prompt-appendices.yaml +57 -57
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/skills-lock.json +1093 -1093
- package/package.json +1 -1
- package/plantillas/auditor-veto-template.md +105 -105
- package/plantillas/github-workflows/README.md +47 -47
- package/plantillas/github-workflows/release-please.yml +44 -44
- package/plantillas/github-workflows/swl-ci.yml +107 -107
- package/plantillas/github-workflows/swl-security.yml +51 -51
- package/plugin.json +1 -1
- package/reglas/analisis-previo-tareas-grandes.md +172 -172
- package/reglas/arreglar-al-detectar.md +147 -147
- package/reglas/fragmentos-compartidos.md +152 -152
- package/reglas/harness-claude-code.md +213 -213
- package/reglas/usar-context7.md +226 -226
- package/schemas/diary-entry.schema.json +80 -80
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/doctor.js +77 -3
- package/scripts/field-report.js +199 -199
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-inventario.js +420 -420
- package/scripts/generar-matriz-lenguajes.js +271 -271
- package/scripts/instalador.js +38 -1
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/configurar-ci.js +380 -380
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-stack-detallado.js +307 -307
- package/scripts/lib/diary-entry.js +234 -234
- package/scripts/lib/eval-metrics-store.js +218 -218
- package/scripts/lib/eval-quality.js +171 -171
- package/scripts/lib/eval-schemas.js +144 -144
- package/scripts/lib/eval-self-correct.js +106 -106
- package/scripts/lib/eval-validator.js +185 -185
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/parsear-opciones.js +136 -0
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/scoring-instintos.js +277 -277
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/lib/transformadores/claude.js +200 -200
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-server/README.md +128 -128
- package/scripts/mcp-server/handlers.js +206 -206
- package/scripts/migrar-csv-a-array.js +168 -168
- package/scripts/migrar-fase-dominio.js +201 -201
- package/scripts/publicar.js +511 -511
- package/scripts/run-eval.js +141 -141
- package/scripts/validar-manifest.js +195 -195
- package/scripts/validar-userland-vacio.js +110 -110
- package/scripts/verificar-release.js +5 -1
|
@@ -1,319 +1,319 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: planear-fase
|
|
3
|
-
description: Crea el PLAN.md ejecutable para una fase de desarrollo. Descompone la fase en tareas atómicas con dependencias explícitas, las agrupa en oleadas de ejecución paralela cuando es posible, y aplica verificación goal-backward para garantizar que el plan completo satisface los criterios de éxito definidos en CONTEXTO.md.
|
|
4
|
-
version: "1.2.0"
|
|
5
|
-
evolved: true
|
|
6
|
-
evolved-from: "1.1.0"
|
|
7
|
-
evolved-at: "2026-05-10"
|
|
8
|
-
evolved-by: "aprender"
|
|
9
|
-
evolved-note: "Sección nueva 'Estimación de commits — bloques funcionales, no archivos' — anti-patrón confirmado en sesión ADR-0016 (estimación 12 commits resultó 7 reales, 1.7× sobreestimación por contar archivos en vez de bloques funcionales)"
|
|
10
|
-
herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
|
|
11
|
-
exclusiones:
|
|
12
|
-
- "No cargar si no existe CONTEXTO.md para la fase — ejecutar `discutir-fase` primero."
|
|
13
|
-
- "No cargar para replanificar una tarea individual dentro de una fase ya en ejecución; eso es desviación moderada, manejar con `ejecutar-fase`."
|
|
14
|
-
- "No cargar para generar backlog de producto o roadmap de alto nivel; usar `nuevo-proyecto` o conversar directamente con el usuario."
|
|
15
|
-
- "No cargar si el usuario pide 'ajustar' el PLAN.md ya aprobado sin nueva información — cada modificación al plan aprobado debe pasar por discusión primero."
|
|
16
|
-
evolvable: true # default para skill estandar
|
|
17
|
-
---
|
|
18
|
-
# Habilidad: Planear Fase de Desarrollo
|
|
19
|
-
|
|
20
|
-
## Propósito
|
|
21
|
-
|
|
22
|
-
Un plan ejecutable no es una lista de tareas — es un grafo de dependencias con
|
|
23
|
-
criterios de verificación por tarea. Esta habilidad transforma el CONTEXTO.md de
|
|
24
|
-
una fase en un PLAN.md que el agente ejecutor puede seguir sin ambigüedad y sin
|
|
25
|
-
interrumpir al usuario para pedir aclaraciones.
|
|
26
|
-
|
|
27
|
-
## Cuándo activar
|
|
28
|
-
|
|
29
|
-
- Después de ejecutar `discutir-fase` y tener CONTEXTO.md listo
|
|
30
|
-
- Cuando el usuario pide "planear la fase N"
|
|
31
|
-
- Cuando un plan existente necesita revisión o replanificación
|
|
32
|
-
|
|
33
|
-
## Cuándo NO cargar
|
|
34
|
-
|
|
35
|
-
- No existe `.planning/fases/0N-CONTEXTO.md`; en ese caso usar `discutir-fase` antes. Un PLAN.md sin contexto es un plan con suposiciones implícitas.
|
|
36
|
-
- El usuario pide ajustar el PLAN.md aprobado solo porque cambia de opinión en mitad de la ejecución — eso es desviación mayor que requiere pausa en `ejecutar-fase`, no re-planificación completa.
|
|
37
|
-
- Se quiere generar únicamente un listado de tareas sin grafo de dependencias ni oleadas; ese backlog plano no es el producto de esta habilidad.
|
|
38
|
-
- La fase ya completó todos sus slices y se busca solo actualizar HOJA-RUTA.md — eso lo hace `ejecutar-fase` al cerrar.
|
|
39
|
-
|
|
40
|
-
## Prerrequisito obligatorio
|
|
41
|
-
|
|
42
|
-
Leer `.planning/fases/0N-CONTEXTO.md` antes de generar cualquier tarea. Si no existe,
|
|
43
|
-
activar primero `discutir-fase`.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Principios de descomposición
|
|
48
|
-
|
|
49
|
-
### 1. Atomicidad
|
|
50
|
-
|
|
51
|
-
Una tarea es atómica si:
|
|
52
|
-
- Puede completarse en una sola sesión de trabajo (< 2 horas de desarrollo)
|
|
53
|
-
- Tiene un único criterio de verificación binario (funciona / no funciona)
|
|
54
|
-
- Puede hacerse commit de forma independiente sin romper el sistema
|
|
55
|
-
|
|
56
|
-
Si una tarea viola alguna de estas condiciones, subdividirla.
|
|
57
|
-
|
|
58
|
-
### 2. Dependencias explícitas
|
|
59
|
-
|
|
60
|
-
Cada tarea declara sus dependencias en formato `[T-XX, T-YY]`. Una tarea sin
|
|
61
|
-
dependencias puede ejecutarse en la primera oleada. El grafo NO puede tener ciclos.
|
|
62
|
-
|
|
63
|
-
### 3. Clasificación AFK / HITL
|
|
64
|
-
|
|
65
|
-
| Tipo | Definición |
|
|
66
|
-
|------|-----------|
|
|
67
|
-
| AFK (autónoma) | El agente puede completarla sin intervención humana |
|
|
68
|
-
| HITL (human-in-the-loop) | Requiere decisión, revisión o input del usuario |
|
|
69
|
-
|
|
70
|
-
Las tareas HITL son puntos de parada obligatoria en la ejecución.
|
|
71
|
-
|
|
72
|
-
### 4. Oleadas de ejecución
|
|
73
|
-
|
|
74
|
-
Agrupa tareas sin dependencias mutuas en la misma oleada. Las tareas de una
|
|
75
|
-
oleada pueden ejecutarse en paralelo (o en secuencia rápida si el contexto lo
|
|
76
|
-
requiere).
|
|
77
|
-
|
|
78
|
-
### 5. Estimación de commits — bloques funcionales, no archivos
|
|
79
|
-
|
|
80
|
-
Al estimar la cantidad de commits que requerirá una fase, contar **bloques
|
|
81
|
-
funcionales atómicos** (1 bloque = 1 commit), no archivos modificados. Un
|
|
82
|
-
refactor que toca 25 archivos pero implementa 7 bloques funcionales coherentes
|
|
83
|
-
genera 7 commits, no 25.
|
|
84
|
-
|
|
85
|
-
**Heurística**:
|
|
86
|
-
|
|
87
|
-
- Cada Bn (B1, B2, B3...) del plan = 1 commit atómico (incluye código + tests + manifests asociados)
|
|
88
|
-
- Modificaciones cross-archivo en el MISMO bloque funcional van al MISMO commit
|
|
89
|
-
- Tests del bloque van CON el bloque, no en commit separado (excepto TDD estricto)
|
|
90
|
-
- Bump de versión + docs + CHANGELOG = 1 commit final aparte (B-final)
|
|
91
|
-
|
|
92
|
-
**Anti-patrón observado** (sesión 2026-05-10, ADR-0016): estimación inicial
|
|
93
|
-
"~12 commits, ~25 archivos" para Opción C completa. Resultado real: 7 commits,
|
|
94
|
-
25 archivos (1.7× sobreestimación de commits). La cuenta de archivos fue
|
|
95
|
-
correcta; la de commits estaba inflada por contar "1 archivo nuevo = 1 commit"
|
|
96
|
-
en vez de "1 bloque funcional = 1 commit".
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Algoritmo de construcción del plan
|
|
101
|
-
|
|
102
|
-
**Paso 0 — Recopilar inteligencia del codebase (obligatorio)**
|
|
103
|
-
ANTES de planear, investigar el código existente para que el plan sea auto-contenido:
|
|
104
|
-
|
|
105
|
-
1. Ejecutar `Grep` y `Glob` para encontrar archivos relacionados con la feature
|
|
106
|
-
2. Leer los archivos encontrados y extraer:
|
|
107
|
-
- Patrones de implementación reales (con `archivo:línea`)
|
|
108
|
-
- Convenciones de naming, imports, estructura de archivos
|
|
109
|
-
- Tests existentes como referencia de estilo
|
|
110
|
-
3. Documentar en el PLAN.md bajo `## Inteligencia del codebase`:
|
|
111
|
-
- **Patrones a imitar**: snippets reales del código existente con `archivo:línea`
|
|
112
|
-
- **Archivos a modificar**: lista con propósito de cada cambio
|
|
113
|
-
- **Dependencias relevantes**: versiones y APIs que se usarán
|
|
114
|
-
- **Convenciones observadas**: naming, estructura, error handling del proyecto
|
|
115
|
-
|
|
116
|
-
> El plan debe ser auto-contenido: el implementador puede ejecutar cada tarea
|
|
117
|
-
> sin investigar el codebase por su cuenta ni tomar decisiones de diseño.
|
|
118
|
-
|
|
119
|
-
**Paso 1 — Listar entregables**
|
|
120
|
-
Del CONTEXTO.md, extraer todos los entregables (features, endpoints, componentes,
|
|
121
|
-
migraciones, documentos).
|
|
122
|
-
|
|
123
|
-
**Paso 2 — Identificar capas**
|
|
124
|
-
Para cada entregable de software, descomponerlo en capas estándar:
|
|
125
|
-
- Tipos e interfaces / esquemas
|
|
126
|
-
- Modelos de datos y migraciones
|
|
127
|
-
- Lógica de negocio (services)
|
|
128
|
-
- Interfaz externa (endpoints / componentes UI)
|
|
129
|
-
- Tests
|
|
130
|
-
- Documentación
|
|
131
|
-
|
|
132
|
-
**Paso 3 — Asignar dependencias**
|
|
133
|
-
Aplicar regla: una capa no puede implementarse sin las capas de las que depende.
|
|
134
|
-
Orden típico: tipos → modelos → services → endpoints → UI → tests.
|
|
135
|
-
|
|
136
|
-
**Paso 4 — Agrupar en oleadas**
|
|
137
|
-
Usar topological sort mental: la Oleada N contiene todas las tareas cuyas
|
|
138
|
-
dependencias están en oleadas anteriores.
|
|
139
|
-
|
|
140
|
-
**Paso 5 — Verificación goal-backward**
|
|
141
|
-
Preguntar: "Si ejecuto todas las tareas del plan, ¿el criterio de éxito del
|
|
142
|
-
CONTEXTO.md queda satisfecho?" Si la respuesta es no, agregar las tareas faltantes.
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Estructura del PLAN.md
|
|
147
|
-
|
|
148
|
-
```markdown
|
|
149
|
-
# PLAN.md — Fase [N]: [Nombre]
|
|
150
|
-
**Generado**: [fecha]
|
|
151
|
-
**Basado en**: 0N-CONTEXTO.md
|
|
152
|
-
**Criterio de éxito**: [copiado del CONTEXTO.md]
|
|
153
|
-
|
|
154
|
-
## Resumen del plan
|
|
155
|
-
- Total de tareas: N
|
|
156
|
-
- Oleadas: M
|
|
157
|
-
- Tareas HITL: K (paradas de revisión)
|
|
158
|
-
- Duración estimada: X horas / Y días
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## Inteligencia del codebase
|
|
163
|
-
|
|
164
|
-
### Patrones a imitar
|
|
165
|
-
| Patrón | Archivo:línea | Ejemplo |
|
|
166
|
-
|--------|-------------|---------|
|
|
167
|
-
| [nombre del patrón] | `src/services/ejemplo.py:42` | [snippet real del código] |
|
|
168
|
-
|
|
169
|
-
### Archivos a modificar
|
|
170
|
-
| Archivo | Propósito del cambio |
|
|
171
|
-
|---------|---------------------|
|
|
172
|
-
| `src/...` | [qué se agrega/modifica y por qué] |
|
|
173
|
-
|
|
174
|
-
### Dependencias relevantes
|
|
175
|
-
| Dependencia | Versión | API que se usa |
|
|
176
|
-
|------------|---------|---------------|
|
|
177
|
-
| [nombre] | [versión] | [funciones/clases] |
|
|
178
|
-
|
|
179
|
-
### Convenciones observadas
|
|
180
|
-
- Naming: [convención real del proyecto]
|
|
181
|
-
- Imports: [orden y estilo]
|
|
182
|
-
- Error handling: [patrón usado]
|
|
183
|
-
- Tests: [framework, estructura, naming]
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## Oleada 1 — Fundamentos (sin dependencias)
|
|
188
|
-
|
|
189
|
-
### T-01: [Nombre de la tarea]
|
|
190
|
-
- **Tipo**: AFK
|
|
191
|
-
- **Descripción**: [Qué hacer, sin ambigüedad. Incluir nombres de archivos si aplica.]
|
|
192
|
-
- **Entregable verificable**: [Qué existe cuando está completa]
|
|
193
|
-
- **Criterio de verificación**: [Comando de verificación o descripción observable]
|
|
194
|
-
- **Dependencias**: ninguna
|
|
195
|
-
- **Tiempo estimado**: 30 min
|
|
196
|
-
|
|
197
|
-
### T-02: [Nombre]
|
|
198
|
-
- **Tipo**: AFK
|
|
199
|
-
- **Descripción**:
|
|
200
|
-
- **Entregable verificable**:
|
|
201
|
-
- **Criterio de verificación**:
|
|
202
|
-
- **Dependencias**: ninguna
|
|
203
|
-
- **Tiempo estimado**:
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## Oleada 2 — [Nombre conceptual]
|
|
208
|
-
|
|
209
|
-
### T-03: [Nombre]
|
|
210
|
-
- **Tipo**: AFK
|
|
211
|
-
- **Descripción**:
|
|
212
|
-
- **Entregable verificable**:
|
|
213
|
-
- **Criterio de verificación**:
|
|
214
|
-
- **Dependencias**: [T-01, T-02]
|
|
215
|
-
- **Tiempo estimado**:
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
## Oleada N — Verificación y cierre
|
|
220
|
-
|
|
221
|
-
### T-NN: Verificación goal-backward
|
|
222
|
-
- **Tipo**: HITL
|
|
223
|
-
- **Descripción**: Revisar que todos los criterios de éxito del CONTEXTO.md estén
|
|
224
|
-
satisfechos. Presentar evidencia al usuario.
|
|
225
|
-
- **Entregable verificable**: Reporte de verificación firmado
|
|
226
|
-
- **Criterio de verificación**: Usuario confirma aprobación
|
|
227
|
-
- **Dependencias**: [todas las tareas anteriores]
|
|
228
|
-
- **Tiempo estimado**: 30 min
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## Matriz de riesgos del plan
|
|
233
|
-
|
|
234
|
-
| Tarea | Riesgo | Probabilidad | Mitigación |
|
|
235
|
-
|-------|--------|-------------|-----------|
|
|
236
|
-
| | | | |
|
|
237
|
-
|
|
238
|
-
## Tareas excluidas explícitamente
|
|
239
|
-
- [Feature X]: diferida a siguiente fase por [razón]
|
|
240
|
-
|
|
241
|
-
## Notas de diseño del plan
|
|
242
|
-
[Decisiones tomadas durante la planeación que el ejecutor debe conocer]
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## Anti-patrones a evitar en el plan
|
|
248
|
-
|
|
249
|
-
- **Tarea "Implementar módulo X"**: demasiado vaga, no atómica
|
|
250
|
-
- **Dependencias circulares**: T-03 depende de T-05 que depende de T-03
|
|
251
|
-
- **Tarea sin criterio de verificación**: no se puede saber si está hecha
|
|
252
|
-
- **Plan sin oleada de verificación final**: el plan puede estar completo pero
|
|
253
|
-
los criterios de éxito sin satisfacer
|
|
254
|
-
- **Mezclar implementación y tests en una sola tarea**: deben ser tareas separadas
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Convivencia con placeholders previos del roadmap
|
|
259
|
-
|
|
260
|
-
Si al iniciar la planeación de la Fase N existe un archivo legado tipo
|
|
261
|
-
`PLAN-fase-N.md` (placeholder breve generado al definir el roadmap original),
|
|
262
|
-
NO coexistir con el `0N-PLAN.md` recién generado. La presencia de dos archivos
|
|
263
|
-
con scopes potencialmente contradictorios confunde a futuros lectores y agentes
|
|
264
|
-
(observado en SIGM mayo 2026: placeholder de Fase 5 describía "Portal CMS" del
|
|
265
|
-
roadmap v3.0 mientras `05-PLAN.md` ya describía "Complementarios" del roadmap v5.4).
|
|
266
|
-
|
|
267
|
-
Acciones obligatorias al generar `0N-PLAN.md`:
|
|
268
|
-
|
|
269
|
-
1. Verificar si existe `PLAN-fase-N.md` placeholder en `.planning/fases/`.
|
|
270
|
-
2. Si existe y su scope coincide con el plan nuevo: eliminarlo (`git rm`) ya que
|
|
271
|
-
`0N-PLAN.md` lo supersede con detalle real.
|
|
272
|
-
3. Si existe y su scope difiere del roadmap actual (señal de renumeración previa):
|
|
273
|
-
eliminarlo y notificar al usuario que el placeholder estaba desincronizado.
|
|
274
|
-
4. Reportar en el output: "Placeholder previo eliminado: `PLAN-fase-N.md`" o
|
|
275
|
-
"Sin placeholder previo detectado".
|
|
276
|
-
|
|
277
|
-
Esto previene la deuda silenciosa de placeholders viejos coexistiendo con planes
|
|
278
|
-
reales — patrón confirmado en auditoría de gaps SIGM 2026-05-09 que detectó 3
|
|
279
|
-
placeholders desactualizados (`PLAN-fase-3/4/5.md`).
|
|
280
|
-
|
|
281
|
-
---
|
|
282
|
-
|
|
283
|
-
## Checklist antes de entregar el PLAN.md
|
|
284
|
-
|
|
285
|
-
- [ ] Todas las tareas son atómicas (< 2 horas)
|
|
286
|
-
- [ ] Todas las dependencias forman un DAG (sin ciclos)
|
|
287
|
-
- [ ] Cada tarea tiene criterio de verificación binario
|
|
288
|
-
- [ ] Las tareas HITL están identificadas y justificadas
|
|
289
|
-
- [ ] La verificación goal-backward confirma que el plan satisface CONTEXTO.md
|
|
290
|
-
- [ ] El plan está guardado en `.planning/fases/0N-PLAN.md`
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## Gotchas / Errores comunes no obvios
|
|
295
|
-
|
|
296
|
-
- **Plan sin Paso 0 (inteligencia del codebase)**: el agente genera tareas basadas en supuestos de estructura de archivos sin leer el codebase real. Causa: se omite el Paso 0 por urgencia. Solución: ejecutar `Grep` y `Glob` sobre los módulos que la fase tocará antes de escribir la primera tarea; los nombres de archivos en el PLAN.md deben ser rutas reales, no inventadas.
|
|
297
|
-
- **Ciclo en el DAG de dependencias**: T-03 depende de T-05 que depende de T-03, imposibilitando cualquier oleada de inicio. Causa: se asignan dependencias sin verificar acyclicidad. Solución: hacer topological sort mental tras asignar dependencias; si aparece un ciclo, extraer la interfaz compartida como una tarea T-00 sin dependencias.
|
|
298
|
-
- **Oleada de verificación final mezclada con implementación**: la tarea de verificación goal-backward se agrupa en la misma oleada que la última tarea de implementación, permitiendo que el ejecutor la omita. Causa: se trata la verificación como un paso más, no como una oleada separada. Solución: la oleada de verificación siempre es la última, con dependencias de todas las oleadas anteriores.
|
|
299
|
-
- **Criterio de verificación observable por el ejecutor, no por el usuario**: el criterio dice "que funcione correctamente" en lugar de un comando ejecutable. Causa: redacción laxa. Solución: el criterio debe ser un comando concreto (`pytest tests/modulo/ -v`, `curl http://localhost:8000/endpoint`) o una observación binaria ("la tabla X aparece en alembic history").
|
|
300
|
-
- **PLAN.md aprobado sin estado: aprobado en frontmatter**: el ejecutor inicia sin verificar que el plan está aprobado, lo que puede llevar a ejecutar un plan en borrador. Causa: el frontmatter no incluye `estado: aprobado`. Solución: agregar `estado: aprobado` al frontmatter antes de entregar al ejecutor, ya que `seguridad-agentes.md` exige esta verificación.
|
|
301
|
-
|
|
302
|
-
## Reglas anti-placeholder (obligatorio)
|
|
303
|
-
|
|
304
|
-
Un plan con placeholders es un defecto. El implementador debe poder ejecutar cada tarea
|
|
305
|
-
sin tomar decisiones de diseno ni pedir aclaraciones.
|
|
306
|
-
|
|
307
|
-
### Placeholders prohibidos
|
|
308
|
-
- `TBD`, `PENDIENTE`, `por definir`, `implementar despues`
|
|
309
|
-
- "agregar manejo de errores" (debe decir QUE errores y COMO)
|
|
310
|
-
- "agregar validacion" (debe decir CUAL validacion con CUAL regla)
|
|
311
|
-
- "similar a la tarea N" (debe repetir el contenido relevante)
|
|
312
|
-
- "agregar tests apropiados" (debe especificar QUE tests con QUE escenarios)
|
|
313
|
-
- Referencias a tipos/funciones no definidos en el plan
|
|
314
|
-
|
|
315
|
-
### Auto-revision antes de entregar
|
|
316
|
-
1. `grep -rni "TBD\|PENDIENTE\|por definir\|implementar despues" PLAN.md`
|
|
317
|
-
2. Cada tarea: el implementador puede ejecutarla sin preguntas?
|
|
318
|
-
3. Interfaces entre tareas: tipos y nombres consistentes?
|
|
319
|
-
4. Cada requisito tiene al menos una tarea?
|
|
1
|
+
---
|
|
2
|
+
name: planear-fase
|
|
3
|
+
description: Crea el PLAN.md ejecutable para una fase de desarrollo. Descompone la fase en tareas atómicas con dependencias explícitas, las agrupa en oleadas de ejecución paralela cuando es posible, y aplica verificación goal-backward para garantizar que el plan completo satisface los criterios de éxito definidos en CONTEXTO.md.
|
|
4
|
+
version: "1.2.0"
|
|
5
|
+
evolved: true
|
|
6
|
+
evolved-from: "1.1.0"
|
|
7
|
+
evolved-at: "2026-05-10"
|
|
8
|
+
evolved-by: "aprender"
|
|
9
|
+
evolved-note: "Sección nueva 'Estimación de commits — bloques funcionales, no archivos' — anti-patrón confirmado en sesión ADR-0016 (estimación 12 commits resultó 7 reales, 1.7× sobreestimación por contar archivos en vez de bloques funcionales)"
|
|
10
|
+
herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
|
|
11
|
+
exclusiones:
|
|
12
|
+
- "No cargar si no existe CONTEXTO.md para la fase — ejecutar `discutir-fase` primero."
|
|
13
|
+
- "No cargar para replanificar una tarea individual dentro de una fase ya en ejecución; eso es desviación moderada, manejar con `ejecutar-fase`."
|
|
14
|
+
- "No cargar para generar backlog de producto o roadmap de alto nivel; usar `nuevo-proyecto` o conversar directamente con el usuario."
|
|
15
|
+
- "No cargar si el usuario pide 'ajustar' el PLAN.md ya aprobado sin nueva información — cada modificación al plan aprobado debe pasar por discusión primero."
|
|
16
|
+
evolvable: true # default para skill estandar
|
|
17
|
+
---
|
|
18
|
+
# Habilidad: Planear Fase de Desarrollo
|
|
19
|
+
|
|
20
|
+
## Propósito
|
|
21
|
+
|
|
22
|
+
Un plan ejecutable no es una lista de tareas — es un grafo de dependencias con
|
|
23
|
+
criterios de verificación por tarea. Esta habilidad transforma el CONTEXTO.md de
|
|
24
|
+
una fase en un PLAN.md que el agente ejecutor puede seguir sin ambigüedad y sin
|
|
25
|
+
interrumpir al usuario para pedir aclaraciones.
|
|
26
|
+
|
|
27
|
+
## Cuándo activar
|
|
28
|
+
|
|
29
|
+
- Después de ejecutar `discutir-fase` y tener CONTEXTO.md listo
|
|
30
|
+
- Cuando el usuario pide "planear la fase N"
|
|
31
|
+
- Cuando un plan existente necesita revisión o replanificación
|
|
32
|
+
|
|
33
|
+
## Cuándo NO cargar
|
|
34
|
+
|
|
35
|
+
- No existe `.planning/fases/0N-CONTEXTO.md`; en ese caso usar `discutir-fase` antes. Un PLAN.md sin contexto es un plan con suposiciones implícitas.
|
|
36
|
+
- El usuario pide ajustar el PLAN.md aprobado solo porque cambia de opinión en mitad de la ejecución — eso es desviación mayor que requiere pausa en `ejecutar-fase`, no re-planificación completa.
|
|
37
|
+
- Se quiere generar únicamente un listado de tareas sin grafo de dependencias ni oleadas; ese backlog plano no es el producto de esta habilidad.
|
|
38
|
+
- La fase ya completó todos sus slices y se busca solo actualizar HOJA-RUTA.md — eso lo hace `ejecutar-fase` al cerrar.
|
|
39
|
+
|
|
40
|
+
## Prerrequisito obligatorio
|
|
41
|
+
|
|
42
|
+
Leer `.planning/fases/0N-CONTEXTO.md` antes de generar cualquier tarea. Si no existe,
|
|
43
|
+
activar primero `discutir-fase`.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Principios de descomposición
|
|
48
|
+
|
|
49
|
+
### 1. Atomicidad
|
|
50
|
+
|
|
51
|
+
Una tarea es atómica si:
|
|
52
|
+
- Puede completarse en una sola sesión de trabajo (< 2 horas de desarrollo)
|
|
53
|
+
- Tiene un único criterio de verificación binario (funciona / no funciona)
|
|
54
|
+
- Puede hacerse commit de forma independiente sin romper el sistema
|
|
55
|
+
|
|
56
|
+
Si una tarea viola alguna de estas condiciones, subdividirla.
|
|
57
|
+
|
|
58
|
+
### 2. Dependencias explícitas
|
|
59
|
+
|
|
60
|
+
Cada tarea declara sus dependencias en formato `[T-XX, T-YY]`. Una tarea sin
|
|
61
|
+
dependencias puede ejecutarse en la primera oleada. El grafo NO puede tener ciclos.
|
|
62
|
+
|
|
63
|
+
### 3. Clasificación AFK / HITL
|
|
64
|
+
|
|
65
|
+
| Tipo | Definición |
|
|
66
|
+
|------|-----------|
|
|
67
|
+
| AFK (autónoma) | El agente puede completarla sin intervención humana |
|
|
68
|
+
| HITL (human-in-the-loop) | Requiere decisión, revisión o input del usuario |
|
|
69
|
+
|
|
70
|
+
Las tareas HITL son puntos de parada obligatoria en la ejecución.
|
|
71
|
+
|
|
72
|
+
### 4. Oleadas de ejecución
|
|
73
|
+
|
|
74
|
+
Agrupa tareas sin dependencias mutuas en la misma oleada. Las tareas de una
|
|
75
|
+
oleada pueden ejecutarse en paralelo (o en secuencia rápida si el contexto lo
|
|
76
|
+
requiere).
|
|
77
|
+
|
|
78
|
+
### 5. Estimación de commits — bloques funcionales, no archivos
|
|
79
|
+
|
|
80
|
+
Al estimar la cantidad de commits que requerirá una fase, contar **bloques
|
|
81
|
+
funcionales atómicos** (1 bloque = 1 commit), no archivos modificados. Un
|
|
82
|
+
refactor que toca 25 archivos pero implementa 7 bloques funcionales coherentes
|
|
83
|
+
genera 7 commits, no 25.
|
|
84
|
+
|
|
85
|
+
**Heurística**:
|
|
86
|
+
|
|
87
|
+
- Cada Bn (B1, B2, B3...) del plan = 1 commit atómico (incluye código + tests + manifests asociados)
|
|
88
|
+
- Modificaciones cross-archivo en el MISMO bloque funcional van al MISMO commit
|
|
89
|
+
- Tests del bloque van CON el bloque, no en commit separado (excepto TDD estricto)
|
|
90
|
+
- Bump de versión + docs + CHANGELOG = 1 commit final aparte (B-final)
|
|
91
|
+
|
|
92
|
+
**Anti-patrón observado** (sesión 2026-05-10, ADR-0016): estimación inicial
|
|
93
|
+
"~12 commits, ~25 archivos" para Opción C completa. Resultado real: 7 commits,
|
|
94
|
+
25 archivos (1.7× sobreestimación de commits). La cuenta de archivos fue
|
|
95
|
+
correcta; la de commits estaba inflada por contar "1 archivo nuevo = 1 commit"
|
|
96
|
+
en vez de "1 bloque funcional = 1 commit".
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Algoritmo de construcción del plan
|
|
101
|
+
|
|
102
|
+
**Paso 0 — Recopilar inteligencia del codebase (obligatorio)**
|
|
103
|
+
ANTES de planear, investigar el código existente para que el plan sea auto-contenido:
|
|
104
|
+
|
|
105
|
+
1. Ejecutar `Grep` y `Glob` para encontrar archivos relacionados con la feature
|
|
106
|
+
2. Leer los archivos encontrados y extraer:
|
|
107
|
+
- Patrones de implementación reales (con `archivo:línea`)
|
|
108
|
+
- Convenciones de naming, imports, estructura de archivos
|
|
109
|
+
- Tests existentes como referencia de estilo
|
|
110
|
+
3. Documentar en el PLAN.md bajo `## Inteligencia del codebase`:
|
|
111
|
+
- **Patrones a imitar**: snippets reales del código existente con `archivo:línea`
|
|
112
|
+
- **Archivos a modificar**: lista con propósito de cada cambio
|
|
113
|
+
- **Dependencias relevantes**: versiones y APIs que se usarán
|
|
114
|
+
- **Convenciones observadas**: naming, estructura, error handling del proyecto
|
|
115
|
+
|
|
116
|
+
> El plan debe ser auto-contenido: el implementador puede ejecutar cada tarea
|
|
117
|
+
> sin investigar el codebase por su cuenta ni tomar decisiones de diseño.
|
|
118
|
+
|
|
119
|
+
**Paso 1 — Listar entregables**
|
|
120
|
+
Del CONTEXTO.md, extraer todos los entregables (features, endpoints, componentes,
|
|
121
|
+
migraciones, documentos).
|
|
122
|
+
|
|
123
|
+
**Paso 2 — Identificar capas**
|
|
124
|
+
Para cada entregable de software, descomponerlo en capas estándar:
|
|
125
|
+
- Tipos e interfaces / esquemas
|
|
126
|
+
- Modelos de datos y migraciones
|
|
127
|
+
- Lógica de negocio (services)
|
|
128
|
+
- Interfaz externa (endpoints / componentes UI)
|
|
129
|
+
- Tests
|
|
130
|
+
- Documentación
|
|
131
|
+
|
|
132
|
+
**Paso 3 — Asignar dependencias**
|
|
133
|
+
Aplicar regla: una capa no puede implementarse sin las capas de las que depende.
|
|
134
|
+
Orden típico: tipos → modelos → services → endpoints → UI → tests.
|
|
135
|
+
|
|
136
|
+
**Paso 4 — Agrupar en oleadas**
|
|
137
|
+
Usar topological sort mental: la Oleada N contiene todas las tareas cuyas
|
|
138
|
+
dependencias están en oleadas anteriores.
|
|
139
|
+
|
|
140
|
+
**Paso 5 — Verificación goal-backward**
|
|
141
|
+
Preguntar: "Si ejecuto todas las tareas del plan, ¿el criterio de éxito del
|
|
142
|
+
CONTEXTO.md queda satisfecho?" Si la respuesta es no, agregar las tareas faltantes.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Estructura del PLAN.md
|
|
147
|
+
|
|
148
|
+
```markdown
|
|
149
|
+
# PLAN.md — Fase [N]: [Nombre]
|
|
150
|
+
**Generado**: [fecha]
|
|
151
|
+
**Basado en**: 0N-CONTEXTO.md
|
|
152
|
+
**Criterio de éxito**: [copiado del CONTEXTO.md]
|
|
153
|
+
|
|
154
|
+
## Resumen del plan
|
|
155
|
+
- Total de tareas: N
|
|
156
|
+
- Oleadas: M
|
|
157
|
+
- Tareas HITL: K (paradas de revisión)
|
|
158
|
+
- Duración estimada: X horas / Y días
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Inteligencia del codebase
|
|
163
|
+
|
|
164
|
+
### Patrones a imitar
|
|
165
|
+
| Patrón | Archivo:línea | Ejemplo |
|
|
166
|
+
|--------|-------------|---------|
|
|
167
|
+
| [nombre del patrón] | `src/services/ejemplo.py:42` | [snippet real del código] |
|
|
168
|
+
|
|
169
|
+
### Archivos a modificar
|
|
170
|
+
| Archivo | Propósito del cambio |
|
|
171
|
+
|---------|---------------------|
|
|
172
|
+
| `src/...` | [qué se agrega/modifica y por qué] |
|
|
173
|
+
|
|
174
|
+
### Dependencias relevantes
|
|
175
|
+
| Dependencia | Versión | API que se usa |
|
|
176
|
+
|------------|---------|---------------|
|
|
177
|
+
| [nombre] | [versión] | [funciones/clases] |
|
|
178
|
+
|
|
179
|
+
### Convenciones observadas
|
|
180
|
+
- Naming: [convención real del proyecto]
|
|
181
|
+
- Imports: [orden y estilo]
|
|
182
|
+
- Error handling: [patrón usado]
|
|
183
|
+
- Tests: [framework, estructura, naming]
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Oleada 1 — Fundamentos (sin dependencias)
|
|
188
|
+
|
|
189
|
+
### T-01: [Nombre de la tarea]
|
|
190
|
+
- **Tipo**: AFK
|
|
191
|
+
- **Descripción**: [Qué hacer, sin ambigüedad. Incluir nombres de archivos si aplica.]
|
|
192
|
+
- **Entregable verificable**: [Qué existe cuando está completa]
|
|
193
|
+
- **Criterio de verificación**: [Comando de verificación o descripción observable]
|
|
194
|
+
- **Dependencias**: ninguna
|
|
195
|
+
- **Tiempo estimado**: 30 min
|
|
196
|
+
|
|
197
|
+
### T-02: [Nombre]
|
|
198
|
+
- **Tipo**: AFK
|
|
199
|
+
- **Descripción**:
|
|
200
|
+
- **Entregable verificable**:
|
|
201
|
+
- **Criterio de verificación**:
|
|
202
|
+
- **Dependencias**: ninguna
|
|
203
|
+
- **Tiempo estimado**:
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Oleada 2 — [Nombre conceptual]
|
|
208
|
+
|
|
209
|
+
### T-03: [Nombre]
|
|
210
|
+
- **Tipo**: AFK
|
|
211
|
+
- **Descripción**:
|
|
212
|
+
- **Entregable verificable**:
|
|
213
|
+
- **Criterio de verificación**:
|
|
214
|
+
- **Dependencias**: [T-01, T-02]
|
|
215
|
+
- **Tiempo estimado**:
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Oleada N — Verificación y cierre
|
|
220
|
+
|
|
221
|
+
### T-NN: Verificación goal-backward
|
|
222
|
+
- **Tipo**: HITL
|
|
223
|
+
- **Descripción**: Revisar que todos los criterios de éxito del CONTEXTO.md estén
|
|
224
|
+
satisfechos. Presentar evidencia al usuario.
|
|
225
|
+
- **Entregable verificable**: Reporte de verificación firmado
|
|
226
|
+
- **Criterio de verificación**: Usuario confirma aprobación
|
|
227
|
+
- **Dependencias**: [todas las tareas anteriores]
|
|
228
|
+
- **Tiempo estimado**: 30 min
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Matriz de riesgos del plan
|
|
233
|
+
|
|
234
|
+
| Tarea | Riesgo | Probabilidad | Mitigación |
|
|
235
|
+
|-------|--------|-------------|-----------|
|
|
236
|
+
| | | | |
|
|
237
|
+
|
|
238
|
+
## Tareas excluidas explícitamente
|
|
239
|
+
- [Feature X]: diferida a siguiente fase por [razón]
|
|
240
|
+
|
|
241
|
+
## Notas de diseño del plan
|
|
242
|
+
[Decisiones tomadas durante la planeación que el ejecutor debe conocer]
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Anti-patrones a evitar en el plan
|
|
248
|
+
|
|
249
|
+
- **Tarea "Implementar módulo X"**: demasiado vaga, no atómica
|
|
250
|
+
- **Dependencias circulares**: T-03 depende de T-05 que depende de T-03
|
|
251
|
+
- **Tarea sin criterio de verificación**: no se puede saber si está hecha
|
|
252
|
+
- **Plan sin oleada de verificación final**: el plan puede estar completo pero
|
|
253
|
+
los criterios de éxito sin satisfacer
|
|
254
|
+
- **Mezclar implementación y tests en una sola tarea**: deben ser tareas separadas
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Convivencia con placeholders previos del roadmap
|
|
259
|
+
|
|
260
|
+
Si al iniciar la planeación de la Fase N existe un archivo legado tipo
|
|
261
|
+
`PLAN-fase-N.md` (placeholder breve generado al definir el roadmap original),
|
|
262
|
+
NO coexistir con el `0N-PLAN.md` recién generado. La presencia de dos archivos
|
|
263
|
+
con scopes potencialmente contradictorios confunde a futuros lectores y agentes
|
|
264
|
+
(observado en SIGM mayo 2026: placeholder de Fase 5 describía "Portal CMS" del
|
|
265
|
+
roadmap v3.0 mientras `05-PLAN.md` ya describía "Complementarios" del roadmap v5.4).
|
|
266
|
+
|
|
267
|
+
Acciones obligatorias al generar `0N-PLAN.md`:
|
|
268
|
+
|
|
269
|
+
1. Verificar si existe `PLAN-fase-N.md` placeholder en `.planning/fases/`.
|
|
270
|
+
2. Si existe y su scope coincide con el plan nuevo: eliminarlo (`git rm`) ya que
|
|
271
|
+
`0N-PLAN.md` lo supersede con detalle real.
|
|
272
|
+
3. Si existe y su scope difiere del roadmap actual (señal de renumeración previa):
|
|
273
|
+
eliminarlo y notificar al usuario que el placeholder estaba desincronizado.
|
|
274
|
+
4. Reportar en el output: "Placeholder previo eliminado: `PLAN-fase-N.md`" o
|
|
275
|
+
"Sin placeholder previo detectado".
|
|
276
|
+
|
|
277
|
+
Esto previene la deuda silenciosa de placeholders viejos coexistiendo con planes
|
|
278
|
+
reales — patrón confirmado en auditoría de gaps SIGM 2026-05-09 que detectó 3
|
|
279
|
+
placeholders desactualizados (`PLAN-fase-3/4/5.md`).
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Checklist antes de entregar el PLAN.md
|
|
284
|
+
|
|
285
|
+
- [ ] Todas las tareas son atómicas (< 2 horas)
|
|
286
|
+
- [ ] Todas las dependencias forman un DAG (sin ciclos)
|
|
287
|
+
- [ ] Cada tarea tiene criterio de verificación binario
|
|
288
|
+
- [ ] Las tareas HITL están identificadas y justificadas
|
|
289
|
+
- [ ] La verificación goal-backward confirma que el plan satisface CONTEXTO.md
|
|
290
|
+
- [ ] El plan está guardado en `.planning/fases/0N-PLAN.md`
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Gotchas / Errores comunes no obvios
|
|
295
|
+
|
|
296
|
+
- **Plan sin Paso 0 (inteligencia del codebase)**: el agente genera tareas basadas en supuestos de estructura de archivos sin leer el codebase real. Causa: se omite el Paso 0 por urgencia. Solución: ejecutar `Grep` y `Glob` sobre los módulos que la fase tocará antes de escribir la primera tarea; los nombres de archivos en el PLAN.md deben ser rutas reales, no inventadas.
|
|
297
|
+
- **Ciclo en el DAG de dependencias**: T-03 depende de T-05 que depende de T-03, imposibilitando cualquier oleada de inicio. Causa: se asignan dependencias sin verificar acyclicidad. Solución: hacer topological sort mental tras asignar dependencias; si aparece un ciclo, extraer la interfaz compartida como una tarea T-00 sin dependencias.
|
|
298
|
+
- **Oleada de verificación final mezclada con implementación**: la tarea de verificación goal-backward se agrupa en la misma oleada que la última tarea de implementación, permitiendo que el ejecutor la omita. Causa: se trata la verificación como un paso más, no como una oleada separada. Solución: la oleada de verificación siempre es la última, con dependencias de todas las oleadas anteriores.
|
|
299
|
+
- **Criterio de verificación observable por el ejecutor, no por el usuario**: el criterio dice "que funcione correctamente" en lugar de un comando ejecutable. Causa: redacción laxa. Solución: el criterio debe ser un comando concreto (`pytest tests/modulo/ -v`, `curl http://localhost:8000/endpoint`) o una observación binaria ("la tabla X aparece en alembic history").
|
|
300
|
+
- **PLAN.md aprobado sin estado: aprobado en frontmatter**: el ejecutor inicia sin verificar que el plan está aprobado, lo que puede llevar a ejecutar un plan en borrador. Causa: el frontmatter no incluye `estado: aprobado`. Solución: agregar `estado: aprobado` al frontmatter antes de entregar al ejecutor, ya que `seguridad-agentes.md` exige esta verificación.
|
|
301
|
+
|
|
302
|
+
## Reglas anti-placeholder (obligatorio)
|
|
303
|
+
|
|
304
|
+
Un plan con placeholders es un defecto. El implementador debe poder ejecutar cada tarea
|
|
305
|
+
sin tomar decisiones de diseno ni pedir aclaraciones.
|
|
306
|
+
|
|
307
|
+
### Placeholders prohibidos
|
|
308
|
+
- `TBD`, `PENDIENTE`, `por definir`, `implementar despues`
|
|
309
|
+
- "agregar manejo de errores" (debe decir QUE errores y COMO)
|
|
310
|
+
- "agregar validacion" (debe decir CUAL validacion con CUAL regla)
|
|
311
|
+
- "similar a la tarea N" (debe repetir el contenido relevante)
|
|
312
|
+
- "agregar tests apropiados" (debe especificar QUE tests con QUE escenarios)
|
|
313
|
+
- Referencias a tipos/funciones no definidos en el plan
|
|
314
|
+
|
|
315
|
+
### Auto-revision antes de entregar
|
|
316
|
+
1. `grep -rni "TBD\|PENDIENTE\|por definir\|implementar despues" PLAN.md`
|
|
317
|
+
2. Cada tarea: el implementador puede ejecutarla sin preguntas?
|
|
318
|
+
3. Interfaces entre tareas: tipos y nombres consistentes?
|
|
319
|
+
4. Cada requisito tiene al menos una tarea?
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
{
|
|
2
|
-
"SKILL.md": {
|
|
3
|
-
"evolved": true,
|
|
4
|
-
"evolvedFrom": "1.0.1",
|
|
5
|
-
"evolvedAt": "2026-05-02",
|
|
6
|
-
"evolvedBy": "aprender",
|
|
7
|
-
"evolvedNote": "Sección nueva: publish a múltiples registries (republish-only + auth GitHub Packages)"
|
|
8
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"SKILL.md": {
|
|
3
|
+
"evolved": true,
|
|
4
|
+
"evolvedFrom": "1.0.1",
|
|
5
|
+
"evolvedAt": "2026-05-02",
|
|
6
|
+
"evolvedBy": "aprender",
|
|
7
|
+
"evolvedNote": "Sección nueva: publish a múltiples registries (republish-only + auth GitHub Packages)"
|
|
8
|
+
}
|
|
9
9
|
}
|