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

43 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.