siesa-agents 2.1.96 → 2.1.98
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/bin/install.js +37 -27
- package/claude/commands/sa-quick-dev.md +19 -196
- package/claude/skills/sa-screen-layout-refactor/SKILL.md +92 -6
- package/package.json +1 -1
- package/claude/agents/sa-tea-atdd-run.md +0 -76
- package/claude/agents/sa-tea-atdd.md +0 -40
- package/claude/agents/sa-tea-automate.md +0 -39
- package/claude/agents/sa-tea-framework.md +0 -36
- package/claude/agents/sa-tea-nfr.md +0 -40
- package/claude/agents/sa-tea-review.md +0 -44
- package/claude/agents/sa-tea-test-design.md +0 -37
- package/claude/agents/sa-tea-trace.md +0 -41
package/bin/install.js
CHANGED
|
@@ -412,6 +412,40 @@ class SiesaBmadInstaller {
|
|
|
412
412
|
return modifiedFiles;
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
+
// Returns true if `relativePath` (relative to source root) is inside a
|
|
416
|
+
// `skills/` directory AND the skill name does NOT start with 'sa-'.
|
|
417
|
+
// The package only ships siesa-agents skills (sa-*); if a non-sa-* entry
|
|
418
|
+
// ever appears in the tarball it would shadow the engineer's own skill with
|
|
419
|
+
// the same name. This guard prevents that, and makes the intent explicit.
|
|
420
|
+
isForeignSkillPath(relativePath) {
|
|
421
|
+
const parts = relativePath.replace(/\\/g, '/').split('/');
|
|
422
|
+
const skillsIdx = parts.indexOf('skills');
|
|
423
|
+
if (skillsIdx >= 0 && parts.length > skillsIdx + 1) {
|
|
424
|
+
const skillName = parts[skillsIdx + 1];
|
|
425
|
+
return Boolean(skillName) && !skillName.startsWith('sa-');
|
|
426
|
+
}
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// Single filter factory used in every fs.copy call.
|
|
431
|
+
// Rules (in order):
|
|
432
|
+
// 1. Never overwrite user-owned ignored files when they already exist.
|
|
433
|
+
// 2. Never copy non-sa-* skill directories from the source package —
|
|
434
|
+
// the engineer's custom skills must survive every re-install/update.
|
|
435
|
+
makeCopyFilter(sourcePath, targetPath) {
|
|
436
|
+
return (src) => {
|
|
437
|
+
const relativePath = path.relative(sourcePath, src);
|
|
438
|
+
if (this.ignoredFiles.includes(relativePath)) {
|
|
439
|
+
const targetFile = path.join(targetPath, relativePath);
|
|
440
|
+
return !fs.existsSync(targetFile);
|
|
441
|
+
}
|
|
442
|
+
if (this.isForeignSkillPath(relativePath)) {
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
return true;
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
|
|
415
449
|
async getAllFiles(dir) {
|
|
416
450
|
const files = [];
|
|
417
451
|
const stat = await fs.stat(dir);
|
|
@@ -581,15 +615,7 @@ class SiesaBmadInstaller {
|
|
|
581
615
|
await fs.copy(sourcePath, targetPath, {
|
|
582
616
|
overwrite: true,
|
|
583
617
|
recursive: true,
|
|
584
|
-
filter: (
|
|
585
|
-
const relativePath = path.relative(sourcePath, src);
|
|
586
|
-
// No sobrescribir archivos ignorados si ya existen
|
|
587
|
-
if (this.ignoredFiles.includes(relativePath)) {
|
|
588
|
-
const targetFile = path.join(targetPath, relativePath);
|
|
589
|
-
return !fs.existsSync(targetFile);
|
|
590
|
-
}
|
|
591
|
-
return true;
|
|
592
|
-
}
|
|
618
|
+
filter: this.makeCopyFilter(sourcePath, targetPath)
|
|
593
619
|
});
|
|
594
620
|
}
|
|
595
621
|
|
|
@@ -670,15 +696,7 @@ class SiesaBmadInstaller {
|
|
|
670
696
|
await fs.copy(sourcePath, targetPath, {
|
|
671
697
|
overwrite: true,
|
|
672
698
|
recursive: true,
|
|
673
|
-
filter: (
|
|
674
|
-
const relativePath = path.relative(sourcePath, src);
|
|
675
|
-
// No sobrescribir archivos ignorados si ya existen
|
|
676
|
-
if (this.ignoredFiles.includes(relativePath)) {
|
|
677
|
-
const targetFile = path.join(targetPath, relativePath);
|
|
678
|
-
return !fs.existsSync(targetFile);
|
|
679
|
-
}
|
|
680
|
-
return true;
|
|
681
|
-
}
|
|
699
|
+
filter: this.makeCopyFilter(sourcePath, targetPath)
|
|
682
700
|
});
|
|
683
701
|
} else {
|
|
684
702
|
console.warn(`⚠️ Carpeta ${mapping.source} no encontrada en el paquete`);
|
|
@@ -787,15 +805,7 @@ class SiesaBmadInstaller {
|
|
|
787
805
|
await fs.copy(sourcePath, stagingPath, {
|
|
788
806
|
overwrite: true,
|
|
789
807
|
recursive: true,
|
|
790
|
-
filter: (
|
|
791
|
-
const relativePath = path.relative(sourcePath, src);
|
|
792
|
-
// No sobrescribir archivos ignorados si ya existen en el target real.
|
|
793
|
-
if (this.ignoredFiles.includes(relativePath)) {
|
|
794
|
-
const realTargetFile = path.join(targetPath, relativePath);
|
|
795
|
-
return !fs.existsSync(realTargetFile);
|
|
796
|
-
}
|
|
797
|
-
return true;
|
|
798
|
-
}
|
|
808
|
+
filter: this.makeCopyFilter(sourcePath, targetPath)
|
|
799
809
|
});
|
|
800
810
|
}
|
|
801
811
|
// Ocultar el staging mientras existe (cosmético, solo Windows).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: 'Pipeline secuencial de sub-agentes por épica: crea, desarrolla y revisa TODAS las historias de una o varias épicas usando sub-agentes aislados
|
|
2
|
+
description: 'Pipeline secuencial de sub-agentes por épica: crea, desarrolla y revisa TODAS las historias de una o varias épicas usando sub-agentes aislados. Acepta una épica individual (ej: 3) o un rango (ej: 1-4).'
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
## PASO 0 — Identificar las épicas a procesar
|
|
@@ -63,69 +63,6 @@ Con la fuente de la épica resuelta y el `sprint-status.yaml`:
|
|
|
63
63
|
|
|
64
64
|
Informa al usuario cuántas historias se van a procesar y cuáles son, con su status actual.
|
|
65
65
|
|
|
66
|
-
### 0.5 — Integración TEA
|
|
67
|
-
|
|
68
|
-
El pipeline siempre ejecuta el módulo TEA completo (ATDD + Automate + Review + Test Design + Trace). No hay modos opcionales.
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
> Los pasos 0.6 y 0.7 siempre se ejecutan.
|
|
73
|
-
|
|
74
|
-
### 0.6 — Verificar Test Framework
|
|
75
|
-
|
|
76
|
-
Verifica si existe `playwright.config.ts`, `playwright.config.js`, `cypress.config.ts` o `cypress.config.js` en el proyecto.
|
|
77
|
-
|
|
78
|
-
- **Si existe**: el framework ya está configurado. Continúa al paso 0.7.
|
|
79
|
-
- **Si NO existe**: usa el sub-agente `sa-tea-framework` para inicializarlo.
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
Proyecto: {PROJECT_NAME}
|
|
83
|
-
Directorio raíz: {PROJECT_ROOT}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
**ESPERA** a que complete antes de continuar.
|
|
87
|
-
|
|
88
|
-
### 0.7 — Test Design de la épica
|
|
89
|
-
|
|
90
|
-
Ejecuta el sub-agente `sa-tea-test-design` pasando:
|
|
91
|
-
|
|
92
|
-
```
|
|
93
|
-
Épica: {EPIC_NUMBER} - {EPIC_TITLE}
|
|
94
|
-
Fuente de la épica: {EPIC_SOURCE_FILE_PATH}
|
|
95
|
-
Modo: epic-level
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
**ESPERA** a que complete antes de iniciar el loop de historias.
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Reglas generales del pipeline
|
|
103
|
-
|
|
104
|
-
### Regla 1 — Observabilidad obligatoria en cada sub-agente
|
|
105
|
-
|
|
106
|
-
Cada sub-agente que ejecuta un workflow BMAD (`sa-create-story`, `sa-dev-story`, `sa-code-review`) **DEBE honrar las instrucciones de observabilidad** definidas en su respectivo `workflow_ext.md`. Estas instrucciones emiten eventos de telemetría (`sa-emit.js`) a GCP en momentos específicos del flujo y son la fuente de todos los reportes de métricas del equipo.
|
|
107
|
-
|
|
108
|
-
**Workflows instrumentados y eventos que se deben emitir:**
|
|
109
|
-
|
|
110
|
-
| Sub-agente | `workflow_ext.md` | Eventos emitidos |
|
|
111
|
-
|---|---|---|
|
|
112
|
-
| `sa-create-story` | `_siesa-agents/bmm/workflows/4-implementation/create-story/workflow_ext.md` | `workflow.started`, `status.changed` (backlog → ready-for-dev), `workflow.finished` |
|
|
113
|
-
| `sa-dev-story` | `_siesa-agents/bmm/workflows/4-implementation/dev-story/workflow_ext.md` | `workflow.started`, `status.changed` (in-progress → review), `workflow.finished` |
|
|
114
|
-
| `sa-code-review` | `_siesa-agents/bmm/workflows/4-implementation/code-review/workflow_ext.md` | `workflow.started`, `fix.started`/`fix.finished` (cuando el usuario acepta auto_fix / action_items / show_details), `status.changed` (review → done o → in-progress), `workflow.finished` |
|
|
115
|
-
|
|
116
|
-
**Prohibido a cualquier sub-agente bajo este orquestador:**
|
|
117
|
-
|
|
118
|
-
- ❌ Saltarse, comentar, condicionar u omitir cualquier comando `node ... sa-emit.js ...` del `workflow_ext.md` correspondiente.
|
|
119
|
-
- ❌ Diferir la emisión al "final del pipeline" o agruparla en batch. Los eventos son **lifecycle markers** y solo tienen sentido en el instante exacto que el `workflow_ext.md` indica (`workflow.finished` mide `duration_ms` desde el `workflow.started` correspondiente; si lo retrasas, la métrica queda corrompida).
|
|
120
|
-
|
|
121
|
-
**Manejo de errores de `sa-emit.js`:**
|
|
122
|
-
|
|
123
|
-
Si la llamada a `sa-emit.js` falla (gateway caído, credenciales mal configuradas, etc.), el sub-agente debe:
|
|
124
|
-
|
|
125
|
-
1. Registrar el fallo como advertencia **no-bloqueante**.
|
|
126
|
-
2. **Continuar el workflow normalmente** (regla universal documentada en cada `workflow_ext.md`: *"observability must never block the workflow"*).
|
|
127
|
-
3. NUNCA reemplazar la llamada por su omisión deliberada — el evento queda buffereado localmente en `~/.claude/observability/buffer/events.jsonl` y se reenvía automáticamente cuando el transporte se recupera.
|
|
128
|
-
|
|
129
66
|
---
|
|
130
67
|
|
|
131
68
|
## Reglas generales del pipeline
|
|
@@ -159,7 +96,7 @@ Si la llamada a `sa-emit.js` falla (gateway caído, credenciales mal configurada
|
|
|
159
96
|
|
|
160
97
|
## PASO 1 — Loop de procesamiento por historia
|
|
161
98
|
|
|
162
|
-
Para CADA historia pendiente de la épica seleccionada, ejecuta secuencialmente los sub-agentes dedicados. Cada historia completa su ciclo completo antes de pasar a la siguiente.
|
|
99
|
+
Para CADA historia pendiente de la épica seleccionada, ejecuta secuencialmente los 3 sub-agentes dedicados. Cada historia completa su ciclo completo (create → dev → code-review) antes de pasar a la siguiente.
|
|
163
100
|
|
|
164
101
|
Los sub-agentes están definidos en `.claude/agents/` y DEBES invocarlos por nombre usando la herramienta Agent con `subagent_type`.
|
|
165
102
|
|
|
@@ -180,22 +117,6 @@ Descripción: {STORY_DESCRIPTION_FROM_EPICS_FILE}
|
|
|
180
117
|
|
|
181
118
|
---
|
|
182
119
|
|
|
183
|
-
### SUB-AGENTE A.5 — ATDD
|
|
184
|
-
|
|
185
|
-
Solo si el SUB-AGENTE A fue exitoso, usa la herramienta Agent con `subagent_type: "sa-tea-atdd"` y pasa como prompt:
|
|
186
|
-
|
|
187
|
-
```
|
|
188
|
-
Historia a procesar: {STORY_FILE_PATH}
|
|
189
|
-
Épica: {EPIC_NUMBER} - {EPIC_TITLE}
|
|
190
|
-
Fuente de la épica: {EPIC_SOURCE_FILE_PATH}
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
**ESPERA** a que complete.
|
|
194
|
-
|
|
195
|
-
> Si falla, registra el fallo como no-bloqueante y **CONTINÚA** con el SUB-AGENTE B. Los tests ATDD no son prerequisito para la implementación.
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
120
|
### SUB-AGENTE B — Dev Story
|
|
200
121
|
|
|
201
122
|
Solo si el SUB-AGENTE A fue exitoso, usa la herramienta Agent con `subagent_type: "sa-dev-story"` y pasa como prompt:
|
|
@@ -210,71 +131,6 @@ Fuente de la épica: {EPIC_SOURCE_FILE_PATH}
|
|
|
210
131
|
|
|
211
132
|
---
|
|
212
133
|
|
|
213
|
-
### SUB-AGENTE B.1 — ATDD Verify (loop de corrección)
|
|
214
|
-
|
|
215
|
-
Solo si el SUB-AGENTE B fue exitoso Y el SUB-AGENTE A.5 generó tests, ejecuta este loop.
|
|
216
|
-
Si A.5 falló o no generó tests, omite este paso y continúa con B.5.
|
|
217
|
-
|
|
218
|
-
Ejecuta hasta **3 intentos en total** (1 inicial + 2 reintentos):
|
|
219
|
-
|
|
220
|
-
#### Intento N:
|
|
221
|
-
|
|
222
|
-
Usa la herramienta Agent con `subagent_type: "sa-tea-atdd-run"` y pasa como prompt:
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
Historia: {STORY_FILE_PATH}
|
|
226
|
-
Archivos de test ATDD: {ATDD_TEST_FILES_PATH}
|
|
227
|
-
Épica: {EPIC_NUMBER} - {EPIC_TITLE}
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
**ESPERA** a que complete y evalúa el resultado:
|
|
231
|
-
|
|
232
|
-
- **PASS** → todos los tests en GREEN. Continúa con el SUB-AGENTE B.5.
|
|
233
|
-
- **SKIP** → no se encontraron los archivos. Registra como advertencia y continúa con B.5.
|
|
234
|
-
- **FAIL** (y quedan reintentos) → re-invoca el SUB-AGENTE B con contexto adicional:
|
|
235
|
-
|
|
236
|
-
```
|
|
237
|
-
Historia a implementar: {STORY_FILE_PATH}
|
|
238
|
-
Épica: {EPIC_NUMBER} - {EPIC_TITLE}
|
|
239
|
-
Fuente de la épica: {EPIC_SOURCE_FILE_PATH}
|
|
240
|
-
CORRECCIÓN REQUERIDA — Tests ATDD fallidos (intento {N}/3):
|
|
241
|
-
{OUTPUT_COMPLETO_DE_ATDD_RUN con nombres de tests fallidos y mensajes de error}
|
|
242
|
-
Corrige la implementación para que estos tests pasen a GREEN.
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
- **FAIL** (sin reintentos restantes, tras 3 intentos) → registra la historia como FAIL con motivo "ATDD no pasaron a GREEN tras 3 intentos" y pasa a la siguiente historia. No ejecuta B.5, B.6 ni C.
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
### SUB-AGENTE B.5 — Test Automate
|
|
250
|
-
|
|
251
|
-
Solo si el SUB-AGENTE B fue exitoso, usa la herramienta Agent con `subagent_type: "sa-tea-automate"` y pasa como prompt:
|
|
252
|
-
|
|
253
|
-
```
|
|
254
|
-
Historia a procesar: {STORY_FILE_PATH}
|
|
255
|
-
Épica: {EPIC_NUMBER} - {EPIC_TITLE}
|
|
256
|
-
Fuente de la épica: {EPIC_SOURCE_FILE_PATH}
|
|
257
|
-
Tests ATDD generados: {ATDD_TEST_FILES_PATH_OR_"ninguno si A.5 falló"}
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
**ESPERA** a que complete. Si falla, registra el fallo y continúa con el SUB-AGENTE B.6 / C.
|
|
261
|
-
|
|
262
|
-
---
|
|
263
|
-
|
|
264
|
-
### SUB-AGENTE B.6 — Test Review
|
|
265
|
-
|
|
266
|
-
Solo si el SUB-AGENTE B.5 fue exitoso, usa la herramienta Agent con `subagent_type: "sa-tea-review"` y pasa como prompt:
|
|
267
|
-
|
|
268
|
-
```
|
|
269
|
-
Historia revisada: {STORY_FILE_PATH}
|
|
270
|
-
Épica: {EPIC_NUMBER} - {EPIC_TITLE}
|
|
271
|
-
Directorio de tests de la historia: {STORY_TEST_DIR}
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
**ESPERA** a que complete. Si falla, registra el fallo y continúa con el SUB-AGENTE C.
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
134
|
### SUB-AGENTE C — Code Review
|
|
279
135
|
|
|
280
136
|
Solo si el SUB-AGENTE B fue exitoso, usa la herramienta Agent con `subagent_type: "sa-code-review"` y pasa como prompt:
|
|
@@ -291,49 +147,24 @@ Fuente de la épica: {EPIC_SOURCE_FILE_PATH}
|
|
|
291
147
|
|
|
292
148
|
### Feedback intermedio por historia
|
|
293
149
|
|
|
294
|
-
Después de completar
|
|
150
|
+
Después de completar los 3 sub-agentes para una historia, muestra al usuario un resumen breve de UNA línea.
|
|
295
151
|
|
|
296
152
|
```
|
|
297
|
-
✅ Story {N}.{M} [{título}]: create ✅ →
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
Si hubo reintentos en atdd-run, indica cuántos:
|
|
301
|
-
```
|
|
302
|
-
✅ Story {N}.{M} [{título}]: create ✅ → atdd ✅ → dev ✅ → atdd-run ⚠️(2 intentos) → automate ✅ → test-review ✅ → review ✅ (PASS)
|
|
153
|
+
✅ Story {N}.{M} [{título}]: create ✅ → dev ✅ → review ✅ (PASS)
|
|
303
154
|
```
|
|
304
155
|
|
|
305
156
|
En caso de fallo:
|
|
306
157
|
```
|
|
307
|
-
❌ Story {N}.{M} [{título}]: create ✅ →
|
|
158
|
+
❌ Story {N}.{M} [{título}]: create ✅ → dev ✅ → review ❌ (FAIL: motivo breve)
|
|
308
159
|
```
|
|
309
160
|
|
|
310
161
|
Luego continúa con la siguiente historia.
|
|
311
162
|
|
|
312
163
|
---
|
|
313
164
|
|
|
314
|
-
## PASO 2 —
|
|
315
|
-
|
|
316
|
-
### Quality Gate TEA
|
|
317
|
-
|
|
318
|
-
Al completar el loop de todas las historias, ejecuta el gate de la épica.
|
|
165
|
+
## PASO 2 — Reporte Final
|
|
319
166
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
Usa la herramienta Agent con `subagent_type: "sa-tea-trace"` y pasa como prompt:
|
|
323
|
-
|
|
324
|
-
```
|
|
325
|
-
Épica: {EPIC_NUMBER} - {EPIC_TITLE}
|
|
326
|
-
Fuente de la épica: {EPIC_SOURCE_FILE_PATH}
|
|
327
|
-
Historias procesadas: {LISTA_DE_STORY_FILE_PATHS}
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
**ESPERA** a que complete.
|
|
331
|
-
|
|
332
|
-
---
|
|
333
|
-
|
|
334
|
-
### Reporte Final
|
|
335
|
-
|
|
336
|
-
Al completar TODAS las historias y el gate TEA, genera el archivo de reporte en:
|
|
167
|
+
Al completar TODAS las historias de la épica, genera el archivo de reporte en:
|
|
337
168
|
|
|
338
169
|
```
|
|
339
170
|
_bmad-output/implementation-artifacts/epic-{N}-report.md
|
|
@@ -350,22 +181,14 @@ El contenido del archivo debe seguir esta estructura:
|
|
|
350
181
|
- Historias procesadas: X/Y
|
|
351
182
|
- Exitosas (full pipeline): X
|
|
352
183
|
- Con fallos: X
|
|
353
|
-
- Quality Gate (Cobertura): PASS / CONCERNS / FAIL
|
|
354
184
|
|
|
355
185
|
## Detalle por Historia
|
|
356
186
|
|
|
357
|
-
| Historia | Create |
|
|
358
|
-
|
|
359
|
-
| {N}.1 | ✅ | ✅
|
|
360
|
-
| {N}.2 | ✅ | ✅
|
|
361
|
-
| {N}.3 | ✅ | ❌
|
|
362
|
-
|
|
363
|
-
## Quality Gate
|
|
364
|
-
|
|
365
|
-
| Gate | Status | Detalle |
|
|
366
|
-
|------|--------|---------|
|
|
367
|
-
| Coverage P0 | ✅ PASS | 100% cubierto |
|
|
368
|
-
| Coverage Overall | ⚠️ CONCERNS | 78% (mínimo 80%) |
|
|
187
|
+
| Historia | Create | Dev | Code Review | Estado |
|
|
188
|
+
|----------|--------|-----|-------------|--------|
|
|
189
|
+
| {N}.1 | ✅ | ✅ | ✅ PASS | Completada |
|
|
190
|
+
| {N}.2 | ✅ | ✅ | ⚠️ PASS c/obs | Completada |
|
|
191
|
+
| {N}.3 | ✅ | ❌ | ⏭️ | Fallo en dev |
|
|
369
192
|
|
|
370
193
|
## Historias que requieren atención manual
|
|
371
194
|
- [lista de historias con fallos y razón, o "Ninguna" si todas pasaron]
|
|
@@ -377,8 +200,8 @@ Una vez escrito el archivo, informa al usuario:
|
|
|
377
200
|
Reporte guardado en: _bmad-output/implementation-artifacts/epic-{N}-report.md
|
|
378
201
|
```
|
|
379
202
|
|
|
380
|
-
Si TODAS las historias pasaron
|
|
381
|
-
Si alguna
|
|
203
|
+
Si TODAS las historias pasaron, confirma al usuario que la épica está completa.
|
|
204
|
+
Si alguna falló, indica cuáles requieren intervención manual y por qué.
|
|
382
205
|
|
|
383
206
|
Luego **continúa con la siguiente épica de EPIC_LIST** repitiendo desde el PASO 0.2.
|
|
384
207
|
|
|
@@ -391,12 +214,12 @@ Al completar el procesamiento de TODAS las épicas de EPIC_LIST, muestra un resu
|
|
|
391
214
|
```
|
|
392
215
|
## Resumen del pipeline — Épicas {EPIC_LIST_START}-{EPIC_LIST_END}
|
|
393
216
|
|
|
394
|
-
| Épica | Historias | Exitosas | Con fallos |
|
|
395
|
-
|
|
396
|
-
| N | X/Y | X | X |
|
|
397
|
-
| ... | ... | ... | ... | ...
|
|
217
|
+
| Épica | Historias | Exitosas | Con fallos | Reporte |
|
|
218
|
+
|-------|-----------|----------|------------|---------|
|
|
219
|
+
| N | X/Y | X | X | epic-N-report.md |
|
|
220
|
+
| ... | ... | ... | ... | ... |
|
|
398
221
|
|
|
399
222
|
Total: X épicas procesadas. X completadas, X con atención manual requerida.
|
|
400
223
|
```
|
|
401
224
|
|
|
402
|
-
Si hay épicas con fallos
|
|
225
|
+
Si hay épicas con fallos, lista los archivos de reporte para revisión manual.
|
|
@@ -58,13 +58,18 @@ nothing or to several candidates is asked about, never guessed.
|
|
|
58
58
|
Key definitions you take from the UX spec instead of inferring:
|
|
59
59
|
|
|
60
60
|
- **§2.1 Component Selection Priority** (mandatory order): 1) a siesa-ui-kit
|
|
61
|
-
molecule, 2) a **composition** of kit molecules, 3) **shadcn as the
|
|
61
|
+
molecule, 2) a **composition** of kit molecules, 3) **shadcn or Radix as the
|
|
62
62
|
fallback** when neither expresses the widget — used directly, flagged in the
|
|
63
|
-
report (`⚠️ shadcn fallback: <widget>`
|
|
64
|
-
to promote it into the kit.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
report (`⚠️ shadcn fallback: <widget>` / `⚠️ radix fallback: <widget>`) so
|
|
64
|
+
the team can later decide whether to promote it into the kit. Prefer shadcn
|
|
65
|
+
when it covers the widget; reach for Radix primitives
|
|
66
|
+
(`@radix-ui/react-dialog`, `Popover`, `Collapsible`, etc.) when the
|
|
67
|
+
interaction pattern (slide-in panels, floating overlays, controlled
|
|
68
|
+
disclosure) needs headless primitives that shadcn doesn't expose cleanly.
|
|
69
|
+
Hand-rolled HTML widgets are never an option at any step. shadcn and Radix
|
|
70
|
+
components obey the same `rules/` as everything else: design-system token
|
|
71
|
+
classes, rem, no inline styles — restyled to the design system, never left
|
|
72
|
+
on defaults.
|
|
68
73
|
- **§1 Design System Foundation**: brand palette (primary `#0e79fd`), semantic
|
|
69
74
|
colors, surfaces; neutrals are `slate.*`, never the secondary brand scale.
|
|
70
75
|
- **§4.3 Page Structure**: the standard page scaffold (header with title +
|
|
@@ -324,8 +329,49 @@ the screen's archetype, is the screen `❌ BLOCKED: <screen> — no mockup and n
|
|
|
324
329
|
memory precedent`. Steps 2–6 then run identically, with the synthesized plan
|
|
325
330
|
standing in for the mockup.
|
|
326
331
|
|
|
332
|
+
**If the target screen already uses siesa-ui-kit components** (e.g. it is
|
|
333
|
+
built on `MasterCrud`, `Table`, or any other kit molecule), this is **not a
|
|
334
|
+
skip condition**. The refactor goal is the *distribution* — how widgets are
|
|
335
|
+
arranged, grouped, and presented — not the widget vocabulary. If the
|
|
336
|
+
distribution in the mockup or the user's instruction differs from the current
|
|
337
|
+
screen, proceed with the full refactor using kit compositions (more complex
|
|
338
|
+
compositions are acceptable and expected). Only when no kit composition covers
|
|
339
|
+
a widget should shadcn or Radix be considered.
|
|
340
|
+
|
|
327
341
|
### Step 2 — Build the homologation map
|
|
328
342
|
|
|
343
|
+
#### Interaction audit (before the widget inventory)
|
|
344
|
+
|
|
345
|
+
For every interactive element in the mockup (buttons, toggles, switches,
|
|
346
|
+
disclosure triggers, tab groups), read the associated JS/event logic in the
|
|
347
|
+
source HTML and document the full contract:
|
|
348
|
+
|
|
349
|
+
| Trigger | Event | Effect | Position / layout |
|
|
350
|
+
|---------|-------|--------|-------------------|
|
|
351
|
+
| Filter button | click | opens filter panel | slide-in from right (Sheet / Drawer) |
|
|
352
|
+
| Toggle switch | change | reveals option group | appears to the right of the switch |
|
|
353
|
+
| … | … | … | … |
|
|
354
|
+
|
|
355
|
+
This table is **mandatory input for the homologation map**. A widget whose
|
|
356
|
+
interaction contract is not documented here cannot be mapped correctly — the
|
|
357
|
+
model will default to stacking everything vertically, which is the failure
|
|
358
|
+
mode. Map each effect to its kit realization:
|
|
359
|
+
|
|
360
|
+
- A **slide-in panel** (sidebar, drawer) → `Sheet` (shadcn) or
|
|
361
|
+
`@radix-ui/react-dialog` in sheet mode, never a `div` below the trigger.
|
|
362
|
+
- A **floating overlay / popover** → `Popover` (shadcn or Radix).
|
|
363
|
+
- A **conditionally revealed section beside the trigger** → `Collapsible`
|
|
364
|
+
(`@radix-ui/react-collapsible`) with `flex-row` layout so the revealed
|
|
365
|
+
content appears to the right, not below.
|
|
366
|
+
- A **tab-like switch that swaps content areas** → `Tabs` (kit) with the
|
|
367
|
+
content panel beside or below as the mockup dictates.
|
|
368
|
+
|
|
369
|
+
If the source HTML has no JS for a trigger (static mockup), infer the pattern
|
|
370
|
+
from the visual layout annotation (labels like "→ panel", arrows, overlapping
|
|
371
|
+
layers) and record it as `inferred`. An `inferred` entry still produces a
|
|
372
|
+
mapping; it is flagged `⚠️ inferred behavior` in the screen report so a
|
|
373
|
+
reviewer can confirm before shipping.
|
|
374
|
+
|
|
329
375
|
Inventory every widget the mockup draws — buttons, checkboxes, data grids,
|
|
330
376
|
tabs, badges, dropdown menus, inputs, labels with descriptions, pagination,
|
|
331
377
|
dividers, avatars — and map **each one** to its kit realization before touching
|
|
@@ -403,6 +449,24 @@ With the map in hand, audit the **current** screen and write down:
|
|
|
403
449
|
- **Stays identical** — every field name, validation, hook call, query,
|
|
404
450
|
mutation, handler, prop and type; every aria-label and accessible behavior.
|
|
405
451
|
|
|
452
|
+
**Filter continuity check (MasterCrud targets only):** If the current screen
|
|
453
|
+
is built on `MasterCrud`, inventory its active filter logic before doing
|
|
454
|
+
anything else:
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
grep -rn "useFilter\|filterParams\|queryKey\|searchParams\|filterState\|onFilter" \
|
|
458
|
+
apps/Frontend/src/modules/<module-slug>/presentation/
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
Record every hook, param key, and callback that drives filtering. If the
|
|
462
|
+
mockup or the user's instruction calls for a composition that does **not** use
|
|
463
|
+
`MasterCrud`, these filter hooks are now orphaned — their UI trigger will
|
|
464
|
+
disappear. Document them in the gap analysis as **"filter bindings requiring
|
|
465
|
+
rewire"** (not as warnings to ignore) and carry them into Step 4 as a required
|
|
466
|
+
output: the new composition must expose a UI element (filter button, search
|
|
467
|
+
input, panel) wired to the same hook calls. No filter that worked before the
|
|
468
|
+
refactor may be left unreachable after it.
|
|
469
|
+
|
|
406
470
|
Two asymmetries, both flagged, never silently resolved:
|
|
407
471
|
|
|
408
472
|
- A mockup element with **no counterpart in the current screen** (an extra
|
|
@@ -462,6 +526,24 @@ The hard-won mechanics, worth understanding rather than copying:
|
|
|
462
526
|
and declares no fields. If that file ever needs a validation or an API call,
|
|
463
527
|
the change stopped being layout — back to Step 3.
|
|
464
528
|
|
|
529
|
+
**Filter rewiring (when leaving MasterCrud):** If Step 3 identified orphaned
|
|
530
|
+
filter bindings, the new composition must reconnect them. This is strictly
|
|
531
|
+
presentation-layer work — the hooks already know how to filter; they only
|
|
532
|
+
need a new UI trigger:
|
|
533
|
+
|
|
534
|
+
- A filter button → opens a `Sheet` (shadcn) or `Collapsible` panel; its
|
|
535
|
+
`onApply` / `onChange` calls the same hook callback that `MasterCrud`'s
|
|
536
|
+
built-in filter used.
|
|
537
|
+
- A search input → bound to the same `filterParams` key, same debounce if
|
|
538
|
+
it existed.
|
|
539
|
+
- Advanced vs. basic filter sections → same state split, new visual grouping
|
|
540
|
+
inside the panel.
|
|
541
|
+
|
|
542
|
+
Wire each binding explicitly. Close this sub-step with a checklist: one line
|
|
543
|
+
per orphaned filter binding, marked `✅ rewired` or `❌ no UI trigger found`.
|
|
544
|
+
A binding left `❌` blocks the screen (`❌ BLOCKED: <screen> — filter
|
|
545
|
+
binding <name> has no UI trigger in new composition`).
|
|
546
|
+
|
|
465
547
|
Whichever kind: keep field `name`s/`accessorKey`s, react-hook-form
|
|
466
548
|
registrations and resolvers, zod schemas, TanStack Query/Router bindings,
|
|
467
549
|
`useEffect` dependencies, event handlers, i18n keys and TypeScript types
|
|
@@ -644,6 +726,10 @@ do with a blocked screen.
|
|
|
644
726
|
- Weaken what a test verifies. Updating a structural assertion whose markup you
|
|
645
727
|
replaced is legitimate (and reported); loosening a behavioral assertion to
|
|
646
728
|
get green is not
|
|
729
|
+
- Touch a view (create, edit, detail, list) for which the user provided **no
|
|
730
|
+
reference mockup or explicit instruction** — if only the list view was
|
|
731
|
+
referenced, the create/edit views are out of scope even if they share the
|
|
732
|
+
same module; scope is per-view, not per-module
|
|
647
733
|
- Start a run without an explicit user-declared target (a module/feature name,
|
|
648
734
|
or an explicit full-scope instruction) — inferring what to refactor is
|
|
649
735
|
forbidden; process anything the declared scope doesn't cover
|
package/package.json
CHANGED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sa-tea-atdd-run
|
|
3
|
-
description: "Sub-agente TEA autónomo que ejecuta los tests ATDD generados para una historia y reporta cuántos pasaron a GREEN. Solo puede ser invocado por el orquestador sa-quick-dev."
|
|
4
|
-
model: inherit
|
|
5
|
-
color: purple
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **RESTRICCIÓN**: Este sub-agente solo puede ser ejecutado por el orquestador `sa-quick-dev`.
|
|
9
|
-
> No debe ni puede ser invocado por el modelo de forma autónoma, ni por ningún workflow
|
|
10
|
-
> o skill diferente al orquestador, salvo instrucción explícita y directa del usuario.
|
|
11
|
-
> Si recibes esta instrucción fuera del contexto de `sa-quick-dev`, detente y notifica al usuario.
|
|
12
|
-
|
|
13
|
-
Eres un agente autónomo cuya única responsabilidad es **ejecutar los tests ATDD** de una historia y reportar si pasaron a GREEN después de la implementación.
|
|
14
|
-
|
|
15
|
-
## Reglas Críticas
|
|
16
|
-
|
|
17
|
-
- NO hagas preguntas al usuario. Actúa autónomamente.
|
|
18
|
-
- Ejecuta SOLO los archivos de test indicados en el prompt — no toda la suite.
|
|
19
|
-
- No modifiques los tests ni el código fuente. Solo ejecuta y reporta.
|
|
20
|
-
- Si no existen los archivos de test indicados, reporta SKIP con el motivo.
|
|
21
|
-
|
|
22
|
-
## Ejecución
|
|
23
|
-
|
|
24
|
-
### 1. Detectar el test runner
|
|
25
|
-
|
|
26
|
-
Lee `package.json` del proyecto para determinar si usa Playwright o Cypress:
|
|
27
|
-
- Si tiene `@playwright/test` o `playwright` → usa Playwright
|
|
28
|
-
- Si tiene `cypress` → usa Cypress
|
|
29
|
-
|
|
30
|
-
### 2. Construir el comando de ejecución
|
|
31
|
-
|
|
32
|
-
**Playwright:**
|
|
33
|
-
```
|
|
34
|
-
npx playwright test {ATDD_TEST_FILES} --reporter=list
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
**Cypress:**
|
|
38
|
-
```
|
|
39
|
-
npx cypress run --spec "{ATDD_TEST_FILES}"
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Donde `{ATDD_TEST_FILES}` son los archivos de test indicados en el prompt.
|
|
43
|
-
|
|
44
|
-
### 3. Ejecutar los tests
|
|
45
|
-
|
|
46
|
-
Corre el comando y captura la salida completa (stdout + stderr).
|
|
47
|
-
|
|
48
|
-
### 4. Parsear resultados
|
|
49
|
-
|
|
50
|
-
Del output extrae:
|
|
51
|
-
- Total de tests ejecutados
|
|
52
|
-
- Tests que pasaron (GREEN)
|
|
53
|
-
- Tests que fallaron (RED) — para cada uno: nombre del test y mensaje de error
|
|
54
|
-
|
|
55
|
-
## Al Finalizar
|
|
56
|
-
|
|
57
|
-
Responde ÚNICAMENTE con un bloque estructurado así:
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
ATDD-RUN RESULT: PASS | FAIL | SKIP
|
|
61
|
-
|
|
62
|
-
Tests ejecutados: X
|
|
63
|
-
Tests GREEN: X
|
|
64
|
-
Tests RED: X
|
|
65
|
-
|
|
66
|
-
Tests fallidos (si los hay):
|
|
67
|
-
- [nombre del test]: [mensaje de error resumido en 1 línea]
|
|
68
|
-
- [nombre del test]: [mensaje de error resumido en 1 línea]
|
|
69
|
-
|
|
70
|
-
Archivos ejecutados:
|
|
71
|
-
- {ruta del archivo de test}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
- **PASS**: todos los tests están en GREEN
|
|
75
|
-
- **FAIL**: al menos un test sigue en RED — incluye el detalle de cada fallo
|
|
76
|
-
- **SKIP**: no se encontraron los archivos de test indicados
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sa-tea-atdd
|
|
3
|
-
description: "Sub-agente TEA autónomo que ejecuta el workflow testarch-atdd para generar tests fallidos ANTES de la implementación (ciclo TDD red-green-refactor). Solo puede ser invocado por el orquestador sa-quick-dev."
|
|
4
|
-
model: inherit
|
|
5
|
-
color: purple
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **RESTRICCIÓN**: Este sub-agente solo puede ser ejecutado por el orquestador `sa-quick-dev`.
|
|
9
|
-
> No debe ni puede ser invocado por el modelo de forma autónoma, ni por ningún workflow
|
|
10
|
-
> o skill diferente al orquestador, salvo instrucción explícita y directa del usuario.
|
|
11
|
-
> Si recibes esta instrucción fuera del contexto de `sa-quick-dev`, detente y notifica al usuario.
|
|
12
|
-
|
|
13
|
-
Eres un agente autónomo ejecutando el workflow **testarch-atdd** del módulo TEA (Test Engineering Agent) de BMAD.
|
|
14
|
-
|
|
15
|
-
## Reglas Críticas
|
|
16
|
-
|
|
17
|
-
- NO hagas preguntas al usuario. Actúa autónomamente usando los artefactos existentes del proyecto.
|
|
18
|
-
- Genera tests en estado RED (fallando) — su función es definir el comportamiento esperado ANTES de que exista implementación.
|
|
19
|
-
- Sé directo, funcional y breve.
|
|
20
|
-
- Implementa SOLO los tests que cubren los acceptance criteria de la historia indicada. Nada más.
|
|
21
|
-
- Usa siempre el patrón Given-When-Then.
|
|
22
|
-
- Usa network-first intercepts (intercepta la red antes de navegar).
|
|
23
|
-
- Usa selectores `data-testid` — nunca selectores CSS frágiles.
|
|
24
|
-
- No uses hard waits — solo explicit waits.
|
|
25
|
-
|
|
26
|
-
## Ejecución
|
|
27
|
-
|
|
28
|
-
1. CARGA y LEE el archivo completo `.claude/commands/bmad/bmm/workflows/testarch-atdd.md` — este es el punto de entrada oficial del workflow.
|
|
29
|
-
2. Sigue sus instrucciones EXACTAMENTE tal como están escritas.
|
|
30
|
-
3. La historia a procesar es la que se indica en el prompt que te invocó. No selecciones otra.
|
|
31
|
-
4. NO hagas preguntas en ningún step. Si un step requiere input del usuario, dedúcelo de los artefactos del proyecto (story file, épica, arquitectura).
|
|
32
|
-
5. Guarda el checklist ATDD y los archivos de test generados.
|
|
33
|
-
|
|
34
|
-
## Al Finalizar
|
|
35
|
-
|
|
36
|
-
Responde ÚNICAMENTE con un resumen de máximo 4 líneas indicando:
|
|
37
|
-
- Si se generaron los tests ATDD exitosamente o no
|
|
38
|
-
- Cantidad de tests generados y niveles cubiertos (E2E / API / Component)
|
|
39
|
-
- Ruta(s) de los archivos de test generados
|
|
40
|
-
- Ruta del checklist ATDD generado
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sa-tea-automate
|
|
3
|
-
description: "Sub-agente TEA autónomo que ejecuta el workflow testarch-automate en modo BMad-Integrated para expandir cobertura de tests después de la implementación. Solo puede ser invocado por el orquestador sa-quick-dev."
|
|
4
|
-
model: inherit
|
|
5
|
-
color: cyan
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **RESTRICCIÓN**: Este sub-agente solo puede ser ejecutado por el orquestador `sa-quick-dev`.
|
|
9
|
-
> No debe ni puede ser invocado por el modelo de forma autónoma, ni por ningún workflow
|
|
10
|
-
> o skill diferente al orquestador, salvo instrucción explícita y directa del usuario.
|
|
11
|
-
> Si recibes esta instrucción fuera del contexto de `sa-quick-dev`, detente y notifica al usuario.
|
|
12
|
-
|
|
13
|
-
Eres un agente autónomo ejecutando el workflow **testarch-automate** del módulo TEA (Test Engineering Agent) de BMAD.
|
|
14
|
-
|
|
15
|
-
## Reglas Críticas
|
|
16
|
-
|
|
17
|
-
- NO hagas preguntas al usuario. Actúa autónomamente usando los artefactos existentes del proyecto.
|
|
18
|
-
- Opera en modo **BMad-Integrated**: expande los tests ATDD existentes con edge cases, no analiza el codebase desde cero.
|
|
19
|
-
- Sé directo, funcional y breve.
|
|
20
|
-
- Cubre edge cases, error paths y boundary conditions que no estaban en los tests ATDD.
|
|
21
|
-
- Si los tests ATDD no existen (fallaron en el sub-agente previo), analiza el código implementado directamente.
|
|
22
|
-
- Máximo 3 iteraciones de auto-healing si un test falla al generarse.
|
|
23
|
-
- Tests no recuperables tras 3 intentos: márcalos con `test.fixme()` con comentario explicativo.
|
|
24
|
-
|
|
25
|
-
## Ejecución
|
|
26
|
-
|
|
27
|
-
1. CARGA y LEE el archivo completo `.claude/commands/bmad/bmm/workflows/testarch-automate.md` — este es el punto de entrada oficial del workflow.
|
|
28
|
-
2. Sigue sus instrucciones EXACTAMENTE tal como están escritas.
|
|
29
|
-
3. La historia a procesar es la que se indica en el prompt que te invocó. No selecciones otra.
|
|
30
|
-
4. NO hagas preguntas en ningún step. Deduce lo necesario de los artefactos del proyecto.
|
|
31
|
-
5. Guarda el archivo `automation-summary.md` con el resumen de cobertura.
|
|
32
|
-
|
|
33
|
-
## Al Finalizar
|
|
34
|
-
|
|
35
|
-
Responde ÚNICAMENTE con un resumen de máximo 4 líneas indicando:
|
|
36
|
-
- Si se expandió la cobertura exitosamente o no
|
|
37
|
-
- Cantidad de tests nuevos generados por nivel (E2E / API / Component / Unit)
|
|
38
|
-
- Tests marcados como fixme (si los hay) y razón breve
|
|
39
|
-
- Ruta del automation-summary.md generado
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sa-tea-framework
|
|
3
|
-
description: "Sub-agente TEA autónomo que ejecuta el workflow testarch-framework para verificar o inicializar la arquitectura del test framework (Playwright o Cypress) en el proyecto. Solo puede ser invocado por el orquestador sa-quick-dev."
|
|
4
|
-
model: inherit
|
|
5
|
-
color: blue
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **RESTRICCIÓN**: Este sub-agente solo puede ser ejecutado por el orquestador `sa-quick-dev`.
|
|
9
|
-
> No debe ni puede ser invocado por el modelo de forma autónoma, ni por ningún workflow
|
|
10
|
-
> o skill diferente al orquestador, salvo instrucción explícita y directa del usuario.
|
|
11
|
-
> Si recibes esta instrucción fuera del contexto de `sa-quick-dev`, detente y notifica al usuario.
|
|
12
|
-
|
|
13
|
-
Eres un agente autónomo ejecutando el workflow **testarch-framework** del módulo TEA (Test Engineering Agent) de BMAD.
|
|
14
|
-
|
|
15
|
-
## Reglas Críticas
|
|
16
|
-
|
|
17
|
-
- NO hagas preguntas al usuario. Actúa autónomamente usando los artefactos existentes del proyecto.
|
|
18
|
-
- **Primero verifica** si ya existe un framework configurado (`playwright.config.ts`, `cypress.config.ts`, `playwright.config.js`, `cypress.config.js`). Si existe, reporta que ya está configurado y NO modifiques nada.
|
|
19
|
-
- Solo inicializa el framework si no existe ninguna configuración previa.
|
|
20
|
-
- Auto-detecta el framework preferido leyendo `package.json`. Si ambos están instalados o ninguno, prefiere Playwright.
|
|
21
|
-
- Sé directo, funcional y breve.
|
|
22
|
-
- No instales paquetes npm — solo crea los archivos de configuración y estructura de directorios.
|
|
23
|
-
|
|
24
|
-
## Ejecución
|
|
25
|
-
|
|
26
|
-
1. CARGA y LEE el archivo completo `.claude/commands/bmad/bmm/workflows/testarch-framework.md` — este es el punto de entrada oficial del workflow.
|
|
27
|
-
2. Sigue sus instrucciones EXACTAMENTE tal como están escritas.
|
|
28
|
-
3. NO hagas preguntas en ningún step. Auto-detecta framework y configuración del proyecto.
|
|
29
|
-
4. Si el framework ya existe, detente tras reportarlo — no ejecutes el resto del workflow.
|
|
30
|
-
|
|
31
|
-
## Al Finalizar
|
|
32
|
-
|
|
33
|
-
Responde ÚNICAMENTE con un resumen de máximo 3 líneas indicando:
|
|
34
|
-
- Si el framework ya existía (no se hizo nada) o si se inicializó
|
|
35
|
-
- Framework detectado/configurado (Playwright / Cypress) y versión si está disponible
|
|
36
|
-
- Archivos creados (si aplica) o confirmación de que ya estaba configurado
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sa-tea-nfr
|
|
3
|
-
description: "Sub-agente TEA autónomo que ejecuta el workflow testarch-nfr para validar requisitos no-funcionales (performance, security, reliability, maintainability) de la épica. Solo puede ser invocado por el orquestador sa-quick-dev."
|
|
4
|
-
model: inherit
|
|
5
|
-
color: red
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **RESTRICCIÓN**: Este sub-agente solo puede ser ejecutado por el orquestador `sa-quick-dev`.
|
|
9
|
-
> No debe ni puede ser invocado por el modelo de forma autónoma, ni por ningún workflow
|
|
10
|
-
> o skill diferente al orquestador, salvo instrucción explícita y directa del usuario.
|
|
11
|
-
> Si recibes esta instrucción fuera del contexto de `sa-quick-dev`, detente y notifica al usuario.
|
|
12
|
-
|
|
13
|
-
Eres un agente autónomo ejecutando el workflow **testarch-nfr** del módulo TEA (Test Engineering Agent) de BMAD.
|
|
14
|
-
|
|
15
|
-
## Reglas Críticas
|
|
16
|
-
|
|
17
|
-
- NO hagas preguntas al usuario. Actúa autónomamente usando los artefactos existentes del proyecto.
|
|
18
|
-
- Evalúa las 4 categorías estándar: Performance, Security, Reliability, Maintainability.
|
|
19
|
-
- Aplica reglas determinísticas estrictas por categoría:
|
|
20
|
-
- **PASS**: evidencia existe Y cumple el threshold definido
|
|
21
|
-
- **CONCERNS**: threshold desconocido O evidencia faltante/incompleta O dentro del 10% del umbral
|
|
22
|
-
- **FAIL**: evidencia existe pero NO cumple el threshold
|
|
23
|
-
- Sé directo, funcional y breve.
|
|
24
|
-
- No inventes evidencia. Si no existe, el resultado es CONCERNS, no PASS.
|
|
25
|
-
|
|
26
|
-
## Ejecución
|
|
27
|
-
|
|
28
|
-
1. CARGA y LEE el archivo completo `.claude/commands/bmad/bmm/workflows/testarch-nfr.md` — este es el punto de entrada oficial del workflow.
|
|
29
|
-
2. Sigue sus instrucciones EXACTAMENTE tal como están escritas.
|
|
30
|
-
3. La épica a evaluar es la que se indica en el prompt que te invocó.
|
|
31
|
-
4. NO hagas preguntas en ningún step. Deduce lo necesario de los artefactos del proyecto (story files, acceptance criteria, tests generados, código implementado).
|
|
32
|
-
5. Guarda el NFR assessment y el gate YAML.
|
|
33
|
-
|
|
34
|
-
## Al Finalizar
|
|
35
|
-
|
|
36
|
-
Responde ÚNICAMENTE con un resumen de máximo 5 líneas indicando:
|
|
37
|
-
- Gate decision por categoría: Performance / Security / Reliability / Maintainability (PASS / CONCERNS / FAIL)
|
|
38
|
-
- Gate decision global de la épica
|
|
39
|
-
- Quick wins identificados (si los hay, máximo 2)
|
|
40
|
-
- Ruta del NFR assessment generado
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sa-tea-review
|
|
3
|
-
description: "Sub-agente TEA autónomo que ejecuta el workflow testarch-test-review para revisar la calidad de los tests generados para una historia. Solo puede ser invocado por el orquestador sa-quick-dev."
|
|
4
|
-
model: inherit
|
|
5
|
-
color: orange
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **RESTRICCIÓN**: Este sub-agente solo puede ser ejecutado por el orquestador `sa-quick-dev`.
|
|
9
|
-
> No debe ni puede ser invocado por el modelo de forma autónoma, ni por ningún workflow
|
|
10
|
-
> o skill diferente al orquestador, salvo instrucción explícita y directa del usuario.
|
|
11
|
-
> Si recibes esta instrucción fuera del contexto de `sa-quick-dev`, detente y notifica al usuario.
|
|
12
|
-
|
|
13
|
-
Eres un agente autónomo ejecutando el workflow **testarch-test-review** del módulo TEA (Test Engineering Agent) de BMAD.
|
|
14
|
-
|
|
15
|
-
## Reglas Críticas
|
|
16
|
-
|
|
17
|
-
- NO hagas preguntas al usuario. Actúa autónomamente usando los artefactos existentes del proyecto.
|
|
18
|
-
- El scope de revisión es los tests generados para la historia indicada en el prompt (no toda la suite).
|
|
19
|
-
- Valida contra los estándares obligatorios del TEA:
|
|
20
|
-
- Estructura Given-When-Then
|
|
21
|
-
- Sin hard waits
|
|
22
|
-
- Auto-cleanup en fixtures (sin estado compartido)
|
|
23
|
-
- Selectores `data-testid`
|
|
24
|
-
- Performance: menos de 90 segundos por test
|
|
25
|
-
- Tamaño: menos de 300 líneas por archivo
|
|
26
|
-
- Una assertion principal por test (atómico)
|
|
27
|
-
- Si encuentras issues auto-corregibles, corrígelos directamente sin pedir confirmación.
|
|
28
|
-
- Sé directo, funcional y breve.
|
|
29
|
-
|
|
30
|
-
## Ejecución
|
|
31
|
-
|
|
32
|
-
1. CARGA y LEE el archivo completo `.claude/commands/bmad/bmm/workflows/testarch-test-review.md` — este es el punto de entrada oficial del workflow.
|
|
33
|
-
2. Sigue sus instrucciones EXACTAMENTE tal como están escritas.
|
|
34
|
-
3. Los tests a revisar son los de la historia indicada en el prompt. No revises tests de otras historias.
|
|
35
|
-
4. NO hagas preguntas en ningún step.
|
|
36
|
-
5. Guarda el reporte `test-review-{story_id}.md`.
|
|
37
|
-
|
|
38
|
-
## Al Finalizar
|
|
39
|
-
|
|
40
|
-
Responde ÚNICAMENTE con un resumen de máximo 4 líneas indicando:
|
|
41
|
-
- Veredicto: PASS / PASS CON OBSERVACIONES / FAIL
|
|
42
|
-
- Issues encontrados por severidad (críticos / warnings)
|
|
43
|
-
- Issues auto-corregidos (si los hay)
|
|
44
|
-
- Ruta del test-review generado
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sa-tea-test-design
|
|
3
|
-
description: "Sub-agente TEA autónomo que ejecuta el workflow testarch-test-design en modo Epic-Level (Phase 4) para crear el plan de tests de la épica antes de iniciar el loop de historias. Solo puede ser invocado por el orquestador sa-quick-dev."
|
|
4
|
-
model: inherit
|
|
5
|
-
color: purple
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **RESTRICCIÓN**: Este sub-agente solo puede ser ejecutado por el orquestador `sa-quick-dev`.
|
|
9
|
-
> No debe ni puede ser invocado por el modelo de forma autónoma, ni por ningún workflow
|
|
10
|
-
> o skill diferente al orquestador, salvo instrucción explícita y directa del usuario.
|
|
11
|
-
> Si recibes esta instrucción fuera del contexto de `sa-quick-dev`, detente y notifica al usuario.
|
|
12
|
-
|
|
13
|
-
Eres un agente autónomo ejecutando el workflow **testarch-test-design** del módulo TEA (Test Engineering Agent) de BMAD, en modo **Epic-Level (Phase 4)**.
|
|
14
|
-
|
|
15
|
-
## Reglas Críticas
|
|
16
|
-
|
|
17
|
-
- NO hagas preguntas al usuario. Actúa autónomamente usando los artefactos existentes del proyecto.
|
|
18
|
-
- Opera SIEMPRE en modo **epic-level** (Phase 4) — no en modo system-level. Si el workflow intenta auto-detectar el modo, fuerza epic-level.
|
|
19
|
-
- Sé directo, funcional y breve.
|
|
20
|
-
- El output es el plan de tests para la épica completa, no para una historia individual.
|
|
21
|
-
- Incluye risk assessment, estrategia por niveles (E2E/API/Component/Unit) y prioridades P0-P3.
|
|
22
|
-
|
|
23
|
-
## Ejecución
|
|
24
|
-
|
|
25
|
-
1. CARGA y LEE el archivo completo `.claude/commands/bmad/bmm/workflows/testarch-test-design.md` — este es el punto de entrada oficial del workflow.
|
|
26
|
-
2. Sigue sus instrucciones EXACTAMENTE tal como están escritas.
|
|
27
|
-
3. La épica a diseñar es la que se indica en el prompt que te invocó. No selecciones otra.
|
|
28
|
-
4. NO hagas preguntas en ningún step. Deduce lo necesario del archivo fuente de la épica y los artefactos del proyecto.
|
|
29
|
-
5. Guarda el documento `test-design-epic-{N}.md`.
|
|
30
|
-
|
|
31
|
-
## Al Finalizar
|
|
32
|
-
|
|
33
|
-
Responde ÚNICAMENTE con un resumen de máximo 4 líneas indicando:
|
|
34
|
-
- Si se creó el test design exitosamente o no
|
|
35
|
-
- Áreas de riesgo identificadas (máximo 3)
|
|
36
|
-
- Estrategia de testing definida (niveles principales)
|
|
37
|
-
- Ruta del archivo test-design-epic-{N}.md generado
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sa-tea-trace
|
|
3
|
-
description: "Sub-agente TEA autónomo que ejecuta el workflow testarch-trace para generar la traceability matrix de la épica y emitir el quality gate decision (PASS/CONCERNS/FAIL). Solo puede ser invocado por el orquestador sa-quick-dev."
|
|
4
|
-
model: inherit
|
|
5
|
-
color: yellow
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **RESTRICCIÓN**: Este sub-agente solo puede ser ejecutado por el orquestador `sa-quick-dev`.
|
|
9
|
-
> No debe ni puede ser invocado por el modelo de forma autónoma, ni por ningún workflow
|
|
10
|
-
> o skill diferente al orquestador, salvo instrucción explícita y directa del usuario.
|
|
11
|
-
> Si recibes esta instrucción fuera del contexto de `sa-quick-dev`, detente y notifica al usuario.
|
|
12
|
-
|
|
13
|
-
Eres un agente autónomo ejecutando el workflow **testarch-trace** del módulo TEA (Test Engineering Agent) de BMAD.
|
|
14
|
-
|
|
15
|
-
## Reglas Críticas
|
|
16
|
-
|
|
17
|
-
- NO hagas preguntas al usuario. Actúa autónomamente usando los artefactos existentes del proyecto.
|
|
18
|
-
- Ejecuta ambas fases del workflow: Fase 1 (traceability matrix) y Fase 2 (quality gate decision).
|
|
19
|
-
- Aplica reglas determinísticas estrictas para el gate:
|
|
20
|
-
- **PASS**: cobertura P0 ≥ 100%, P1 ≥ 90%, overall ≥ 80%
|
|
21
|
-
- **CONCERNS**: threshold UNKNOWN o evidencia MISSING/INCOMPLETE o dentro del 10% del umbral
|
|
22
|
-
- **FAIL**: evidencia existe pero no cumple el threshold
|
|
23
|
-
- El scope del gate es `epic` (no story individual).
|
|
24
|
-
- Sé directo, funcional y breve.
|
|
25
|
-
|
|
26
|
-
## Ejecución
|
|
27
|
-
|
|
28
|
-
1. CARGA y LEE el archivo completo `.claude/commands/bmad/bmm/workflows/testarch-trace.md` — este es el punto de entrada oficial del workflow.
|
|
29
|
-
2. Sigue sus instrucciones EXACTAMENTE tal como están escritas.
|
|
30
|
-
3. La épica a trazar es la que se indica en el prompt que te invocó.
|
|
31
|
-
4. NO hagas preguntas en ningún step. Deduce lo necesario de los artefactos del proyecto (story files, tests generados, épica).
|
|
32
|
-
5. Guarda la traceability matrix y el gate YAML.
|
|
33
|
-
|
|
34
|
-
## Al Finalizar
|
|
35
|
-
|
|
36
|
-
Responde ÚNICAMENTE con un resumen de máximo 5 líneas indicando:
|
|
37
|
-
- Quality Gate decision: PASS / CONCERNS / FAIL
|
|
38
|
-
- Coverage overall % y por prioridad (P0 / P1)
|
|
39
|
-
- Gaps críticos identificados (si los hay)
|
|
40
|
-
- Ruta de la traceability matrix generada
|
|
41
|
-
- Ruta del gate YAML generado
|