# PM Decision Log

---
### 2026-03-16 — Cloud Browser Category Navigation & Year Parsing

**Request**: Fix non-functional category browsing (artists, genres, years, etc.) in iOS cloud library — tapping items did nothing
**Decision**: Approved — bugs shaped together as one brief
**Appetite**: 2 files max, < 100 lines, existing patterns only
**Scope**: v1 = client-side album filtering on tap, year string cleanup. Deferred: macOS parity, server-side filtered endpoint, search within results
**Handed to**: @builder
**Key tradeoffs**: Client-side filtering of full album list (acceptable for v1, may need API filter if library grows to 10k+ albums). Queue concept was also triaged — confirmed DONE in both apps, checked off bug notes list.

---
### 2026-03-16 — Years Decoding Bug Fix + Full UI Test Suite

**Request**: Fix Years category decode error + write comprehensive UI tests (all 3 phases)
**Decision**: Approved — combined into one builder pass (fix first, tests verify it)
**Appetite**: ~5-6 files changed, ~400 lines new code (tests + infrastructure + accessibility IDs)
**Scope**: Years fix (custom Decodable init), Phase 1 (4 cloud smoke tests), Phase 2 (4 playback/queue tests), Phase 3 (3 mock network tests + MockURLProtocol)
**Handed to**: @builder
**Key tradeoffs**: Mock network via URLProtocol rather than full DI refactor. Phase 1-2 tests require live server; Phase 3 tests are CI-safe. Existing 20 UI tests untouched.

---
### 2026-03-16 — Fix Mock-Network Tests + Builder Test Mandate

**Request**: Fix 2 failing Phase 3 mock-network UI tests + add process rule requiring UI tests in all builder briefs
**Decision**: Approved — combined into one builder pass
**Appetite**: 4-5 files changed, ~30 lines
**Scope**: Mock test fixes (Keychain bypass, state cleanup, accessibility ID conflicts, element type queries) + builder agent prompt update with "UI Test Mandate" section
**Handed to**: @builder
**Key tradeoffs**: Test mandate is advisory for non-UI changes, mandatory for UI changes. Builder can skip tests only if PM brief or user explicitly says so.
