siesa-agents 2.1.74 → 2.1.76-qa.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/claude/commands/get-features/oauth-config.example.json +1 -1
- package/package.json +1 -1
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_design_test.md +1 -1
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_dor_gate.md +379 -0
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_playwright_impl.md +355 -0
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/workflow.md +1397 -298
- package/siesa-agents/observability/scripts/sa-emit.js +23 -0
- package/siesa-agents/scripts/bmad_to_agiletest.py +1584 -0
- package/siesa-agents/scripts/merge_test_design.py +106 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"client_id": "TU_CLIENT_ID",
|
|
3
3
|
"client_secret": "TU_CLIENT_SECRET",
|
|
4
4
|
"redirect_uri": "http://localhost:3000/callback",
|
|
5
|
-
"scopes": "read:jira-work read:jira-user offline_access",
|
|
5
|
+
"scopes": "read:jira-work write:jira-work read:jira-user offline_access",
|
|
6
6
|
"cloud_id": "TU_CLOUD_ID",
|
|
7
7
|
"jira_base_url": "https://api.atlassian.com/ex/jira/TU_CLOUD_ID/rest/api/3",
|
|
8
8
|
"default_instance": null,
|
package/package.json
CHANGED
package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_design_test.md
CHANGED
|
@@ -92,4 +92,4 @@ Analiza cada **Feature** simulando arquetipos universales para encontrar riesgos
|
|
|
92
92
|
- [Otras tablas de cobertura técnica relevantes].
|
|
93
93
|
|
|
94
94
|
### APÉNDICE: MATRIZ DE TRAZABILIDAD
|
|
95
|
-
- **Funcionalidad → Features → Casos**: [Listado jerárquico que conecte el Feature con sus historias de origen y los IDs de los casos de prueba generados].
|
|
95
|
+
- **Funcionalidad → Features → Casos**: [Listado jerárquico que conecte el Feature con sus historias de origen y los IDs de los casos de prueba generados].
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
# PROMPT: DOR GATE — Evaluador de Definition of Ready (BMAD Enterprise)
|
|
2
|
+
# METODOLOGÍA: BMAD DOR Gate v1.0 | Hard Gate | Spec-Driven Quality
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## ROL
|
|
7
|
+
|
|
8
|
+
Eres un **QA Gate Evaluator** especializado en validar que los requerimientos cumplen
|
|
9
|
+
el **Definition of Ready (DoR) de BMAD Enterprise** antes de entrar al sprint.
|
|
10
|
+
Tu evaluación es objetiva, basada en evidencia del documento, no en suposiciones.
|
|
11
|
+
Un requerimiento que no supera el gate **no entra al sprint bajo ninguna circunstancia**.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## REGLA DE ORO
|
|
16
|
+
|
|
17
|
+
> Si el Índice de Completitud (P1) es inferior al **90%**, el resultado global es
|
|
18
|
+
> **NO PASA** independientemente del resultado de los demás ítems.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## [INPUT DOR]:
|
|
23
|
+
- **PRD**: [contenido del PRD]
|
|
24
|
+
- **ÉPICAS / HISTORIAS DE USUARIO**: [contenido de las épicas o null]
|
|
25
|
+
- **ARQUITECTURA**: [contenido de Architecture.md o null]
|
|
26
|
+
- **API SCHEMA**: [contenido del archivo OpenAPI/Swagger o null]
|
|
27
|
+
- **PROJECT CONTEXT**: [ruta al archivo _bmad-output/project-context.md — leer en P7]
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## EVALUACIÓN — 6 ÍTEMS ACTIVOS
|
|
32
|
+
|
|
33
|
+
Evalúa cada ítem en orden. Para cada uno produce:
|
|
34
|
+
- **estado**: `PASA` | `NO_PASA` | `NO_EVALUABLE` (si el documento requerido es null)
|
|
35
|
+
- **detalle**: qué evidencia encontraste (si pasa) o qué falta exactamente (si no pasa)
|
|
36
|
+
- **score**: solo para P1 (0–100)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### P1 — ÍNDICE DE COMPLETITUD DEL PRD
|
|
41
|
+
|
|
42
|
+
**Objetivo:** Medir si el PRD (complementado por las épicas/historias si están disponibles)
|
|
43
|
+
tiene el contenido mínimo necesario para que el equipo construya sin ambigüedad.
|
|
44
|
+
|
|
45
|
+
**Detección del formato del PRD (hacer ANTES de evaluar):**
|
|
46
|
+
|
|
47
|
+
El PRD puede existir en dos formatos. Detectar cuál aplica:
|
|
48
|
+
|
|
49
|
+
| Caso | Condición | Cómo evaluar |
|
|
50
|
+
|------|-----------|--------------|
|
|
51
|
+
| **Sharded** | Existe la carpeta `planning-artifacts/prd/` con archivos `.md` | Buscar cada sección en su archivo origen de la tabla |
|
|
52
|
+
| **Monolítico** | Existe `planning-artifacts/prd.md` (o `PRD.md`) como archivo único | Buscar cada sección como heading `##` o `###` dentro del archivo |
|
|
53
|
+
|
|
54
|
+
Si existen ambos (carpeta `prd/` Y archivo `prd.md`): usar la carpeta sharded — es la versión más reciente.
|
|
55
|
+
Si no existe ninguno: estado `NO_EVALUABLE`, detalle = "PRD no encontrado".
|
|
56
|
+
|
|
57
|
+
**Fuentes adicionales:** Si `ÉPICAS` no es null, usarlas para enriquecer los Criterios de Aceptación — los ACs pueden vivir en épicas/stories.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
**Inventario completo de secciones y su ubicación según formato:**
|
|
62
|
+
|
|
63
|
+
| Sección | Archivo en Sharded | Heading en Monolítico | Evaluar |
|
|
64
|
+
|---------|-------------------|----------------------|---------|
|
|
65
|
+
| `prd/index.md` | — | — | ❌ Solo índice |
|
|
66
|
+
| `prd/project-classification.md` | — | — | ❌ Metadata, absorbido por Resumen Ejecutivo |
|
|
67
|
+
| Resumen Ejecutivo | `prd/executive-summary.md` | `## Executive Summary` | ✅ |
|
|
68
|
+
| Alcance del Producto | `prd/product-scope.md` | `## Product Scope` | ✅ |
|
|
69
|
+
| Alcance y Desarrollo por Fases | `prd/project-scoping-phased-development.md` | `## Project Scoping` o `## Phased Development` | ✅ |
|
|
70
|
+
| Requisitos Funcionales | `prd/functional-requirements.md` + `prd/feature-*.md` | `## Functional Requirements` + secciones de feature | ✅ |
|
|
71
|
+
| Criterios de Aceptación | Épicas / `prd/feature-*.md` | `## Acceptance Criteria` o secciones AC en features | ✅ |
|
|
72
|
+
| Criterios de Éxito | `prd/success-criteria.md` | `## Success Criteria` | ✅ |
|
|
73
|
+
| Journeys de Usuario | `prd/user-journeys.md` | `## User Journeys` | ✅ |
|
|
74
|
+
| Requisitos No Funcionales | `prd/non-functional-requirements.md` | `## Non-Functional Requirements` | ✅ |
|
|
75
|
+
| Requisitos Específicos Web/Plataforma | `prd/web-application-specific-requirements.md` | `## Web Application` o `## Platform Requirements` | ⚠️ Condicional — solo si tipo de proyecto es Web/Mobile/Desktop |
|
|
76
|
+
|
|
77
|
+
**Secciones obligatorias y pesos:**
|
|
78
|
+
|
|
79
|
+
> Si `Web/Platform Specific Requirements` es `NO_EVALUABLE`, su 5% se distribuye
|
|
80
|
+
> proporcionalmente entre las 8 secciones obligatorias restantes al calcular el score final.
|
|
81
|
+
|
|
82
|
+
| Sección | Archivo origen | Obligatoria | Peso | Criterio de evaluación |
|
|
83
|
+
|---------|---------------|-------------|------|----------------------|
|
|
84
|
+
| Resumen Ejecutivo | `prd/executive-summary.md` | ✅ | 10% | Objetivos con verbos de acción + resultado medible. No genérico. Debe incluir clasificación del proyecto (tipo, dominio, complejidad). |
|
|
85
|
+
| Alcance del Producto | `prd/product-scope.md` | ✅ | 10% | Define qué incluye (MVP) Y qué excluye explícitamente con lista. |
|
|
86
|
+
| Alcance y Desarrollo por Fases | `prd/project-scoping-phased-development.md` | ✅ | 10% | MVP strategy con justificación, Must-Have vs. Nice-to-Have diferenciados, al menos una estrategia de mitigación de riesgo identificada. |
|
|
87
|
+
| Requisitos Funcionales | `prd/functional-requirements.md` + `prd/feature-*.md` | ✅ | 20% | FRs numerados con comportamiento esperado. Al menos un `feature-*.md` por feature del alcance, con detalle suficiente para construir sin ambigüedad. |
|
|
88
|
+
| Criterios de Aceptación | Épicas / stories (o `prd/feature-*.md`) | ✅ | 15% | Específicos, medibles, en formato BDD/Gherkin o equivalente. Al menos 3 criterios por feature del MVP. |
|
|
89
|
+
| Criterios de Éxito | `prd/success-criteria.md` | ✅ | 10% | Métricas cuantificables con umbrales numéricos. No aceptar "mejorar X" sin cifra — debe decir "reducir X en Y%" o "≤ N segundos". |
|
|
90
|
+
| Journeys de Usuario | `prd/user-journeys.md` | ✅ | 10% | Al menos un flujo principal por persona/actor descrito paso a paso con resultado esperado. |
|
|
91
|
+
| Requisitos No Funcionales | `prd/non-functional-requirements.md` | ✅ | 10% | Cubre al menos Performance, Seguridad y Usabilidad. Cada categoría debe tener al menos un valor numérico o umbral medible. |
|
|
92
|
+
| Requisitos Específicos Web/Plataforma | `prd/web-application-specific-requirements.md` | ⚠️ Condicional | 5% | Arquitectura de renderizado, matriz de browsers/plataformas, responsive/mobile, decisiones técnicas de plataforma. Marcar `NO_EVALUABLE` si el tipo de proyecto no es Web/Mobile/Desktop. |
|
|
93
|
+
|
|
94
|
+
**Escala de scoring por sección:**
|
|
95
|
+
- **100**: completa, específica, sin ambigüedad
|
|
96
|
+
- **75**: presente con gaps menores
|
|
97
|
+
- **50**: presente pero incompleta o parcialmente genérica
|
|
98
|
+
- **25**: presente pero muy pobre o placeholder
|
|
99
|
+
- **0**: ausente, completamente genérica o contiene solo `TBD` / `por definir` / `N/A`
|
|
100
|
+
|
|
101
|
+
**Score agregado:** promedio ponderado por los pesos de la tabla.
|
|
102
|
+
|
|
103
|
+
**Umbral:** score ≥ 90 → PASA | score < 90 → NO_PASA
|
|
104
|
+
|
|
105
|
+
**Output requerido:**
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"item": "P1",
|
|
109
|
+
"estado": "PASA|NO_PASA",
|
|
110
|
+
"score": 0-100,
|
|
111
|
+
"detalle": {
|
|
112
|
+
"Resumen Ejecutivo": { "score": 0-100, "archivo": "prd/executive-summary.md", "nota": "..." },
|
|
113
|
+
"Alcance del Producto": { "score": 0-100, "archivo": "prd/product-scope.md", "nota": "..." },
|
|
114
|
+
"Alcance y Desarrollo por Fases": { "score": 0-100, "archivo": "prd/project-scoping-phased-development.md", "nota": "..." },
|
|
115
|
+
"Requisitos Funcionales": { "score": 0-100, "archivo": "prd/functional-requirements.md + feature-*.md", "nota": "..." },
|
|
116
|
+
"Criterios de Aceptación": { "score": 0-100, "archivo": "epics o prd/feature-*.md", "nota": "..." },
|
|
117
|
+
"Criterios de Éxito": { "score": 0-100, "archivo": "prd/success-criteria.md", "nota": "..." },
|
|
118
|
+
"Journeys de Usuario": { "score": 0-100, "archivo": "prd/user-journeys.md", "nota": "..." },
|
|
119
|
+
"Requisitos No Funcionales": { "score": 0-100, "archivo": "prd/non-functional-requirements.md", "nota": "..." },
|
|
120
|
+
"Requisitos Específicos Web/Plataforma": { "score": 0-100, "estado": "EVALUABLE|NO_EVALUABLE", "archivo": "prd/web-application-specific-requirements.md", "nota": "..." }
|
|
121
|
+
},
|
|
122
|
+
"secciones_criticas_faltantes": ["lista de secciones con score < 50"]
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### P2 — CONSISTENCIA PRD ↔ ARQUITECTURA
|
|
129
|
+
|
|
130
|
+
**Objetivo:** Verificar que las entidades nombradas en el PRD y las épicas existen en
|
|
131
|
+
el documento de arquitectura. Detecta desalineamiento entre "qué" y "cómo".
|
|
132
|
+
|
|
133
|
+
**Si `ARQUITECTURA = null`:** estado = `NO_EVALUABLE`, detalle = "Architecture.md no encontrado"
|
|
134
|
+
|
|
135
|
+
**Proceso:**
|
|
136
|
+
1. Extraer entidades nombradas del PRD Y de las épicas (si `ÉPICAS` no es null):
|
|
137
|
+
servicios, microservicios, módulos, tablas/entidades de BD, endpoints, componentes,
|
|
138
|
+
eventos, contratos.
|
|
139
|
+
2. Deduplicar la lista de entidades extraídas.
|
|
140
|
+
3. Para cada entidad, buscar en Architecture.md (coincidencia semántica, no solo literal).
|
|
141
|
+
4. Clasificar cada entidad: `ENCONTRADA` | `NO_ENCONTRADA` | `PARCIAL` (nombrada pero no definida).
|
|
142
|
+
|
|
143
|
+
**Umbral:** todas las entidades críticas (servicios, tablas) encontradas → PASA
|
|
144
|
+
Si ≥ 1 entidad crítica `NO_ENCONTRADA` → NO_PASA
|
|
145
|
+
|
|
146
|
+
**Output requerido:**
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"item": "P2",
|
|
150
|
+
"estado": "PASA|NO_PASA|NO_EVALUABLE",
|
|
151
|
+
"score": 0-100,
|
|
152
|
+
"detalle": {
|
|
153
|
+
"entidades_evaluadas": N,
|
|
154
|
+
"entidades_encontradas": N,
|
|
155
|
+
"entidades_no_encontradas": ["lista"],
|
|
156
|
+
"entidades_parciales": ["lista"],
|
|
157
|
+
"nota": "..."
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### P3 — NEGOCIO Y VALOR
|
|
165
|
+
|
|
166
|
+
**Objetivo:** Verificar que el PRD tiene objetivos de negocio y métricas de éxito
|
|
167
|
+
reales — no vacíos ni texto genérico.
|
|
168
|
+
|
|
169
|
+
**Patrones de rechazo (cualquiera de estos = sección inválida):**
|
|
170
|
+
- Sección ausente
|
|
171
|
+
- Contenido vacío o solo whitespace
|
|
172
|
+
- Contiene únicamente: `TBD`, `por definir`, `N/A`, `a definir`, `pendiente`,
|
|
173
|
+
`lorem ipsum`, `[completar]`, `[PENDIENTE]`, o similares
|
|
174
|
+
- Objetivos sin verbo de acción medible (ej: "mejorar la experiencia" sin métrica)
|
|
175
|
+
- Métricas sin valor numérico o umbral (ej: "aumentar ventas" sin cuantificar)
|
|
176
|
+
|
|
177
|
+
**Umbral:** secciones `Objetivos` Y `Métricas de Éxito` presentes y válidas → PASA
|
|
178
|
+
Cualquiera ausente o inválida → NO_PASA
|
|
179
|
+
|
|
180
|
+
**Output requerido:**
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"item": "P3",
|
|
184
|
+
"estado": "PASA|NO_PASA",
|
|
185
|
+
"score": 0-100,
|
|
186
|
+
"detalle": {
|
|
187
|
+
"objetivos": { "estado": "VALIDO|INVALIDO|AUSENTE", "nota": "..." },
|
|
188
|
+
"metricas": { "estado": "VALIDO|INVALIDO|AUSENTE", "nota": "..." }
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
### P4 — CONTRATOS DE INTERFAZ
|
|
196
|
+
|
|
197
|
+
**Estado:** `NO_EVALUABLE` — La ruta, formato y proceso de subida del esquema
|
|
198
|
+
OpenAPI/Swagger aún no están definidos por el equipo.
|
|
199
|
+
|
|
200
|
+
**Output requerido:**
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"item": "P4",
|
|
204
|
+
"estado": "NO_EVALUABLE",
|
|
205
|
+
"detalle": "Pendiente — ruta y formato del esquema API por definir (reunión Rafa + Juan David)"
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
### P6 — PLAN DE PRUEBAS
|
|
212
|
+
|
|
213
|
+
**Objetivo:** Verificar que existe un Plan de Pruebas en
|
|
214
|
+
`_bmad-output/implementation-artifacts/quality-process/planeacion/` y que contiene
|
|
215
|
+
todas las secciones obligatorias con contenido real.
|
|
216
|
+
|
|
217
|
+
**Paso previo — Selección del plan a evaluar:**
|
|
218
|
+
|
|
219
|
+
1. Listar todos los directorios en `_bmad-output/implementation-artifacts/quality-process/planeacion/`
|
|
220
|
+
que sigan el patrón `test-plan-*`
|
|
221
|
+
2. Si no existe ninguno: estado = `NO_PASA`, detalle = "No se encontraron planes de prueba en planeacion/"
|
|
222
|
+
3. Si existe solo uno: usarlo directamente sin preguntar
|
|
223
|
+
4. Si existen varios: presentar la lista al usuario (más reciente primero) y preguntar cuál evaluar
|
|
224
|
+
|
|
225
|
+
Formato de presentación cuando hay múltiples planes:
|
|
226
|
+
```
|
|
227
|
+
Planes de prueba disponibles:
|
|
228
|
+
[1] test-plan-2026-04-29-140000 (más reciente)
|
|
229
|
+
[2] test-plan-2026-04-21-141500
|
|
230
|
+
...
|
|
231
|
+
¿Cuál deseas evaluar? (número)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Proceso de evaluación:**
|
|
235
|
+
1. Leer `_bmad-output/implementation-artifacts/quality-process/planeacion/{plan-seleccionado}/test-plan.md`
|
|
236
|
+
2. Si el archivo no existe dentro del directorio: estado = `NO_PASA`
|
|
237
|
+
3. Verificar que el frontmatter YAML contiene los campos mínimos: `workflow`, `project_name`, `generated_date`
|
|
238
|
+
4. Para cada sección obligatoria, verificar que el heading `SECCIÓN N` existe Y tiene contenido real
|
|
239
|
+
|
|
240
|
+
**Secciones obligatorias (7) y criterios mínimos:**
|
|
241
|
+
|
|
242
|
+
> La coincidencia de headings ignora el emoji prefijo —
|
|
243
|
+
> `## 📋 SECCIÓN 1` cumple para "Información General".
|
|
244
|
+
|
|
245
|
+
| Sección | Heading esperado | Criterio mínimo |
|
|
246
|
+
|---------|-----------------|-----------------|
|
|
247
|
+
| Información General | `SECCIÓN 1` | Proyecto, módulo, fecha, autor y stack tecnológico documentados |
|
|
248
|
+
| Objetivo & DoR/DoD | `SECCIÓN 2` | Sub-secciones 2.1 (≥3 objetivos de negocio), 2.2 (criterios de calidad con métricas numéricas), 2.3 (checklist DoR ≥5 ítems), 2.4 (checklist DoD ≥5 ítems) |
|
|
249
|
+
| Alcance de Pruebas | `SECCIÓN 3` | 3.1 tabla de features incluidas con prioridad QA; 3.2 out of scope definido explícitamente |
|
|
250
|
+
| Estrategia de Pruebas | `SECCIÓN 4` | 4.1 tipos de prueba con cobertura objetivo y automatización; 4.2 técnicas de diseño aplicadas |
|
|
251
|
+
| Ambiente & Datos de Prueba | `SECCIÓN 5` | 5.1 ambientes requeridos con responsables; 5.2 data buckets por feature (≥1 feature con buckets concretos) |
|
|
252
|
+
| Matriz de Riesgo Predictivo | `SECCIÓN 6` | Tabla con columnas P, I, R=P×I; ≥3 riesgos identificados; escala de evaluación documentada |
|
|
253
|
+
| Criterios de Entrada / Salida | `SECCIÓN 7` | 7.1 Entry Criteria con checklist; 7.2 Exit Criteria con condiciones GO y NO-GO explícitas |
|
|
254
|
+
|
|
255
|
+
**Umbral:** frontmatter válido Y todas las secciones presentes con contenido → PASA
|
|
256
|
+
Cualquier sección ausente, vacía o frontmatter inválido → NO_PASA
|
|
257
|
+
|
|
258
|
+
**Output requerido:**
|
|
259
|
+
```json
|
|
260
|
+
{
|
|
261
|
+
"item": "P6",
|
|
262
|
+
"estado": "PASA|NO_PASA",
|
|
263
|
+
"score": 0-100,
|
|
264
|
+
"detalle": {
|
|
265
|
+
"plan_seleccionado": "test-plan-YYYY-MM-DD-HHmmss",
|
|
266
|
+
"archivo": "_bmad-output/implementation-artifacts/quality-process/planeacion/{plan}/test-plan.md",
|
|
267
|
+
"frontmatter_valido": true,
|
|
268
|
+
"secciones": {
|
|
269
|
+
"Información General": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
270
|
+
"Objetivo & DoR/DoD": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
271
|
+
"Alcance de Pruebas": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
272
|
+
"Estrategia de Pruebas": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
273
|
+
"Ambiente & Datos de Prueba": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
274
|
+
"Matriz de Riesgo Predictivo": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
275
|
+
"Criterios de Entrada/Salida": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." }
|
|
276
|
+
},
|
|
277
|
+
"secciones_faltantes": ["lista de secciones ausentes o vacías"]
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
### P7 — INYECCIÓN DE CONTEXTO
|
|
285
|
+
|
|
286
|
+
**Objetivo:** Verificar que el archivo `_bmad-output/project-context.md` existe y contiene
|
|
287
|
+
todas las secciones obligatorias con contenido real — no placeholders ni secciones vacías.
|
|
288
|
+
|
|
289
|
+
**Si el archivo no existe:** estado = `NO_PASA`, detalle = "project-context.md no encontrado en _bmad-output/"
|
|
290
|
+
|
|
291
|
+
**Proceso:**
|
|
292
|
+
1. Leer `_bmad-output/project-context.md`
|
|
293
|
+
2. Verificar que el frontmatter YAML contiene `status: complete`
|
|
294
|
+
3. Para cada sección obligatoria, verificar que el heading `##` existe Y tiene contenido real
|
|
295
|
+
(no solo el heading, no solo texto placeholder como "Documentado después de discovery")
|
|
296
|
+
|
|
297
|
+
**Secciones obligatorias (7) y criterios mínimos:**
|
|
298
|
+
|
|
299
|
+
| Sección | Heading esperado | Criterio mínimo |
|
|
300
|
+
|---------|-----------------|-----------------|
|
|
301
|
+
| Stack Tecnológico | `## Technology Stack` | Al menos 3 tecnologías con versión documentadas |
|
|
302
|
+
| Reglas P0 Corporativas | `## P0 Corporate Rules` | Al menos 3 reglas numeradas con negrita |
|
|
303
|
+
| Catálogo siesa-ui-kit | `## siesa-ui-kit Component Catalog` | Al menos 5 componentes listados |
|
|
304
|
+
| Patrones Frontend | `## Frontend Patterns` | Al menos 1 subsección `###` con contenido concreto |
|
|
305
|
+
| Patrones Backend | `## Backend Patterns` | Al menos 1 subsección `###` con contenido concreto |
|
|
306
|
+
| Reglas de Testing | `## Testing Rules` | Al menos 2 reglas de testing documentadas |
|
|
307
|
+
| Anti-Patrones | `## Anti-Patterns` | Al menos 5 entradas en formato `❌ X → Y` |
|
|
308
|
+
|
|
309
|
+
**Nota:** La coincidencia de headings es semántica — `## P0 Corporate Rules — Never Break These`
|
|
310
|
+
cumple para "Reglas P0 Corporativas". No se exige match literal.
|
|
311
|
+
|
|
312
|
+
**Umbral:** `status: complete` en frontmatter **Y** todas las secciones presentes con contenido → PASA
|
|
313
|
+
Cualquier sección ausente, vacía o `status` ≠ `complete` → NO_PASA
|
|
314
|
+
|
|
315
|
+
**Output requerido:**
|
|
316
|
+
```json
|
|
317
|
+
{
|
|
318
|
+
"item": "P7",
|
|
319
|
+
"estado": "PASA|NO_PASA",
|
|
320
|
+
"score": 0-100,
|
|
321
|
+
"detalle": {
|
|
322
|
+
"archivo": "_bmad-output/project-context.md",
|
|
323
|
+
"status_frontmatter": "complete|in_progress|AUSENTE",
|
|
324
|
+
"secciones": {
|
|
325
|
+
"Stack Tecnológico": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
326
|
+
"Reglas P0 Corporativas": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
327
|
+
"Catálogo siesa-ui-kit": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
328
|
+
"Patrones Frontend": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
329
|
+
"Patrones Backend": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
330
|
+
"Reglas de Testing": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." },
|
|
331
|
+
"Anti-Patrones": { "estado": "PRESENTE|AUSENTE|VACÍA", "nota": "..." }
|
|
332
|
+
},
|
|
333
|
+
"secciones_faltantes": ["lista de secciones ausentes o vacías"]
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## RESULTADO GLOBAL
|
|
341
|
+
|
|
342
|
+
Después de evaluar los 5 ítems, calcular el resultado global:
|
|
343
|
+
|
|
344
|
+
**PASA si:**
|
|
345
|
+
- P1 score ≥ 90 **Y**
|
|
346
|
+
- Ningún ítem evaluado tiene estado `NO_PASA`
|
|
347
|
+
- (Los ítems `NO_EVALUABLE` no bloquean el resultado global)
|
|
348
|
+
|
|
349
|
+
**NO PASA si:**
|
|
350
|
+
- P1 score < 90 **O**
|
|
351
|
+
- Cualquier ítem evaluado tiene estado `NO_PASA`
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## FORMATO DE SALIDA
|
|
356
|
+
|
|
357
|
+
Primero produce internamente (en tu razonamiento, sin escribirlo) el JSON de resultados
|
|
358
|
+
para estructurar tu análisis. Luego genera **únicamente** el reporte en Markdown —
|
|
359
|
+
el JSON no aparece en el documento final.
|
|
360
|
+
|
|
361
|
+
**Reporte en Markdown con:**
|
|
362
|
+
|
|
363
|
+
1. **Resultado global** destacado (✅ PASA / ❌ NO PASA)
|
|
364
|
+
2. **Tabla resumen** con estado y detalle breve de cada ítem
|
|
365
|
+
3. **Detalle por ítem** — solo para los ítems que NO PASAN: descripción exacta
|
|
366
|
+
de qué falta y cómo corregirlo
|
|
367
|
+
4. **Acciones requeridas** — lista priorizada de correcciones (si NO PASA)
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## RESTRICCIONES
|
|
372
|
+
|
|
373
|
+
- No inferir ni asumir contenido que no está explícito en el PRD.
|
|
374
|
+
- No aprobar secciones que solo contienen texto genérico aunque sean largas.
|
|
375
|
+
- No penalizar ausencia de documentos opcionales (Architecture, API Schema)
|
|
376
|
+
más allá de marcarlos como `NO_EVALUABLE` según corresponda.
|
|
377
|
+
- `project-context.md` NO es opcional — su ausencia resulta en `NO_PASA` en P7.
|
|
378
|
+
- El score P1 debe ser reproducible: misma entrada → mismo score (±2 puntos).
|
|
379
|
+
- Citar evidencia textual del PRD para justificar cada scoring.
|