Repository navigation
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
View logs |
aadhar-sh | f809f83 | Aug 12 2026, 02:49 AM |
Wire-size diff vs merge base
Brotli q11, the quality the edge serves. Every number here is deterministic: Client assetsTotal Brotli: 67.49 KiB → 66.13 KiB (-1.36 KiB, -2.0%) across 16 files, 1 changed.
PagesTotal Brotli: 484.87 KiB → 487.05 KiB (+2.18 KiB, +0.4%) across 46 files, 44 changed. No single file moved by 0.13 KiB or more. Plus 44 files under the 0.13 KiB floor, net +2.18 KiB — usually content-hash churn in Worker bundle276.18 KiB → 276.27 KiB gzip (+0.09 KiB, +0.0%) Largest module deltas (raw bytes in bundle):
Dictionary deltas (
|
…e double-counting Two follow-ups to #341 and #345, both found by reading their own wire-size reports against the tree. `nav-run` was already taken by `nav-run.js` in the same STRING_ASSETS map. perf-snapshot merges the top-level copy and the `/a/` copy on the DEHASHED filename, so a base that does not match its file never merges and every byte is counted twice. #341's table read **+4.82 KiB across 22 files** for a change that takes 1.28 KiB off the critical path. base tracks the file now, and the js/css pairs sharing a stem are told apart by extension inside `hashedFor`. 19 files, and each sheet appears once. through a `data-favicon` attribute on each taskbar pin. The attribute rides all 46 pages so that 11 of them can read one, and `setFavicon()` still applied it after boot, so a section page painted one icon and swapped to another. The document declares it instead. `SECTION_FAVICONS` is projected into lib/desktop.js beside DESKTOP_CHROME, lunaPage reads its own route, and the four section routes outside lunaPage (/writing, /serendipity, /coffee, /terminal) state it themselves. /pixel-peeper had no head icon at all and relied entirely on the script, which is the fragility this removes. Anything that is not a section keeps /favicon.ico. `setFavicon()` and every `data-favicon` are gone. Unruled, the tiles inherited the static-assets default of `max-age=0, must-revalidate` (verified against the comparable /icons.svg in production), so every section page view spent a 304 on an icon that changes about never. 30 days, matching /og/, the other generated-but-unhashed image tier. Not `immutable`, because these are not content-addressed. | | #341 + #345 | with these fixes | |---|--:|--:| | client assets | +4.82 KiB / 22 files | **+0.30 KiB / 19 files** | | pages | +2.18 KiB | **-0.19 KiB** | | dictionary deltas (`pd/`) | +6.52 KiB | **+0.09 KiB** | luna.css -1.45 KiB and nav.js -1.29 KiB off the render-blocking path; the three sheets (3.05 KiB) move behind first interaction. A contract test asserts the three ways this regresses: a pin carrying favicon data again, nav.js setting an icon again, and a TASKBAR route whose tile is missing from disk. Both negative controls were run and fail.
…e double-counting (#346) * perf: compile section favicon assets * perf: put a section's favicon in its own head, and stop the size table double-counting Two follow-ups to #341 and #345, both found by reading their own wire-size reports against the tree. `nav-run` was already taken by `nav-run.js` in the same STRING_ASSETS map. perf-snapshot merges the top-level copy and the `/a/` copy on the DEHASHED filename, so a base that does not match its file never merges and every byte is counted twice. #341's table read **+4.82 KiB across 22 files** for a change that takes 1.28 KiB off the critical path. base tracks the file now, and the js/css pairs sharing a stem are told apart by extension inside `hashedFor`. 19 files, and each sheet appears once. through a `data-favicon` attribute on each taskbar pin. The attribute rides all 46 pages so that 11 of them can read one, and `setFavicon()` still applied it after boot, so a section page painted one icon and swapped to another. The document declares it instead. `SECTION_FAVICONS` is projected into lib/desktop.js beside DESKTOP_CHROME, lunaPage reads its own route, and the four section routes outside lunaPage (/writing, /serendipity, /coffee, /terminal) state it themselves. /pixel-peeper had no head icon at all and relied entirely on the script, which is the fragility this removes. Anything that is not a section keeps /favicon.ico. `setFavicon()` and every `data-favicon` are gone. Unruled, the tiles inherited the static-assets default of `max-age=0, must-revalidate` (verified against the comparable /icons.svg in production), so every section page view spent a 304 on an icon that changes about never. 30 days, matching /og/, the other generated-but-unhashed image tier. Not `immutable`, because these are not content-addressed. | | #341 + #345 | with these fixes | |---|--:|--:| | client assets | +4.82 KiB / 22 files | **+0.30 KiB / 19 files** | | pages | +2.18 KiB | **-0.19 KiB** | | dictionary deltas (`pd/`) | +6.52 KiB | **+0.09 KiB** | luna.css -1.45 KiB and nav.js -1.29 KiB off the render-blocking path; the three sheets (3.05 KiB) move behind first interaction. A contract test asserts the three ways this regresses: a pin carrying favicon data again, nav.js setting an icon again, and a TASKBAR route whose tile is missing from disk. Both negative controls were run and fail. --------- Co-authored-by: Aadharsh Pannirselvam <19518661+oddharsh@users.noreply.github.com>
|
This reads "closed" rather than "merged" for a mechanical reason: The work is all there. Two things changed on the way in, both in #346:
Routing this through #346 rather than merging here first was about the window between the two: this PR alone would have put both of those into production until the follow-up landed. The -1.36 KiB off nav.js, which is what this PR was for, is intact. |
Six PRs shipped today and none of them carried a changelog entry, so the ramp correctly reported "nothing staged" and /updates still ends at v184. These are the two visitor-facing threads in that work. v185 lighter-shell covers #341, #342, #344 and #346 (which carried #345): the first-interaction stylesheets moved off the render-blocking path, the section favicon moved into each page's own head, and the blank Run and Search shells became prebuilt static documents. v186 dictionary-roll covers #348 and #349: the shared-compression dictionary set had been stale since 2026-07-30, and now rolls itself nightly. #343 is deliberately absent. It adds a typecheck project and changes nothing a visitor can observe, and /updates is a changelog rather than a commit log. Co-authored-by: Aadharsh Pannirselvam <19518661+oddharsh@users.noreply.github.com>
What changed
nav.jsWhy
The same icon data was shipped both as generated markup and as JavaScript. Building the small favicon assets once removes that runtime duplication while preserving the section icons and their no-JavaScript behavior.
Impact
nav.jsBrotli size falls from roughly 7.06 KB to 5.67 KB, a reduction of about 20%Validation
git diff --checkpassed