Repository navigation
fix(size): trace Nightly growth and identify comparison revisions - #7813
Conversation
Quest-Claim: 612438d0efd87abd
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The maintainer accepted the exactly attributed js/net and js/watch growth and kept the 5% daily and 10% thirty-day guards unchanged. Relay archive acceptance and the scheduled Nightly check remain in the quest's Waiting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 34 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Reporter revision labels:
source(row)names the measured commit in the summary and appends the baseline's date and commit to each failure line, falling back to the bare date for older reports withoutrevision. - Revision validation:
compare()now rejects a presentrevisionthat is not a full 40-character lowercase SHA, before history is written. Missing revisions stay accepted, so retained history from before the field was added still loads. - Tests: covers the large-step monthly lifecycle, invalid revision metadata, failed-report retention followed by a passing next day with the 30-day guard still firing, and baseline revision text.
- Docs and quest: README explains daily baseline advancement, the surviving 30-day guard, and how to accept a measured step without resetting history; the quest records the JS acceptance and leaves relay native attribution plus the next scheduled Nightly inspection in
## Waiting.
I replayed the real failed run against the previous run's retained history with the new reporter: exit 1, exactly the nine documented failures, each naming 2026-11-02 [dde50c699f](https://github.com/moq-dev/moq/commit/dde50c699f69507ced243754c2f700a6184d1576), and the summary naming 2026-11-03 [801fd9a2f2](https://github.com/moq-dev/moq/commit/801fd9a2f2f5c88371fa833d805620d97d372465). The real history artifact starts on 2026-10-22 (so no thirty-day anchor), includes the 2026-11-03 point, and every retained row carries a full SHA, so the new validation cannot break the next load. All three size test files pass.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head 6ece0c5. No actionable issue found in revision validation, comparison links, or integration with the size-history collector. Older reports without revision metadata remain supported.
Verification: GitHub-only static inspection of the reporter, tests, collector and Nightly integration. I did not run tests or replay stored artifacts. Native relay attribution on the other platforms and the next scheduled Nightly remain open as noted in the PR.
(Written by review (OpenAI))

Problem
The scheduled 2026-11-03 shipping-size job failed nine 5% comparisons. This PR makes the report identify its current and baseline commits, documents how failed reports advance the daily baseline, and records attribution for the remaining acceptance decisions.
Approach
Measurements
Recorded runs: previous, commit dde50c699f, to failed, commit 801fd9a2f2. Byte counts below are the retained reports and the downloaded shipping archives, not estimates from another platform.
js/net/rawjs/net/gzipjs/watch/rawjs/watch/gzipjs/watch/brotlimoq-relay-aarch64-apple-darwin archivemoq-relay-aarch64-unknown-linux-gnu archivemoq-relay-x86_64-pc-windows-msvc archivemoq-relay-x86_64-unknown-linux-gnu archiveJavaScript: exact attribution
Rebuilt both endpoints with the locked dependencies and the original build/bundle scripts, then every one of the 18 intervening commits touching
js/,package.json, orbun.lock. All 21 endpoint measurements (including unrelated and lazy bundles) reproduce exactly. Intermediate steps build only the measured entries and their workspace dependencies, using the unchanged package build scripts andsh/size/bundles.ts; the final step reproduces all 21 failed-run values exactly too.Byte changes below are per commit, relative to the preceding measured point. 6 intervening commits have zero change in all five failing JS measurements and are omitted. Compressed-size deltas include changes in generated bundle contents and chunk names.
The largest cause is subscription ranges: +17,090 net raw bytes and +17,111 watch raw bytes. The endpoint metafile attributes +9,018 raw bytes to
window.js, +4,874 totrack.js, and +2,767 to the net bundle's lite subscriber. Watch also adds +6,787 raw bytes for stats and feedback. Routing instances, delay bounds, ordered-read correctness and idle stats sampling explain the rest as measured above.Accepted (maintainer, 2026-11-04; see Decisions): the JS step is the measured cost of these retained features and correctness fixes. Reverting range semantics, stats, or route identity to meet a size threshold would undo their consumers. No avoidable added dependency or duplicated copy of these implementations appeared in the metafile. The per-commit table above is the acceptance record the size README asks for; the retained November 3 point is already the next daily baseline, so no tooling change, exemption, or history edit implements it.
Relay: shipping payloads and native attribution
All downloaded binaries have larger code sections. Original executable bytes and code-section sizes:
Code is ELF/PE
.text, or Mach-O__TEXT,__text. The failed binaries on all four targets containrind-0.1.2source paths absent from all previous binaries, including Windows paths normalized from backslashes. This is corroboration of new linked code, not a per-platform commit-cost measurement.The x86_64 Linux
profilingbuilds use the same Rust 1.98.1 as the Linux release artifact. They preserve symbols forcargo bloat --locked --profile profiling -p moq-relay --bin moq-relay --crates -n 0 --message-format json; their sizes are diagnostic and do not replace the shipping archives. Across the recorded endpoints,.textgrows 3,054,848 bytes. Attribution estimates add 2,357,825 bytes ofrind, 415,911 ofrind_rustls, 204,169 ofmoq_net, and 118,853 ofstd. AWS-LC remains at 1,363,342 attributed bytes because transport still uses it. Bloat attributes optimized symbols approximately; those crate counts are not an exact decomposition of compressed bytes.Paired x86_64 Linux profiling builds isolate the auth migration itself:
.textbytesThe single rind-auth commit accounts for 92.6% of the endpoint diagnostic code growth.
moq_netattribution is identical across that pair, while rind and rind-rustls appear. Earlier commits collectively add 208,448 code bytes and later ones another 16,832; they are not individually bisected here. These figures establish the dominant Linux cause, not exact compressed-archive deltas or a full native per-commit decomposition.The rind auth migration deliberately moves standalone moq-auth away from C crypto; a relay still carries AWS-LC for transport, so the intermediate migration ships both. Switching the relay's transport or deleting its supported auth cryptography is a separate API/behavior decision, not a mechanical size fix. The existing transport quest owns moving that stack. Native per-commit macOS, aarch64 Linux, and Windows archive attribution has not been measured here. Both reachable NixOS hosts are x86_64. A macOS measurement needs the pinned Nix toolchain rather than kixtop's ambient Rust 1.97.0, and no listed host runs Windows MSVC. Those historical builds remain work, not claimed results. Recommendation: retain the intended rind auth migration, but keep relay growth acceptance open until the missing native attribution is supplied or the maintainer explicitly accepts this evidence limit. The four actual archive deltas are measured; treating the Linux cause as an exact byte attribution on the other targets would overstate the evidence.
Baseline behavior
report.pywrites history before exiting 1 for threshold failures; Nightly uploads it withif: !cancelled(). The failed run's history actually contains the November 3 point. Therefore the next scheduled run compares daily against that failed point, not the last successful check. The retained history currently starts October 22, so this failure had no thirty-day anchor. Tests demonstrate that an older thirty-day anchor continues to fail after daily advancement, and that a step over 10% clears that guard only when a post-jump point becomes the thirty-day anchor. Recording acceptance does not waive this guard; a large step can keep Nightly red for thirty days. Invalid/missing-artifact reports still write no history. Routine acceptance records the cause and reason in a PR and keeps the retained series; deleting every history artifact is a destructive full reset, not needed here.Impact
Alternatives
Follow-ups
Decisions
Decided 2026-11-04 by the maintainer:
js/netandjs/watch, +5.02–5.28%):This PR lands as a checkpoint. Relay archive acceptance stays open until native per-commit attribution for macOS, aarch64 Linux, and Windows MSVC is supplied (or the maintainer explicitly accepts the evidence limit), and the next scheduled Nightly shipping-size job on main still needs inspection. Both stay in the quest's
## Waiting, so the quest survives this merge.Validation
origin/mainand recording the decisions:nix develop --command quest gate just ci origin/mainpassed every selected module (Biome, Markdown, gh tooling tests, quest, Python, shell, large files, text, TOML, Nix, justfile).python3 sh/size/report.test.py: 13 tests pass;nightly.test.pyandrelease.test.pypass. The thirty-day boundary test checks the large step on day N, N+1, N+29 and N+30 with fixed dates, without wall-clock waits.quest gate. Both JS endpoints and the final intermediate point match all 21 retained measurements exactly.quest check --base origin/main: 601 documents pass.Review
Codex / GPT-6.1 Sol (
gpt-6.1-sol), medium effort,quest review --base origin/main --new, session01a1a550-8a87-7dd2-98d5-dc7f292418ba, round 1. Reviewed head 6ece0c5ed5 against 17a81d6c64: no findings.Earlier rounds (Claude Code / Claude Opus 5.5, medium, head b28b9a5987) fixed the ambiguity about an accepted large step clearing Nightly after one failure, then reported no findings. The new head adds only the
origin/mainmerge and the recorded decisions in the quest.Investigation by GPT-6.1 Sol; recorded decisions,
origin/mainmerge, and review update by Claude Opus 5.5.(Written by Claude Opus 5.5)