Files
ytplayer/plans/phase3-report.md
2026-10-08 04:26:10 +08:00

2.7 KiB
Raw Permalink Blame History

Phase 3 report

Shipped on codex/phase3: plan 895f20a; contract synchronization f804a23; pinned loader 4853c2c; server embedding d98d444; integration 5d6a154; review fixes ccfb7d9 through fab444b; browser verification/results b840505.

The CSP-safe external head loader reads saved appearance before body creation. Modern clients block core plus their active layout/dependencies; Settings loads before switching and saves immediately. Imported settings also report their layout. Shared markup visibility remains eager. Rare features, stats/export and layout scripts load on intent; playlist/settings/service mode/lyrics editor remain in RAM. Idle warming honours Save-Data and shares one six-download pool across tabs. Legacy migration blocks all layouts because old pages cannot report selection. P2P/direct preserve eight-second startup; EQ metadata/DeviceDB stay eager.

Accepted decision: executing groups stay pinned until a playback-guarded user reload. Unexecuted groups use newer cached URLs only with matching core/dependency contracts; otherwise retain N-1, mark reload-required and request the existing Refresh UI banner. Changed contracts block activation. Phase 4 must supply state disposal/handoff before live replacement; app.js splitting remains there.

Verification: 190 frontend/183 server tests, no skips. Chromium/WebKit pass warmed feature first-use with zero network, offline layouts, pre-body selection, Settings search/extensions, Car controls, imported appearance, stale fallback, contract/pinning guards and playback protection. Actual b77938a migration passes both proxy profiles: one user-initiated reload/banner, N-1 tab and offline boot. Both rollback flags pass offline checks.

Reduced one-run LTE, Chromium/WebKit (phase3-final-2026-10-08.json): initial compressed JS/CSS 221,307/274,813 bytes versus reconstructed Phase 0 276,414/338,940 (−19.9%/−18.9%). Historical Phase 0 boot 10,480/3,290 ms becomes 7,193/3,293; warm 419/81; offline 166/84. FCP 1,356/2,467 versus 1,572/1,100: WebKit first paint regresses, so the paint target remains unmet despite bootstrap/preload reordering. Core JS updates transfer 159,905/194,026 bytes; inactive CSS readiness 29,724/28,082, with that CSS downloaded after activation. Warm counters include idle downloads. WebKit still duplicates cold app transfer; repeated medians await Phase 5.

Workers/importScripts/WASM, piano engine and F7 now use hashed URLs; fonts/icons/ webmanifest remain plain and cached (exact matrix in perf/README.md). External piano model downloads remain on request. Owner iPhone checks: installed/offline layouts, feature first-use, update guard/override, locked playback 30 minutes, OPFS/quota coexistence. No deployment.