Problem
DiscoveryProgress.tsx at 1,165 lines is a single-file component handling the entire discovery workflow with 40+ state variables.
Current State
- File:
web-ui/src/components/DiscoveryProgress.tsx (~1,165 lines)
- Manages: Idle state, question display, answer input, PRD generation, task generation, restart confirmation
- Contains: Complex phase state machine, progress tracking, error handling
Impact
- Extremely hard to maintain
- State management is tangled
- Testing requires extensive mocking
- Any change risks regression in unrelated parts
Required Decomposition
New Structure
web-ui/src/components/discovery/
├── DiscoveryProgress.tsx # Container/state machine (~300 lines)
├── DiscoveryIdle.tsx # "Start Discovery" prompt
├── DiscoveryQuestion.tsx # Current question display
├── DiscoveryAnswer.tsx # Answer input form
├── DiscoveryPRDGeneration.tsx # PRD generation progress
├── DiscoveryTaskGeneration.tsx # Task generation progress
├── DiscoveryComplete.tsx # Completion state
└── hooks/
└── useDiscoveryState.ts # State management hook
State Flow
DiscoveryProgress (container)
│
├── phase === 'idle' → DiscoveryIdle
├── phase === 'questioning' → DiscoveryQuestion + DiscoveryAnswer
├── phase === 'generating_prd' → DiscoveryPRDGeneration
├── phase === 'generating_tasks' → DiscoveryTaskGeneration
└── phase === 'complete' → DiscoveryComplete
Acceptance Criteria
Committee Report Reference
Frontend Architect flagged as "1,165 lines is a single-file component". UX/UI Designer: "Single section tries to serve 4 different phases."
Problem
DiscoveryProgress.tsxat 1,165 lines is a single-file component handling the entire discovery workflow with 40+ state variables.Current State
web-ui/src/components/DiscoveryProgress.tsx(~1,165 lines)Impact
Required Decomposition
New Structure
State Flow
Acceptance Criteria
Committee Report Reference
Frontend Architect flagged as "1,165 lines is a single-file component". UX/UI Designer: "Single section tries to serve 4 different phases."