# Step 3c: Requirements Traceability & Coverage Gate (Per-Epic) ## Context Isolation **IMPORTANT**: This step executes in a fresh Claude context after ALL stories are complete but before UAT generation. It validates that every acceptance criterion across the epic has appropriate test coverage. ## Objective Generate a requirements-to-tests traceability matrix for the entire epic. Identify coverage gaps, and if gaps exist, trigger a self-healing loop to generate missing tests before proceeding to UAT. ## Inputs - `epic_id`: The completed epic - `epic_file`: Path to epic definition - `completed_stories`: List of all story files in the epic - `test_dir`: Project's test directory (auto-discovered) ## Integration with testarch-trace This step applies the full `testarch-trace` workflow to generate: - Requirements-to-tests traceability matrix - Coverage analysis by priority (P0/P1/P2/P3) - Gap identification with severity - Quality gate decision (PASS/CONCERNS/FAIL) ## Coverage Thresholds | Priority | Required Coverage | Gate Impact | |----------|-------------------|-------------| | **P0** (Critical) | 100% | FAIL if not met | | **P1** (High) | ≥90% | CONCERNS if 80-89%, FAIL if <80% | | **P2** (Medium) | ≥80% | Advisory only | | **P3** (Low) | No requirement | Advisory only | ## Prompt Template ``` You are a Test Architect (TEA) executing requirements traceability analysis for a BMAD epic. ## Your Task Generate a traceability matrix for Epic: {epic_id} Map ALL acceptance criteria from ALL stories to their implementing tests. Identify coverage gaps and determine if the epic is ready for UAT. ## Epic Definition {epic_file_contents} ## Completed Stories {for each story} {story_file_contents} {end for} ## Phase 1: Discover and Catalog Tests ### 1.1 Find Test Files ```bash # List all test files in the project find . -type f \( -name "*.spec.ts" -o -name "*.test.ts" -o -name "*.spec.js" -o -name "*.test.js" \) | head -100 ``` ### 1.2 Extract Test Metadata For each test file related to this epic: - Test IDs (e.g., `{epic_id}-{story_seq}-E2E-001`) - Describe blocks - It blocks (individual test cases) - Given-When-Then structure - Priority markers (P0/P1/P2/P3) ## Phase 2: Map Criteria to Tests ### 2.1 For Each Acceptance Criterion Search for explicit references: - Test IDs mentioning the criterion - Describe blocks referencing the requirement - Given-When-Then narratives that match ### 2.2 Build Traceability Matrix ```markdown ## Traceability Matrix - Epic {epic_id} ### Coverage Summary | Priority | Total Criteria | Covered | Coverage % | Status | |----------|---------------|---------|------------|--------| | P0 | {count} | {count} | {%} | ✅/❌ | | P1 | {count} | {count} | {%} | ✅/⚠️/❌ | | P2 | {count} | {count} | {%} | ✅/⚠️ | | P3 | {count} | {count} | {%} | ✅ | | **Total**| {count} | {count} | {%} | {status} | ### Detailed Mapping #### Story {story_id}: {story_title} | AC ID | Description | Priority | Test ID | Test File | Level | Status | |-------|-------------|----------|---------|-----------|-------|--------| | AC-1 | User can... | P0 | {id}-E2E-001 | tests/e2e/... | E2E | FULL | | AC-2 | Error shows...| P1 | {id}-UNIT-001 | tests/unit/... | Unit | PARTIAL | | AC-3 | Data persists | P1 | - | - | - | NONE | ``` ### 2.3 Classify Coverage Status For each criterion: - **FULL**: All scenarios tested at appropriate level(s) - **PARTIAL**: Some coverage but missing edge cases or levels - **NONE**: No test coverage - **UNIT-ONLY**: Only unit tests (missing integration/E2E) - **INTEGRATION-ONLY**: Only integration tests (missing unit confidence) ## Phase 3: Gap Analysis ### 3.1 Identify Critical Gaps ```markdown ### Coverage Gaps #### Critical Gaps (BLOCKING - P0 without coverage) | Story | AC | Description | Recommended Test | |-------|-----|-------------|------------------| | {id} | AC-2 | [desc] | {id}-E2E-002: [Given-When-Then] | #### High Priority Gaps (P1 coverage <90%) | Story | AC | Description | Current | Missing | |-------|-----|-------------|---------|---------| | {id} | AC-5 | [desc] | UNIT-ONLY | E2E test for integration | #### Medium Priority Gaps (Advisory) | Story | AC | Description | Current | Recommendation | |-------|-----|-------------|---------|----------------| | {id} | AC-8 | [desc] | PARTIAL | Add edge case tests | ``` ### 3.2 Gate Decision Apply decision rules: **PASS** if ALL: - P0 coverage = 100% - P1 coverage ≥ 90% - Overall coverage ≥ 80% - No critical gaps **CONCERNS** if ANY: - P1 coverage 80-89% - P2 coverage <50% - Minor gaps in edge case coverage **FAIL** if ANY: - P0 coverage < 100% - P1 coverage < 80% - Critical acceptance criteria without tests ## Phase 4: Self-Healing (If Gaps Found) ### If FAIL or CONCERNS with P0/P1 gaps: Generate specific test recommendations: ```markdown ### Tests to Generate For each gap, provide: #### Gap 1: {story_id} AC-{n} - {description} **Priority**: P0/P1 **Recommended Test ID**: {story_id}-E2E-{seq} **Test Level**: E2E/Integration/Unit **File Location**: tests/{level}/{feature}.spec.ts **Test Specification**: ```gherkin Feature: {feature name} Scenario: {scenario name} Given {precondition} When {action} Then {expected result} ``` **Implementation Guidance**: - Setup: {what data/state to prepare} - Action: {what to test} - Assertions: {what to verify} - Cleanup: {what to clean up} ``` ### 4.1 Output for Fix Loop If gaps need fixing, output: ``` TRACEABILITY GAPS START GAP: {story_id}|AC-{n}|{priority}|{description}|{recommended_test_id}|{test_level} SPEC: Given: {precondition} When: {action} Then: {expected result} GAP: {next gap...} TRACEABILITY GAPS END ``` ## Deliverables ### 1. Traceability Matrix Document Save to: `docs/sprint-artifacts/traceability/epic-{epic_id}-traceability.md` ### 2. Gate Decision Summary ```markdown ## Quality Gate Decision **Epic**: {epic_id} **Decision**: PASS / CONCERNS / FAIL **Date**: {date} ### Evidence Summary | Metric | Threshold | Actual | Status | |--------|-----------|--------|--------| | P0 Coverage | 100% | {%} | ✅/❌ | | P1 Coverage | ≥90% | {%} | ✅/⚠️/❌ | | Overall Coverage | ≥80% | {%} | ✅/⚠️/❌ | | Critical Gaps | 0 | {count} | ✅/❌ | ### Recommendation {PASS: Proceed to UAT generation} {CONCERNS: Proceed with noted gaps, create follow-up stories} {FAIL: Generate missing tests before UAT} ``` ### 3. Gate YAML Snippet ```yaml traceability: epic_id: "{epic_id}" coverage: overall: {%} p0: {%} p1: {%} p2: {%} gaps: critical: {count} high: {count} medium: {count} status: "PASS|CONCERNS|FAIL" timestamp: "{timestamp}" ``` ## Completion Signals ### TRACEABILITY PASS if: - P0 coverage = 100% - P1 coverage ≥ 90% - No critical gaps Output: `TRACEABILITY PASS: {epic_id} - P0: 100%, P1: {p1}%, Overall: {overall}%` ### TRACEABILITY CONCERNS if: - P0 coverage = 100% - P1 coverage 80-89% Output: `TRACEABILITY CONCERNS: {epic_id} - P1 at {p1}% (below 90%)` ### TRACEABILITY FAIL if: - P0 coverage < 100% - P1 coverage < 80% First output gaps block (for self-healing): ``` TRACEABILITY GAPS START GAP: ... TRACEABILITY GAPS END ``` Then: `TRACEABILITY FAIL: {epic_id} - P0: {p0}%, P1: {p1}%, {n} critical gaps` ``` ## Self-Healing Fix Loop When TRACEABILITY FAIL is signaled with gaps: 1. **Gap Extraction**: Shell script extracts gaps from output 2. **Test Generation Phase**: New Claude context generates missing tests 3. **Re-run Traceability**: Verify gaps are closed 4. **Max Attempts**: 3 attempts before proceeding with CONCERNS and follow-up stories ### Test Generation Prompt (for fix loop) ``` You are a Test Architect generating tests to close coverage gaps. ## Gaps to Address {gaps_from_traceability} ## Instructions For each gap: 1. Create the test file if it doesn't exist 2. Implement the test following the Given-When-Then specification 3. Use existing test patterns from the codebase 4. Run the test to verify it passes 5. Stage changes: git add -A ## Completion Output: TEST GENERATION COMPLETE: Generated {n} tests Or: TEST GENERATION PARTIAL: Generated {n} of {m} tests - {reason for gaps} ``` ## Notes - This step runs ONCE per epic, not per story - It catches acceptance criteria that slipped through without tests - Self-healing generates tests automatically rather than just reporting gaps - The traceability matrix becomes documentation for UAT and compliance - Follow-up stories are created for gaps that can't be auto-generated ``` ## Orchestration Integration ```bash # Fresh context - comprehensive traceability analysis claude -p "$(cat step-03c-traceability.md | envsubst)" ``` ## Success Criteria Phase complete when: - Traceability matrix generated - Gate decision made (PASS/CONCERNS/FAIL) - If FAIL: Self-healing loop attempted (max 3 times) - TRACEABILITY PASS or CONCERNS signal output - Ready for UAT generation