swl-ses 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +425 -0
- package/_userland/agentes/.gitkeep +0 -0
- package/_userland/habilidades/.gitkeep +0 -0
- package/agentes/accesibilidad-wcag-swl.md +683 -0
- package/agentes/arquitecto-swl.md +210 -0
- package/agentes/auto-evolucion-swl.md +408 -0
- package/agentes/backend-api-swl.md +442 -0
- package/agentes/backend-node-swl.md +439 -0
- package/agentes/backend-python-swl.md +469 -0
- package/agentes/backend-workers-swl.md +444 -0
- package/agentes/cloud-infra-swl.md +466 -0
- package/agentes/consolidador-swl.md +487 -0
- package/agentes/datos-swl.md +568 -0
- package/agentes/depurador-swl.md +301 -0
- package/agentes/devops-ci-swl.md +352 -0
- package/agentes/disenador-ui-swl.md +546 -0
- package/agentes/documentador-swl.md +323 -0
- package/agentes/frontend-angular-swl.md +603 -0
- package/agentes/frontend-css-swl.md +700 -0
- package/agentes/frontend-react-swl.md +672 -0
- package/agentes/frontend-swl.md +483 -0
- package/agentes/frontend-tailwind-swl.md +808 -0
- package/agentes/implementador-swl.md +235 -0
- package/agentes/investigador-swl.md +274 -0
- package/agentes/investigador-ux-swl.md +482 -0
- package/agentes/migrador-swl.md +389 -0
- package/agentes/mobile-android-swl.md +473 -0
- package/agentes/mobile-cross-swl.md +501 -0
- package/agentes/mobile-ios-swl.md +464 -0
- package/agentes/notificador-swl.md +886 -0
- package/agentes/observabilidad-swl.md +408 -0
- package/agentes/orquestador-swl.md +490 -0
- package/agentes/planificador-swl.md +222 -0
- package/agentes/producto-prd-swl.md +565 -0
- package/agentes/release-manager-swl.md +545 -0
- package/agentes/rendimiento-swl.md +691 -0
- package/agentes/revisor-codigo-swl.md +254 -0
- package/agentes/revisor-seguridad-swl.md +316 -0
- package/agentes/tdd-qa-swl.md +323 -0
- package/agentes/ux-disenador-swl.md +498 -0
- package/bin/swl-ses.js +119 -0
- package/comandos/swl/actualizar.md +117 -0
- package/comandos/swl/aprender.md +348 -0
- package/comandos/swl/auditar-deps.md +390 -0
- package/comandos/swl/autoresearch.md +346 -0
- package/comandos/swl/checkpoint.md +296 -0
- package/comandos/swl/compactar.md +283 -0
- package/comandos/swl/crear-skill.md +609 -0
- package/comandos/swl/discutir-fase.md +230 -0
- package/comandos/swl/ejecutar-fase.md +302 -0
- package/comandos/swl/evolucionar.md +377 -0
- package/comandos/swl/instalar.md +220 -0
- package/comandos/swl/mapear-codebase.md +205 -0
- package/comandos/swl/nuevo-proyecto.md +154 -0
- package/comandos/swl/planear-fase.md +221 -0
- package/comandos/swl/release.md +405 -0
- package/comandos/swl/salud.md +382 -0
- package/comandos/swl/verificar.md +292 -0
- package/habilidades/accesibilidad-a11y/SKILL.md +584 -0
- package/habilidades/angular-avanzado/SKILL.md +491 -0
- package/habilidades/angular-moderno/SKILL.md +326 -0
- package/habilidades/api-rest-diseno/SKILL.md +302 -0
- package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
- package/habilidades/aprendizaje-continuo/SKILL.md +369 -0
- package/habilidades/async-python/SKILL.md +474 -0
- package/habilidades/auth-patrones/SKILL.md +488 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +376 -0
- package/habilidades/autoresearch/SKILL.md +248 -0
- package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
- package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
- package/habilidades/checklist-calidad/SKILL.md +247 -0
- package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
- package/habilidades/checklist-seguridad/SKILL.md +224 -0
- package/habilidades/checkpoints-verificacion/SKILL.md +309 -0
- package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
- package/habilidades/ci-cd-pipelines/SKILL.md +583 -0
- package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
- package/habilidades/cloud-aws/SKILL.md +497 -0
- package/habilidades/compactacion-contexto/SKILL.md +201 -0
- package/habilidades/contenedores-docker/SKILL.md +453 -0
- package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
- package/habilidades/css-moderno/SKILL.md +463 -0
- package/habilidades/datos-etl/SKILL.md +486 -0
- package/habilidades/dependencias-auditoria/SKILL.md +293 -0
- package/habilidades/deprecacion-migracion/SKILL.md +485 -0
- package/habilidades/design-tokens/SKILL.md +519 -0
- package/habilidades/discutir-fase/SKILL.md +167 -0
- package/habilidades/diseno-responsivo/SKILL.md +326 -0
- package/habilidades/django-experto/SKILL.md +395 -0
- package/habilidades/doc-sync/SKILL.md +259 -0
- package/habilidades/ejecutar-fase/SKILL.md +199 -0
- package/habilidades/estructura-proyecto-claude/SKILL.md +459 -0
- package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +213 -0
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
- package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
- package/habilidades/event-driven/SKILL.md +580 -0
- package/habilidades/extractor-de-aprendizajes/SKILL.md +234 -0
- package/habilidades/fastapi-experto/SKILL.md +368 -0
- package/habilidades/frontend-avanzado/SKILL.md +555 -0
- package/habilidades/git-worktrees-paralelo/SKILL.md +246 -0
- package/habilidades/iam-secretos/SKILL.md +511 -0
- package/habilidades/instalar-sistema/SKILL.md +140 -0
- package/habilidades/kubernetes-orquestacion/SKILL.md +549 -0
- package/habilidades/manejo-errores/SKILL.md +512 -0
- package/habilidades/mapear-codebase/SKILL.md +199 -0
- package/habilidades/microservicios/SKILL.md +473 -0
- package/habilidades/mobile-flutter/SKILL.md +566 -0
- package/habilidades/mobile-react-native/SKILL.md +493 -0
- package/habilidades/monitoring-alertas/SKILL.md +447 -0
- package/habilidades/node-experto/SKILL.md +521 -0
- package/habilidades/notificaciones-multicanal/SKILL.md +448 -0
- package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
- package/habilidades/nuevo-proyecto/SKILL.md +183 -0
- package/habilidades/patrones-python/SKILL.md +381 -0
- package/habilidades/performance-baseline/SKILL.md +243 -0
- package/habilidades/planear-fase/SKILL.md +184 -0
- package/habilidades/postgresql-experto/SKILL.md +379 -0
- package/habilidades/react-experto/SKILL.md +434 -0
- package/habilidades/react-optimizacion/SKILL.md +328 -0
- package/habilidades/release-semver/SKILL.md +226 -0
- package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
- package/habilidades/sql-optimizacion/SKILL.md +314 -0
- package/habilidades/tailwind-experto/SKILL.md +412 -0
- package/habilidades/tdd-workflow/SKILL.md +267 -0
- package/habilidades/testing-python/SKILL.md +350 -0
- package/habilidades/threat-model-lite/SKILL.md +218 -0
- package/habilidades/typescript-avanzado/SKILL.md +454 -0
- package/habilidades/ux-diseno/SKILL.md +488 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +543 -0
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
- package/habilidades/verificar-trabajo/SKILL.md +208 -0
- package/habilidades/wireframes-flujos/SKILL.md +396 -0
- package/habilidades/workflow-claude-code/SKILL.md +359 -0
- package/hooks/calidad-pre-commit.js +578 -0
- package/hooks/escaneo-secretos.js +302 -0
- package/hooks/extraccion-aprendizajes.js +550 -0
- package/hooks/linea-estado.js +249 -0
- package/hooks/monitor-contexto.js +230 -0
- package/hooks/proteccion-rutas.js +249 -0
- package/manifiestos/hooks-config.json +41 -0
- package/manifiestos/modulos.json +318 -0
- package/manifiestos/perfiles.json +189 -0
- package/package.json +45 -0
- package/plantillas/PROJECT.md +122 -0
- package/plantillas/REQUIREMENTS.md +132 -0
- package/plantillas/ROADMAP.md +143 -0
- package/plantillas/STATE.md +109 -0
- package/plantillas/research/ARCHITECTURE.md +220 -0
- package/plantillas/research/FEATURES.md +175 -0
- package/plantillas/research/PITFALLS.md +299 -0
- package/plantillas/research/STACK.md +233 -0
- package/plantillas/research/SUMMARY.md +165 -0
- package/plugin.json +144 -0
- package/reglas/accesibilidad.md +269 -0
- package/reglas/api-diseno.md +400 -0
- package/reglas/arquitectura.md +183 -0
- package/reglas/cloud-infra.md +247 -0
- package/reglas/docs.md +245 -0
- package/reglas/estilo-codigo.md +179 -0
- package/reglas/git-workflow.md +186 -0
- package/reglas/performance.md +195 -0
- package/reglas/pruebas.md +159 -0
- package/reglas/seguridad.md +151 -0
- package/reglas/skills-estandar.md +473 -0
- package/scripts/actualizar.js +51 -0
- package/scripts/desinstalar.js +86 -0
- package/scripts/doctor.js +222 -0
- package/scripts/inicializar.js +89 -0
- package/scripts/instalador.js +333 -0
- package/scripts/lib/detectar-runtime.js +177 -0
- package/scripts/lib/estado.js +112 -0
- package/scripts/lib/hooks-settings.js +283 -0
- package/scripts/lib/manifiestos.js +138 -0
- package/scripts/lib/seguridad.js +160 -0
- package/scripts/publicar.js +209 -0
- package/scripts/validar.js +120 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: performance-baseline
|
|
3
|
+
description: Establece y documenta una línea base de rendimiento para el sistema. Mide latencia p50/p95/p99, throughput, uso de memoria y CPU. Identifica cuellos de botella con herramientas de profiling. Guía la optimización con datos, no con suposiciones.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Habilidad: Performance Baseline
|
|
7
|
+
|
|
8
|
+
## Propósito
|
|
9
|
+
|
|
10
|
+
"Optimizar sin medir es adivinar." Esta habilidad establece mediciones reales
|
|
11
|
+
del sistema antes de cualquier optimización, documenta el baseline y guía
|
|
12
|
+
el trabajo de mejora con evidencia. Ninguna optimización se acepta sin una
|
|
13
|
+
comparación before/after con los mismos benchmarks.
|
|
14
|
+
|
|
15
|
+
## Cuándo activar
|
|
16
|
+
|
|
17
|
+
- Antes de iniciar una fase de optimización de rendimiento
|
|
18
|
+
- Cuando el usuario reporta "el sistema está lento" sin métricas
|
|
19
|
+
- Al establecer SLOs para un sistema nuevo
|
|
20
|
+
- Antes y después de cambios en queries, caching o arquitectura
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Métricas clave a medir
|
|
25
|
+
|
|
26
|
+
### Latencia (la más importante para APIs)
|
|
27
|
+
|
|
28
|
+
| Percentil | Descripción | Target típico web |
|
|
29
|
+
|-----------|-------------|------------------|
|
|
30
|
+
| p50 | Mediana — 50% de requests son más rápidos | < 100ms |
|
|
31
|
+
| p95 | 95% de requests terminan antes de este tiempo | < 300ms |
|
|
32
|
+
| p99 | El "peor caso razonable" | < 1000ms |
|
|
33
|
+
| p99.9 | Outliers extremos | < 3000ms |
|
|
34
|
+
|
|
35
|
+
**Por qué p95 y p99, no promedio**: El promedio oculta las colas lentas. Un
|
|
36
|
+
sistema con p50=50ms y p99=10000ms tiene un promedio "aceptable" pero una
|
|
37
|
+
experiencia terrible para 1 de cada 100 usuarios.
|
|
38
|
+
|
|
39
|
+
### Throughput
|
|
40
|
+
|
|
41
|
+
- **Requests por segundo (RPS)**: Cuántas peticiones puede manejar el sistema
|
|
42
|
+
- **Concurrencia máxima**: Número de requests simultáneos sin degradación
|
|
43
|
+
- **Punto de quiebre**: RPS donde la latencia p99 supera el threshold aceptable
|
|
44
|
+
|
|
45
|
+
### Recursos del sistema
|
|
46
|
+
|
|
47
|
+
- **CPU**: % de uso en carga normal, pico y stress
|
|
48
|
+
- **Memoria**: RSS basal, memoria en carga, crecimiento por hora (leak detection)
|
|
49
|
+
- **I/O de BD**: queries/segundo, tiempo de query p95, conexiones activas
|
|
50
|
+
- **Network**: bytes in/out, conexiones abiertas
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Herramientas de medición por stack
|
|
55
|
+
|
|
56
|
+
### Backend Python / FastAPI
|
|
57
|
+
|
|
58
|
+
**Profiling de CPU** — encontrar funciones lentas:
|
|
59
|
+
```python
|
|
60
|
+
# Con cProfile (incluido en stdlib)
|
|
61
|
+
import cProfile
|
|
62
|
+
import pstats
|
|
63
|
+
import io
|
|
64
|
+
|
|
65
|
+
def profile_function():
|
|
66
|
+
pr = cProfile.Profile()
|
|
67
|
+
pr.enable()
|
|
68
|
+
# ... función a perfilar
|
|
69
|
+
pr.disable()
|
|
70
|
+
|
|
71
|
+
s = io.StringIO()
|
|
72
|
+
ps = pstats.Stats(pr, stream=s).sort_stats('cumulative')
|
|
73
|
+
ps.print_stats(20) # Top 20 funciones más lentas
|
|
74
|
+
print(s.getvalue())
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Profiling de memoria** — detectar leaks:
|
|
78
|
+
```bash
|
|
79
|
+
pip install memory-profiler
|
|
80
|
+
python -m memory_profiler mi_script.py
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Profiling de queries SQL** — con SQLAlchemy:
|
|
84
|
+
```python
|
|
85
|
+
# En desarrollo, activar logging de queries con tiempo
|
|
86
|
+
import logging
|
|
87
|
+
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
|
|
88
|
+
|
|
89
|
+
# O con pgBadger / pg_stat_statements en PostgreSQL
|
|
90
|
+
# Ver queries más lentas:
|
|
91
|
+
SELECT query, calls, total_time, mean_time, stddev_time
|
|
92
|
+
FROM pg_stat_statements
|
|
93
|
+
ORDER BY mean_time DESC
|
|
94
|
+
LIMIT 20;
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Load testing** — con locust:
|
|
98
|
+
```python
|
|
99
|
+
# locustfile.py
|
|
100
|
+
from locust import HttpUser, task, between
|
|
101
|
+
|
|
102
|
+
class APIUser(HttpUser):
|
|
103
|
+
wait_time = between(0.1, 0.5)
|
|
104
|
+
|
|
105
|
+
@task(3) # peso 3 = ejecuta 3x más frecuente
|
|
106
|
+
def listar_recursos(self):
|
|
107
|
+
self.client.get("/api/v1/recursos",
|
|
108
|
+
headers={"Authorization": f"Bearer {self.token}"})
|
|
109
|
+
|
|
110
|
+
@task(1)
|
|
111
|
+
def crear_recurso(self):
|
|
112
|
+
self.client.post("/api/v1/recursos",
|
|
113
|
+
json={"nombre": "test"},
|
|
114
|
+
headers={"Authorization": f"Bearer {self.token}"})
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Ejecutar con 100 usuarios, rampa de 10/segundo
|
|
119
|
+
locust -f locustfile.py --headless -u 100 -r 10 --run-time 2m \
|
|
120
|
+
--host http://localhost:8000
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Frontend Angular
|
|
124
|
+
|
|
125
|
+
**Core Web Vitals** (métricas que Google y usuarios ven):
|
|
126
|
+
| Métrica | Descripción | Target |
|
|
127
|
+
|---------|-------------|--------|
|
|
128
|
+
| LCP | Largest Contentful Paint — tiempo hasta que el contenido principal es visible | < 2.5s |
|
|
129
|
+
| FID / INP | First Input Delay / Interaction to Next Paint | < 100ms |
|
|
130
|
+
| CLS | Cumulative Layout Shift — estabilidad visual | < 0.1 |
|
|
131
|
+
| TTFB | Time to First Byte | < 600ms |
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# Lighthouse CLI
|
|
135
|
+
npm install -g lighthouse
|
|
136
|
+
lighthouse http://localhost:4200 --output=json --output-path=lighthouse-report.json
|
|
137
|
+
|
|
138
|
+
# Analizar bundle size
|
|
139
|
+
ng build --stats-json
|
|
140
|
+
npx webpack-bundle-analyzer dist/*/stats.json
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Profiling de Angular en desarrollo**:
|
|
144
|
+
```typescript
|
|
145
|
+
// Habilitar profiler de Angular
|
|
146
|
+
import { enableProdMode } from '@angular/core';
|
|
147
|
+
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
|
148
|
+
|
|
149
|
+
// En main.ts para development
|
|
150
|
+
platformBrowserDynamic().bootstrapModule(AppModule)
|
|
151
|
+
.then(() => {
|
|
152
|
+
// Chrome DevTools > Performance > Profile
|
|
153
|
+
// Buscar "Angular" en la traza para ver change detection cycles
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Plantilla de documento baseline
|
|
160
|
+
|
|
161
|
+
### `.planning/PERFORMANCE-BASELINE.md`
|
|
162
|
+
|
|
163
|
+
```markdown
|
|
164
|
+
# PERFORMANCE-BASELINE.md
|
|
165
|
+
**Fecha de medición**: [fecha]
|
|
166
|
+
**Versión del sistema**: [git commit hash]
|
|
167
|
+
**Entorno**: [staging / producción / local con datos reales]
|
|
168
|
+
**Herramientas usadas**: [locust, pytest-benchmark, lighthouse, etc.]
|
|
169
|
+
|
|
170
|
+
## Condiciones del test
|
|
171
|
+
- Datos en BD: [número de registros en tablas principales]
|
|
172
|
+
- Concurrencia simulada: [N usuarios simultáneos]
|
|
173
|
+
- Duración del test: [N minutos]
|
|
174
|
+
- Hardware del servidor: [specs o instancia cloud]
|
|
175
|
+
|
|
176
|
+
## Resultados de latencia (API)
|
|
177
|
+
|
|
178
|
+
| Endpoint | p50 | p95 | p99 | RPS máx |
|
|
179
|
+
|----------|-----|-----|-----|---------|
|
|
180
|
+
| GET /api/v1/[recurso] | Xms | Xms | Xms | N |
|
|
181
|
+
| POST /api/v1/[recurso] | Xms | Xms | Xms | N |
|
|
182
|
+
|
|
183
|
+
## Resultados de recursos
|
|
184
|
+
|
|
185
|
+
| Métrica | Basal | Bajo carga | Pico |
|
|
186
|
+
|---------|-------|-----------|------|
|
|
187
|
+
| CPU % | | | |
|
|
188
|
+
| Memoria RSS | | | |
|
|
189
|
+
| Conexiones BD activas | | | |
|
|
190
|
+
| Queries/segundo | | | |
|
|
191
|
+
|
|
192
|
+
## Core Web Vitals (si aplica)
|
|
193
|
+
|
|
194
|
+
| Métrica | Valor medido | Target | Estado |
|
|
195
|
+
|---------|-------------|--------|--------|
|
|
196
|
+
| LCP | | < 2.5s | PASS/FAIL |
|
|
197
|
+
| INP | | < 100ms | PASS/FAIL |
|
|
198
|
+
| CLS | | < 0.1 | PASS/FAIL |
|
|
199
|
+
|
|
200
|
+
## Top 5 queries más lentas
|
|
201
|
+
| Query | Duración media | Llamadas/min | Plan de optimización |
|
|
202
|
+
|-------|---------------|-------------|---------------------|
|
|
203
|
+
| | | | |
|
|
204
|
+
|
|
205
|
+
## Cuellos de botella identificados
|
|
206
|
+
1. [Descripción, causa raíz, impacto estimado]
|
|
207
|
+
|
|
208
|
+
## SLOs propuestos (basados en baseline)
|
|
209
|
+
| Métrica | SLO | Alerta si supera |
|
|
210
|
+
|---------|-----|-----------------|
|
|
211
|
+
| Latencia p95 | < Xms | > Xms |
|
|
212
|
+
| Error rate | < 0.1% | > 0.5% |
|
|
213
|
+
| Disponibilidad | > 99.5% | < 99.0% |
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Proceso de optimización guiada por datos
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
1. Medir → documentar baseline
|
|
222
|
+
2. Identificar el cuello de botella más costoso (no el más fácil)
|
|
223
|
+
3. Hipótesis: "Creo que X es lento porque Y"
|
|
224
|
+
4. Implementar UNA optimización
|
|
225
|
+
5. Medir con los MISMOS benchmarks del baseline
|
|
226
|
+
6. Comparar before/after
|
|
227
|
+
7. Documentar resultado en PERFORMANCE-BASELINE.md
|
|
228
|
+
8. Si mejoró: hacer commit, continuar con siguiente cuello de botella
|
|
229
|
+
9. Si no mejoró: revertir, revisar hipótesis
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Optimizaciones por orden de impacto típico
|
|
233
|
+
|
|
234
|
+
1. **Índices de BD faltantes** — impacto: 10x-1000x en queries lentas
|
|
235
|
+
2. **N+1 queries** — impacto: reducción de O(n) queries a O(1)
|
|
236
|
+
3. **Caching de resultados costosos** — impacto: 5x-50x en datos calientes
|
|
237
|
+
4. **Connection pooling** — impacto: elimina overhead de conexiones
|
|
238
|
+
5. **Paginación de resultados grandes** — impacto: reducción de tiempo y memoria
|
|
239
|
+
6. **Bundle splitting en frontend** — impacto: reducción de tiempo de carga inicial
|
|
240
|
+
|
|
241
|
+
**Anti-patrón a evitar**: optimizar código Python/TypeScript antes de verificar
|
|
242
|
+
que las queries de BD no son el problema real. El 80% de los problemas de
|
|
243
|
+
rendimiento en aplicaciones web tienen origen en la capa de datos.
|
|
@@ -0,0 +1,184 @@
|
|
|
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 CONTEXT.md.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Habilidad: Planear Fase de Desarrollo
|
|
7
|
+
|
|
8
|
+
## Propósito
|
|
9
|
+
|
|
10
|
+
Un plan ejecutable no es una lista de tareas — es un grafo de dependencias con
|
|
11
|
+
criterios de verificación por tarea. Esta habilidad transforma el CONTEXT.md de
|
|
12
|
+
una fase en un PLAN.md que el agente ejecutor puede seguir sin ambigüedad y sin
|
|
13
|
+
interrumpir al usuario para pedir aclaraciones.
|
|
14
|
+
|
|
15
|
+
## Cuándo activar
|
|
16
|
+
|
|
17
|
+
- Después de ejecutar `discutir-fase` y tener CONTEXT.md listo
|
|
18
|
+
- Cuando el usuario pide "planear la fase N"
|
|
19
|
+
- Cuando un plan existente necesita revisión o replanificación
|
|
20
|
+
|
|
21
|
+
## Prerrequisito obligatorio
|
|
22
|
+
|
|
23
|
+
Leer `.planning/CONTEXT-[fase].md` antes de generar cualquier tarea. Si no existe,
|
|
24
|
+
activar primero `discutir-fase`.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Principios de descomposición
|
|
29
|
+
|
|
30
|
+
### 1. Atomicidad
|
|
31
|
+
|
|
32
|
+
Una tarea es atómica si:
|
|
33
|
+
- Puede completarse en una sola sesión de trabajo (< 2 horas de desarrollo)
|
|
34
|
+
- Tiene un único criterio de verificación binario (funciona / no funciona)
|
|
35
|
+
- Puede hacerse commit de forma independiente sin romper el sistema
|
|
36
|
+
|
|
37
|
+
Si una tarea viola alguna de estas condiciones, subdividirla.
|
|
38
|
+
|
|
39
|
+
### 2. Dependencias explícitas
|
|
40
|
+
|
|
41
|
+
Cada tarea declara sus dependencias en formato `[T-XX, T-YY]`. Una tarea sin
|
|
42
|
+
dependencias puede ejecutarse en la primera oleada. El grafo NO puede tener ciclos.
|
|
43
|
+
|
|
44
|
+
### 3. Clasificación AFK / HITL
|
|
45
|
+
|
|
46
|
+
| Tipo | Definición |
|
|
47
|
+
|------|-----------|
|
|
48
|
+
| AFK (autónoma) | El agente puede completarla sin intervención humana |
|
|
49
|
+
| HITL (human-in-the-loop) | Requiere decisión, revisión o input del usuario |
|
|
50
|
+
|
|
51
|
+
Las tareas HITL son puntos de parada obligatoria en la ejecución.
|
|
52
|
+
|
|
53
|
+
### 4. Oleadas de ejecución
|
|
54
|
+
|
|
55
|
+
Agrupa tareas sin dependencias mutuas en la misma oleada. Las tareas de una
|
|
56
|
+
oleada pueden ejecutarse en paralelo (o en secuencia rápida si el contexto lo
|
|
57
|
+
requiere).
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Algoritmo de construcción del plan
|
|
62
|
+
|
|
63
|
+
**Paso 1 — Listar entregables**
|
|
64
|
+
Del CONTEXT.md, extraer todos los entregables (features, endpoints, componentes,
|
|
65
|
+
migraciones, documentos).
|
|
66
|
+
|
|
67
|
+
**Paso 2 — Identificar capas**
|
|
68
|
+
Para cada entregable de software, descomponerlo en capas estándar:
|
|
69
|
+
- Tipos e interfaces / esquemas
|
|
70
|
+
- Modelos de datos y migraciones
|
|
71
|
+
- Lógica de negocio (services)
|
|
72
|
+
- Interfaz externa (endpoints / componentes UI)
|
|
73
|
+
- Tests
|
|
74
|
+
- Documentación
|
|
75
|
+
|
|
76
|
+
**Paso 3 — Asignar dependencias**
|
|
77
|
+
Aplicar regla: una capa no puede implementarse sin las capas de las que depende.
|
|
78
|
+
Orden típico: tipos → modelos → services → endpoints → UI → tests.
|
|
79
|
+
|
|
80
|
+
**Paso 4 — Agrupar en oleadas**
|
|
81
|
+
Usar topological sort mental: la Oleada N contiene todas las tareas cuyas
|
|
82
|
+
dependencias están en oleadas anteriores.
|
|
83
|
+
|
|
84
|
+
**Paso 5 — Verificación goal-backward**
|
|
85
|
+
Preguntar: "Si ejecuto todas las tareas del plan, ¿el criterio de éxito del
|
|
86
|
+
CONTEXT.md queda satisfecho?" Si la respuesta es no, agregar las tareas faltantes.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Estructura del PLAN.md
|
|
91
|
+
|
|
92
|
+
```markdown
|
|
93
|
+
# PLAN.md — Fase [N]: [Nombre]
|
|
94
|
+
**Generado**: [fecha]
|
|
95
|
+
**Basado en**: CONTEXT-[fase].md
|
|
96
|
+
**Criterio de éxito**: [copiado del CONTEXT.md]
|
|
97
|
+
|
|
98
|
+
## Resumen del plan
|
|
99
|
+
- Total de tareas: N
|
|
100
|
+
- Oleadas: M
|
|
101
|
+
- Tareas HITL: K (paradas de revisión)
|
|
102
|
+
- Duración estimada: X horas / Y días
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Oleada 1 — Fundamentos (sin dependencias)
|
|
107
|
+
|
|
108
|
+
### T-01: [Nombre de la tarea]
|
|
109
|
+
- **Tipo**: AFK
|
|
110
|
+
- **Descripción**: [Qué hacer, sin ambigüedad. Incluir nombres de archivos si aplica.]
|
|
111
|
+
- **Entregable verificable**: [Qué existe cuando está completa]
|
|
112
|
+
- **Criterio de verificación**: [Comando de verificación o descripción observable]
|
|
113
|
+
- **Dependencias**: ninguna
|
|
114
|
+
- **Tiempo estimado**: 30 min
|
|
115
|
+
|
|
116
|
+
### T-02: [Nombre]
|
|
117
|
+
- **Tipo**: AFK
|
|
118
|
+
- **Descripción**:
|
|
119
|
+
- **Entregable verificable**:
|
|
120
|
+
- **Criterio de verificación**:
|
|
121
|
+
- **Dependencias**: ninguna
|
|
122
|
+
- **Tiempo estimado**:
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Oleada 2 — [Nombre conceptual]
|
|
127
|
+
|
|
128
|
+
### T-03: [Nombre]
|
|
129
|
+
- **Tipo**: AFK
|
|
130
|
+
- **Descripción**:
|
|
131
|
+
- **Entregable verificable**:
|
|
132
|
+
- **Criterio de verificación**:
|
|
133
|
+
- **Dependencias**: [T-01, T-02]
|
|
134
|
+
- **Tiempo estimado**:
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Oleada N — Verificación y cierre
|
|
139
|
+
|
|
140
|
+
### T-NN: Verificación goal-backward
|
|
141
|
+
- **Tipo**: HITL
|
|
142
|
+
- **Descripción**: Revisar que todos los criterios de éxito del CONTEXT.md estén
|
|
143
|
+
satisfechos. Presentar evidencia al usuario.
|
|
144
|
+
- **Entregable verificable**: Reporte de verificación firmado
|
|
145
|
+
- **Criterio de verificación**: Usuario confirma aprobación
|
|
146
|
+
- **Dependencias**: [todas las tareas anteriores]
|
|
147
|
+
- **Tiempo estimado**: 30 min
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Matriz de riesgos del plan
|
|
152
|
+
|
|
153
|
+
| Tarea | Riesgo | Probabilidad | Mitigación |
|
|
154
|
+
|-------|--------|-------------|-----------|
|
|
155
|
+
| | | | |
|
|
156
|
+
|
|
157
|
+
## Tareas excluidas explícitamente
|
|
158
|
+
- [Feature X]: diferida a siguiente fase por [razón]
|
|
159
|
+
|
|
160
|
+
## Notas de diseño del plan
|
|
161
|
+
[Decisiones tomadas durante la planeación que el ejecutor debe conocer]
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Anti-patrones a evitar en el plan
|
|
167
|
+
|
|
168
|
+
- **Tarea "Implementar módulo X"**: demasiado vaga, no atómica
|
|
169
|
+
- **Dependencias circulares**: T-03 depende de T-05 que depende de T-03
|
|
170
|
+
- **Tarea sin criterio de verificación**: no se puede saber si está hecha
|
|
171
|
+
- **Plan sin oleada de verificación final**: el plan puede estar completo pero
|
|
172
|
+
los criterios de éxito sin satisfacer
|
|
173
|
+
- **Mezclar implementación y tests en una sola tarea**: deben ser tareas separadas
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Checklist antes de entregar el PLAN.md
|
|
178
|
+
|
|
179
|
+
- [ ] Todas las tareas son atómicas (< 2 horas)
|
|
180
|
+
- [ ] Todas las dependencias forman un DAG (sin ciclos)
|
|
181
|
+
- [ ] Cada tarea tiene criterio de verificación binario
|
|
182
|
+
- [ ] Las tareas HITL están identificadas y justificadas
|
|
183
|
+
- [ ] La verificación goal-backward confirma que el plan satisface CONTEXT.md
|
|
184
|
+
- [ ] El plan está guardado en `.planning/PLAN-fase-[N].md`
|