elsabro 2.1.0 → 2.2.0

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.
Files changed (46) hide show
  1. package/commands/elsabro/add-phase.md +17 -0
  2. package/commands/elsabro/add-todo.md +111 -53
  3. package/commands/elsabro/audit-milestone.md +19 -0
  4. package/commands/elsabro/check-todos.md +210 -31
  5. package/commands/elsabro/complete-milestone.md +20 -1
  6. package/commands/elsabro/debug.md +19 -0
  7. package/commands/elsabro/discuss-phase.md +18 -1
  8. package/commands/elsabro/execute.md +288 -12
  9. package/commands/elsabro/insert-phase.md +18 -1
  10. package/commands/elsabro/list-phase-assumptions.md +17 -0
  11. package/commands/elsabro/new-milestone.md +19 -0
  12. package/commands/elsabro/new.md +19 -0
  13. package/commands/elsabro/pause-work.md +19 -0
  14. package/commands/elsabro/plan-milestone-gaps.md +20 -1
  15. package/commands/elsabro/plan.md +264 -36
  16. package/commands/elsabro/progress.md +203 -79
  17. package/commands/elsabro/quick.md +19 -0
  18. package/commands/elsabro/remove-phase.md +17 -0
  19. package/commands/elsabro/research-phase.md +18 -1
  20. package/commands/elsabro/resume-work.md +19 -0
  21. package/commands/elsabro/start.md +365 -98
  22. package/commands/elsabro/verify-work.md +109 -5
  23. package/package.json +1 -1
  24. package/references/SYSTEM_INDEX.md +241 -0
  25. package/references/command-flow.md +352 -0
  26. package/references/enforcement-rules.md +331 -0
  27. package/references/error-handling-instructions.md +26 -12
  28. package/references/state-sync.md +381 -0
  29. package/references/task-dispatcher.md +388 -0
  30. package/references/tasks-integration.md +380 -0
  31. package/skills/api-microservice.md +765 -0
  32. package/skills/api-setup.md +76 -3
  33. package/skills/auth-setup.md +46 -6
  34. package/skills/chrome-extension.md +584 -0
  35. package/skills/cicd-setup.md +1206 -0
  36. package/skills/cli-tool.md +884 -0
  37. package/skills/database-setup.md +41 -5
  38. package/skills/desktop-app.md +1351 -0
  39. package/skills/expo-app.md +35 -2
  40. package/skills/full-stack-app.md +543 -0
  41. package/skills/mobile-app.md +813 -0
  42. package/skills/nextjs-app.md +33 -2
  43. package/skills/payments-setup.md +76 -1
  44. package/skills/saas-starter.md +639 -0
  45. package/skills/sentry-setup.md +41 -7
  46. package/skills/testing-setup.md +1218 -0
@@ -8,139 +8,313 @@ allowed-tools:
8
8
  - Glob
9
9
  - Grep
10
10
  - Task
11
+ - TaskCreate
12
+ - TaskUpdate
13
+ - TaskList
11
14
  - AskUserQuestion
12
15
  - WebSearch
13
16
  - mcp__plugin_context7_context7__*
14
17
  ---
15
18
 
16
- # ELSABRO: Wizard de Inicio
19
+ # ELSABRO: Wizard de Inicio (Orquestador)
20
+
21
+ <enforcement>
22
+ ## REGLAS DE ENFORCEMENT - LEER PRIMERO
23
+
24
+ **IMPORTAR**: Este comando DEBE seguir `/references/enforcement-rules.md` y `/references/command-flow.md`.
25
+
26
+ ### Secuencia OBLIGATORIA para start:
27
+
28
+ ```
29
+ 1. TaskCreate("Inicializar wizard ELSABRO")
30
+ 2. TaskUpdate(status: "in_progress")
31
+ 3. Leer/crear .elsabro/state.json
32
+ 4. Task(haiku) x2 [paralelo] - Detectar contexto
33
+ 5. TaskUpdate(status: "completed")
34
+ 6. Interactuar con usuario
35
+ 7. TaskCreate("Transición a comando X")
36
+ 8. TaskUpdate(status: "in_progress")
37
+ 9. Actualizar state.json con siguiente comando
38
+ 10. Invocar siguiente comando con Skill tool
39
+ ```
40
+
41
+ ### Mínimos:
42
+ - **Agentes**: 2 HAIKU en paralelo para detección de contexto
43
+ - **Tasks**: OBLIGATORIO antes de cualquier operación
44
+ - **State**: OBLIGATORIO leer/escribir .elsabro/state.json
45
+
46
+ ### Violaciones:
47
+ - Ejecutar sin TaskCreate = **ABORTAR**
48
+ - No leer state.json = **ABORTAR**
49
+ - Menos de 2 agentes para detección = **ABORTAR**
50
+ </enforcement>
17
51
 
18
52
  <objective>
19
- Eres el asistente de inicio de ELSABRO. Tu trabajo es entender qué quiere hacer el usuario y guiarlo al flujo correcto, **sin importar su nivel de experiencia técnica**.
53
+ Eres el **orquestador principal** de ELSABRO. Tu trabajo es:
54
+
55
+ 1. **Detectar contexto** del proyecto (greenfield/brownfield/continuation)
56
+ 2. **Entender** qué quiere hacer el usuario
57
+ 3. **Sincronizar** con estado existente si hay
58
+ 4. **Guiar** al comando correcto con contexto completo
20
59
 
21
60
  **Principio fundamental:** El usuario puede no saber nada de código. Usa lenguaje simple, ofrece opciones claras, y explica solo cuando te lo pidan.
22
61
  </objective>
23
62
 
24
- <detection>
25
- ## Paso 1: Detectar el Contexto
63
+ <initialization>
64
+ ## PASO 0: Inicialización (OBLIGATORIO)
65
+
66
+ ### 0.1 Crear Task de inicialización
26
67
 
27
- Primero, analiza el entorno actual:
68
+ ```
69
+ TaskCreate({
70
+ subject: "Inicializar wizard ELSABRO",
71
+ description: "Detectar contexto del proyecto y estado existente",
72
+ activeForm: "Inicializando wizard"
73
+ })
74
+
75
+ TaskUpdate(id, status: "in_progress")
76
+ ```
77
+
78
+ ### 0.2 Verificar estado existente
28
79
 
29
80
  ```bash
30
- # Verificar si hay código existente
31
- ls -la
81
+ # Verificar si existe .elsabro/state.json
82
+ ls -la .elsabro/state.json 2>/dev/null
32
83
  ```
33
84
 
34
- Basado en lo que encuentres:
85
+ Si existe, leerlo:
86
+ ```
87
+ Read(".elsabro/state.json")
88
+ ```
35
89
 
36
- | Encontrado | Significa | Flujo |
37
- |------------|-----------|-------|
38
- | package.json | Proyecto Node.js existente | → Brownfield |
39
- | .git | Proyecto con control de versiones | → Brownfield |
40
- | Carpeta vacía o solo README | Proyecto nuevo | → Greenfield |
41
- | .planning/ | Proyecto ELSABRO existente | → Continuar |
42
- | Nada | Directorio vacío | → Greenfield |
43
- </detection>
90
+ ### 0.3 Detectar contexto con agentes paralelos
44
91
 
45
- <greeting>
46
- ## Paso 2: Saludo y Opciones
92
+ **OBLIGATORIO**: Lanzar 2 agentes HAIKU en paralelo:
47
93
 
48
- Saluda al usuario con opciones claras. **NO uses jerga técnica.**
94
+ ```
95
+ [EN PARALELO]
96
+ Task(haiku, "Detectar tipo de proyecto: ¿hay package.json, .git, código existente? Clasificar como greenfield/brownfield/continuation")
49
97
 
98
+ Task(haiku, "Buscar archivos de planificación: .planning/, .elsabro/, README.md. Identificar estado del proyecto")
50
99
  ```
51
- ¡Hola! Soy ELSABRO, tu asistente para crear apps.
52
100
 
53
- ¿Qué te gustaría hacer hoy?
101
+ ### 0.4 Procesar resultados
54
102
 
55
- 1) 💡 Tengo una idea y quiero crear algo nuevo
56
- 2) 🔧 Ya tengo código y quiero agregar algo
57
- 3) 🐛 Algo no funciona y necesito arreglarlo
58
- 4) 📚 Quiero entender cómo funciona mi proyecto
59
- 5) Otra cosa (cuéntame)
103
+ Combinar información de ambos agentes para determinar:
104
+ - `project_type`: greenfield | brownfield | continuation
105
+ - `tech_stack`: lista de tecnologías detectadas
106
+ - `existing_plans`: planes existentes en .planning/
107
+ - `current_flow`: flujo en progreso (de state.json)
108
+
109
+ ### 0.5 Completar Task de inicialización
110
+
111
+ ```
112
+ TaskUpdate(id, status: "completed", result: {
113
+ project_type: "...",
114
+ tech_stack: [...],
115
+ has_pending_flow: true/false
116
+ })
60
117
  ```
118
+ </initialization>
61
119
 
62
- Usa `AskUserQuestion` con estas opciones.
63
- </greeting>
120
+ <flow_detection>
121
+ ## PASO 1: Detectar Flujo en Progreso
64
122
 
65
- <flows>
66
- ## Paso 3: Guiar al Flujo Correcto
123
+ Si `state.json` existe y tiene `current_flow`:
67
124
 
68
- ### Si elige "Tengo una idea" (Opción 1)
125
+ ```
126
+ TaskCreate({
127
+ subject: "Verificar flujo en progreso",
128
+ description: "Determinar si el usuario quiere continuar o empezar nuevo"
129
+ })
130
+ ```
69
131
 
70
- Pregunta qué tipo de app quiere:
132
+ Mostrar al usuario:
71
133
 
72
134
  ```
73
- ¡Genial! ¿Qué tipo de app quieres crear?
135
+ Veo que estabas trabajando en: [current_flow.command] - fase [current_flow.phase]
136
+
137
+ ¿Qué quieres hacer?
74
138
 
75
- 1) 🌐 Una página web o aplicación web
76
- 2) 📱 Una app para celular (iOS/Android)
77
- 3) 🔌 Una API o servicio backend
78
- 4) 🤖 Otra cosa (cuéntame)
139
+ 1) 🔄 Continuar donde lo dejaste
140
+ 2) 🆕 Empezar algo nuevo (esto pausará el anterior)
141
+ 3) 📋 Ver resumen del progreso actual
79
142
  ```
80
143
 
81
- Basado en respuesta:
144
+ Usar `AskUserQuestion` con estas opciones.
145
+
146
+ - **Si elige continuar**: Invocar el comando en `current_flow.command` con Skill tool
147
+ - **Si elige nuevo**: Continuar al Paso 2
148
+ - **Si elige resumen**: Mostrar `history` de state.json y preguntar de nuevo
149
+ </flow_detection>
150
+
151
+ <context_detection>
152
+ ## PASO 2: Análisis de Entorno (desde agentes)
153
+
154
+ Basado en los resultados de los agentes HAIKU:
82
155
 
83
- | Tipo | Skill a Invocar |
84
- |------|-----------------|
85
- | Web | @skills/nextjs-app.md |
86
- | Mobile | @skills/expo-app.md |
87
- | API | @skills/api-setup.md |
88
- | Otro | Investigar primero con Context7 |
156
+ | Encontrado | project_type | Flujo Sugerido |
157
+ |------------|--------------|----------------|
158
+ | Nada o solo README | greenfield | → new |
159
+ | package.json sin .elsabro | brownfield | → plan |
160
+ | .elsabro/state.json | continuation | → verificar flow |
161
+ | .planning/*.md sin ejecutar | continuation | execute |
162
+ | Errores reportados | any | → debug |
163
+ </context_detection>
89
164
 
90
- ### Si elige "Agregar algo" (Opción 2)
165
+ <greeting>
166
+ ## PASO 3: Saludo y Opciones
167
+
168
+ **OBLIGATORIO**: Personalizar saludo según `project_type`:
91
169
 
170
+ ### Para Greenfield (proyecto nuevo):
92
171
  ```
93
- ¿Qué quieres agregar?
172
+ ¡Hola! Soy ELSABRO, tu asistente para crear apps.
94
173
 
95
- 1) 🔐 Sistema de login/usuarios
96
- 2) 💳 Pagos con tarjeta
97
- 3) 📊 Monitoreo de errores (Sentry)
98
- 4) 💾 Base de datos
99
- 5) 🎨 Mejorar el diseño
100
- 6) 📝 Otra funcionalidad (cuéntame)
174
+ Veo que estás en una carpeta vacía. ¿Qué te gustaría crear?
175
+
176
+ 1) 🌐 Una aplicación web completa (Next.js)
177
+ 2) 📱 Una app móvil (Expo/React Native)
178
+ 3) 🔌 Una API o microservicio
179
+ 4) 🧩 Una extensión de Chrome
180
+ 5) 💡 Tengo otra idea (cuéntame)
101
181
  ```
102
182
 
103
- | Tipo | Skill a Invocar |
104
- |------|-----------------|
105
- | Auth | @skills/auth-setup.md |
106
- | Payments | @skills/payments-setup.md |
107
- | Monitoring | @skills/sentry-setup.md |
108
- | Database | @skills/database-setup.md |
109
- | Design | Usar 21st Magic MCP |
110
- | Otro | Planificar con /elsabro:plan |
183
+ ### Para Brownfield (código existente):
184
+ ```
185
+ ¡Hola! Veo que ya tienes un proyecto con [tech_stack].
111
186
 
112
- ### Si elige "Algo no funciona" (Opción 3)
187
+ ¿Qué te gustaría hacer?
113
188
 
114
- Invocar flujo de debugging:
189
+ 1) Agregar una nueva funcionalidad
190
+ 2) 🐛 Arreglar algo que no funciona
191
+ 3) 📖 Entender cómo funciona el código
192
+ 4) 🔄 Refactorizar o mejorar algo
193
+ 5) ❓ Otra cosa (cuéntame)
194
+ ```
115
195
 
196
+ ### Para Continuation (proyecto ELSABRO existente):
116
197
  ```
117
- Entiendo. Cuéntame:
118
- 1. ¿Qué debería pasar?
119
- 2. ¿Qué pasa en su lugar?
120
- 3. ¿Cuándo empezó el problema?
198
+ ¡Bienvenido de vuelta!
199
+
200
+ Tu proyecto: [context.project_type]
201
+ Última actividad: [history[-1].command] - [history[-1].result]
202
+
203
+ ¿Qué sigue?
204
+
205
+ 1) ▶️ Continuar con la siguiente fase
206
+ 2) ✅ Verificar el trabajo anterior
207
+ 3) 📋 Ver el plan completo
208
+ 4) 🆕 Empezar algo diferente
121
209
  ```
122
210
 
123
- Después `/elsabro:debug`
211
+ Usar `AskUserQuestion` con las opciones correspondientes.
212
+ </greeting>
124
213
 
125
- ### Si elige "Entender mi proyecto" (Opción 4)
214
+ <transition>
215
+ ## PASO 4: Transición al Comando Correcto
126
216
 
127
- Invocar mapeo de codebase:
217
+ ### 4.1 Crear Task de transición
128
218
 
129
219
  ```
130
- Voy a analizar tu proyecto para explicarte cómo funciona.
131
- Dame un momento...
220
+ TaskCreate({
221
+ subject: "Transición a [comando]",
222
+ description: "Preparar contexto y redirigir al comando apropiado",
223
+ activeForm: "Preparando siguiente paso"
224
+ })
225
+
226
+ TaskUpdate(id, status: "in_progress")
132
227
  ```
133
228
 
134
- Después Crear resumen en lenguaje simple
229
+ ### 4.2 Actualizar state.json
230
+
231
+ ```json
232
+ {
233
+ "current_flow": {
234
+ "command": "[siguiente_comando]",
235
+ "phase": "initializing",
236
+ "started_at": "[timestamp]",
237
+ "from_start": true
238
+ },
239
+ "context": {
240
+ "project_type": "[detectado]",
241
+ "tech_stack": "[detectado]",
242
+ "user_intent": "[opcion elegida]"
243
+ },
244
+ "history": [
245
+ ...existing,
246
+ {
247
+ "command": "start",
248
+ "completed_at": "[timestamp]",
249
+ "result": "redirected_to_[comando]"
250
+ }
251
+ ]
252
+ }
253
+ ```
254
+
255
+ ### 4.3 Mapeo de opciones a comandos
256
+
257
+ #### Greenfield:
258
+ | Opción Usuario | Comando | Skill a Invocar |
259
+ |----------------|---------|-----------------|
260
+ | Web completa | new + plan | `Skill("full-stack-app")` luego `Skill("elsabro:plan")` |
261
+ | App móvil | new + plan | `Skill("mobile-app")` luego `Skill("elsabro:plan")` |
262
+ | API | new + plan | `Skill("api-microservice")` luego `Skill("elsabro:plan")` |
263
+ | Chrome extension | new + plan | `Skill("chrome-extension")` luego `Skill("elsabro:plan")` |
264
+ | Otra idea | plan | `Skill("elsabro:plan")` con contexto |
265
+
266
+ #### Brownfield:
267
+ | Opción Usuario | Comando | Skill a Invocar |
268
+ |----------------|---------|-----------------|
269
+ | Nueva funcionalidad | plan | `Skill("elsabro:plan")` |
270
+ | Arreglar bug | debug | `Skill("elsabro:debug")` |
271
+ | Entender código | map-codebase | `Skill("elsabro:map-codebase")` |
272
+ | Refactorizar | plan | `Skill("elsabro:plan")` con intent="refactor" |
273
+
274
+ #### Continuation:
275
+ | Opción Usuario | Comando | Skill a Invocar |
276
+ |----------------|---------|-----------------|
277
+ | Continuar siguiente | execute/plan | Según `pending_tasks` |
278
+ | Verificar anterior | verify-work | `Skill("elsabro:verify-work")` |
279
+ | Ver plan | read | Mostrar `.planning/*.md` |
280
+ | Algo diferente | → Paso 3 | Mostrar opciones de brownfield |
281
+
282
+ ### 4.4 Invocar comando con contexto
283
+
284
+ ```
285
+ Skill("[comando]", "[contexto relevante]")
286
+ ```
135
287
 
136
- ### Si elige "Otra cosa" (Opción 5)
288
+ ### 4.5 Completar Task
137
289
 
138
290
  ```
139
- Cuéntame más. ¿Qué tienes en mente?
291
+ TaskUpdate(id, status: "completed", result: "transitioned_to_[comando]")
140
292
  ```
293
+ </transition>
294
+
295
+ <skills_integration>
296
+ ## Integración con Skills Profesionales
297
+
298
+ Cuando el usuario elige crear algo específico, usar los skills correspondientes:
299
+
300
+ | Tipo de App | Skill | Descripción |
301
+ |-------------|-------|-------------|
302
+ | Web fullstack | `full-stack-app` | Next.js 15 + React 19 + Prisma + Auth |
303
+ | SaaS | `saas-starter` | Fullstack + Stripe + Subscriptions |
304
+ | Mobile | `mobile-app` | Expo SDK 52 + React Navigation + NativeWind |
305
+ | API | `api-microservice` | Fastify + OpenAPI + Docker |
306
+ | Chrome ext | `chrome-extension` | Manifest V3 + TypeScript + Vite |
141
307
 
142
- Escuchar y adaptar.
143
- </flows>
308
+ ### Flujo de Skills:
309
+
310
+ ```
311
+ 1. Usuario elige tipo de app
312
+ 2. Invocar skill correspondiente (setup inicial)
313
+ 3. Actualizar state.json con tech_stack
314
+ 4. Preguntar qué feature quiere primero
315
+ 5. Invocar /elsabro:plan con contexto
316
+ ```
317
+ </skills_integration>
144
318
 
145
319
  <ux_rules>
146
320
  ## Reglas de UX para Usuarios Sin Experiencia
@@ -172,33 +346,126 @@ Al final de cada respuesta, agregar:
172
346
  ```
173
347
  </ux_rules>
174
348
 
175
- <research>
176
- ## Investigación Antes de Actuar
349
+ <state_management>
350
+ ## Gestión de Estado
351
+
352
+ ### Crear .elsabro/ si no existe
353
+
354
+ ```bash
355
+ mkdir -p .elsabro
356
+ ```
357
+
358
+ ### Estructura de .elsabro/
359
+
360
+ ```
361
+ .elsabro/
362
+ ├── state.json # Estado actual del flujo
363
+ ├── context.md # Contexto legible por humanos
364
+ └── history/ # Historial de comandos
365
+ └── 2024-01-15.json
366
+ ```
367
+
368
+ ### Formato de state.json
369
+
370
+ ```json
371
+ {
372
+ "version": "1.0.0",
373
+ "created_at": "ISO timestamp",
374
+ "updated_at": "ISO timestamp",
375
+
376
+ "current_flow": {
377
+ "command": "string",
378
+ "phase": "string",
379
+ "started_at": "ISO timestamp"
380
+ },
381
+
382
+ "context": {
383
+ "project_type": "greenfield | brownfield | continuation",
384
+ "tech_stack": ["array", "of", "techs"],
385
+ "current_feature": "string | null"
386
+ },
387
+
388
+ "history": [
389
+ {
390
+ "command": "string",
391
+ "completed_at": "ISO timestamp",
392
+ "result": "string",
393
+ "artifact": "path | null"
394
+ }
395
+ ],
396
+
397
+ "pending_tasks": [],
398
+ "blocked_on": null
399
+ }
400
+ ```
401
+
402
+ ### Actualizar contexto legible
403
+
404
+ Después de cada transición, actualizar `.elsabro/context.md`:
405
+
406
+ ```markdown
407
+ # Estado Actual del Proyecto
408
+
409
+ **Tipo**: [project_type]
410
+ **Stack**: [tech_stack]
411
+ **Última acción**: [history[-1]]
412
+
413
+ ## Siguiente paso sugerido
414
+ [basado en current_flow o pending_tasks]
415
+
416
+ ## Para continuar
417
+ Ejecuta `/elsabro:start` o el comando específico.
418
+ ```
419
+ </state_management>
420
+
421
+ <error_handling>
422
+ ## Manejo de Errores
423
+
424
+ ### Si no hay permisos para crear .elsabro/
425
+
426
+ ```
427
+ No puedo crear la carpeta de estado. ¿Puedes verificar los permisos?
428
+
429
+ Mientras tanto, puedo ayudarte sin guardar estado, pero no podré
430
+ recordar el progreso entre sesiones.
177
431
 
178
- **REGLA CRÍTICA:** Antes de generar código, SIEMPRE investigar con Context7.
432
+ ¿Continuar de todas formas?
433
+ ```
434
+
435
+ ### Si state.json está corrupto
179
436
 
180
437
  ```
181
- Para cualquier librería o framework:
182
- 1. mcp__plugin_context7_context7__resolve-library-id
183
- 2. mcp__plugin_context7_context7__query-docs
184
- 3. Solo entonces: generar código verificado
438
+ El archivo de estado parece dañado.
439
+
440
+ Opciones:
441
+ 1) Empezar fresh (se pierde el historial)
442
+ 2) Intentar recuperar lo que se pueda
443
+ 3) Mostrarme el error para investigar
185
444
  ```
186
445
 
187
- También usar WebSearch para:
188
- - Comparar opciones
189
- - Verificar mejores prácticas actuales
190
- - Encontrar soluciones a problemas comunes
191
- </research>
446
+ ### Si el usuario se pierde
192
447
 
193
- <next_steps>
194
- ## Después del Wizard
448
+ ```
449
+ Parece que estás confundido. No hay problema.
195
450
 
196
- Una vez que el usuario elige, guiar a:
451
+ Cuéntame con tus propias palabras: ¿qué estás tratando de lograr?
197
452
 
198
- | Flujo | Comando |
199
- |-------|---------|
200
- | Crear app nueva | `/elsabro:new` |
201
- | Agregar feature | `/elsabro:plan` → `/elsabro:execute` |
202
- | Debugging | `/elsabro:debug` |
203
- | Entender código | Usar agente analyst |
204
- </next_steps>
453
+ No te preocupes por términos técnicos, yo me encargo de eso.
454
+ ```
455
+ </error_handling>
456
+
457
+ <checklist>
458
+ ## Checklist de Auto-Verificación
459
+
460
+ Antes de terminar, verificar:
461
+
462
+ - [ ] TaskCreate ejecutado al inicio
463
+ - [ ] 2+ agentes HAIKU lanzados en paralelo para detección
464
+ - [ ] state.json leído (si existe) o creado (si no)
465
+ - [ ] Contexto detectado correctamente
466
+ - [ ] Usuario ha elegido siguiente paso
467
+ - [ ] state.json actualizado con current_flow
468
+ - [ ] TaskCreate para transición ejecutado
469
+ - [ ] Skill invocado con contexto relevante
470
+ - [ ] TaskUpdate(completed) ejecutado
471
+ </checklist>
@@ -3,6 +3,7 @@ name: verify-work
3
3
  description: Verificación completa del trabajo realizado usando agentes paralelos con Tasks
4
4
  allowed-tools:
5
5
  - Read
6
+ - Write
6
7
  - Bash
7
8
  - Glob
8
9
  - Grep
@@ -11,12 +12,98 @@ allowed-tools:
11
12
  - TaskUpdate
12
13
  - TaskList
13
14
  - TaskGet
15
+ - AskUserQuestion
16
+ sync:
17
+ reads: [".elsabro/state.json"]
18
+ writes: [".elsabro/state.json", ".elsabro/context.md", ".planning/VERIFICATION-REPORT.md"]
19
+ phases: ["initializing", "verifying", "aggregating", "done"]
20
+ passes_context_to: ["execute (si gaps)", "done"]
21
+ dispatcher:
22
+ verification:
23
+ agents: [pr-review-toolkit:code-reviewer, pr-review-toolkit:silent-failure-hunter, pr-review-toolkit:pr-test-analyzer]
24
+ model: opus
25
+ parallel: true
26
+ min_agents: 3
14
27
  ---
15
28
 
16
29
  # /elsabro:verify-work
17
30
 
18
31
  <command-name>verify-work</command-name>
19
32
 
33
+ <state_sync>
34
+ ## SINCRONIZACIÓN DE ESTADO (OBLIGATORIO)
35
+
36
+ **IMPORTAR**: Este comando DEBE seguir `/references/state-sync.md` y `/references/enforcement-rules.md`.
37
+
38
+ ### Al Iniciar (ANTES de cualquier operación)
39
+
40
+ ```javascript
41
+ // 1. Crear task de inicialización
42
+ TaskCreate({
43
+ subject: "Initialize verify-work command",
44
+ description: "Leer estado y preparar verificación",
45
+ activeForm: "Inicializando..."
46
+ })
47
+ TaskUpdate(id, status: "in_progress")
48
+
49
+ // 2. Leer estado existente
50
+ const state = Read(".elsabro/state.json") || createInitialState();
51
+
52
+ // 3. Verificar contexto de execute (archivos a verificar)
53
+ if (state.context.changed_files && state.context.changed_files.length > 0) {
54
+ console.log("Archivos a verificar:", state.context.changed_files);
55
+ console.log("Commits a revisar:", state.context.commits);
56
+ } else {
57
+ // No hay contexto de execute - verificar todo
58
+ console.log("Sin contexto de execute - verificación completa");
59
+ }
60
+
61
+ // 4. Actualizar estado
62
+ state.current_flow = { command: "verify-work", phase: "initializing", started_at: new Date().toISOString() };
63
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
64
+
65
+ // 5. Completar task de inicialización
66
+ TaskUpdate(id, status: "completed")
67
+ ```
68
+
69
+ ### Al Cambiar de Fase
70
+
71
+ ```javascript
72
+ // Antes de verificación
73
+ state.current_flow.phase = "verifying";
74
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
75
+
76
+ // Antes de agregación
77
+ state.current_flow.phase = "aggregating";
78
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
79
+ ```
80
+
81
+ ### Al Completar
82
+
83
+ ```javascript
84
+ // Registrar en historial
85
+ state.history.push({
86
+ command: "verify-work",
87
+ completed_at: new Date().toISOString(),
88
+ result: verificationResult, // "PASS" | "FAIL" | "PARTIAL"
89
+ artifact: ".planning/VERIFICATION-REPORT.md"
90
+ });
91
+
92
+ // Actualizar contexto
93
+ state.context.verification_result = verificationResult;
94
+ state.context.ready_for_merge = verificationResult === "PASS";
95
+
96
+ // Limpiar flujo y sugerir siguiente
97
+ state.current_flow = null;
98
+ state.suggested_next = verificationResult === "PASS" ? null : "execute"; // null = done
99
+
100
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
101
+
102
+ // Actualizar context.md legible
103
+ Write(".elsabro/context.md", generateHumanReadableContext(state));
104
+ ```
105
+ </state_sync>
106
+
20
107
  ## Propósito
21
108
 
22
109
  Verificar que el trabajo completado cumple con los requirements, pasa todos los tests, y está listo para merge/deploy.
@@ -196,7 +283,9 @@ Para verificación, usamos `policy: fail_fast` porque todos los checks son crít
196
283
  └────────────────────────────────────────────────┘
197
284
  ```
198
285
 
199
- ### Lanzamiento de Agentes con Tasks
286
+ ### Lanzamiento de Agentes OPUS x3 con Tasks
287
+
288
+ **OBLIGATORIO:** Usar 3 agentes OPUS especializados para verificación profunda.
200
289
 
201
290
  ```javascript
202
291
  // 1. Marcar todos como in_progress
@@ -204,10 +293,25 @@ TaskUpdate({ taskId: "functional-id", status: "in_progress" })
204
293
  TaskUpdate({ taskId: "quality-id", status: "in_progress" })
205
294
  TaskUpdate({ taskId: "security-id", status: "in_progress" })
206
295
 
207
- // 2. Lanzar agentes EN UN SOLO MENSAJE (paralelo real)
208
- Task(elsabro-verifier, model: "opus"): Verify functional requirements |
209
- Task(elsabro-verifier, model: "opus"): Verify quality metrics |
210
- Task(elsabro-verifier, model: "opus"): Verify security and edge cases
296
+ // 2. Lanzar 3 agentes OPUS EN UN SOLO MENSAJE (paralelo real)
297
+ Task({
298
+ subagent_type: "pr-review-toolkit:code-reviewer",
299
+ model: "opus", // OPUS para análisis profundo
300
+ description: "Code review completo",
301
+ prompt: "Revisa los cambios buscando bugs, code smells, mejores prácticas, seguridad..."
302
+ }) |
303
+ Task({
304
+ subagent_type: "pr-review-toolkit:silent-failure-hunter",
305
+ model: "opus", // ← OPUS para edge cases
306
+ description: "Buscar errores ocultos",
307
+ prompt: "Busca errores silenciosos, try/catch que ocultan errores, fallbacks problemáticos..."
308
+ }) |
309
+ Task({
310
+ subagent_type: "pr-review-toolkit:pr-test-analyzer",
311
+ model: "opus", // ← OPUS para análisis de tests
312
+ description: "Analizar cobertura de tests",
313
+ prompt: "Verifica que los tests cubren los cambios, busca casos críticos sin test..."
314
+ })
211
315
 
212
316
  // 3. Al completar cada uno, marcar completed
213
317
  TaskUpdate({