From 4950d3e41713c675290fd4b2bdf52580bcfdcc67 Mon Sep 17 00:00:00 2001 From: Jonathan Sykes Date: Thu, 8 Oct 2026 00:21:19 +0800 Subject: [PATCH] Document incremental sync verification and performance gaps --- perf/README.md | 31 + perf/results/phase2-final-2026-10-07.json | 2082 +++++++++++++++++ .../phase2-hashing-rollback-2026-10-07.json | 131 ++ .../phase2-migration-lossy-2026-10-07.json | 41 + ...ase2-migration-unthrottled-2026-10-07.json | 41 + perf/results/phase2-rollback-2026-10-07.json | 131 ++ plans/phase2-report.md | 43 + 7 files changed, 2500 insertions(+) create mode 100644 perf/results/phase2-final-2026-10-07.json create mode 100644 perf/results/phase2-hashing-rollback-2026-10-07.json create mode 100644 perf/results/phase2-migration-lossy-2026-10-07.json create mode 100644 perf/results/phase2-migration-unthrottled-2026-10-07.json create mode 100644 perf/results/phase2-rollback-2026-10-07.json create mode 100644 plans/phase2-report.md diff --git a/perf/README.md b/perf/README.md index 55b3ed0..32a4606 100644 --- a/perf/README.md +++ b/perf/README.md @@ -181,3 +181,34 @@ which receive hashed URLs as HTML scripts. Font preloads retain plain URLs to ma `fonts.css`; the webmanifest and its icon URLs also stay plain and precached. `piano-engine.mjs` is manifested but is historically absent from SHELL; this existing offline piano limitation is deferred to the loader phase. + +## Phase 2 incremental-sync verification + +The current migration harness verifies the production page's own ready fast path +into `ytplayer-assets`: no `__ytpfresh` downloads, no reload before Refresh UI, +one banner/reload, an open N-1 tab, playback guard, incremental refresh after +an eviction, and offline launch. It preserves the legacy user-triggered reload +exception. Async CacheStorage/registration conditions are polled with awaited +`page.evaluate`; Playwright's `waitForFunction` does not poll async predicates. + +```bash +node perf/migration.mjs --browser all --profile lossy +node perf/migration.mjs --browser all --profile unthrottled +node perf/baseline.mjs --runs 1 --browser all --profile lte --scenario all \ + --out perf/results/phase2-final-2026-10-07.json \ + --compare perf/results/after-phase0-2026-10-07.json +ASSET_SYNC=0 node perf/baseline.mjs --runs 1 --browser all --profile lte \ + --scenario offline --out perf/results/phase2-rollback-2026-10-07.json +ASSET_HASHING=0 node perf/baseline.mjs --runs 1 --browser all --profile lte \ + --scenario offline --out perf/results/phase2-hashing-rollback-2026-10-07.json +``` + +Results now include response paths/statuses and compressed response-body bytes +for cold/update runs. The total includes service-worker script checks/imports; +inspect individual responses to distinguish those from app asset downloads. +Migration results are `phase2-migration--2026-10-07.json`. +`ASSET_SYNC=0` selects the legacy path while preserving the persistent utility +cache. `ASSET_HASHING=0` also selects legacy sync because single-tag URLs cannot +pass per-file hash checks. Current assets.json groups all block; idle loading and +lazy parsing await Phase 3. Incremental mode now caches the manifested +`piano-engine.mjs` even though it remains absent from the legacy SHELL. diff --git a/perf/results/phase2-final-2026-10-07.json b/perf/results/phase2-final-2026-10-07.json new file mode 100644 index 0000000..e10f17e --- /dev/null +++ b/perf/results/phase2-final-2026-10-07.json @@ -0,0 +1,2082 @@ +{ + "date": "2026-10-07T16:14:45.518Z", + "commit": "92404563b3291c7986239092981ff0ef5f7a3b2a", + "runsConfigured": 1, + "browsers": { + "chromium": { + "lte": { + "cold": { + "requestCount": { + "median": 102, + "min": 102, + "max": 102, + "values": [ + 102 + ] + }, + "wireBytes": { + "median": 624762, + "min": 624762, + "max": 624762, + "values": [ + 624762 + ] + }, + "fcp": { + "median": 1560, + "min": 1560, + "max": 1560, + "values": [ + 1560 + ] + }, + "lcp": { + "median": 1900, + "min": 1900, + "max": 1900, + "values": [ + 1900 + ] + }, + "domContentLoaded": { + "median": 11037, + "min": 11037, + "max": 11037, + "values": [ + 11037 + ] + }, + "bootDone": { + "median": 11155, + "min": 11155, + "max": 11155, + "values": [ + 11155 + ] + }, + "longTaskTotal": { + "median": 389, + "min": 389, + "max": 389, + "values": [ + 389 + ] + }, + "swInstallDuration": { + "median": 41194, + "min": 41194, + "max": 41194, + "values": [ + 41194 + ] + }, + "swInstallBytes": { + "median": 624762, + "min": 624762, + "max": 624762, + "values": [ + 624762 + ] + }, + "storageEstimate": { + "usage": 3493337, + "quota": 5372202457 + }, + "mediaReady": { + "median": null, + "min": null, + "max": null, + "values": [ + null + ] + }, + "autoplayBlocked": true, + "wireBytesByType": { + "html": 19030, + "js": 275947, + "css": 65750, + "fonts": 254048, + "images": 6278, + "media": 0, + "api": 3078, + "other": 631 + }, + "requests": [ + { + "url": "http://127.0.0.1:5666/?v=benchmedia01", + "status": 200, + "bytes": 9515 + }, + { + "url": "http://127.0.0.1:5666/fonts/BricolageGrotesque-latin.woff2", + "status": 200, + "bytes": 76888 + }, + { + "url": "http://127.0.0.1:5666/fonts/HankenGrotesk-latin.woff2", + "status": 200, + "bytes": 34704 + }, + { + "url": "http://127.0.0.1:5666/styles.css?v=9f3a5dea41", + "status": 200, + "bytes": 27364 + }, + { + "url": "http://127.0.0.1:5666/fonts/fonts.css?v=dda3dfb804", + "status": 200, + "bytes": 391 + }, + { + "url": "http://127.0.0.1:5666/refresh.css?v=62498384f1", + "status": 200, + "bytes": 5027 + }, + { + "url": "http://127.0.0.1:5666/service-ui.css?v=b9bf96a3a8", + "status": 200, + "bytes": 3736 + }, + { + "url": "http://127.0.0.1:5666/theme-glass.css?v=2c482caf77", + "status": 200, + "bytes": 5180 + }, + { + "url": "http://127.0.0.1:5666/theme-classic.css?v=d420fcfb12", + "status": 200, + "bytes": 3529 + }, + { + "url": "http://127.0.0.1:5666/recommendations.css?v=055101368d", + "status": 200, + "bytes": 790 + }, + { + "url": "http://127.0.0.1:5666/settings-sections.css?v=055507ab85", + "status": 200, + "bytes": 873 + }, + { + "url": "http://127.0.0.1:5666/direct-media.css?v=19b8428bfd", + "status": 200, + "bytes": 291 + }, + { + "url": "http://127.0.0.1:5666/lower-third.css?v=031f8e0ead", + "status": 200, + "bytes": 375 + }, + { + "url": "http://127.0.0.1:5666/car-mode.css?v=7d421630b3", + "status": 200, + "bytes": 385 + }, + { + "url": "http://127.0.0.1:5666/offline-pages.css?v=2889456261", + "status": 200, + "bytes": 859 + }, + { + "url": "http://127.0.0.1:5666/saved-page.css?v=3ff576a784", + "status": 200, + "bytes": 537 + }, + { + "url": "http://127.0.0.1:5666/theme-glass-controls.css?v=3354ad9631", + "status": 200, + "bytes": 1480 + }, + { + "url": "http://127.0.0.1:5666/theme-glass-panel.css?v=25aadb0bb7", + "status": 200, + "bytes": 848 + }, + { + "url": "http://127.0.0.1:5666/fullscreen-orientation.css?v=91f2d84453", + "status": 200, + "bytes": 1415 + }, + { + "url": "http://127.0.0.1:5666/related-videos.css?v=5a616b1be8", + "status": 200, + "bytes": 404 + }, + { + "url": "http://127.0.0.1:5666/download-actions.css?v=12d3bcfe3e", + "status": 200, + "bytes": 430 + }, + { + "url": "http://127.0.0.1:5666/theme-bento-hub.css?v=f529dc4bb7", + "status": 200, + "bytes": 6718 + }, + { + "url": "http://127.0.0.1:5666/theme-f7.css?v=02ba226f82", + "status": 200, + "bytes": 4727 + }, + { + "url": "http://127.0.0.1:5666/fingerprint.js?v=a635143269", + "status": 200, + "bytes": 1034 + }, + { + "url": "http://127.0.0.1:5666/fonts/JetBrainsMono-latin.woff2", + "status": 200, + "bytes": 31432 + }, + { + "url": "http://127.0.0.1:5666/opfs.js?v=0922d5004c", + "status": 200, + "bytes": 3905 + }, + { + "url": "http://127.0.0.1:5666/video-edit.js?v=90c5dd1eb6", + "status": 200, + "bytes": 2168 + }, + { + "url": "http://127.0.0.1:5666/lyrics-core.js?v=4dcdac2edd", + "status": 200, + "bytes": 2632 + }, + { + "url": "http://127.0.0.1:5666/lyrics-display.js?v=48e8550175", + "status": 200, + "bytes": 571 + }, + { + "url": "http://127.0.0.1:5666/flag-ui.js?v=eeae1c1d1a", + "status": 200, + "bytes": 2036 + }, + { + "url": "http://127.0.0.1:5666/export.js?v=5b7cdcd7a3", + "status": 200, + "bytes": 1305 + }, + { + "url": "http://127.0.0.1:5666/stats-core.js?v=3de0591d83", + "status": 200, + "bytes": 2336 + }, + { + "url": "http://127.0.0.1:5666/sha256-wasm.js?v=393c50ba56", + "status": 200, + "bytes": 1521 + }, + { + "url": "http://127.0.0.1:5666/sha256.js?v=68566d2e65", + "status": 200, + "bytes": 2718 + }, + { + "url": "http://127.0.0.1:5666/loudness-wasm.js?v=c6102d7844", + "status": 200, + "bytes": 1130 + }, + { + "url": "http://127.0.0.1:5666/loudness.js?v=01b3da88dd", + "status": 200, + "bytes": 1818 + }, + { + "url": "http://127.0.0.1:5666/device-db.js?v=880c5cd70e", + "status": 200, + "bytes": 1050 + }, + { + "url": "http://127.0.0.1:5666/p2p-client.js?v=0c59fc208b", + "status": 200, + "bytes": 3822 + }, + { + "url": "http://127.0.0.1:5666/p2p-core.js?v=168a879219", + "status": 200, + "bytes": 989 + }, + { + "url": "http://127.0.0.1:5666/p2p-transfer.js?v=2186d77fae", + "status": 200, + "bytes": 2420 + }, + { + "url": "http://127.0.0.1:5666/async-guard.js?v=e4afa1f2be", + "status": 200, + "bytes": 725 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 200, + "bytes": 1496 + }, + { + "url": "http://127.0.0.1:5666/sw-update.js?v=0552fc824d", + "status": 200, + "bytes": 4384 + }, + { + "url": "http://127.0.0.1:5666/related-videos.js?v=3eec0ebd4c", + "status": 200, + "bytes": 545 + }, + { + "url": "http://127.0.0.1:5666/audio-continuity.js?v=63b5464dd5", + "status": 200, + "bytes": 583 + }, + { + "url": "http://127.0.0.1:5666/fullscreen-orientation.js?v=c8e44eb66b", + "status": 200, + "bytes": 2494 + }, + { + "url": "http://127.0.0.1:5666/settings-sections.js?v=870249a743", + "status": 200, + "bytes": 2373 + }, + { + "url": "http://127.0.0.1:5666/direct-protocol.js?v=87a73be90f", + "status": 200, + "bytes": 1079 + }, + { + "url": "http://127.0.0.1:5666/direct-stream.js?v=d7f9871605", + "status": 200, + "bytes": 1249 + }, + { + "url": "http://127.0.0.1:5666/direct-media.js?v=5c93a4508c", + "status": 200, + "bytes": 3684 + }, + { + "url": "http://127.0.0.1:5666/download-actions.js?v=388c7edecb", + "status": 200, + "bytes": 550 + }, + { + "url": "http://127.0.0.1:5666/download-errors.js?v=bb6a4c887a", + "status": 200, + "bytes": 727 + }, + { + "url": "http://127.0.0.1:5666/downloads.js?v=f2d3e7d212", + "status": 200, + "bytes": 1764 + }, + { + "url": "http://127.0.0.1:5666/downloads-page.js?v=c1a3a218c0", + "status": 200, + "bytes": 3103 + }, + { + "url": "http://127.0.0.1:5666/saved-page.js?v=f1518c50fb", + "status": 200, + "bytes": 652 + }, + { + "url": "http://127.0.0.1:5666/server-backfill.js?v=294b103023", + "status": 200, + "bytes": 918 + }, + { + "url": "http://127.0.0.1:5666/glass-controls.js?v=a60ed1fe84", + "status": 200, + "bytes": 2763 + }, + { + "url": "http://127.0.0.1:5666/bento-hub.js?v=c867882d7e", + "status": 200, + "bytes": 1294 + }, + { + "url": "http://127.0.0.1:5666/f7-layout.js?v=99c11c557b", + "status": 200, + "bytes": 4138 + }, + { + "url": "http://127.0.0.1:5666/glass-panel-layout.js?v=d5417786d0", + "status": 200, + "bytes": 965 + }, + { + "url": "http://127.0.0.1:5666/party-dj.js?v=1677c38a88", + "status": 200, + "bytes": 1184 + }, + { + "url": "http://127.0.0.1:5666/lyrics-window.js?v=68591e0c78", + "status": 200, + "bytes": 2024 + }, + { + "url": "http://127.0.0.1:5666/midi.js?v=dbecfa74e1", + "status": 200, + "bytes": 1713 + }, + { + "url": "http://127.0.0.1:5666/lower-third.js?v=7705dcbfb4", + "status": 200, + "bytes": 927 + }, + { + "url": "http://127.0.0.1:5666/vocal-reducer.js?v=ddb2fc1bbe", + "status": 200, + "bytes": 1146 + }, + { + "url": "http://127.0.0.1:5666/eq-core.js?v=e9769cb594", + "status": 200, + "bytes": 1341 + }, + { + "url": "http://127.0.0.1:5666/piano-core.js?v=77c8269761", + "status": 200, + "bytes": 756 + }, + { + "url": "http://127.0.0.1:5666/piano.js?v=79b13f0de0", + "status": 200, + "bytes": 3436 + }, + { + "url": "http://127.0.0.1:5666/setlist-import.js?v=13bc5cc4a4", + "status": 200, + "bytes": 2462 + }, + { + "url": "http://127.0.0.1:5666/car-mode.js?v=19f187c23f", + "status": 200, + "bytes": 1678 + }, + { + "url": "http://127.0.0.1:5666/visible-timer.js?v=5322e86ef4", + "status": 200, + "bytes": 380 + }, + { + "url": "http://127.0.0.1:5666/prewarm-next.js?v=ed16a51424", + "status": 200, + "bytes": 567 + }, + { + "url": "http://127.0.0.1:5666/app.js?v=32f243e804", + "status": 200, + "bytes": 129411 + }, + { + "url": "http://127.0.0.1:5666/api/recommendations?fp=c83c12c79b483c87", + "status": 200, + "bytes": 24 + }, + { + "url": "http://127.0.0.1:5666/api/version", + "status": 200, + "bytes": 62 + }, + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 6937 + }, + { + "url": "http://127.0.0.1:5666/api/user/sync", + "status": 200, + "bytes": 11 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 304, + "bytes": 0 + }, + { + "url": "http://127.0.0.1:5666/api/manifest", + "status": 200, + "bytes": 2742 + }, + { + "url": "http://127.0.0.1:5666/direct-recv-worker.js?v=8522cdb44b", + "status": 200, + "bytes": 1012 + }, + { + "url": "http://127.0.0.1:5666/fonts/BricolageGrotesque-latin-ext.woff2", + "status": 200, + "bytes": 30736 + }, + { + "url": "http://127.0.0.1:5666/fonts/HankenGrotesk-latin-ext.woff2", + "status": 200, + "bytes": 19588 + }, + { + "url": "http://127.0.0.1:5666/fonts/JetBrainsMono-latin-ext.woff2", + "status": 200, + "bytes": 11624 + }, + { + "url": "http://127.0.0.1:5666/fonts/PlusJakartaSans-latin-ext.woff2", + "status": 200, + "bytes": 21728 + }, + { + "url": "http://127.0.0.1:5666/fonts/PlusJakartaSans-latin.woff2", + "status": 200, + "bytes": 27348 + }, + { + "url": "http://127.0.0.1:5666/fonts/fonts.css", + "status": 200, + "bytes": 391 + }, + { + "url": "http://127.0.0.1:5666/api/recommendations?fp=c83c12c79b483c87", + "status": 200, + "bytes": 24 + }, + { + "url": "http://127.0.0.1:5666/hash-worker.js?v=a08461a7f6", + "status": 200, + "bytes": 496 + }, + { + "url": "http://127.0.0.1:5666/icons/icon-192.png", + "status": 200, + "bytes": 1669 + }, + { + "url": "http://127.0.0.1:5666/icons/icon-512.png", + "status": 200, + "bytes": 4609 + }, + { + "url": "http://127.0.0.1:5666/index.html?v=33e10c4b2d", + "status": 200, + "bytes": 9515 + }, + { + "url": "http://127.0.0.1:5666/manifest.webmanifest", + "status": 200, + "bytes": 631 + }, + { + "url": "http://127.0.0.1:5666/opfs-worker.js?v=310e7a7385", + "status": 200, + "bytes": 3418 + }, + { + "url": "http://127.0.0.1:5666/p2p-recv-worker.js?v=0a3dd19a05", + "status": 200, + "bytes": 1247 + }, + { + "url": "http://127.0.0.1:5666/piano-engine.mjs?v=2d2f29b38e", + "status": 200, + "bytes": 2580 + }, + { + "url": "http://127.0.0.1:5666/resume-core.js?v=df42e94600", + "status": 200, + "bytes": 762 + }, + { + "url": "http://127.0.0.1:5666/vendor/framework7-swipe.min.js?v=22b954749c", + "status": 200, + "bytes": 38592 + }, + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 6937 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 304, + "bytes": 0 + }, + { + "url": "http://127.0.0.1:5666/api/p2p/config", + "status": 200, + "bytes": 40 + }, + { + "url": "http://127.0.0.1:5666/api/p2p/device", + "status": 200, + "bytes": 121 + }, + { + "url": "http://127.0.0.1:5666/api/p2p/holdings", + "status": 200, + "bytes": 54 + } + ] + }, + "warm": { + "requestCount": { + "median": 4, + "min": 4, + "max": 4, + "values": [ + 4 + ] + }, + "wireBytes": { + "median": 7034, + "min": 7034, + "max": 7034, + "values": [ + 7034 + ] + }, + "fcp": { + "median": 164, + "min": 164, + "max": 164, + "values": [ + 164 + ] + }, + "lcp": { + "median": 164, + "min": 164, + "max": 164, + "values": [ + 164 + ] + }, + "domContentLoaded": { + "median": 555, + "min": 555, + "max": 555, + "values": [ + 555 + ] + }, + "bootDone": { + "median": 671, + "min": 671, + "max": 671, + "values": [ + 671 + ] + }, + "longTaskTotal": { + "median": 143, + "min": 143, + "max": 143, + "values": [ + 143 + ] + } + }, + "offline": { + "requestCount": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "wireBytes": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "fcp": { + "median": 72, + "min": 72, + "max": 72, + "values": [ + 72 + ] + }, + "lcp": { + "median": 72, + "min": 72, + "max": 72, + "values": [ + 72 + ] + }, + "domContentLoaded": { + "median": 242, + "min": 242, + "max": 242, + "values": [ + 242 + ] + }, + "bootDone": { + "median": 264, + "min": 264, + "max": 264, + "values": [ + 264 + ] + }, + "reloadDuration": { + "median": 277, + "min": 277, + "max": 277, + "values": [ + 277 + ] + } + }, + "updateJs": { + "requestCount": { + "median": 7, + "min": 7, + "max": 7, + "values": [ + 7 + ] + }, + "wireBytes": { + "median": 155648, + "min": 155648, + "max": 155648, + "values": [ + 155648 + ] + }, + "duration": { + "median": 913, + "min": 913, + "max": 913, + "values": [ + 913 + ] + }, + "wireBytesByType": { + "html": 9544, + "js": 143296, + "css": 0, + "fonts": 0, + "images": 0, + "media": 0, + "api": 2808, + "other": 0 + }, + "requests": [ + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 6938 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 304, + "bytes": 0 + }, + { + "url": "http://127.0.0.1:5666/api/manifest", + "status": 200, + "bytes": 2746 + }, + { + "url": "http://127.0.0.1:5666/app.js?v=c545283d56", + "status": 200, + "bytes": 129420 + }, + { + "url": "http://127.0.0.1:5666/index.html?v=a6e5c97798", + "status": 200, + "bytes": 9544 + }, + { + "url": "http://127.0.0.1:5666/api/version", + "status": 200, + "bytes": 62 + }, + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 6938 + } + ] + }, + "updateCss": { + "requestCount": { + "median": 7, + "min": 7, + "max": 7, + "values": [ + 7 + ] + }, + "wireBytes": { + "median": 31476, + "min": 31476, + "max": 31476, + "values": [ + 31476 + ] + }, + "duration": { + "median": 213, + "min": 213, + "max": 213, + "values": [ + 213 + ] + }, + "wireBytesByType": { + "html": 9565, + "js": 13878, + "css": 5208, + "fonts": 0, + "images": 0, + "media": 0, + "api": 2825, + "other": 0 + }, + "requests": [ + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 6939 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 304, + "bytes": 0 + }, + { + "url": "http://127.0.0.1:5666/api/manifest", + "status": 200, + "bytes": 2763 + }, + { + "url": "http://127.0.0.1:5666/index.html?v=5b2a5a92bf", + "status": 200, + "bytes": 9565 + }, + { + "url": "http://127.0.0.1:5666/theme-glass.css?v=35bcf15cee", + "status": 200, + "bytes": 5208 + }, + { + "url": "http://127.0.0.1:5666/api/version", + "status": 200, + "bytes": 62 + }, + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 6939 + } + ] + } + } + }, + "webkit": { + "lte": { + "cold": { + "requestCount": { + "median": 171, + "min": 171, + "max": 171, + "values": [ + 171 + ] + }, + "wireBytes": { + "median": 1191130, + "min": 1191130, + "max": 1191130, + "values": [ + 1191130 + ] + }, + "fcp": { + "median": 1188, + "min": 1188, + "max": 1188, + "values": [ + 1188 + ] + }, + "lcp": { + "median": 1369, + "min": 1369, + "max": 1369, + "values": [ + 1369 + ] + }, + "domContentLoaded": { + "median": 4315, + "min": 4315, + "max": 4315, + "values": [ + 4315 + ] + }, + "bootDone": { + "median": 4327, + "min": 4327, + "max": 4327, + "values": [ + 4327 + ] + }, + "longTaskTotal": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "swInstallDuration": { + "median": 34275, + "min": 34275, + "max": 34275, + "values": [ + 34275 + ] + }, + "swInstallBytes": { + "median": 1191130, + "min": 1191130, + "max": 1191130, + "values": [ + 1191130 + ] + }, + "storageEstimate": { + "usage": null, + "quota": null + }, + "mediaReady": { + "median": null, + "min": null, + "max": null, + "values": [ + null + ] + }, + "autoplayBlocked": true, + "wireBytesByType": { + "html": 22994, + "js": 603160, + "css": 156760, + "fonts": 397072, + "images": 6278, + "media": 0, + "api": 3300, + "other": 1566 + }, + "requests": [ + { + "url": "http://127.0.0.1:5666/?v=benchmedia01", + "status": 200, + "bytes": 11497 + }, + { + "url": "http://127.0.0.1:5666/fonts/BricolageGrotesque-latin.woff2", + "status": 200, + "bytes": 76888 + }, + { + "url": "http://127.0.0.1:5666/fonts/HankenGrotesk-latin.woff2", + "status": 200, + "bytes": 34704 + }, + { + "url": "http://127.0.0.1:5666/fonts/fonts.css?v=dda3dfb804", + "status": 200, + "bytes": 457 + }, + { + "url": "http://127.0.0.1:5666/service-ui.css?v=b9bf96a3a8", + "status": 200, + "bytes": 4417 + }, + { + "url": "http://127.0.0.1:5666/refresh.css?v=62498384f1", + "status": 200, + "bytes": 5828 + }, + { + "url": "http://127.0.0.1:5666/styles.css?v=9f3a5dea41", + "status": 200, + "bytes": 33412 + }, + { + "url": "http://127.0.0.1:5666/theme-glass.css?v=35bcf15cee", + "status": 200, + "bytes": 6075 + }, + { + "url": "http://127.0.0.1:5666/theme-classic.css?v=d420fcfb12", + "status": 200, + "bytes": 4079 + }, + { + "url": "http://127.0.0.1:5666/recommendations.css?v=055101368d", + "status": 200, + "bytes": 983 + }, + { + "url": "http://127.0.0.1:5666/settings-sections.css?v=055507ab85", + "status": 200, + "bytes": 1076 + }, + { + "url": "http://127.0.0.1:5666/direct-media.css?v=19b8428bfd", + "status": 200, + "bytes": 370 + }, + { + "url": "http://127.0.0.1:5666/lower-third.css?v=031f8e0ead", + "status": 200, + "bytes": 502 + }, + { + "url": "http://127.0.0.1:5666/car-mode.css?v=7d421630b3", + "status": 200, + "bytes": 504 + }, + { + "url": "http://127.0.0.1:5666/offline-pages.css?v=2889456261", + "status": 200, + "bytes": 1069 + }, + { + "url": "http://127.0.0.1:5666/saved-page.css?v=3ff576a784", + "status": 200, + "bytes": 673 + }, + { + "url": "http://127.0.0.1:5666/theme-glass-controls.css?v=3354ad9631", + "status": 200, + "bytes": 1782 + }, + { + "url": "http://127.0.0.1:5666/theme-glass-panel.css?v=25aadb0bb7", + "status": 200, + "bytes": 1045 + }, + { + "url": "http://127.0.0.1:5666/fullscreen-orientation.css?v=91f2d84453", + "status": 200, + "bytes": 1721 + }, + { + "url": "http://127.0.0.1:5666/related-videos.css?v=5a616b1be8", + "status": 200, + "bytes": 517 + }, + { + "url": "http://127.0.0.1:5666/download-actions.css?v=12d3bcfe3e", + "status": 200, + "bytes": 560 + }, + { + "url": "http://127.0.0.1:5666/theme-bento-hub.css?v=f529dc4bb7", + "status": 200, + "bytes": 7731 + }, + { + "url": "http://127.0.0.1:5666/theme-f7.css?v=02ba226f82", + "status": 200, + "bytes": 5579 + }, + { + "url": "http://127.0.0.1:5666/fingerprint.js?v=a635143269", + "status": 200, + "bytes": 1269 + }, + { + "url": "http://127.0.0.1:5666/opfs.js?v=0922d5004c", + "status": 200, + "bytes": 4553 + }, + { + "url": "http://127.0.0.1:5666/video-edit.js?v=90c5dd1eb6", + "status": 200, + "bytes": 2506 + }, + { + "url": "http://127.0.0.1:5666/lyrics-core.js?v=4dcdac2edd", + "status": 200, + "bytes": 3038 + }, + { + "url": "http://127.0.0.1:5666/lyrics-display.js?v=48e8550175", + "status": 200, + "bytes": 750 + }, + { + "url": "http://127.0.0.1:5666/flag-ui.js?v=eeae1c1d1a", + "status": 200, + "bytes": 2469 + }, + { + "url": "http://127.0.0.1:5666/export.js?v=5b7cdcd7a3", + "status": 200, + "bytes": 1536 + }, + { + "url": "http://127.0.0.1:5666/stats-core.js?v=3de0591d83", + "status": 200, + "bytes": 2619 + }, + { + "url": "http://127.0.0.1:5666/sha256-wasm.js?v=393c50ba56", + "status": 200, + "bytes": 1748 + }, + { + "url": "http://127.0.0.1:5666/sha256.js?v=68566d2e65", + "status": 200, + "bytes": 3187 + }, + { + "url": "http://127.0.0.1:5666/loudness-wasm.js?v=c6102d7844", + "status": 200, + "bytes": 1279 + }, + { + "url": "http://127.0.0.1:5666/loudness.js?v=01b3da88dd", + "status": 200, + "bytes": 2068 + }, + { + "url": "http://127.0.0.1:5666/device-db.js?v=880c5cd70e", + "status": 200, + "bytes": 1230 + }, + { + "url": "http://127.0.0.1:5666/p2p-client.js?v=0c59fc208b", + "status": 200, + "bytes": 4410 + }, + { + "url": "http://127.0.0.1:5666/p2p-core.js?v=168a879219", + "status": 200, + "bytes": 1137 + }, + { + "url": "http://127.0.0.1:5666/p2p-transfer.js?v=2186d77fae", + "status": 200, + "bytes": 2758 + }, + { + "url": "http://127.0.0.1:5666/async-guard.js?v=e4afa1f2be", + "status": 200, + "bytes": 887 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 200, + "bytes": 1742 + }, + { + "url": "http://127.0.0.1:5666/sw-update.js?v=0552fc824d", + "status": 200, + "bytes": 5152 + }, + { + "url": "http://127.0.0.1:5666/related-videos.js?v=3eec0ebd4c", + "status": 200, + "bytes": 642 + }, + { + "url": "http://127.0.0.1:5666/audio-continuity.js?v=63b5464dd5", + "status": 200, + "bytes": 677 + }, + { + "url": "http://127.0.0.1:5666/fullscreen-orientation.js?v=c8e44eb66b", + "status": 200, + "bytes": 2916 + }, + { + "url": "http://127.0.0.1:5666/settings-sections.js?v=870249a743", + "status": 200, + "bytes": 2811 + }, + { + "url": "http://127.0.0.1:5666/direct-protocol.js?v=87a73be90f", + "status": 200, + "bytes": 1245 + }, + { + "url": "http://127.0.0.1:5666/direct-stream.js?v=d7f9871605", + "status": 200, + "bytes": 1457 + }, + { + "url": "http://127.0.0.1:5666/direct-media.js?v=5c93a4508c", + "status": 200, + "bytes": 4232 + }, + { + "url": "http://127.0.0.1:5666/download-actions.js?v=388c7edecb", + "status": 200, + "bytes": 669 + }, + { + "url": "http://127.0.0.1:5666/download-errors.js?v=bb6a4c887a", + "status": 200, + "bytes": 959 + }, + { + "url": "http://127.0.0.1:5666/downloads.js?v=f2d3e7d212", + "status": 200, + "bytes": 2088 + }, + { + "url": "http://127.0.0.1:5666/downloads-page.js?v=c1a3a218c0", + "status": 200, + "bytes": 3642 + }, + { + "url": "http://127.0.0.1:5666/saved-page.js?v=f1518c50fb", + "status": 200, + "bytes": 820 + }, + { + "url": "http://127.0.0.1:5666/server-backfill.js?v=294b103023", + "status": 200, + "bytes": 1105 + }, + { + "url": "http://127.0.0.1:5666/glass-controls.js?v=a60ed1fe84", + "status": 200, + "bytes": 3227 + }, + { + "url": "http://127.0.0.1:5666/bento-hub.js?v=c867882d7e", + "status": 200, + "bytes": 1523 + }, + { + "url": "http://127.0.0.1:5666/f7-layout.js?v=99c11c557b", + "status": 200, + "bytes": 4747 + }, + { + "url": "http://127.0.0.1:5666/glass-panel-layout.js?v=d5417786d0", + "status": 200, + "bytes": 1173 + }, + { + "url": "http://127.0.0.1:5666/party-dj.js?v=1677c38a88", + "status": 200, + "bytes": 1444 + }, + { + "url": "http://127.0.0.1:5666/lyrics-window.js?v=68591e0c78", + "status": 200, + "bytes": 2447 + }, + { + "url": "http://127.0.0.1:5666/midi.js?v=dbecfa74e1", + "status": 200, + "bytes": 2014 + }, + { + "url": "http://127.0.0.1:5666/lower-third.js?v=7705dcbfb4", + "status": 200, + "bytes": 1153 + }, + { + "url": "http://127.0.0.1:5666/vocal-reducer.js?v=ddb2fc1bbe", + "status": 200, + "bytes": 1397 + }, + { + "url": "http://127.0.0.1:5666/eq-core.js?v=e9769cb594", + "status": 200, + "bytes": 1567 + }, + { + "url": "http://127.0.0.1:5666/piano-core.js?v=77c8269761", + "status": 200, + "bytes": 867 + }, + { + "url": "http://127.0.0.1:5666/piano.js?v=79b13f0de0", + "status": 200, + "bytes": 3986 + }, + { + "url": "http://127.0.0.1:5666/setlist-import.js?v=13bc5cc4a4", + "status": 200, + "bytes": 2879 + }, + { + "url": "http://127.0.0.1:5666/car-mode.js?v=19f187c23f", + "status": 200, + "bytes": 2029 + }, + { + "url": "http://127.0.0.1:5666/visible-timer.js?v=5322e86ef4", + "status": 200, + "bytes": 474 + }, + { + "url": "http://127.0.0.1:5666/prewarm-next.js?v=ed16a51424", + "status": 200, + "bytes": 665 + }, + { + "url": "http://127.0.0.1:5666/app.js?v=32f243e804", + "status": 200, + "bytes": 164863 + }, + { + "url": "http://127.0.0.1:5666/fonts/JetBrainsMono-latin.woff2", + "status": 200, + "bytes": 31432 + }, + { + "url": "http://127.0.0.1:5666/manifest.webmanifest", + "status": 200, + "bytes": 783 + }, + { + "url": "http://127.0.0.1:5666/api/recommendations?fp=163577c02a53bc40", + "status": 200, + "bytes": 24 + }, + { + "url": "http://127.0.0.1:5666/api/version", + "status": 200, + "bytes": 62 + }, + { + "url": "http://127.0.0.1:5666/api/user/sync", + "status": 200, + "bytes": 11 + }, + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 8052 + }, + { + "url": "http://127.0.0.1:5666/api/recommendations?fp=163577c02a53bc40", + "status": 200, + "bytes": 24 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 200, + "bytes": 1742 + }, + { + "url": "http://127.0.0.1:5666/api/manifest", + "status": 200, + "bytes": 3179 + }, + { + "url": "http://127.0.0.1:5666/app.js?v=32f243e804", + "status": 200, + "bytes": 164863 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 200, + "bytes": 1742 + }, + { + "url": "http://127.0.0.1:5666/async-guard.js?v=e4afa1f2be", + "status": 200, + "bytes": 887 + }, + { + "url": "http://127.0.0.1:5666/audio-continuity.js?v=63b5464dd5", + "status": 200, + "bytes": 677 + }, + { + "url": "http://127.0.0.1:5666/bento-hub.js?v=c867882d7e", + "status": 200, + "bytes": 1523 + }, + { + "url": "http://127.0.0.1:5666/car-mode.css?v=7d421630b3", + "status": 200, + "bytes": 504 + }, + { + "url": "http://127.0.0.1:5666/car-mode.js?v=19f187c23f", + "status": 200, + "bytes": 2029 + }, + { + "url": "http://127.0.0.1:5666/device-db.js?v=880c5cd70e", + "status": 200, + "bytes": 1230 + }, + { + "url": "http://127.0.0.1:5666/direct-media.css?v=19b8428bfd", + "status": 200, + "bytes": 370 + }, + { + "url": "http://127.0.0.1:5666/direct-media.js?v=5c93a4508c", + "status": 200, + "bytes": 4232 + }, + { + "url": "http://127.0.0.1:5666/direct-protocol.js?v=87a73be90f", + "status": 200, + "bytes": 1245 + }, + { + "url": "http://127.0.0.1:5666/direct-recv-worker.js?v=8522cdb44b", + "status": 200, + "bytes": 1174 + }, + { + "url": "http://127.0.0.1:5666/direct-stream.js?v=d7f9871605", + "status": 200, + "bytes": 1457 + }, + { + "url": "http://127.0.0.1:5666/download-actions.css?v=12d3bcfe3e", + "status": 200, + "bytes": 560 + }, + { + "url": "http://127.0.0.1:5666/download-actions.js?v=388c7edecb", + "status": 200, + "bytes": 669 + }, + { + "url": "http://127.0.0.1:5666/download-errors.js?v=bb6a4c887a", + "status": 200, + "bytes": 959 + }, + { + "url": "http://127.0.0.1:5666/downloads-page.js?v=c1a3a218c0", + "status": 200, + "bytes": 3642 + }, + { + "url": "http://127.0.0.1:5666/downloads.js?v=f2d3e7d212", + "status": 200, + "bytes": 2088 + }, + { + "url": "http://127.0.0.1:5666/eq-core.js?v=e9769cb594", + "status": 200, + "bytes": 1567 + }, + { + "url": "http://127.0.0.1:5666/export.js?v=5b7cdcd7a3", + "status": 200, + "bytes": 1536 + }, + { + "url": "http://127.0.0.1:5666/f7-layout.js?v=99c11c557b", + "status": 200, + "bytes": 4747 + }, + { + "url": "http://127.0.0.1:5666/fingerprint.js?v=a635143269", + "status": 200, + "bytes": 1269 + }, + { + "url": "http://127.0.0.1:5666/flag-ui.js?v=eeae1c1d1a", + "status": 200, + "bytes": 2469 + }, + { + "url": "http://127.0.0.1:5666/fonts/BricolageGrotesque-latin-ext.woff2", + "status": 200, + "bytes": 30736 + }, + { + "url": "http://127.0.0.1:5666/fonts/BricolageGrotesque-latin.woff2", + "status": 200, + "bytes": 76888 + }, + { + "url": "http://127.0.0.1:5666/fonts/HankenGrotesk-latin-ext.woff2", + "status": 200, + "bytes": 19588 + }, + { + "url": "http://127.0.0.1:5666/fonts/HankenGrotesk-latin.woff2", + "status": 200, + "bytes": 34704 + }, + { + "url": "http://127.0.0.1:5666/fonts/JetBrainsMono-latin-ext.woff2", + "status": 200, + "bytes": 11624 + }, + { + "url": "http://127.0.0.1:5666/fonts/JetBrainsMono-latin.woff2", + "status": 200, + "bytes": 31432 + }, + { + "url": "http://127.0.0.1:5666/fonts/PlusJakartaSans-latin-ext.woff2", + "status": 200, + "bytes": 21728 + }, + { + "url": "http://127.0.0.1:5666/fonts/PlusJakartaSans-latin.woff2", + "status": 200, + "bytes": 27348 + }, + { + "url": "http://127.0.0.1:5666/fonts/fonts.css", + "status": 200, + "bytes": 457 + }, + { + "url": "http://127.0.0.1:5666/fullscreen-orientation.css?v=91f2d84453", + "status": 200, + "bytes": 1721 + }, + { + "url": "http://127.0.0.1:5666/fullscreen-orientation.js?v=c8e44eb66b", + "status": 200, + "bytes": 2916 + }, + { + "url": "http://127.0.0.1:5666/glass-controls.js?v=a60ed1fe84", + "status": 200, + "bytes": 3227 + }, + { + "url": "http://127.0.0.1:5666/glass-panel-layout.js?v=d5417786d0", + "status": 200, + "bytes": 1173 + }, + { + "url": "http://127.0.0.1:5666/hash-worker.js?v=a08461a7f6", + "status": 200, + "bytes": 576 + }, + { + "url": "http://127.0.0.1:5666/icons/icon-192.png", + "status": 200, + "bytes": 1669 + }, + { + "url": "http://127.0.0.1:5666/icons/icon-512.png", + "status": 200, + "bytes": 4609 + }, + { + "url": "http://127.0.0.1:5666/index.html?v=5b2a5a92bf", + "status": 200, + "bytes": 11497 + }, + { + "url": "http://127.0.0.1:5666/loudness-wasm.js?v=c6102d7844", + "status": 200, + "bytes": 1279 + }, + { + "url": "http://127.0.0.1:5666/loudness.js?v=01b3da88dd", + "status": 200, + "bytes": 2068 + }, + { + "url": "http://127.0.0.1:5666/lower-third.css?v=031f8e0ead", + "status": 200, + "bytes": 502 + }, + { + "url": "http://127.0.0.1:5666/lower-third.js?v=7705dcbfb4", + "status": 200, + "bytes": 1153 + }, + { + "url": "http://127.0.0.1:5666/lyrics-core.js?v=4dcdac2edd", + "status": 200, + "bytes": 3038 + }, + { + "url": "http://127.0.0.1:5666/lyrics-display.js?v=48e8550175", + "status": 200, + "bytes": 750 + }, + { + "url": "http://127.0.0.1:5666/lyrics-window.js?v=68591e0c78", + "status": 200, + "bytes": 2447 + }, + { + "url": "http://127.0.0.1:5666/manifest.webmanifest", + "status": 200, + "bytes": 783 + }, + { + "url": "http://127.0.0.1:5666/midi.js?v=dbecfa74e1", + "status": 200, + "bytes": 2014 + }, + { + "url": "http://127.0.0.1:5666/offline-pages.css?v=2889456261", + "status": 200, + "bytes": 1069 + }, + { + "url": "http://127.0.0.1:5666/opfs-worker.js?v=310e7a7385", + "status": 200, + "bytes": 3957 + }, + { + "url": "http://127.0.0.1:5666/opfs.js?v=0922d5004c", + "status": 200, + "bytes": 4553 + }, + { + "url": "http://127.0.0.1:5666/p2p-client.js?v=0c59fc208b", + "status": 200, + "bytes": 4410 + }, + { + "url": "http://127.0.0.1:5666/p2p-core.js?v=168a879219", + "status": 200, + "bytes": 1137 + }, + { + "url": "http://127.0.0.1:5666/p2p-recv-worker.js?v=0a3dd19a05", + "status": 200, + "bytes": 1429 + }, + { + "url": "http://127.0.0.1:5666/p2p-transfer.js?v=2186d77fae", + "status": 200, + "bytes": 2758 + }, + { + "url": "http://127.0.0.1:5666/party-dj.js?v=1677c38a88", + "status": 200, + "bytes": 1444 + }, + { + "url": "http://127.0.0.1:5666/piano-core.js?v=77c8269761", + "status": 200, + "bytes": 867 + }, + { + "url": "http://127.0.0.1:5666/piano-engine.mjs?v=2d2f29b38e", + "status": 200, + "bytes": 2580 + }, + { + "url": "http://127.0.0.1:5666/piano.js?v=79b13f0de0", + "status": 200, + "bytes": 3986 + }, + { + "url": "http://127.0.0.1:5666/prewarm-next.js?v=ed16a51424", + "status": 200, + "bytes": 665 + }, + { + "url": "http://127.0.0.1:5666/recommendations.css?v=055101368d", + "status": 200, + "bytes": 983 + }, + { + "url": "http://127.0.0.1:5666/refresh.css?v=62498384f1", + "status": 200, + "bytes": 5828 + }, + { + "url": "http://127.0.0.1:5666/related-videos.css?v=5a616b1be8", + "status": 200, + "bytes": 517 + }, + { + "url": "http://127.0.0.1:5666/related-videos.js?v=3eec0ebd4c", + "status": 200, + "bytes": 642 + }, + { + "url": "http://127.0.0.1:5666/resume-core.js?v=df42e94600", + "status": 200, + "bytes": 915 + }, + { + "url": "http://127.0.0.1:5666/saved-page.css?v=3ff576a784", + "status": 200, + "bytes": 673 + }, + { + "url": "http://127.0.0.1:5666/saved-page.js?v=f1518c50fb", + "status": 200, + "bytes": 820 + }, + { + "url": "http://127.0.0.1:5666/server-backfill.js?v=294b103023", + "status": 200, + "bytes": 1105 + }, + { + "url": "http://127.0.0.1:5666/service-ui.css?v=b9bf96a3a8", + "status": 200, + "bytes": 4417 + }, + { + "url": "http://127.0.0.1:5666/setlist-import.js?v=13bc5cc4a4", + "status": 200, + "bytes": 2879 + }, + { + "url": "http://127.0.0.1:5666/settings-sections.css?v=055507ab85", + "status": 200, + "bytes": 1076 + }, + { + "url": "http://127.0.0.1:5666/settings-sections.js?v=870249a743", + "status": 200, + "bytes": 2811 + }, + { + "url": "http://127.0.0.1:5666/sha256-wasm.js?v=393c50ba56", + "status": 200, + "bytes": 1748 + }, + { + "url": "http://127.0.0.1:5666/sha256.js?v=68566d2e65", + "status": 200, + "bytes": 3187 + }, + { + "url": "http://127.0.0.1:5666/stats-core.js?v=3de0591d83", + "status": 200, + "bytes": 2619 + }, + { + "url": "http://127.0.0.1:5666/styles.css?v=9f3a5dea41", + "status": 200, + "bytes": 33412 + }, + { + "url": "http://127.0.0.1:5666/sw-update.js?v=0552fc824d", + "status": 200, + "bytes": 5152 + }, + { + "url": "http://127.0.0.1:5666/theme-bento-hub.css?v=f529dc4bb7", + "status": 200, + "bytes": 7731 + }, + { + "url": "http://127.0.0.1:5666/theme-classic.css?v=d420fcfb12", + "status": 200, + "bytes": 4079 + }, + { + "url": "http://127.0.0.1:5666/theme-f7.css?v=02ba226f82", + "status": 200, + "bytes": 5579 + }, + { + "url": "http://127.0.0.1:5666/theme-glass-controls.css?v=3354ad9631", + "status": 200, + "bytes": 1782 + }, + { + "url": "http://127.0.0.1:5666/theme-glass-panel.css?v=25aadb0bb7", + "status": 200, + "bytes": 1045 + }, + { + "url": "http://127.0.0.1:5666/theme-glass.css?v=35bcf15cee", + "status": 200, + "bytes": 6075 + }, + { + "url": "http://127.0.0.1:5666/vendor/framework7-swipe.min.js?v=22b954749c", + "status": 200, + "bytes": 44829 + }, + { + "url": "http://127.0.0.1:5666/video-edit.js?v=90c5dd1eb6", + "status": 200, + "bytes": 2506 + }, + { + "url": "http://127.0.0.1:5666/visible-timer.js?v=5322e86ef4", + "status": 200, + "bytes": 474 + }, + { + "url": "http://127.0.0.1:5666/vocal-reducer.js?v=ddb2fc1bbe", + "status": 200, + "bytes": 1397 + }, + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 8052 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 200, + "bytes": 1742 + } + ] + }, + "warm": { + "requestCount": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "wireBytes": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "fcp": { + "median": 101, + "min": 101, + "max": 101, + "values": [ + 101 + ] + }, + "lcp": { + "median": 126, + "min": 126, + "max": 126, + "values": [ + 126 + ] + }, + "domContentLoaded": { + "median": 93, + "min": 93, + "max": 93, + "values": [ + 93 + ] + }, + "bootDone": { + "median": 121, + "min": 121, + "max": 121, + "values": [ + 121 + ] + }, + "longTaskTotal": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + } + }, + "offline": { + "requestCount": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "wireBytes": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "fcp": { + "median": 111, + "min": 111, + "max": 111, + "values": [ + 111 + ] + }, + "lcp": { + "median": 111, + "min": 111, + "max": 111, + "values": [ + 111 + ] + }, + "domContentLoaded": { + "median": 103, + "min": 103, + "max": 103, + "values": [ + 103 + ] + }, + "bootDone": { + "median": 133, + "min": 133, + "max": 133, + "values": [ + 133 + ] + }, + "reloadDuration": { + "median": 140, + "min": 140, + "max": 140, + "values": [ + 140 + ] + } + }, + "updateJs": { + "requestCount": { + "median": 5, + "min": 5, + "max": 5, + "values": [ + 5 + ] + }, + "wireBytes": { + "median": 189354, + "min": 189354, + "max": 189354, + "values": [ + 189354 + ] + }, + "duration": { + "median": 2346, + "min": 2346, + "max": 2346, + "values": [ + 2346 + ] + }, + "wireBytesByType": { + "html": 11499, + "js": 174678, + "css": 0, + "fonts": 0, + "images": 0, + "media": 0, + "api": 3177, + "other": 0 + }, + "requests": [ + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 8051 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 200, + "bytes": 1742 + }, + { + "url": "http://127.0.0.1:5666/api/manifest", + "status": 200, + "bytes": 3177 + }, + { + "url": "http://127.0.0.1:5666/app.js?v=c545283d56", + "status": 200, + "bytes": 164885 + }, + { + "url": "http://127.0.0.1:5666/index.html?v=a6e5c97798", + "status": 200, + "bytes": 11499 + } + ] + }, + "updateCss": { + "requestCount": { + "median": 5, + "min": 5, + "max": 5, + "values": [ + 5 + ] + }, + "wireBytes": { + "median": 30545, + "min": 30545, + "max": 30545, + "values": [ + 30545 + ] + }, + "duration": { + "median": 976, + "min": 976, + "max": 976, + "values": [ + 976 + ] + }, + "wireBytesByType": { + "html": 11497, + "js": 9794, + "css": 6075, + "fonts": 0, + "images": 0, + "media": 0, + "api": 3179, + "other": 0 + }, + "requests": [ + { + "url": "http://127.0.0.1:5666/sw.js", + "status": 200, + "bytes": 8052 + }, + { + "url": "http://127.0.0.1:5666/asset-sync-core.js?v=4e5dd69c40", + "status": 200, + "bytes": 1742 + }, + { + "url": "http://127.0.0.1:5666/api/manifest", + "status": 200, + "bytes": 3179 + }, + { + "url": "http://127.0.0.1:5666/index.html?v=5b2a5a92bf", + "status": 200, + "bytes": 11497 + }, + { + "url": "http://127.0.0.1:5666/theme-glass.css?v=35bcf15cee", + "status": 200, + "bytes": 6075 + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/perf/results/phase2-hashing-rollback-2026-10-07.json b/perf/results/phase2-hashing-rollback-2026-10-07.json new file mode 100644 index 0000000..c9ca140 --- /dev/null +++ b/perf/results/phase2-hashing-rollback-2026-10-07.json @@ -0,0 +1,131 @@ +{ + "date": "2026-10-07T16:00:49.668Z", + "commit": "bb446c717f92ef912f5000ddc757b9d1071120dc", + "runsConfigured": 1, + "browsers": { + "chromium": { + "lte": { + "offline": { + "requestCount": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "wireBytes": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "fcp": { + "median": 76, + "min": 76, + "max": 76, + "values": [ + 76 + ] + }, + "lcp": { + "median": 300, + "min": 300, + "max": 300, + "values": [ + 300 + ] + }, + "domContentLoaded": { + "median": 233, + "min": 233, + "max": 233, + "values": [ + 233 + ] + }, + "bootDone": { + "median": 279, + "min": 279, + "max": 279, + "values": [ + 279 + ] + }, + "reloadDuration": { + "median": 306, + "min": 306, + "max": 306, + "values": [ + 306 + ] + } + } + } + }, + "webkit": { + "lte": { + "offline": { + "requestCount": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "wireBytes": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "fcp": { + "median": 129, + "min": 129, + "max": 129, + "values": [ + 129 + ] + }, + "lcp": { + "median": 158, + "min": 158, + "max": 158, + "values": [ + 158 + ] + }, + "domContentLoaded": { + "median": 117, + "min": 117, + "max": 117, + "values": [ + 117 + ] + }, + "bootDone": { + "median": 153, + "min": 153, + "max": 153, + "values": [ + 153 + ] + }, + "reloadDuration": { + "median": 165, + "min": 165, + "max": 165, + "values": [ + 165 + ] + } + } + } + } + } +} \ No newline at end of file diff --git a/perf/results/phase2-migration-lossy-2026-10-07.json b/perf/results/phase2-migration-lossy-2026-10-07.json new file mode 100644 index 0000000..b96e7c5 --- /dev/null +++ b/perf/results/phase2-migration-lossy-2026-10-07.json @@ -0,0 +1,41 @@ +{ + "commit": "b77938a", + "results": [ + { + "browser": "chromium", + "oldTag": "1175f1a1d2c1", + "newTag": "4f7090fff60c", + "banners": 1, + "updateReloads": 1, + "cachedFiles": 92, + "durationMs": 27514, + "wireBytes": 622009, + "offline": true, + "legacyURLs": 21, + "profile": "lossy", + "userInitiatedOnly": true, + "playbackGuard": true, + "evictionRepair": true, + "incrementalRefresh": true, + "offlineTransportErrors": 0 + }, + { + "browser": "webkit", + "oldTag": "1175f1a1d2c1", + "newTag": "4f7090fff60c", + "banners": 1, + "updateReloads": 1, + "cachedFiles": 92, + "durationMs": 19558, + "wireBytes": 731221, + "offline": true, + "legacyURLs": 21, + "profile": "lossy", + "userInitiatedOnly": true, + "playbackGuard": true, + "evictionRepair": true, + "incrementalRefresh": true, + "offlineTransportErrors": 4 + } + ] +} diff --git a/perf/results/phase2-migration-unthrottled-2026-10-07.json b/perf/results/phase2-migration-unthrottled-2026-10-07.json new file mode 100644 index 0000000..eed1c5e --- /dev/null +++ b/perf/results/phase2-migration-unthrottled-2026-10-07.json @@ -0,0 +1,41 @@ +{ + "commit": "b77938a", + "results": [ + { + "browser": "chromium", + "oldTag": "1175f1a1d2c1", + "newTag": "4f7090fff60c", + "banners": 1, + "updateReloads": 1, + "cachedFiles": 92, + "durationMs": 10811, + "wireBytes": 630657, + "offline": true, + "legacyURLs": 21, + "profile": "unthrottled", + "userInitiatedOnly": true, + "playbackGuard": true, + "evictionRepair": true, + "incrementalRefresh": true, + "offlineTransportErrors": 0 + }, + { + "browser": "webkit", + "oldTag": "1175f1a1d2c1", + "newTag": "4f7090fff60c", + "banners": 1, + "updateReloads": 1, + "cachedFiles": 92, + "durationMs": 9283, + "wireBytes": 744401, + "offline": true, + "legacyURLs": 21, + "profile": "unthrottled", + "userInitiatedOnly": true, + "playbackGuard": true, + "evictionRepair": true, + "incrementalRefresh": true, + "offlineTransportErrors": 4 + } + ] +} diff --git a/perf/results/phase2-rollback-2026-10-07.json b/perf/results/phase2-rollback-2026-10-07.json new file mode 100644 index 0000000..f7c86fb --- /dev/null +++ b/perf/results/phase2-rollback-2026-10-07.json @@ -0,0 +1,131 @@ +{ + "date": "2026-10-07T15:55:07.011Z", + "commit": "54a07a0a2ae1711e441545b208c45c55b3318963", + "runsConfigured": 1, + "browsers": { + "chromium": { + "lte": { + "offline": { + "requestCount": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "wireBytes": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "fcp": { + "median": 72, + "min": 72, + "max": 72, + "values": [ + 72 + ] + }, + "lcp": { + "median": 72, + "min": 72, + "max": 72, + "values": [ + 72 + ] + }, + "domContentLoaded": { + "median": 225, + "min": 225, + "max": 225, + "values": [ + 225 + ] + }, + "bootDone": { + "median": 249, + "min": 249, + "max": 249, + "values": [ + 249 + ] + }, + "reloadDuration": { + "median": 262, + "min": 262, + "max": 262, + "values": [ + 262 + ] + } + } + } + }, + "webkit": { + "lte": { + "offline": { + "requestCount": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "wireBytes": { + "median": 0, + "min": 0, + "max": 0, + "values": [ + 0 + ] + }, + "fcp": { + "median": 109, + "min": 109, + "max": 109, + "values": [ + 109 + ] + }, + "lcp": { + "median": 138, + "min": 138, + "max": 138, + "values": [ + 138 + ] + }, + "domContentLoaded": { + "median": 101, + "min": 101, + "max": 101, + "values": [ + 101 + ] + }, + "bootDone": { + "median": 133, + "min": 133, + "max": 133, + "values": [ + 133 + ] + }, + "reloadDuration": { + "median": 145, + "min": 145, + "max": 145, + "values": [ + 145 + ] + } + } + } + } + } +} \ No newline at end of file diff --git a/plans/phase2-report.md b/plans/phase2-report.md new file mode 100644 index 0000000..07c61fe --- /dev/null +++ b/plans/phase2-report.md @@ -0,0 +1,43 @@ +# 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.