# UI3 final parent verification Branch: feat/ui-settings. Head: c0a6d3df9795d1141ca37d7e14e91dc856abec8f. Base: b14edf12252bd7dc1981bd83e8afcedfc4ee6f79. Rebuild the tab into the seven native searchable sections. Retain Timestamp offset, every row outside the explicit removals, custom saved speeds, volume persistence, and settings transfer/sync behavior. Cache always operates at six hours and its dead preferences retire safely. Full headset mapping fits below the original bundle size. ## Final local results Node 22.23.2; Linux; TMPDIR=/data/home/tmp/podnotes-ui3. Every command uses fnm exec --using 22. - npm run lint: passed. - npm run format:check: passed. - npm run typecheck: passed. - npm run build: passed. - npm run test: 121 files and 2,470 tests passed, with Svelte checks. - npm run test:tooling: 2 files and 13 tests passed. - npm run docs:build: 18 pages built; all 112 legacy fragments resolve. - npm run size: 306,171 raw / 97,536 gzip level 9. Delta vs b14edf12: -5,603 raw / -800 gzip. Gate: 100,000 gzip. - npm run test:e2e: passed on final c0a6d3df: 20 files / 148 tests in 530.82 seconds. The first fresh-vault suite passed 20 files / 148 tests before review fixes. The final run starts from another newly provisioned vault and uses the final production source. See final-full-e2e.log. ## Real Obsidian proof Version 1.14.4, Linux, isolated vault podnotes-feat-ui-settings. Only repository runners drove the app. The shared dev vault and real default profile were not used. - npm run count:writes -- start/report/stop, driven by count-edit.mjs. Same 22 characters entered through CDP Input.insertText. Baseline 22 completed writes. Final count: one completed write after Tab, zero while typing; independently repeated on the final bundle. - The recorder reports intact=true and pluginUnchanged=true, zero failed writes and zero focus recoveries. Disk content is read after Tab and equals UI3/My podcast note.md. - import-lock-runtime.mjs before/after: a real rendered provider dropdown stays disabled on a plugin-store emission during a strict import, then becomes enabled on unlock. - media-review-runtime.mjs before/after: Next in queue chooses B from [A,B] when A is current; a pending chapter response does not move A after A -> B -> A. Local media fixture: Fixtures/Local Fixture.wav, 60 seconds. Chapter endpoint: http://podnotes.test:/chapters.json, served by the probe until completion. - Unavailable Previous chapter: the new committed E2E serves a missing chapter file from a local fixture server, requires a retry, and asserts position 95 remains 95. Earlier live reproduction without the fix sought to 0. - Timestamp preview: changing offset from 3 to 6 updates the displayed 00:00:42 to 00:00:39. Restored min/max attributes are 1 and 75. - Settings popout closure retains a draft on disk. Background visibility has unit coverage only. No claim is made about a real mobile suspension. - Final runtime errors: none reported by dev:errors. ## Visual evidence Whole-tab viewport captures cover desktop and 390 px phone, light and dark, against b14edf12. Paths use full width so defaults fit better. Captures use a newly provisioned vault with default paths. Fixed headers repeat in viewport slices and the last slice overlaps. The comparison is not a claim of a seamless stitched screenshot. The parent's prototype pass compared design/screens/settings-pane-light.png and settings-phone-dark.png plus the baseline native tab. SPEC 9 supplies the row names; native 1.14.4 groups supply the cards and headings. Inline templates keep the existing editing model instead of adding the prototype's Edit modal. Numeric skip inputs preserve arbitrary positive skip lengths. Final screenshots: https://files.bagerbach.com/screenshots-final-la6t24iutix5.html. ## Reviews and mutation proof review-resolution.md records every finding, the chosen correction or deferral, the two-model panel, and principles. dispatch-ledger.json records actual provider/model IDs and terminal status. All eight delegates are stopped with no pending child work. The original implementation ran 24 unit mutations and two real-runtime mutations. Eight refreshed/new mutation runs on the final source failed on concrete assertions, including the renamed retry test, unavailable previous chapter, A -> B -> A activation, import locking, preview refresh, closing a draft, and import winning over a draft. The new queue regressions failed before correction. Results are split into mutations/results-original.tsv and mutations/results.tsv so the historical evidence remains intact. ## Scope, integration and limits No player-controller, view, API or URI implementation changes. Minor adjacent copy fixes cover OPML progress and the renamed timestamp setting in its notice. Verification helpers use the new row names. PLAYBACK_RATES stays in the utility module while #466 is open. Per coordinator direction, whichever PR merges second unifies the player menu import. There is no need to block UI3 on #466. UI4 owns a controller queue-advance action and removal of the ignored FeedRepository.cache member together with the frozen view test callers. The repository never reads that member. An unfinished focused field at whole-app quit/reload can be lost because the existing main-window shutdown refuses late writes. Completed edits, tab closure and popout closure are verified. This limit is disclosed in the PR and its Docs at release list. Delivery: ready PR from feat/ui-settings to master. Runtime cleanup: stop completed; dry run reports pids: none. No fixture server remains.