Skill: /story-code-review
Objetivo
Quality gate formal entre la implementación y la marca final de Done. Compatible con /story-implement (TDD completo) y /story-implement-tasks (tarea a tarea). Lanza cuatro subagentes revisores en paralelo, consolida sus hallazgos y genera code-review-report.md con la decisión final.
Qué hace este skill:
- Verifica precondiciones antes de revisar (fail-fast ante artefactos faltantes)
- Limpia
.tmp/story-code-review/{story_id}/para garantizar idempotencia - Lanza cuatro subagentes revisores en paralelo con responsabilidades exclusivas
- Consolida los informes parciales y calcula la severidad máxima
- Si
approved: generacode-review-report.md, eliminafix-directives.md(si existe) y marcastory.mdcomoCODE-REVIEW/DONE - Si
needs-changes: generafix-directives.md, agrega tarea "Implementar fix-directives.md" entasks.mdy retrocedestory.mdaREADY-FOR-IMPLEMENT/DONE
Qué NO hace este skill:
- Ejecutar ni compilar código (opera sobre Markdown y texto plano únicamente)
- Aplicar automáticamente las correcciones de
fix-directives.md - Corregir el código implementado
Posicionamiento
[story.md: IMPLEMENT/DONE] ← precondición requerida (viene de /story-implement o /story-implement-tasks)
↓
story-code-review → Quality gate: revisión multi-agente del código ← aquí
│ Al iniciar: story.md → CODE-REVIEW/IN-PROGRESS
│ Al finalizar (approved): story.md → CODE-REVIEW/DONE
│ Al finalizar (needs-changes): story.md → READY-FOR-IMPLEMENT/DONE
↓
[story.md: CODE-REVIEW/DONE]
──────────────────────────────────────────────────────────────────────────────────────
story.md → What: requisitos, criterios de aceptación, escenarios Gherkin [Requerido]
design.md → How: arquitectura, componentes, interfaces, decisiones técnicas [Requerido]
testcases.md → Spec: tabla canónica de casos de prueba por tipo [Opcional]
implement-report.md → Done: código generado, archivos, estado por tarea [Opcional]
code-review-report.md → Review: hallazgos por dimensión, decisión final ← aquí
Entrada
Los siguientes artefactos se usan en $STORY_DIR. Solo story.md y design.md son requeridos para iniciar la ejecución. Los artefactos opcionales enriquecen el análisis cuando existen.
| Artefacto | Categoría | Justificación |
|---|---|---|
story.md |
Requerido | Fuente de criterios de aceptación — sin él, el Product-Owner-Reviewer no puede operar |
design.md |
Requerido | Fuente de arquitectura esperada — sin él, el Integration-Reviewer no puede operar |
implement-report.md |
Opcional | Evidencia de implementación producida por /story-implement o /story-implement-tasks; si no existe, los agentes verifican conformidad sin cruzar con tareas del reporte |
testcases.md |
Opcional | Especificación canónica de casos de prueba producida por /story-testcases; si existe, se incorpora al análisis de cobertura de ACs y trazabilidad de diseño |
tasks.md |
Opcional | El Tech-Lead-Reviewer puede revisar calidad sin lista de tareas |
constitution.md |
Opcional | Mejora la revisión pero no la bloquea si no existe |
definition-of-done-story.md |
Opcional | Mismo caso que constitution.md |
Para actualizar esta lista en el futuro, editar únicamente esta sección sin modificar el cuerpo del Paso 1.
Parámetros
{story_id}— identificador de la historia (ej.STORY-064){story_path}— ruta explícita al directorio de la historia (opcional)--single-agent— modo agente único para historias ≤3 archivos modificados (lanza solo el Tech-Lead-Reviewer)
Precondiciones
story.mddebe tenerstatus: IMPLEMENTysubstatus: DONEstory.mdydesign.mddeben existir en$STORY_DIRimplement-report.mdytestcases.mdson opcionales: si no existen, el skill continúa sin bloquear
Dependencias
- Skills: [
skill-preflight] - Agentes locales: [
agents/tech-lead-reviewer.agent.md,agents/product-owner-reviewer.agent.md,agents/integration-reviewer.agent.md,agents/security-reviewer.agent.md]
Modos de ejecución
- Modo manual (
/story-code-review {story_id}): interactivo, muestra progreso de cada agente en tiempo real - Modo Agent (invocado por orquestador): automático, reporta resultado consolidado al finalizar
El flujo por defecto es siempre el equipo de cuatro agentes. El flag --single-agent es la excepción para historias muy pequeñas.
Restricciones / Reglas
| Evento | status | substatus |
|---|---|---|
| Precondición requerida para ejecutar | IMPLEMENT |
DONE |
| Al iniciar la revisión (Paso 1) | CODE-REVIEW |
IN-PROGRESS |
| Finalización aprobada (Paso 6) | CODE-REVIEW |
DONE |
| Finalización con bloqueantes (Paso 4g) | READY-FOR-IMPLEMENT |
DONE |
- La ejecución es idempotente:
.tmp/story-code-review/{story_id}/se limpia al inicio de cada ejecución story-code-reviewsolo puede ejecutarse sistory.mdtienestatus: IMPLEMENT+substatus: DONE. Si la precondición no se cumple, la ejecución se detiene con error descriptivo.- NO modifique ningún archivo existente en el código fuente (estamos revisando el código de la implementación, no implementando los artefactos técnicos)
- NO genere código; estamos revisando la implementación, no implementando los artefactos técnicos
- Encoding: All generated
.mdfiles MUST be saved as UTF-8 without BOM. Do not use Latin-1, CP-1252, or any other encoding. If you see characters likeóor📖, that indicates an encoding error — fix it.
Flujo de ejecución
Paso 0 — Verificar entorno (skill-preflight)
Invocar skill-preflight. Si retorna ✗ Entorno inválido, detener la ejecución. Usar $SPECS_BASE en todas las rutas siguientes.
Paso 1 — Resolver input y verificar precondiciones
1a. Argumentos aceptados
Si no se proporcionó ningún argumento, preguntar:
¿Qué historia deseas revisar?
Proporciona el ID (ej. STORY-064) o la ruta completa al directorio.
1b. Resolución del directorio de la historia
- Ruta explícita
{story_path}si se proporcionó - Glob
$SPECS_BASE/specs/03-stories/{story_id}-*/— primera coincidencia cuyo nombre comienza con el ID - Si no se encuentra:
Detener la ejecución.❌ No se encontró la historia {story_id} bajo $SPECS_BASE/specs/03-stories/ Verifica el ID o ejecuta /epic-generate-stories para generarla.
1c. Validar artefactos requeridos y detectar opcionales
Artefactos requeridos — comprobar simultáneamente la existencia de:
story.mddesign.md
Acumular faltantes en una lista. Si la lista no está vacía, emitir un único mensaje de error y detener la ejecución sin modificar ningún archivo:
❌ Artefactos requeridos no encontrados en: <$STORY_DIR>/
Faltantes:
· <archivo-1>
· <archivo-2>
Completa los artefactos faltantes y vuelve a ejecutar /story-code-review <story_id>.
Artefactos opcionales — detectar presencia y registrar internamente:
- Si existe
implement-report.md→$IMPL_REPORT_AVAILABLE = true; si no →$IMPL_REPORT_AVAILABLE = false - Si existe
testcases.md→$TESTCASES_AVAILABLE = true; si no →$TESTCASES_AVAILABLE = false
Si los artefactos requeridos están presentes, continuar al paso 1d.
1d. Verificar precondición de estado
Leer el frontmatter de story.md y verificar status: IMPLEMENT y substatus: DONE.
Si la precondición NO se cumple:
❌ La historia <story_id> no está en estado IMPLEMENT/DONE.
Estado actual: status: <valor_actual> / substatus: <valor_actual>
story-code-review requiere que /story-implement o /story-implement-tasks haya completado exitosamente.
Sugerencia: ejecuta /story-implement {story_id} o /story-implement-tasks {story_id} para completar la implementación.
Detener la ejecución sin modificar ningún archivo.
1e. Actualizar frontmatter a CODE-REVIEW/IN-PROGRESS
Solo después de que los pasos 1c y 1d han pasado sin error, actualizar el frontmatter de story.md:
status: CODE-REVIEWsubstatus: IN-PROGRESS
Mostrar confirmación de inicio:
🔍 Iniciando revisión de código para: <story_id>
Directorio: <ruta_directorio>
Artefactos requeridos: story.md ✓ | design.md ✓
Artefactos opcionales: implement-report.md ✓/⏭️ | testcases.md ✓/⏭️
Estado: IMPLEMENT/DONE ✓
Paso 2 — Cargar contexto
2a. Leer story.md
Extraer y registrar internamente:
story_iddel frontmatterstory_title- Criterios de aceptación numerados como AC-1, AC-2 … AC-N
- Todos los escenarios Gherkin (Dado/Cuando/Entonces o Given/When/Then)
2b. Leer design.md
Extraer y registrar internamente:
- Componentes afectados y sus rutas de archivos
- Interfaces definidas y sus contratos
2c. Leer implement-report.md (si disponible)
Si $IMPL_REPORT_AVAILABLE = true: leer implement-report.md y extraer:
- Lista de archivos generados por tarea (tests y código de producción) → registrar como
$IMPL_FILES - Tareas completadas y bloqueadas → registrar como
$IMPL_TASKS
Si $IMPL_REPORT_AVAILABLE = false: registrar $IMPL_FILES = [] y $IMPL_TASKS = []. No emitir error.
2d. Localizar políticas del proyecto y extraer criterios DoD CODE-REVIEW
Buscar los siguientes archivos en el repositorio:
docs/policies/constitution.md(o ruta alternativa detectada)docs/policies/definition-of-done-story.md(o ruta alternativa detectada)
Registrar las rutas resueltas como $CONSTITUTION_PATH y $DOD_PATH.
Extracción de criterios DoD CODE-REVIEW:
Si $DOD_PATH está vacío o el archivo no existe:
⚠️ definition-of-done-story.md no encontrado — se omitirá la validación DoD CODE-REVIEW
Registrar internamente $DOD_CODE_REVIEW_CRITERIA = [] y continuar.
Si el archivo existe:
- Buscar el primer encabezado h3 (
###) cuyo texto contenga, case-insensitive, alguno de los términos:CODE-REVIEW,CODE REVIEW,REVISIÓN DE CÓDIGOoREVISION DE CODIGO - Registrar en log el encabezado encontrado
- Si no se encuentra ningún encabezado coincidente:
Registrar internamente⚠️ Sección CODE-REVIEW no encontrada en DoD — se omitirá la validación DoD CODE-REVIEW$DOD_CODE_REVIEW_CRITERIA = []y continuar. - Si se encontró la sección: extraer todas las líneas
- [ ] <texto>y- [x] <texto>dentro de esa sección, con su número de línea en el archivo, como lista de criterios planos; registrar internamente como$DOD_CODE_REVIEW_CRITERIA
2e. Leer testcases.md (si disponible)
Si $TESTCASES_AVAILABLE = true: leer testcases.md y extraer:
- Tabla de casos de prueba (ID, Tipo, Escenario, Dado, Cuando, Entonces, Ref) → registrar como
$TESTCASES_DATA - Resumen de cobertura por tipo (UT/CT/IT/API/E2E/EV) → registrar como
$TESTCASES_SUMMARY - Checklist "Test Cases Progress" con estado de cada entrada (
[ ],[x],[!]) → registrar como$TESTCASES_PROGRESS
Si $TESTCASES_AVAILABLE = false: registrar $TESTCASES_DATA = []. No emitir error.
Mostrar resumen de carga:
📋 Contexto cargado:
ACs encontrados: <N>
Escenarios Gherkin: <N>
implement-report.md: ✓ (<N> archivos implementados) | ⏭️ no disponible
testcases.md: ✓ (<N> casos de prueba) | ⏭️ no disponible
constitution.md: <ruta>
definition-of-done-story.md: <ruta>
DoD CODE-REVIEW: <N criterios cargados | ⚠️ no encontrado>
Paso 3 — Preparar ejecución paralela
3a. Limpiar directorio temporal (idempotencia)
Eliminar el directorio .tmp/story-code-review/{story_id}/ si existe y recrearlo vacío.
Esto garantiza que ejecuciones repetidas del skill producen el mismo resultado (NF-2).
3b. Lanzar cuatro agentes en paralelo
Mecanismo de invocación: cada agente local se lanza leyendo su archivo
agents/<nombre>.agent.mdy creando un subagentegeneral-purposecuyo prompt es el contenido del archivo más el bloque de contexto con las variables resueltas. El subagente escribe en eloutput:declarado en su frontmatter y devuelve el control. Ver contrato completo endocs/guides/best-practices-for-skills.md(ADR-0002).
Lanzar simultáneamente los siguientes subagentes, pasando a cada agente:
$STORY_DIR: ruta del directorio de la historia$REPO_PATH: ruta raíz del repositorio ($SDDF_ROOT)$CONSTITUTION_PATH: ruta a constitution.md$DOD_PATH: ruta a definition-of-done-story.md$IMPL_REPORT_AVAILABLE: flag booleano de disponibilidad de implement-report.md$TESTCASES_AVAILABLE: flag booleano de disponibilidad de testcases.md$IMPL_FILES: lista de archivos implementados (extraída en el Paso 2c; puede estar vacía)
Principio compartido — Estándar de aprobación: los cuatro agentes aplican el mismo criterio: aprobar cuando el cambio mejora claramente la salud del código, sin bloquear por preferencia personal ni por buscar la solución perfecta. El texto completo está duplicado en la sección "Estándar de aprobación" de cada
agents/*.agent.md(los subagentes no heredan el contexto de este SKILL.md).
Agente 1 — Tech-Lead-Reviewer (agents/tech-lead-reviewer.agent.md):
- Revisa calidad, legibilidad, duplicación y seguridad del código fuente
- Output:
.tmp/story-code-review/{story_id}/tech-lead-report.md
Agente 2 — Product-Owner-Reviewer (agents/product-owner-reviewer.agent.md):
- Verifica que cada escenario Gherkin tiene correspondencia en el código
- Output:
.tmp/story-code-review/{story_id}/product-owner-report.md
Agente 3 — Integration-Reviewer (agents/integration-reviewer.agent.md):
- Valida que los componentes respetan la arquitectura de design.md
- Output:
.tmp/story-code-review/{story_id}/integration-report.md
Agente 4 — Security-Reviewer (agents/security-reviewer.agent.md):
- Audita los archivos de la historia contra los checklists de seguridad que existan en el contexto de ejecución (
docs/policies/*security-checklist*.md, o el checklist de un skill de seguridad instalado, que lee como fuente de reglas sin invocarlo); si no encuentra ninguno, aplica su baseline embebido - Output:
.tmp/story-code-review/{story_id}/security-report.md
Mostrar progreso:
⚙️ Agentes lanzados en paralelo...
🔍 Tech-Lead-Reviewer → analizando calidad de código
📋 Product-Owner-Reviewer → verificando cobertura de requisitos
🏗️ Integration-Reviewer → validando integración con design.md
🔒 Security-Reviewer → auditando seguridad de los archivos de la historia
Esperar a que los cuatro finalicen antes de continuar.
Paso 4 — Consolidar resultados (árbitro)
4a. Leer los cuatro informes
Leer los archivos de .tmp/story-code-review/{story_id}/:
tech-lead-report.mdproduct-owner-report.mdintegration-report.mdsecurity-report.md
Si algún informe de agente falta o tiene frontmatter inválido:
Asumir max-severity: HIGH para ese agente (fail-safe).
Del security-report.md, registrar además los campos checklist-sources y rules-evaluated de su frontmatter para el reporte final.
4b. Calcular severidad máxima
Para cada informe de agente, leer el campo max-severity del frontmatter.
Orden de severidad: HIGH > MEDIUM > LOW > ninguna
max_severity = máxima severidad entre los cuatro agentes
4c. Derivar review-status
review-status = approved si max_severity ∈ {LOW, ninguna}
review-status = needs-changes si max_severity ∈ {HIGH, MEDIUM}
Registrar internamente:
$REVIEW_STATUS:approvedoneeds-changes$MAX_SEVERITY: valor calculado (considera los cuatro agentes)- Hallazgos consolidados por dimensión (tabla con columnas: #, Archivo:Línea, Dimensión, Severidad, Hallazgo, Recomendación)
4c.1. Evaluar criterios DoD CODE-REVIEW
Si $DOD_CODE_REVIEW_CRITERIA está vacío (no se cargó en el Paso 2d):
- Registrar
$DOD_CODE_REVIEW_RESULT = [] - No modificar
$MAX_SEVERITYni$REVIEW_STATUS - Continuar al paso 4d
Si $DOD_CODE_REVIEW_CRITERIA tiene criterios:
Para cada criterio, evaluar semánticamente contra:
- El código revisado (inferido del implement-report y los informes de agentes)
- Los informes de los cuatro agentes (tech-lead-report, product-owner-report, integration-report, security-report)
- El contenido de
story.md(criterios de aceptación, escenarios Gherkin)
Clasificar cada criterio como:
✓— evidencia clara de cumplimiento en los artefactos revisados❌ + severidad— criterio claramente no cumplido; asignar severidad:HIGH: criterios funcionales y de regresión (ej. "Gherkin pasan", "no hay regresiones")MEDIUM: criterios de calidad de código (ej. "pasa el linter", "sin código comentado")LOW: criterios de documentación opcionales
⚠️— evidencia insuficiente o criterio no evaluable desde los artefactos disponibles (no bloquea)
Regla de duda obligatoria: ante incertidumbre, usar ⚠️ en lugar de ❌.
Criterios que requieren acceso a CI/CD o ejecución de tests: clasificar siempre como ⚠️ con evidencia: "Requiere acceso a CI/CD — no evaluable desde artefactos disponibles".
Para cada hallazgo ❌, añadir a la tabla consolidada interna con:
Dimensión:DoD-CODE-REVIEWArchivo:Línea:docs/policies/definition-of-done-story.md:<número_de_línea>Severidad: valor asignado (HIGH/MEDIUM/LOW)Hallazgo: texto del criterio DoDAcción requerida: acción concreta derivada semánticamente del criterio
Registrar internamente $DOD_CODE_REVIEW_RESULT (tabla de criterio | resultado | severidad | evidencia).
Recalcular $MAX_SEVERITY y $REVIEW_STATUS considerando todos los hallazgos (agentes + DoD):
max_severity = máxima severidad entre hallazgos de agentes y hallazgos DoD
review-status = approved si max_severity ∈ {LOW, ninguna}
review-status = needs-changes si max_severity ∈ {HIGH, MEDIUM}
Registrar los valores actualizados como $MAX_SEVERITY y $REVIEW_STATUS.
4c.2. Verificación informativa de tamaño de cambio (no bloqueante)
Esta verificación es puramente informativa: no participa en el cálculo de $MAX_SEVERITY ni $REVIEW_STATUS (ya cerrados en 4b/4c/4c.1).
- Contar el número de archivos distintos en
$IMPL_FILES(extraído en el Paso 2c desdeimplement-report.md). Registrar como$CHANGED_FILES_COUNT. - Si
$IMPL_FILESestá vacío (porqueimplement-report.mdno estaba disponible), omitir esta verificación y registrar$CHANGE_SIZE_NOTE = "". - Clasificar según umbrales:
$CHANGED_FILES_COUNT ≤ 5→ sin nota ($CHANGE_SIZE_NOTE = "")6 ≤ $CHANGED_FILES_COUNT ≤ 12→$CHANGE_SIZE_NOTE = "ℹ️ Nota informativa: tamaño de cambio aceptable (<N> archivos modificados) — sin acción requerida."$CHANGED_FILES_COUNT > 12→$CHANGE_SIZE_NOTE = "⚠️ Nota informativa: tamaño de cambio elevado (<N> archivos modificados). Considera ejecutar /story-split antes de futuras historias similares para reducir el alcance. Esta nota es informativa y no afecta la decisión de este review."
No se invoca git diff ni ningún comando nuevo: el conteo reutiliza $IMPL_FILES, ya disponible desde el Paso 2c y ya pasado al Security-Reviewer en el Paso 3b, manteniendo el orquestador sin lógica de Bash propia.
4d. Bifurcación post-árbitro
Si $REVIEW_STATUS = needs-changes: ejecutar los pasos 4e–4g y después el Paso 5, luego saltar al Paso 7.
Si $REVIEW_STATUS = approved: ejecutar el Paso 4h, después los Pasos 5–6, luego el Paso 7.
4e. [needs-changes] Construir lista blanca de archivos
Iterar los hallazgos consolidados filtrando solo los de Severidad ∈ {HIGH, MEDIUM}:
- Para cada hallazgo bloqueante, extraer la parte de archivo de la columna
Archivo:Línea(texto antes del primer:). - Si
Archivo:Líneaestá vacío o ausente para un hallazgo, anotar[archivo no especificado]para ese hallazgo y excluirlo de la lista blanca sin fallar. - Deduplicar las rutas de archivo resultantes.
- Para cada archivo único, registrar qué número(s) de hallazgo lo referencian:
hallazgo #N, #M.
Registrar internamente como $WHITELIST: lista de (archivo, [hallazgos]).
4f. [needs-changes] Generar fix-directives.md
Leer assets/fix-directives-template.md como fuente de verdad de la estructura.
Completar el template con:
- Frontmatter:
story_id, fecha actual,$MAX_SEVERITY - Sección "Resumen de bloqueantes": título de la historia, severidad máxima, total de hallazgos HIGH/MEDIUM (incluyendo hallazgos DoD si los hay)
- Tabla "Instrucciones de corrección": una fila por hallazgo bloqueante (HIGH o MEDIUM) numeradas correlativamente, con columnas
#,Archivo:Línea,Dimensión,Severidad,Hallazgo,Acción requerida- Hallazgos de agentes:
Dimensión= dimensión del agente (code-quality, requirements-coverage, integration-architecture, security) - Hallazgos DoD:
Dimensión=DoD-CODE-REVIEW,Archivo:Línea=docs/policies/definition-of-done-story.md:<número_de_línea> - Todos los hallazgos se numeran correlativamente sin IDs duplicados (agentes → DoD)
- Hallazgos de agentes:
- Sección "Lista blanca de archivos permitidos": una línea por archivo de
$WHITELISTcon sus referencias de hallazgo
Guardar en $STORY_DIR/fix-directives.md, sobreescribiendo si ya existe.
Mostrar:
📋 Fix directives: <ruta>/fix-directives.md
4g. [needs-changes] Registrar tarea en tasks.md y retroceder story.md
4g.1 — Agregar tarea en tasks.md:
Si existe $STORY_DIR/tasks.md, agregar al final del archivo la siguiente línea:
- [ ] Implementar fix-directives.md
Si tasks.md no existe, omitir este sub-paso sin error.
Mostrar:
📝 Tarea agregada en tasks.md: "Implementar fix-directives.md"
4g.2 — Retroceder story.md a READY-FOR-IMPLEMENT/DONE:
Actualizar el frontmatter de story.md:
status: READY-FOR-IMPLEMENTsubstatus: DONE
Mostrar:
⚠️ Review: needs-changes — story.md → READY-FOR-IMPLEMENT/DONE
→ Revisa: <ruta>/fix-directives.md
4h. [approved] Limpiar fix-directives.md residual
Si existe $STORY_DIR/fix-directives.md (de una revisión anterior con bloqueantes), eliminarlo antes de continuar.
Mostrar (solo si se eliminó):
🗑️ fix-directives.md eliminado (revisión anterior superada)
Paso 5 — Generar code-review-report.md
5a. Leer template
Leer assets/code-review-report-template.md como fuente de verdad de la estructura del output.
5b. Completar y guardar
Completar el template con:
- Frontmatter:
story_id,$REVIEW_STATUS, fecha actual,$MAX_SEVERITY - Sección Resumen: título de la historia, revisores (los cuatro), severidad máxima
{{TESTCASES_STATUS}}:✓ analizado (<N> casos — UT:<N>/CT:<N>/IT:<N>/API:<N>/E2E:<N>/EV:<N>)si$TESTCASES_AVAILABLE = true; o⏭️ no encontrado — ejecuta /story-testcases para generar la especificación canónicasi$TESTCASES_AVAILABLE = false
- Sección Hallazgos por dimensión: contenido de cada informe parcial
- Sección
### Seguridad (Security-Reviewer)—{{SECURITY_FINDINGS}}: contenido de la sección "Hallazgos" desecurity-report.md, precedido por una línea**Fuentes de checklist:** <checklist-sources> (<rules-evaluated> reglas evaluadas)con los valores leídos en el Paso 4a - Sección
### Cobertura de Casos de Prueba (testcases.md)—{{TESTCASES_COVERAGE_SECTION}}:- Si
$TESTCASES_AVAILABLE = false:⏭️ testcases.md no encontrado — análisis de cobertura omitido. Considera ejecutar /story-testcases para generar la especificación canónica de pruebas. - Si
$TESTCASES_AVAILABLE = true: extraer y mostrar los hallazgos de la sección "Hallazgos — Cobertura en testcases.md" delproduct-owner-report.mdy los hallazgos de la sección "Hallazgos — Trazabilidad de diseño en testcases.md" delintegration-report.md
- Si
- Sección
### Nota de Tamaño de Cambio—{{CHANGE_SIZE_NOTE}}: contenido de$CHANGE_SIZE_NOTEcalculado en el Paso 4c.2; si está vacío, dejar la sección sin contenido visible (no mostrar el placeholder literal) - Sección Decisión final:
$REVIEW_STATUScon justificación - Sección "Cumplimiento DoD — Fase CODE-REVIEW":
- Si
$DOD_CODE_REVIEW_CRITERIAestaba vacío: mostrar⚠️ DoD CODE-REVIEW no encontrado — se omitió la validación. Verifica que $SPECS_BASE/policies/definition-of-done-story.md contiene la sección "CODE-REVIEW". - Si hay criterios evaluados: completar tabla
| # | Criterio | Estado | Severidad | Evidencia |con los resultados de$DOD_CODE_REVIEW_RESULTy línea de resumen**Resumen:** N/Total criterios ✓
- Si
Guardar en $STORY_DIR/code-review-report.md.
Mostrar:
📄 Reporte generado: <ruta>/code-review-report.md
Paso 6 — Actualizar frontmatter de story.md
Solo si $REVIEW_STATUS = approved:
Actualizar el frontmatter de story.md:
status: CODE-REVIEWsubstatus: DONE
Mostrar:
📋 Estado story.md: CODE-REVIEW/DONE ✓
Si $REVIEW_STATUS = needs-changes: el frontmatter ya fue actualizado a READY-FOR-IMPLEMENT/DONE en el Paso 4g.2. No ejecutar este paso.
Paso 7 — Mostrar resumen final
─────────────────────────────────────────────────────────────────────
Code Review: <story_id> — <story_title>
─────────────────────────────────────────────────────────────────────
Dimensión │ Severidad │ Hallazgos
─────────────────────────────────────────────────────────────────────
Calidad de Código │ <sev> │ <N> hallazgos
Cobertura de Requisitos │ <sev> │ <N> escenarios verificados
Integración y Arquitectura │ <sev> │ <N> hallazgos
🔒 Seguridad │ <sev> │ <N> hallazgos (<N> reglas evaluadas)
Cobertura testcases.md │ <sev>/— │ <N> casos analizados / ⏭️ omitido
📦 Tamaño de cambio │ <N> archivos │ <nota> (solo si $CHANGE_SIZE_NOTE no está vacío)
─────────────────────────────────────────────────────────────────────
Severidad máxima: <max_severity>
Review status: <review_status>
─────────────────────────────────────────────────────────────────────
📄 Reporte: <ruta>/code-review-report.md
📋 Estado: <story_id> → <nuevo_estado>
📋 DoD CODE-REVIEW: {N}/{Total} criterios ✓ (si DoD fue evaluado)
📋 DoD CODE-REVIEW: ⚠️ no evaluado (sección no encontrada) (si DoD no disponible)
✅ Revisión aprobada — historia lista para verificación final
O si hay hallazgos criticos:
─────────────────────────────────────────────────────────────────────
Code Review: <story_id> — <story_title>
─────────────────────────────────────────────────────────────────────
Dimensión │ Severidad │ Hallazgos
─────────────────────────────────────────────────────────────────────
Calidad de Código │ <sev> │ <N> hallazgos
Cobertura de Requisitos │ <sev> │ <N> hallazgos
Integración y Arquitectura │ <sev> │ <N> hallazgos
🔒 Seguridad │ <sev> │ <N> hallazgos (<N> reglas evaluadas)
Cobertura testcases.md │ <sev>/— │ <N> casos analizados / ⏭️ omitido
DoD CODE-REVIEW │ <sev> │ <N> criterios no cumplidos
📦 Tamaño de cambio │ <N> archivos │ <nota> (solo si $CHANGE_SIZE_NOTE no está vacío)
─────────────────────────────────────────────────────────────────────
Severidad máxima: <max_severity>
Review status: needs-changes
─────────────────────────────────────────────────────────────────────
📋 Fix directives: <ruta>/fix-directives.md
📄 Reporte: <ruta>/code-review-report.md
📋 Estado: <story_id> → READY-FOR-IMPLEMENT/DONE
📋 DoD CODE-REVIEW: {N}/{Total} criterios ✓ | {N_error} criterios ❌
⚠️ Revisión completada con hallazgos críticos
<N> hallazgo(s) de severidad HIGH o MEDIUM requieren corrección.
Consulta fix-directives.md para las instrucciones de corrección.
Ejecuta /story-code-review {story_id} nuevamente tras corregir los hallazgos.
Salida
| Artefacto | Condición |
|---|---|
$SPECS_BASE/specs/03-stories/STORY-NNN/code-review-report.md |
Siempre |
$SPECS_BASE/specs/03-stories/STORY-NNN/fix-directives.md |
Solo si needs-changes |
.tmp/story-code-review/{story_id}/tech-lead-report.md |
Temporal (intermedio) |
.tmp/story-code-review/{story_id}/product-owner-report.md |
Temporal (intermedio) |
.tmp/story-code-review/{story_id}/integration-report.md |
Temporal (intermedio) |
.tmp/story-code-review/{story_id}/security-report.md |
Temporal (intermedio) |
Estado final de story.md:
CODE-REVIEW/DONEsi la revisión es aprobadaREADY-FOR-IMPLEMENT/DONEsi hay hallazgos criticos (severidad HIGH o MEDIUM)