Files
yellowjacket/.planning/plans/completed/001-v1.0-consolidation.md
T
2026-05-01 11:52:50 -04:00

2.1 KiB

001 — v1.0 Consolidation

Foundation milestone: fixed all SetContext data races, established the test infrastructure, consolidated SQL, and tuned backend + frontend performance so feature work could safely follow.

Shipped: 2026-03-05 · Phases: 1-8

What landed

  • Phase 1 — Concurrency race fixes. Mutex-protected SetContext across queue, library, playlist, player; collapsed Player double-lock. App runs -race-clean.
  • Phase 2 — Backend correctness. startupErr moved to struct field; config files written 0o644; MPRIS callback errors logged; Library.Scan() separates warnings (ScanMetrics) from fatal errors (return value).
  • Phase 3 — Test infrastructure. database.NewTestDB(t) returns an in-memory SQLite with full migrations + production PRAGMAs (synchronous=NORMAL, cache_size=-8000, mmap_size=67108864).
  • Phase 4 — Queue/Config/Player tests. ~30 tests covering SetQueue, navigation, shuffle, repeat modes, persistence, config load/save roundtrip, volume conversion, format detection.
  • Phase 5 — Database/Library tests. ~25 tests covering FTS5 search, search index rebuild, migrations, scan logic, entity cache.
  • Phase 6 — SQL consolidation. 5-table FTS5 JOIN consolidated into the track_metadata VIEW; AST-based event codegen (Go → TypeScript) with pre-commit hook; sqlc.slice() for queue batch lookups; every hand-crafted SQL statement carries a // SAFETY: comment explaining why.
  • Phase 7 — Backend performance. Incremental queue persistence (O(1) add/remove), SetQueue Phase-2 dedup, library store deferred loading.
  • Phase 8 — Frontend performance. Lit repeat() with stable keys; queueMicrotask notification batching; design token system; visual consistency audit across 15 components.

Key decisions retained

  • No cosmetic file splitting — extract only when reuse or correctness demands it.
  • Tests as a means to safe refactoring, not a coverage target.
  • Fix races → tests → refactoring order is mandatory: can't run -race-clean tests with active races; can't safely refactor without tests.