J128: free at least 5 KB gzip from the deferred JS class without raising the cap (D188) #322

Open
opened 2026-11-03 06:28:53 +00:00 by kayg · 4 comments
Owner

J128: free ≥5 KB gzip from the deferred JS class (D188), no cap raise, nothing into critical

Problem: deferred is nearly full on dev (cap 61,440 B gzip / 55,296 B brotli); J92 is 369 B under, J120 432 B, J73b tight, so every UI branch trips the gate.

Branch perf-deferred-j128, base origin/dev 7add12640.

Plan (estimate 3 h):

  1. Build dev on a VM, attribute deferred bytes per module from the esbuild/bun metafile (chunks.json classes + per-input bytes), post the top 25. (30 min)
  2. Pick candidates not needed in the first ~2 s (and dead code / helpers bundled twice); move to *.on-demand.ts behind thin hooks with idle preload and the latest-position start pattern (J100). Every importer of a moved module must itself be on demand (J106 finding). One atomic commit per move. (1.5 h)
  3. Measure first-use latency of each moved feature in a production build (idle preload done vs. press right after load), before/after table of critical / deferred / on-demand largest chunk. (45 min)
  4. scripts/verify fast, push own branch, comment head SHA + gate output. (45 min)

Out of scope: raising caps, moving anything into critical, new tooling.

**J128: free ≥5 KB gzip from the deferred JS class (D188), no cap raise, nothing into critical** Problem: deferred is nearly full on dev (cap 61,440 B gzip / 55,296 B brotli); J92 is 369 B under, J120 432 B, J73b tight, so every UI branch trips the gate. Branch `perf-deferred-j128`, base `origin/dev` 7add12640. Plan (estimate 3 h): 1. Build dev on a VM, attribute deferred bytes per module from the esbuild/bun metafile (chunks.json classes + per-input bytes), post the top 25. (30 min) 2. Pick candidates not needed in the first ~2 s (and dead code / helpers bundled twice); move to `*.on-demand.ts` behind thin hooks with idle preload and the latest-position start pattern (J100). Every importer of a moved module must itself be on demand (J106 finding). One atomic commit per move. (1.5 h) 3. Measure first-use latency of each moved feature in a production build (idle preload done vs. press right after load), before/after table of critical / deferred / on-demand largest chunk. (45 min) 4. `scripts/verify fast`, push own branch, comment head SHA + gate output. (45 min) Out of scope: raising caps, moving anything into critical, new tooling.
Author
Owner

Start: branch perf-deferred-j128, base origin/dev 7add12640. Plan and estimate (3 h) are in the issue body. First step: per-module attribution of the deferred class from the bundler metafile.

Start: branch `perf-deferred-j128`, base `origin/dev` 7add12640. Plan and estimate (3 h) are in the issue body. First step: per-module attribution of the deferred class from the bundler metafile.
Author
Owner

Finding 1: deferred class per module, dev 7add12640 (production build on compute01; bun run build && bun transfer-budget.ts).

Class totals (gzip): critical 314,939 / 327,680; deferred 59,758 / 61,440 (brotli 52,800 / 55,296); on-demand largest chunk 16,210 / 20,480 (class total 149,640). Deferred = 4 files: chunk-5ps3zgbf 41,609, chunk-nt3hampv 16,668, chunk-n1e9pw11 799, offline.worker 682.

Top 25 deferred modules (est. gzip = the module bytes in its chunk x chunk gzip ratio, from the bundler metafile; identity bytes beside it). No module sits in two chunks, so there is no whole-file duplication; any duplicated helper is inside a file.

deferred chunks gzip total 59758; chunks: chunk-5ps3zgbf.js chunk-n1e9pw11.js chunk-nt3hampv.js offline.worker.js
  3730 gz  10996 id  src/canvas/windows/lifecycle.ts  [chunk-5ps3zgbf.js]
  3598 gz  10607 id  src/canvas/views/world.ts  [chunk-5ps3zgbf.js]
  3003 gz   8854 id  src/canvas/product.ts  [chunk-5ps3zgbf.js]
  2781 gz   8200 id  src/canvas/sessions/live.ts  [chunk-5ps3zgbf.js]
  1882 gz   5148 id  src/canvas/windows/frame.ts  [chunk-nt3hampv.js]
  1833 gz   5403 id  src/canvas/create.ts  [chunk-5ps3zgbf.js]
  1822 gz   4983 id  ../../packages/ui/src/window-resize.ts  [chunk-nt3hampv.js]
  1796 gz   5296 id  src/canvas/toolbar/palette.ts  [chunk-5ps3zgbf.js]
  1796 gz   5295 id  src/canvas/camera/gestures.ts  [chunk-5ps3zgbf.js]
  1726 gz   4720 id  src/canvas/camera/camera.ts  [chunk-nt3hampv.js]
  1695 gz   4996 id  src/canvas/model/journal.ts  [chunk-5ps3zgbf.js]
  1630 gz   4804 id  src/canvas/model/server-store.ts  [chunk-5ps3zgbf.js]
  1509 gz   4127 id  ../../packages/ui/src/window-card.ts  [chunk-nt3hampv.js]
  1411 gz   4160 id  src/canvas/model/operations.ts  [chunk-5ps3zgbf.js]
  1403 gz   4136 id  src/canvas/toolbar/shortcuts.ts  [chunk-5ps3zgbf.js]
  1337 gz   3657 id  ../../packages/ui/src/connection-indicator.ts  [chunk-nt3hampv.js]
  1311 gz   3864 id  src/canvas/model/reducer.ts  [chunk-5ps3zgbf.js]
  1307 gz   3853 id  src/canvas/toolbar/row.ts  [chunk-5ps3zgbf.js]
  1302 gz   3561 id  src/canvas/views/icons.ts  [chunk-nt3hampv.js]
  1192 gz   3515 id  src/canvas/toolbar/pill.ts  [chunk-5ps3zgbf.js]
  1142 gz   3123 id  src/canvas/views/body.ts  [chunk-nt3hampv.js]
  1131 gz   3334 id  src/canvas/toolbar/tree.ts  [chunk-5ps3zgbf.js]
  1101 gz   3245 id  src/canvas/model/reconcile.ts  [chunk-5ps3zgbf.js]
  1027 gz   2808 id  ../../packages/ui/src/inbox.ts  [chunk-nt3hampv.js]
  1013 gz   2986 id  src/canvas/sessions/live-inventory.ts  [chunk-5ps3zgbf.js]
**Finding 1: deferred class per module, dev 7add12640** (production build on compute01; `bun run build && bun transfer-budget.ts`). Class totals (gzip): critical 314,939 / 327,680; deferred 59,758 / 61,440 (brotli 52,800 / 55,296); on-demand largest chunk 16,210 / 20,480 (class total 149,640). Deferred = 4 files: chunk-5ps3zgbf 41,609, chunk-nt3hampv 16,668, chunk-n1e9pw11 799, offline.worker 682. Top 25 deferred modules (est. gzip = the module bytes in its chunk x chunk gzip ratio, from the bundler metafile; identity bytes beside it). No module sits in two chunks, so there is no whole-file duplication; any duplicated helper is inside a file. ``` deferred chunks gzip total 59758; chunks: chunk-5ps3zgbf.js chunk-n1e9pw11.js chunk-nt3hampv.js offline.worker.js 3730 gz 10996 id src/canvas/windows/lifecycle.ts [chunk-5ps3zgbf.js] 3598 gz 10607 id src/canvas/views/world.ts [chunk-5ps3zgbf.js] 3003 gz 8854 id src/canvas/product.ts [chunk-5ps3zgbf.js] 2781 gz 8200 id src/canvas/sessions/live.ts [chunk-5ps3zgbf.js] 1882 gz 5148 id src/canvas/windows/frame.ts [chunk-nt3hampv.js] 1833 gz 5403 id src/canvas/create.ts [chunk-5ps3zgbf.js] 1822 gz 4983 id ../../packages/ui/src/window-resize.ts [chunk-nt3hampv.js] 1796 gz 5296 id src/canvas/toolbar/palette.ts [chunk-5ps3zgbf.js] 1796 gz 5295 id src/canvas/camera/gestures.ts [chunk-5ps3zgbf.js] 1726 gz 4720 id src/canvas/camera/camera.ts [chunk-nt3hampv.js] 1695 gz 4996 id src/canvas/model/journal.ts [chunk-5ps3zgbf.js] 1630 gz 4804 id src/canvas/model/server-store.ts [chunk-5ps3zgbf.js] 1509 gz 4127 id ../../packages/ui/src/window-card.ts [chunk-nt3hampv.js] 1411 gz 4160 id src/canvas/model/operations.ts [chunk-5ps3zgbf.js] 1403 gz 4136 id src/canvas/toolbar/shortcuts.ts [chunk-5ps3zgbf.js] 1337 gz 3657 id ../../packages/ui/src/connection-indicator.ts [chunk-nt3hampv.js] 1311 gz 3864 id src/canvas/model/reducer.ts [chunk-5ps3zgbf.js] 1307 gz 3853 id src/canvas/toolbar/row.ts [chunk-5ps3zgbf.js] 1302 gz 3561 id src/canvas/views/icons.ts [chunk-nt3hampv.js] 1192 gz 3515 id src/canvas/toolbar/pill.ts [chunk-5ps3zgbf.js] 1142 gz 3123 id src/canvas/views/body.ts [chunk-nt3hampv.js] 1131 gz 3334 id src/canvas/toolbar/tree.ts [chunk-5ps3zgbf.js] 1101 gz 3245 id src/canvas/model/reconcile.ts [chunk-5ps3zgbf.js] 1027 gz 2808 id ../../packages/ui/src/inbox.ts [chunk-nt3hampv.js] 1013 gz 2986 id src/canvas/sessions/live-inventory.ts [chunk-5ps3zgbf.js] ```
Author
Owner

Progress (branch perf-deferred-j128, WIP commits pushed; not yet squashed into final messages)

Moved to on-demand chunks, each behind a thin hook, idle preload, first use waits for the chunk and then runs:

  • A windows/split.on-demand.ts: split / new window beside (hook in lifecycle.ts, split-handle.ts; warmed from create.ts)
  • B addhost/authority-control.on-demand.ts (+ the inbox card it alone uses): handle keeps the types and the first check stays 1.2 s after creation
  • C views/view-pointer.on-demand.ts: hover card + drag by label; a tap still flies at once, a drag that began before the module arrived continues from the pointer's latest position
  • D toolbar/palette-rows.on-demand.ts: the palette's rows (open palette is redrawn when they arrive)
  • F addhost/mount.on-demand.ts: the Add host glue in product.ts

Measured per commit, production build on compute01 (gzip, cap 61,440 deferred):
| commit | deferred | critical | on-demand largest |
| dev 7add12640 | 59,758 | 314,939 | 16,210 |
| A split | 59,191 (-567) | 314,948 | 16,209 |
| B authority+inbox | 57,404 (-1,787) | 315,009 | 16,211 |
| C view pointer | 56,453 (-951) | 315,029 | 16,219 |
Critical grows 90 B gzip in total although no module moved into it (per-module diff of the critical class between A, B and C is empty): the new on-demand chunks use shared helpers, so the bundler adds names to the critical chunk's export list. Will report it in the final table.

Not moved, and why: model/journal.ts+operations.ts+reducer.ts (4.4 KB gz): ServerCanvasStore.accept() applies remote layout events through them in order and current() is synchronous, so loading them later would make event ordering asynchronous in the D312 sync path. memory.ts, camera.ts, window-card.ts, frame.ts: per-frame or per-window, needed at first paint.

Next: D and F numbers, browser specs for the touched features, first-use latencies.

**Progress (branch `perf-deferred-j128`, WIP commits pushed; not yet squashed into final messages)** Moved to on-demand chunks, each behind a thin hook, idle preload, first use waits for the chunk and then runs: - A `windows/split.on-demand.ts`: split / new window beside (hook in `lifecycle.ts`, `split-handle.ts`; warmed from `create.ts`) - B `addhost/authority-control.on-demand.ts` (+ the inbox card it alone uses): handle keeps the types and the first check stays 1.2 s after creation - C `views/view-pointer.on-demand.ts`: hover card + drag by label; a tap still flies at once, a drag that began before the module arrived continues from the pointer's latest position - D `toolbar/palette-rows.on-demand.ts`: the palette's rows (open palette is redrawn when they arrive) - F `addhost/mount.on-demand.ts`: the Add host glue in product.ts Measured per commit, production build on compute01 (gzip, cap 61,440 deferred): | commit | deferred | critical | on-demand largest | | dev 7add12640 | 59,758 | 314,939 | 16,210 | | A split | 59,191 (-567) | 314,948 | 16,209 | | B authority+inbox | 57,404 (-1,787) | 315,009 | 16,211 | | C view pointer | 56,453 (-951) | 315,029 | 16,219 | Critical grows 90 B gzip in total although no module moved into it (per-module diff of the critical class between A, B and C is empty): the new on-demand chunks use shared helpers, so the bundler adds names to the critical chunk's export list. Will report it in the final table. Not moved, and why: `model/journal.ts`+`operations.ts`+`reducer.ts` (4.4 KB gz): `ServerCanvasStore.accept()` applies remote layout events through them in order and `current()` is synchronous, so loading them later would make event ordering asynchronous in the D312 sync path. `memory.ts`, `camera.ts`, `window-card.ts`, `frame.ts`: per-frame or per-window, needed at first paint. Next: D and F numbers, browser specs for the touched features, first-use latencies.
Author
Owner

Finish: head 74d5752387d89b56e3510bd7731f86564fe0f8f3 (branch perf-deferred-j128, base origin/dev 7add12640, 6 commits, tree f4cec2e46e). Pushed, not merged.

Result: the deferred class is 53,992 B gzip / 48,120 B brotli, down 5,765 / 4,713 B (cap 61,440 / 55,296). Nothing moved into critical (see the note under the table).

dev 7add12640 this head change
critical, gzip / brotli (cap 327,680 / 273,408) 314,925 / 262,751 315,040 / 262,740 +115 / -11
deferred, gzip / brotli (cap 61,440 / 55,296) 59,757 / 52,833 53,992 / 48,120 -5,765 / -4,713
on-demand largest chunk, gzip / brotli (cap 20,480 / 18,432) 16,212 / 14,423 16,219 / 14,375 +7 / -48

Per commit, deferred gzip (each measured on its own tree): A split 59,195 (-562), B authority + inbox 57,404 (-1,791), C view hover card + label drag 56,488 (-916), D palette rows 54,791 (-1,697), F Add host glue 53,979 (-812).
Critical grew 115 B gzip (311 B identity) although no module entered the critical class: a per-module diff of that class between dev and the head is a few bytes either way (net -13 B in tooltip.ts, +1..+3 B elsewhere). The 6 new chunks import shared helpers by name and the bundler adds those names to the shared chunks' export lists. Brotli critical is 11 B lower. Reported, not hidden; kayg may want to decide whether +115 B gzip on critical is acceptable. I did not find a way to avoid it short of not moving the code.

Gotcha (J106's finding, hit again): my first build of the palette commit moved the whole canvas into the critical class (critical 335,274 B, deferred 36,967 B): view-pointer.on-demand imported palette-rows.on-demand statically while palette.ts fetched it dynamically. Fixed by putting the two row lists they share in a plain module (toolbar/view-windows.ts) that only on-demand code imports. Every importer of an on-demand module is on demand.

First-use latency (browser test test/on-demand-first-use.spec.ts, production build of the preview app on compute01, 300 ms round trip from the latency proxy, VM load 3-14; the module's response is held back, the action is done, then the transfer starts):

feature before the module arrives after
split / new window beside nothing happens on its own; the split lands 362 ms after the transfer starts (one round trip + 60 ms) same task as the key press: clusters-keyboard-split.spec finds the window in the next frame
palette rows an open palette shows its other rows, then gets the canvas rows 368 ms / 417 ms after the transfer starts (two runs), selection kept rows are there on open
view label tap flies to the view at once, no wait same
view label drag continues from the pointer's latest position when the module arrives; ends on the grid where the pointer let go, no jump (moved 120, -2040 in the test) same task
view hover card no card until the module is in; the pointer still over the label then gets it (this was a failure in clusters.spec and is fixed) immediate
lock on host connections the first status check keeps its 1.2 s after creation same
Add host tap waits for the glue, or shows the existing "couldn't load" toast immediate
Idle preload, on the same loaded VM: the page asks for the modules when the canvas is up (about 5.0 s after navigation start there) and they arrive 0.3 s (palette rows) to 1.5 s (split) later. So in that first fraction of a second an action waits about one round trip, and never afterwards; this is the J100 pattern. Keys, clicks and taps are never dropped (TASTE "Input is never blocked").

Not moved, and why

  • model/journal.ts + operations.ts + reducer.ts (4.4 KB gz): ServerCanvasStore.accept() applies remote layout events through them in order and current() is synchronous; loading them later would make that ordering asynchronous in the D312 sync path. Not worth the risk in a size job.
  • memory.ts, camera.ts, window-card.ts, frame.ts: per frame or per window, needed at first paint.
  • sessions/startup-hints.ts (0.6 KB net): its state is read synchronously by Settings and it has its own test; left for a later round.
    No module appears in two chunks, so there is no whole-file duplication. Dead code removed: ViewsModule.dragging() (no caller) and a duplicate ACTION_UNLOCK.

Browser specs on this head (compute01, the specs of the touched features, 151 tests): 150 pass, 1 fails: clusters-keyboard-split "holding the key adds no work" (5 stray late frames, limit 4) at VM load average 12.7 on 10 cores. Alternating branch/base runs at the same load: branch clean 9 of 9; base failed 2 of 3 in the one loaded round. Load flake, same on dev. An earlier full run (205 of 206) had one sessions-canvas fetch-count miss that passes 7 of 7 alone with no late script; the two warm-ups with 3 s timeouts now use 1 s.

Gate (dev-02, scripts/verify fast, verbatim excerpt from the log):

| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| SSH runtime test helper   | PASS         |
| real-binary fixture paths | PASS         |
| test                      | PASS         |
| SSH inode reuse fixture   | PASS         |
| shim process-per-user     | PASS         |
| cargo-deny                | PASS         |
| gate architecture         | PASS         |
| static builds             | PASS         |
JavaScript transfer, critical: identity=1010895 gzip=315040/327680 brotli=262740/273408 bytes
JavaScript transfer, deferred: identity=151495 gzip=53992/61440 brotli=48120/55296 bytes
JavaScript transfer, onDemand: identity=402431 gzip=159430/20480 brotli=141834/18432 bytes
JavaScript transfer, onDemand largest chunk chunk-e2s7jf8w.js: gzip=16219/20480 brotli=14375/18432 bytes (class total gzip=159430 brotli=141834, not limited)
Font transfer: monaspace-neon=84340/88064 cascadia-code=85008/88064 jetbrains-mono=70384/75776 symbols=223748/235520 ibm-plex-mono=41344/45056 geist-mono=41364/45056 source-code-pro=46484/49152 maple-mono-nf=99876/106496 (critical 46432/51200) commit-mono=71812/75776 fira-code=36756/40960 bytes
 578 pass  0 fail Ran 578 tests across 91 files. [7.30s]  108 pass  0 fail Ran 108 tests across 15 files. [76.00ms]  17 pass  0 fail Ran 17 tests across 4 files. [100.00ms]  48 pass  0 fail Ran 48 tests across 12 files. [3.06s] 
VERIFY_EXIT=0

Static builds row PASS. Cleaned up: Rust target dir removed (below).

**Finish: head `74d5752387d89b56e3510bd7731f86564fe0f8f3`** (branch `perf-deferred-j128`, base `origin/dev` 7add12640, 6 commits, tree f4cec2e46e87). Pushed, not merged. Result: the deferred class is **53,992 B gzip / 48,120 B brotli, down 5,765 / 4,713 B** (cap 61,440 / 55,296). Nothing moved into critical (see the note under the table). | | dev 7add12640 | this head | change | |---|---|---|---| | critical, gzip / brotli (cap 327,680 / 273,408) | 314,925 / 262,751 | 315,040 / 262,740 | +115 / -11 | | deferred, gzip / brotli (cap 61,440 / 55,296) | 59,757 / 52,833 | 53,992 / 48,120 | -5,765 / -4,713 | | on-demand largest chunk, gzip / brotli (cap 20,480 / 18,432) | 16,212 / 14,423 | 16,219 / 14,375 | +7 / -48 | Per commit, deferred gzip (each measured on its own tree): A split 59,195 (-562), B authority + inbox 57,404 (-1,791), C view hover card + label drag 56,488 (-916), D palette rows 54,791 (-1,697), F Add host glue 53,979 (-812). Critical grew 115 B gzip (311 B identity) although no module entered the critical class: a per-module diff of that class between dev and the head is a few bytes either way (net -13 B in tooltip.ts, +1..+3 B elsewhere). The 6 new chunks import shared helpers by name and the bundler adds those names to the shared chunks' export lists. Brotli critical is 11 B lower. Reported, not hidden; kayg may want to decide whether +115 B gzip on critical is acceptable. I did not find a way to avoid it short of not moving the code. **Gotcha (J106's finding, hit again):** my first build of the palette commit moved the whole canvas into the critical class (critical 335,274 B, deferred 36,967 B): `view-pointer.on-demand` imported `palette-rows.on-demand` statically while `palette.ts` fetched it dynamically. Fixed by putting the two row lists they share in a plain module (`toolbar/view-windows.ts`) that only on-demand code imports. Every importer of an on-demand module is on demand. **First-use latency** (browser test `test/on-demand-first-use.spec.ts`, production build of the preview app on compute01, 300 ms round trip from the latency proxy, VM load 3-14; the module's response is held back, the action is done, then the transfer starts): | feature | before the module arrives | after | |---|---|---| | split / new window beside | nothing happens on its own; the split lands **362 ms** after the transfer starts (one round trip + 60 ms) | same task as the key press: clusters-keyboard-split.spec finds the window in the next frame | | palette rows | an open palette shows its other rows, then gets the canvas rows **368 ms / 417 ms** after the transfer starts (two runs), selection kept | rows are there on open | | view label tap | flies to the view at once, no wait | same | | view label drag | continues from the pointer's latest position when the module arrives; ends on the grid where the pointer let go, no jump (moved 120, -2040 in the test) | same task | | view hover card | no card until the module is in; the pointer still over the label then gets it (this was a failure in clusters.spec and is fixed) | immediate | | lock on host connections | the first status check keeps its 1.2 s after creation | same | | Add host | tap waits for the glue, or shows the existing "couldn't load" toast | immediate | Idle preload, on the same loaded VM: the page asks for the modules when the canvas is up (about 5.0 s after navigation start there) and they arrive 0.3 s (palette rows) to 1.5 s (split) later. So in that first fraction of a second an action waits about one round trip, and never afterwards; this is the J100 pattern. Keys, clicks and taps are never dropped (TASTE "Input is never blocked"). **Not moved, and why** - `model/journal.ts` + `operations.ts` + `reducer.ts` (4.4 KB gz): `ServerCanvasStore.accept()` applies remote layout events through them in order and `current()` is synchronous; loading them later would make that ordering asynchronous in the D312 sync path. Not worth the risk in a size job. - `memory.ts`, `camera.ts`, `window-card.ts`, `frame.ts`: per frame or per window, needed at first paint. - `sessions/startup-hints.ts` (0.6 KB net): its state is read synchronously by Settings and it has its own test; left for a later round. No module appears in two chunks, so there is no whole-file duplication. Dead code removed: `ViewsModule.dragging()` (no caller) and a duplicate `ACTION_UNLOCK`. **Browser specs on this head** (compute01, the specs of the touched features, 151 tests): 150 pass, 1 fails: `clusters-keyboard-split` "holding the key adds no work" (5 stray late frames, limit 4) at VM load average 12.7 on 10 cores. Alternating branch/base runs at the same load: branch clean 9 of 9; base failed 2 of 3 in the one loaded round. Load flake, same on dev. An earlier full run (205 of 206) had one `sessions-canvas` fetch-count miss that passes 7 of 7 alone with no late script; the two warm-ups with 3 s timeouts now use 1 s. **Gate** (dev-02, `scripts/verify fast`, verbatim excerpt from the log): ``` | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | SSH runtime test helper | PASS | | real-binary fixture paths | PASS | | test | PASS | | SSH inode reuse fixture | PASS | | shim process-per-user | PASS | | cargo-deny | PASS | | gate architecture | PASS | | static builds | PASS | JavaScript transfer, critical: identity=1010895 gzip=315040/327680 brotli=262740/273408 bytes JavaScript transfer, deferred: identity=151495 gzip=53992/61440 brotli=48120/55296 bytes JavaScript transfer, onDemand: identity=402431 gzip=159430/20480 brotli=141834/18432 bytes JavaScript transfer, onDemand largest chunk chunk-e2s7jf8w.js: gzip=16219/20480 brotli=14375/18432 bytes (class total gzip=159430 brotli=141834, not limited) Font transfer: monaspace-neon=84340/88064 cascadia-code=85008/88064 jetbrains-mono=70384/75776 symbols=223748/235520 ibm-plex-mono=41344/45056 geist-mono=41364/45056 source-code-pro=46484/49152 maple-mono-nf=99876/106496 (critical 46432/51200) commit-mono=71812/75776 fira-code=36756/40960 bytes 578 pass 0 fail Ran 578 tests across 91 files. [7.30s] 108 pass 0 fail Ran 108 tests across 15 files. [76.00ms] 17 pass 0 fail Ran 17 tests across 4 files. [100.00ms] 48 pass 0 fail Ran 48 tests across 12 files. [3.06s] VERIFY_EXIT=0 ``` Static builds row PASS. Cleaned up: Rust target dir removed (below).
Sign in to join this conversation.
No labels
launch-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/infraternal#322
No description provided.