# UI3 review resolution Reviewed baseline: e78a24b6 plus the parent's unavailable-chapter correction. Final code: c0a6d3df. Reviewers read the same frozen source. Parent reproduced and fixed the accepted findings after both returned. No reviewer changed files or drove the runtime. ## Correctness - GPT import lock: accepted. Diarization controls include the import lock in their disabled state; unlock publishes once so newly rendered controls regain their applicability. Real Obsidian before: locked=true, afterStoreEmission=false. After: true/true, then false after unlock. The new unit test failed before and passed after. - GPT delayed chapters: accepted. The existing state subscription counts episode activations. A request from an earlier activation cannot seek after A -> B -> A. Real Obsidian before: 45 -> 59.75 (fixture end margin); after: 45 -> 45. Unit failure before: 45 expected, 60 received. - Both reviewers, current episode at queue head: accepted in scope. Choose the first distinct episode. Move an outgoing queued head to the tail after successful play so repeated presses advance. Both auto-queue settings and an all-current queue are covered. Real before: A remained playing with B queued; after: B plays with A queued. A refused play still leaves the queue untouched. - Parent, unavailable Previous chapter: accepted. Empty or rejected chapter loads return without seeking and allow a retry. Real before: 95 -> 0; after: 95 -> 95. - Claude stale timestamp preview: accepted. Preview subscriptions use the current input text when settings change. A completed offset edit now updates the preview without committing another field. Real before: offset changed but 00:00:45 stayed; after: offset 3 -> 6 updates 00:00:42 -> 00:00:39. A new mutation restores the defect and fails the unit assertion. ## Layout and maintainability - Claude path width: accepted. Path inputs are stacked at full width, matching the existing template layout and exposing more of the default path. Final screenshots use a newly provisioned vault with default paths. - Claude input bounds: accepted. Latest episodes per podcast restores min=1 and max=75. Read from the real DOM after the change. - Claude initial auto-queue callback: accepted. Initialize its subscription before registering onChange. - Claude mutable rate list: accepted. PLAYBACK_RATES is readonly. - No-comments: 42 of the proposed 44 comments removed. Retained defaultVolume's stored-name explanation and the ignored cache constructor member's scope explanation. Platform facts and pragmas remain. Subjective renames and a one-use regex helper were not needed. Chapter constants already name the restart threshold and tolerance in seconds. - Both reviewers, controller ownership of queue advancement: UI4 follow-up. PlayerController is outside this unit's permitted implementation scope. - Both reviewers, ignored cache member and obsolete view test inputs: UI4 follow-up. The repository unconditionally caches; the optional member exists only to keep the frozen view tests compiling. Remove member and callers together. ## Evidence - Re-measured final production bundle: 306,171 raw bytes, 97,536 gzip level 9, 800 gzip bytes below b14edf12. - Re-ran lint, format:check, typecheck, build, test, test:tooling, docs:build and size on the final code. Unit suite: 121 files, 2,470 tests. Tooling: 2 files, 13 tests. Docs: 18 pages and all 112 legacy fragments resolve. - Refreshed the renamed chapter-retry mutation. Added unavailable previous chapter, activation race, import lock, and preview mutations. Eight refreshed/new mutations failed on assertions. The original 24-unit/two-runtime results remain in mutations/results-original.tsv; refreshed results are in mutations/results.tsv. - The first full fresh-vault E2E passed all 148 tests. The second full fresh-vault run also passed all 148 tests on c0a6d3df. - Restored the rendered-heading assertion in the search E2E, with exact section order. - Replaced the port-9 assumption in the unavailable-chapter E2E with a local fixture server returning 404. The test requires a second request, proving the first failed request finished and the retry path ran. - Corrected the decision trail and marked the implementation-owner report historical. Hidden-document completion has synthetic unit coverage. Real evidence covers Settings closure and Settings popout closure, not mobile suspension. - The prototype pixel pass was performed by the parent before review but was absent from the implementation-owner report. SPEC 9 labels take precedence over prototype labels. Native 1.14.4 cards provide settings conventions; tall inline textareas replace the prototype's Edit buttons; number inputs retain arbitrary positive skip lengths. Paths now remain stacked like the prototype and baseline. - Unfinished focused text at whole-app quit/reload can be lost because the existing main-window shutdown refuses late writes. Disclosed in the PR and Docs at release. This does not weaken the verified completed-edit guarantee. ## Dispatch ledger | Task | Provider/model | Result | | --- | --- | --- | | ui3-how-r1 | claudeAgent/claude-opus-5-5 | Native API/runtime and prior art report | | ui3-architect-gpt-r1 | codex_pool/gpt-6-astra | Design candidate | | ui3-architect-claude-r1 | claudeAgent/claude-fable-5-1 | Design candidate | | ui3-architect-crossjudge-r1 | claudeAgent/claude-opus-5-5 | Grafted design | | ui3-implementation-r1 | claudeAgent/claude-opus-5-5 | Exclusive implementation, tests and runtime evidence | | ui3-no-comments-r1 | claudeAgent/claude-opus-5-5 | Comment review | | ui3-interrogate-gpt-r1 | codex_pool/gpt-6-astra | Three correctness warnings and evidence corrections | | ui3-interrogate-claude-r1 | claudeAgent/claude-fable-5-1 | Runtime API audit, layout/preview corrections and evidence review | All tasks are terminal and have no pending child work. Parent owns the final fixes and verification. No fallback or model-family loss was needed. ## Principles and concrete decisions - Subtract Before You Add: measure removal of the aliases and cache controls before adding headset mapping. - Experience First: preserve every retained setting, searchable disabled rows, custom saved speeds and full-width paths. - Migrate Callers Then Delete Legacy APIs: retire cache settings and unused clear(), with the single frozen-test seam explicitly assigned to UI4. - Model the Domain: headset labels determine the action unions; one exhaustive table dispatches them. - Separate Before Serializing Shared State: one exclusive implementation owner and one runtime instance in this worktree; read-only reviews in parallel. - Test Behavior, Not Implementation and Prove It Works: planted defects, actual disk writes, real Media Session handlers, persisted settings, runtime screenshots and fresh-vault suites.