--- phase: 09-scan-cancellation-keyboard-shortcuts plan: 05 type: execute wave: 3 depends_on: - 09-01 - 09-02 - 09-03 - 09-04 files_modified: [] autonomous: false requirements: - SCAN-01 - SCAN-02 - SCAN-03 - KEY-01 - KEY-02 - KEY-03 - KEY-04 - KEY-05 must_haves: truths: - "User can start a scan, pause it, resume it, and cancel it — all via buttons in the settings page" - "Cancelled scan does not corrupt the database or delete unvisited files" - "Default keyboard shortcuts work immediately — Space, arrows, S, R, Q, M, N, P, /, Ctrl+F" - "Shortcuts are suppressed when typing in search box (except Escape)" - "User can rebind any shortcut via record-style capture in settings" - "Shortcut conflicts are detected and warned about" - "Shortcut bindings persist across app restart" artifacts: [] key_links: [] --- Verify all Phase 9 features work together end-to-end — scan control and keyboard shortcuts. Purpose: Catch integration issues before marking the phase complete. Output: Verification results and any integration fixes needed. @/home/caleb/.config/opencode/get-shit-done/workflows/execute-plan.md @/home/caleb/.config/opencode/get-shit-done/templates/summary.md @.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md @.planning/phases/09-scan-cancellation-keyboard-shortcuts/09-01-SUMMARY.md @.planning/phases/09-scan-cancellation-keyboard-shortcuts/09-02-SUMMARY.md @.planning/phases/09-scan-cancellation-keyboard-shortcuts/09-03-SUMMARY.md @.planning/phases/09-scan-cancellation-keyboard-shortcuts/09-04-SUMMARY.md Task 1: Build verification and automated checks 1. Run the full build to verify everything compiles: ```bash cd backend && go build ./... cd ../frontend && npx tsc --noEmit ``` 2. Run existing tests to verify no regressions: ```bash cd backend && go test ./... -count=1 -timeout 120s ``` 3. Run go vet on all packages: ```bash cd backend && go vet ./... ``` 4. Verify event sync is up to date: ```bash cd backend && go generate ./events/... git diff --exit-code frontend/src/events.ts ``` 5. Verify the new scan control methods are Wails-bindable (exported, on a bound struct): ```bash grep -n "func (l \*Library) CancelScan\|func (l \*Library) PauseScan\|func (l \*Library) ResumeScan\|func (l \*Library) IsScanActive\|func (l \*Library) IsScanPaused" backend/library/scan_control.go ``` 6. Verify shortcuts config is accessible: ```bash grep -n "func (c \*Config) GetShortcuts\|func (c \*Config) SetShortcut" backend/config/config.go ``` 7. Fix any issues found. cd backend && go build ./... && go vet ./... && go test ./... -count=1 -timeout 120s 2>&1 | tail -20 Full backend + frontend build passes, all existing tests pass, no regressions. Task 2: Human verification of all Phase 9 features Verify all scan control and keyboard shortcut features work end-to-end. Human confirms all 23 verification steps pass. All Phase 9 requirements verified: SCAN-01/02/03 and KEY-01/02/03/04/05. Complete scan cancellation and keyboard shortcuts features: 1. Backend: CancelScan/PauseScan/ResumeScan methods with per-scan context and channel-based pause 2. Frontend scan UI: Pause/Resume/Cancel buttons during scan, cancel confirmation dialog 3. Keyboard shortcuts: 16 default bindings (Space, arrows, S/R/Q/M/N/P, /, Ctrl+F, Ctrl+A, Enter, Delete) 4. Keyboard shortcut settings: Record-style key capture, conflict detection, grouped by category, reset to defaults 5. Config persistence: Shortcuts saved to TOML config file **Scan Control (Settings > Library):** 1. Open Settings, configure a library directory with many audio files 2. Click "Soft Scan" — verify Pause and Cancel buttons appear, progress shows 3. Click "Pause" — verify status says "Scan paused.", button changes to "Resume" 4. Click "Resume" — verify scan continues from where it left off 5. Start another scan, click "Cancel Scan" — verify confirmation dialog appears showing track count 6. Click "Keep X tracks" — verify scan stops, tracks remain in library 7. Start another scan, cancel, click "Discard" — verify scan stops with discard message **Keyboard Shortcuts:** 8. Without any text input focused, press Space — verify play/pause toggles 9. Press Up/Down arrows — verify volume changes 10. Press Left/Right arrows — verify seeking (if a track is playing) 11. Press S — verify shuffle toggles 12. Press R — verify repeat mode cycles 13. Press Q — verify queue panel toggles 14. Press / or Ctrl+F — verify search box gets focus 15. Click inside the search box, type — verify shortcuts do NOT fire while typing 16. Press Escape while in search box — verify search box blurs and shortcuts resume **Shortcut Settings (Settings > Keyboard Shortcuts):** 17. Scroll to Keyboard Shortcuts section — verify shortcuts grouped by Player, Navigation, App 18. Click on a shortcut's key badge (e.g., Space for Play/Pause) — verify it enters "Press a key combo..." mode 19. Press a new key — verify the binding updates 20. Try binding a key that's already used — verify conflict warning appears 21. Click "Overwrite" — verify old binding is cleared and new one is set 22. Click "Reset All to Defaults" — verify all shortcuts return to defaults 23. Restart the app — verify custom bindings persist Type "approved" or describe any issues found Full build passes. All existing tests pass. Human verification covers all 8 requirement IDs. - `go build ./...` and `npx tsc --noEmit` pass - `go test ./...` passes with no regressions - All 23 manual verification steps confirmed by user After completion, create `.planning/phases/09-scan-cancellation-keyboard-shortcuts/09-05-SUMMARY.md`