build: the size ratchet is answered — 57,488,000, measured on the platform the number is set from - #726
Draft
AbirAbbas wants to merge 3 commits into
Draft
build: the size ratchet is answered — 57,488,000, measured on the platform the number is set from#726AbirAbbas wants to merge 3 commits into
AbirAbbas wants to merge 3 commits into
Conversation
…ent it #624 was the last merge that weighed in under the cap. By dev@8d8cd6c8 the binary had grown 1,908,736 bytes and crossed a number nobody moved, so `make check` — the ritual CLAUDE.md sends everybody to — stopped at its last step for every change on dev, whatever that change touched. Nobody caused it and nobody could clear it from inside their own work. The first of the two honest moves was looked for and is not there. The range added no dependency; the only embed that grew is the chat manual's own pack, already gzipped and required by the manual law. What is left is compiled first-party code — .text +1,030,464 and .gopclntab +592,718 of the 1,908,736, against +26,203 net non-test lines in internal/tui3 and +13,011 in internal/session. Of the dependencies, the three that weigh anything sit behind the store and behind the JavaScript a saved program is written in; dropping either is a product decision and not a size fix, and taking all of goja and its collation tables would still leave darwin/amd64 over the old cap. So the number rises, with its measurement beside it, which is that section's own standing rule. 57,488,000 is two percent above darwin/amd64 at 56,360,432 — the heaviest of the four platforms, each built with its own furrow staged — the same headroom every figure in that section was given. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Both places a person reads about the budget still said linux/arm64, which stopped being true at #235 — the number has been set on darwin/amd64, the heaviest of the four platforms, since the reset that came down. So the refusal told whoever hit it to reset against an architecture the figure was never taken from, and the nightly line printed the same wrong provenance beside a real measurement. The comment on the informational job said the two numbers "are not comparable". They are comparable and that is the point: linux/amd64 weighs about eight hundred kilobytes less than darwin/amd64, so a hard compare there would pass a tree that is over the cap on the platform the cap is measured on. That is why it stays informational, and the comment now says so. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was true
make check— the end-of-change ritualCLAUDE.mdsends everybody to — stoppedat its last step on
dev, for every change, whatever that change touched:Nobody caused it and nobody could clear it from inside their own work.
#624was the last merge that weighed in under the cap; by
dev@8d8cd6c8the binaryhad grown 1,908,736 bytes and crossed a number nobody moved.
What is true now
SIZE-BUDGETis 57,488,000 — two percent above darwin/amd64 at 56,360,432, theheaviest of the four platforms, which is the headroom every figure in
PERF.md'ssize-ratchet section was given. That section gains the fifth reset in the same
commit as the number, per its own standing rule: the per-merge attribution, what
grew and what did not, and the four-platform table the figure came from.
Nothing a person sees in the running program changes. No manual page moves —
nothing about the running chat changed. No Go file is touched.
The attribution (linux/amd64, Go 1.26.5, each figure a
make build)8d8cd6c8)#653 is 84% of it and crossed the cap by itself. The rest is the ordinary
accretion of twenty-odd merges, none over 120 KB.
The shrink was looked for first, and is not there
PERF.mdnames two honest moves and the first one is unavailable:go.modchange across the range movesgithub.com/rivo/unisegfrom indirect to direct; it was already linked.internal/manual/chat.pack.gz, 707,105 → 782,330 — the manual learning aboutthe features that landed, already gzipped, and required by the manual law.
internal/manual's raw and packed sources are behind mutually exclusive buildtags, so the shipped binary carries the corpus once.
binaries:
.text+1,030,464,.gopclntab+592,718,.rodata+198,176,.noptrdata+75,200, everything else under 7,000 each. The source says thesame: +26,203 net non-test lines in
internal/tui3, +13,011 ininternal/session, +2,509 ininternal/remote, +1,210 incmd/aforge.occupy:
modernc.org/sqlite1,807,889,github.com/dop251/goja1,791,194,golang.org/x/text1,538,848 (of whichx/text/collateis 1,267,813, pulledin by goja). Each sits behind a shipped capability — the store, and the
JavaScript a saved program is written in (
internal/jsrun). Dropping either isa product decision, not a size fix, and taking all of goja and its
collation tables would still leave darwin/amd64 over the old cap.
The four platforms, each with its own furrow staged
Two lines that named the wrong platform
The refusal in
Makefileand the informational job inci-full.ymlboth stillsaid the budget was set on linux/arm64. That stopped being true at #235 — the
number has been set on darwin/amd64 since the reset that came down. The refusal
was telling whoever hit it to reset against an architecture the figure was never
taken from. Both now say darwin/amd64, and the CI comment says why that job stays
informational: linux/amd64 weighs about eight hundred kilobytes less, so a hard
compare there would pass a tree that is over the cap on the platform the cap is
measured on.
Validation contract
make checkon a clean checkout runs to the end; its last step printsbin/aforge: <bytes> bytes, under the SIZE-BUDGET budget of <budget>.and theOver byblock is not printed.make buildalone is still ungated: green, and silent about bytes, on a treedeliberately over the cap.
make sizefails with the samewords it fails with today. The gate is moved, never loosened.
SIZE-BUDGETstill holds one integer and nothing else —catof it is what[ … -gt … ]compares, so the attribution lives inPERF.md.## The size ratchetinPERF.mdaccounts for the number in the same commit:before-and-after, what grew, and the four-platform table.
was set on.
strings, same capabilities, same manual.
What must not change: no test edited to pass, no line added to
.github/known-red.txt, no manual page moved,internal/session/prompts/system.mduntouched, the furrow embed still fetched-at-build-time and uncommitted.
Fixes #724
Gates
Run in this worktree,
GOFLAGS=-buildvcs=false, Go 1.26.5, linux/amd64.Manual test
Contract 1 — before, on the branch's base tree:
Contract 1 — after, with the new number:
Contracts 2, 3 and 6 —
SIZE-BUDGETtemporarily set to1000, then restored:Contract 7 — the binary this budget weighs, driven in tmux against an isolated
home on
deepseek/deepseek-v4-flash, a real turn:and
/helpon the same run still draws its whole key table:Owner decision
Opened as a draft: 57,488,000 is a 2.9 MB rise and the ratchet exists so a
rise is somebody's signature rather than a drift. The safe reversible option is
what is implemented — the number moves, nothing is removed, and every figure it
was taken from is written down so the decision can be re-litigated against real
bytes rather than an argument.
The one lever this change deliberately does not pull is
internal/jsrunand itsgoja + collation tables, about 3.06 MB behind the JavaScript a saved program is
written in. That is a product decision about a shipped capability, it belongs to
its own change, and on its own it would not have kept darwin/amd64 under the old
cap.
🤖 Generated with Claude Code