2.5 KiB
Phase 2 report
Shipped on codex/phase2: plan a1f16f2; incremental sync/playback guards
54a07a0; atomic state, exact hash rejection and retention 5b25cca;
single-tag rollback compatibility bb446c7; migration verification 5d1e5ec;
fail-closed status handling 9240456.
Persistent ytplayer-assets stores verified exact URLs and current/previous
manifests. Downloads resume, use six workers/three attempts, and publish only
complete blocking sets. Activation retains N-1 changed/removed files, prunes
N-2, then deletes legacy caches; quota is logged. All current groups block;
lazy parsing/background warming await Phase 3.
Server gaps addressed: inject ASSET_SYNC and the hashed sync-core import, hash final worker bytes, compress manifest responses while preserving build ETags. ASSET_SYNC=0 selects legacy sync; ASSET_HASHING=0 also selects legacy.
Verification: 168 frontend/181 server tests pass without skips. Chromium/WebKit
migration passes with and without stalls using actual b77938a code: ready:true,
zero legacy refresh downloads, one banner/user-triggered reload, N-1 open tab,
eviction repair, incremental refresh and offline boot. Both rollback flags
pass offline browser checks. Async polling fixes the Playwright harness race.
Accepted legacy exception: b77938a retains its four-second timer after the USER
presses Refresh UI and does not report playback. New pages guard playback,
offer explicit override and post PLAYING; workers defer known-playing requests
and never call skipWaiting during installation.
Final one-run LTE measurements (phase2-final-2026-10-07.json, Chromium/WebKit):
JS updates 155,648/189,354 bytes versus 611,338/680,822; CSS 31,476/30,545 versus
611,476/680,831. Sync fetches changed app/style + index/manifest; fonts/icons transfer
zero bytes. Browser worker checks add overhead: Chromium downloads sw.js twice;
WebKit also downloads the unchanged imported core. Thus total CSS exceeds
30,000 bytes.
Cold bytes: 624,762/1,191,130 versus 1,040,158/1,180,749. Chromium transfers app.js once; WebKit transfers it twice despite HTTP-cache reuse attempts. Cache sharing remains unresolved. Cold boot: 11,155/4,327 ms versus 10,480/3,290; warm: 671/121 versus 692/139; offline: 264/133 versus 259/137. Single-run cold regressions need further investigation; no claim that every performance target was met.
Owner iPhone checks: locked playback, override/cancel, stall recovery, offline launch and OPFS/quota coexistence. No push, merge or deployment.