Verify six app seams and record Phase 4 performance measurements

This commit is contained in:
Jonathan Sykes
2026-10-08 05:03:55 +08:00
parent 2c5003575c
commit a7473cbca2
15 changed files with 4263 additions and 12 deletions

View File

@@ -2,7 +2,7 @@
Source: `cd4a25a`, 587,029 bytes. Acorn 8 parses classic scripts with source ranges; eslint-scope 8 resolves lexical references, including shadowing. Outside references are references outside the declaration’s owning top-level statement, plus unresolved references from other frontend classic scripts. Property names and strings are not lexical references. Browser globals and other scripts’ globals remain available. Positions below refer to this source, before extraction.
Reproduce: `npm install --prefix perf/.tmp/analysis --no-audit --no-fund acorn@8 eslint-scope@8`, then run `node perf/analyze-app.cjs`. Analysis tools are development-only; no frontend/server import is added.
Reproduce: `npm install --prefix perf/.tmp/analysis --no-audit --no-fund acorn@8 eslint-scope@8`, then run `node perf/analyze-app.cjs cd4a25a`. Analysis tools are development-only; no frontend/server import is added.
## Measured candidate ranking
@@ -414,3 +414,34 @@ Outside references use app line numbers or `file:line`; imports name other app b
| bootViewFromUrl | 12531 | 391 | view, render, URL_VIEWS | 12625 |
| bootSearchFromUrl | 12545 | 414 | els | 12626 |
| boot | 12563 | 11475 | WEB, APP_VERSION, perfMark, perfMeasure, webFetch, SaveQueue, API, DEFAULT_SETTINGS, data, view, current, abA, abB, cachedIds, downloading, $, els, persist, ProfileSecret, profileHeaders, syncOnLaunch, updateProfileStatus, adoptSharedPlaylistFromUrl, startPlaylistInboxWatch, adoptProfileFromUrl, syncMuteIcon, toast, uid, applyAppearance, refreshCachedIds, startCacheResyncWatch, warmOfflineThumbs, preload, preloadPlaylist, preloadPinnedPlaylists, Player, wirePlayerEvents, updatePlayBtn, Notes, Remote, Transition, CatalogSync, Recommendations, Presenter, Share, EqRender, PiP, EQ, SectionRail, Party, updateBottomChrome, updateQueueBadge, playNext, updateLoopRepeatButtons, playPrev, isServiceModeOpen, renderSidebar, exportToDevice, render, slim, wireShortcutHelp, showModal, closeModal, setupClassicLayout, setupPortraitPwaWatcher, setupViewportAnchorGuard, wireUI, setAbA, setAbB, clearAb, saveAbMarkers, updateAbUI, renderSmartSidebar, checkAutoBackup, checkBuildTag, pollBuildTag, checkUpdateOutcome, registerServiceWorker, bootShareFromUrl, bootViewFromUrl, bootSearchFromUrl | 12734 |
## Final cuts and review
Exactly six seams shipped: 3c9a24a (eager shell/shared renderers), 5fb9564
(Presenter), 8e7fa19 (Remote), 94ea211 (Watch party), 0475a18 (Share/External),
b335f95 (Stats view). 2c50035 handles lazy-entry failures without rejected UI
navigation promises. Final app.js: 408,473 bytes; net removal 178,556 bytes
(30.4169%), including 2,976 bytes of facade/call-site overhead.
Original bytes moved, independently counted from UTF-8 AST source slices:
98,378 eager renderer/shell/rail; 9,492 Presenter; 30,421 Remote;
22,833 Party; 13,334 Share/External; 7,074 Stats view. Published files include
headers/registry wrappers. Shared functions retain classic global lexical access;
new UI definitions evaluate safely before data/$/els/Player initialization.
Self-review against master §6/6b: all new files belong to explicit manifest
groups and legacy SHELL; source JSON matches assets.json; core scripts load first;
required eager features stay parsed. Player, Transition, Wave, EQ/level rendering,
queue, persistence, tracking and sleep bodies have exact source fingerprint tests.
Transport internals move intact; entry button bindings move to core facades to
avoid duplicate listeners. Inbound APIs remain short; synchronous boolean/hooks
never become promises. Boot URL/session triggers remain; no banner/cache-header
rule is changed. Executing groups remain pinned; no disposal/handoff or live
replacement is introduced. Contract/N-1 safeguards remain tested by existing
unit/integration checks.
Deliberately left: Notes/editor, service mode, playlist mutations, persistence,
player/queue/boot, audio watchdogs/EQ/sleep, Gestures, video editor/export glue and
other candidates beyond six seams. Settings paint moves to views-core but remains
eager. Now-playing metadata mutations inside Player stay there to honor the
untouched-playback constraint; their DOM, action paint and mini bar are eager.