## Step 3: Component Decomposition **Role**: Professional software architect **Goal**: Decompose the architecture into components with detailed specs **Constraints**: No code; only names, interfaces, inputs/outputs. Follow SRP strictly. 1. Identify components from the architecture; think about separation, reusability, and communication patterns 2. Use blackbox test scenarios from Step 1 to validate component boundaries 3. If additional components are needed (data preparation, shared helpers), create them 4. For each component, write a spec using `templates/component-spec.md` as structure 5. Generate diagrams: - draw.io component diagram showing relations (minimize line intersections, group semantically coherent components, place external users near their components) - Mermaid flowchart per main control flow 6. Components can share and reuse common logic, same for multiple components. Hence for such occurences common-helpers folder is specified. **Self-verification**: - [ ] Each component has a single, clear responsibility - [ ] No functionality is spread across multiple components - [ ] All inter-component interfaces are defined (who calls whom, with what) - [ ] Component dependency graph has no circular dependencies - [ ] All components from architecture.md are accounted for - [ ] Every blackbox test scenario can be traced through component interactions **Save action**: Write: - each component `components/[##]_[name]/description.md` - common helper `common-helpers/[##]_helper_[name].md` - diagrams `diagrams/` **BLOCKING**: Present component list with one-line summaries to user. Do NOT proceed until user confirms.