Files
2025-11-30 08:37:27 +08:00

98 lines
5.7 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ln-340-story-quality-gate - State Diagram</title>
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
<link rel="stylesheet" href="../shared/css/diagram.css">
</head>
<body>
<div class="container">
<header>
<h1>🔍 ln-340-story-quality-gate</h1>
<p class="subtitle">Story Reviewer - State Diagram</p>
</header>
<div class="info-box">
<h3>📋 Overview</h3>
<ul>
<li><strong>Purpose:</strong> Two-pass review - Pass 1 (Early Exit Pattern) + Pass 2 (verify tests + Story Done)</li>
<li><strong>Pass 1 (6 phases):</strong> Discovery → Preparation → **Code Quality (FAIL FAST)** → **Regression Check (FAIL FAST)** → **Manual Testing (FAIL FAST)** → Verdict</li>
<li><strong>Pass 2 (3 phases):</strong> Prerequisites check → Test verification (10-28 tests, Priority ≥15) → Verdict and Story closure</li>
<li><strong>Early Exit Pattern:</strong> Each Pass 1 phase can stop execution and create fix/refactor task</li>
</ul>
</div>
<div class="diagram-container">
<div class="mermaid">
graph TD
Start([Start: Review Story]) --> Phase1[Phase 1: Discovery<br/>Team ID auto-discovery]
Phase1 --> Phase2[Phase 2: Preparation<br/>Determine pass: Pass 1 or Pass 2<br/>based on test task existence]
Phase2 --> PassCheck{Which pass?}
%% Pass 1: Early Exit Pattern with Worker Delegation
PassCheck -->|Pass 1| P1_Phase3[Phase 3: Delegate to<br/>ln-341-code-quality-checker<br/>Worker analyzes DRY/KISS/YAGNI/Architecture<br/>FAIL FAST FIRST]
P1_Phase3 --> CodeQualityCheck{Worker verdict:<br/>PASS or<br/>ISSUES_FOUND?}
CodeQualityCheck -->|ISSUES_FOUND| CodeQualityFail[❌ Code quality failed<br/>Create refactoring task<br/>STOP Pass 1]
CodeQualityCheck -->|PASS| P1_Phase4
P1_Phase4[Phase 4: Delegate to<br/>ln-342-regression-checker<br/>Worker runs ALL existing tests<br/>FAIL FAST SECOND]
P1_Phase4 --> RegressionPass{Worker verdict:<br/>PASS or<br/>FAIL?}
RegressionPass -->|FAIL| RegressionFail[❌ Regression detected<br/>Create fix task<br/>STOP Pass 1]
RegressionPass -->|PASS| P1_Phase5
P1_Phase5[Phase 5: Delegate to<br/>ln-343-manual-tester<br/>Worker tests AC via curl/puppeteer<br/>Creates scripts/tmp_[story_id].sh<br/>Documents in Linear Format v1.0<br/>FAIL FAST THIRD]
P1_Phase5 --> ManualTestCheck{Worker verdict:<br/>PASS or<br/>FAIL?}
ManualTestCheck -->|FAIL| ManualTestFail[❌ Manual testing failed<br/>Create fix task<br/>STOP Pass 1]
ManualTestCheck -->|PASS| P1_Phase6
P1_Phase6[Phase 6: Verdict and Next Steps<br/>All quality gates passed via delegation]
P1_Phase6 --> CheckTestTask{Test task<br/>exists?}
CheckTestTask -->|Yes & Done| Pass2Entry[Continue to Pass 2]
CheckTestTask -->|Yes & NOT Done| ReportStatus[Report test task status<br/>Exit]
CheckTestTask -->|NOT exists| InvokeFinalizer[✅ Delegate to ln-350-story-test-planner<br/>via Skill tool<br/>Worker creates test task]
InvokeFinalizer --> NextSteps[Next steps:<br/>ln-334-test-executor executes test task<br/>ln-332-task-reviewer reviews<br/>Auto-invoke Pass 2 when Done]
NextSteps --> End
%% Pass 2
PassCheck -->|Pass 2| Pass2Entry
Pass2Entry --> P2_Phase1[Pass 2 Phase 1: Prerequisites Check<br/>Load Story + tasks<br/>Verify test task status = Done<br/>Load test files]
P2_Phase1 --> P2_PrereqCheck{Test task<br/>Done?}
P2_PrereqCheck -->|No| P2_Error[Error: Test task missing or NOT Done<br/>Exit]
P2_PrereqCheck -->|Yes| P2_Phase2
P2_Phase2[Pass 2 Phase 2: Test Verification<br/>All tests pass 2-5 E2E 3-8 Integration<br/>5-15 Unit 10-28 total Priority ≥15<br/>NO performance/load tests<br/>Infrastructure updated]
P2_Phase2 --> P2_Phase3[Pass 2 Phase 3: Verdict and Story Closure]
P2_Phase3 --> P2_Verdict{Verdict?}
P2_Verdict -->|Pass| StoryDone[Mark Story Done<br/>Update kanban_board.md<br/>Minimal cleanup]
P2_Verdict -->|Fail| CreateFixTasks[Create fix tasks<br/>Story remains current state<br/>Re-run Pass 2 after fixes]
CodeQualityFail --> End([End])
RegressionFail --> End
ManualTestFail --> End
ReportStatus --> End
StoryDone --> End
CreateFixTasks --> End
P2_Error --> End
classDef discovery fill:#E3F2FD,stroke:#1976D2,stroke-width:2px
classDef processing fill:#FFF9C4,stroke:#F57C00,stroke-width:2px
classDef decision fill:#FFE0B2,stroke:#E64A19,stroke-width:2px
classDef action fill:#C8E6C9,stroke:#388E3C,stroke-width:2px
classDef error fill:#FFCDD2,stroke:#C62828,stroke-width:2px
class Phase1,Phase2 discovery
class P1_Phase3,P1_Phase4,P1_Phase5,P1_Phase6,P2_Phase1,P2_Phase2,P2_Phase3 processing
class PassCheck,CodeQualityCheck,RegressionPass,ManualTestCheck,CheckTestTask,P2_PrereqCheck,P2_Verdict decision
class InvokeFinalizer,NextSteps,StoryDone,ReportStatus action
class CodeQualityFail,RegressionFail,ManualTestFail,CreateFixTasks,P2_Error error
</div>
</div>
<footer>
<p>ln-340-story-quality-gate v7.0.0 | L2 Orchestrator delegating to workers (ln-341-code-quality-checker, ln-342-regression-checker, ln-343-manual-tester) with Early Exit Pattern + Pass 2 (test verify + Done)</p>
<p>Last updated: 2025-11-14</p>
</footer>
</div>
<script>
mermaid.initialize({ startOnLoad: true, theme: 'default', flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'basis' } });
</script>
</body>
</html>