docs(09): create phase plan — 5 plans in 3 waves for scan cancellation & keyboard shortcuts
This commit is contained in:
1 parent
71c200bc5b
commit
08ff00f029
6 files changed
+1793
-2
No files matched your search
@@ -0,0 +1,164 @@
|
||||
---
|
||||
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: []
|
||||
---
|
||||
|
||||
<objective>
|
||||
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.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@/home/caleb/.config/opencode/get-shit-done/workflows/execute-plan.md
|
||||
@/home/caleb/.config/opencode/get-shit-done/templates/summary.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
@.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
|
||||
</context>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Build verification and automated checks</name>
|
||||
<files></files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>
|
||||
<automated>cd backend && go build ./... && go vet ./... && go test ./... -count=1 -timeout 120s 2>&1 | tail -20</automated>
|
||||
</verify>
|
||||
<done>Full backend + frontend build passes, all existing tests pass, no regressions.</done>
|
||||
</task>
|
||||
|
||||
<task type="checkpoint:human-verify" gate="blocking">
|
||||
<name>Task 2: Human verification of all Phase 9 features</name>
|
||||
<action>Verify all scan control and keyboard shortcut features work end-to-end.</action>
|
||||
<verify>Human confirms all 23 verification steps pass.</verify>
|
||||
<done>All Phase 9 requirements verified: SCAN-01/02/03 and KEY-01/02/03/04/05.</done>
|
||||
<what-built>
|
||||
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
|
||||
</what-built>
|
||||
<how-to-verify>
|
||||
**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
|
||||
</how-to-verify>
|
||||
<resume-signal>Type "approved" or describe any issues found</resume-signal>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<verification>
|
||||
Full build passes. All existing tests pass. Human verification covers all 8 requirement IDs.
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- `go build ./...` and `npx tsc --noEmit` pass
|
||||
- `go test ./...` passes with no regressions
|
||||
- All 23 manual verification steps confirmed by user
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.planning/phases/09-scan-cancellation-keyboard-shortcuts/09-05-SUMMARY.md`
|
||||
</output>
|
||||
Reference in new issue
Block a user