🔍 ln-340-story-quality-gate

Story Reviewer - State Diagram

📋 Overview

graph TD Start([Start: Review Story]) --> Phase1[Phase 1: Discovery
Team ID auto-discovery] Phase1 --> Phase2[Phase 2: Preparation
Determine pass: Pass 1 or Pass 2
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
ln-341-code-quality-checker
Worker analyzes DRY/KISS/YAGNI/Architecture
FAIL FAST FIRST] P1_Phase3 --> CodeQualityCheck{Worker verdict:
PASS or
ISSUES_FOUND?} CodeQualityCheck -->|ISSUES_FOUND| CodeQualityFail[❌ Code quality failed
Create refactoring task
STOP Pass 1] CodeQualityCheck -->|PASS| P1_Phase4 P1_Phase4[Phase 4: Delegate to
ln-342-regression-checker
Worker runs ALL existing tests
FAIL FAST SECOND] P1_Phase4 --> RegressionPass{Worker verdict:
PASS or
FAIL?} RegressionPass -->|FAIL| RegressionFail[❌ Regression detected
Create fix task
STOP Pass 1] RegressionPass -->|PASS| P1_Phase5 P1_Phase5[Phase 5: Delegate to
ln-343-manual-tester
Worker tests AC via curl/puppeteer
Creates scripts/tmp_[story_id].sh
Documents in Linear Format v1.0
FAIL FAST THIRD] P1_Phase5 --> ManualTestCheck{Worker verdict:
PASS or
FAIL?} ManualTestCheck -->|FAIL| ManualTestFail[❌ Manual testing failed
Create fix task
STOP Pass 1] ManualTestCheck -->|PASS| P1_Phase6 P1_Phase6[Phase 6: Verdict and Next Steps
All quality gates passed via delegation] P1_Phase6 --> CheckTestTask{Test task
exists?} CheckTestTask -->|Yes & Done| Pass2Entry[Continue to Pass 2] CheckTestTask -->|Yes & NOT Done| ReportStatus[Report test task status
Exit] CheckTestTask -->|NOT exists| InvokeFinalizer[✅ Delegate to ln-350-story-test-planner
via Skill tool
Worker creates test task] InvokeFinalizer --> NextSteps[Next steps:
ln-334-test-executor executes test task
ln-332-task-reviewer reviews
Auto-invoke Pass 2 when Done] NextSteps --> End %% Pass 2 PassCheck -->|Pass 2| Pass2Entry Pass2Entry --> P2_Phase1[Pass 2 Phase 1: Prerequisites Check
Load Story + tasks
Verify test task status = Done
Load test files] P2_Phase1 --> P2_PrereqCheck{Test task
Done?} P2_PrereqCheck -->|No| P2_Error[Error: Test task missing or NOT Done
Exit] P2_PrereqCheck -->|Yes| P2_Phase2 P2_Phase2[Pass 2 Phase 2: Test Verification
All tests pass 2-5 E2E 3-8 Integration
5-15 Unit 10-28 total Priority ≥15
NO performance/load tests
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
Update kanban_board.md
Minimal cleanup] P2_Verdict -->|Fail| CreateFixTasks[Create fix tasks
Story remains current state
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