# Claude Code Requirements for Arpeggiator ## CRITICAL FUNCTIONALITY - DO NOT FORGET ### Armed State System (ESSENTIAL) - **MUST have orange "armed" state** when arpeggiator is playing - When user clicks button during playback: 1. Button turns ORANGE (armed) 2. Change does NOT apply immediately 3. Change waits until pattern end/loop completion 4. At pattern end: orange button turns GREEN (active), previous green turns gray - When arpeggiator is stopped: changes apply immediately (no armed state needed) - **This is critical for live performance** - prevents jarring mid-pattern changes ### Button Layout Requirements - NO horizontal spacing between buttons (buttons touch side-by-side) - Button height should be minimal but readable (16px for 12px font) - 12px bold font for readability - Green for active selection, orange for armed selection, gray for inactive ### GUI Structure - Quadrant layout: Basic Settings (top-left), Channel Distribution (top-right), Pattern Settings (bottom-left), Timing Settings (bottom-right) - All buttons must be visible without scrollbars - Equal-sized quadrants ## Implementation Notes - Check `self.arpeggiator.is_playing` before applying changes - Use `self.arpeggiator.arm_*()` methods when playing - Connect to `self.arpeggiator.armed_state_changed` signal - Implement `update_armed_states()` to handle orange→green transitions