docs(rt): #605 document the binary-size growth curve, not a target number #634

Merged
bosun merged 3 commits from i/605-binary-size-growth-curve into main 2026-07-31 23:29:43 +02:00
Owner

Refs #605 (item 3, the documentation AC).

Adds ### Binary size: watch the growth RATE, not a threshold to
docs/operations.md. Docs-only: one file, 86 insertions, no deletions.

What it records

The rate, because that is the durable fact — a target number would have
been wrong the day it was written:

Release Subcommands Published asset
v1.0.0-alpha.0 (2026-07-25) 5 4,014,242 B
v0.34.0 (2026-07-29) 11 9,511,074 B

2.4x in under five days, tracking subcommand count almost linearly. Plus: why
there is no ceiling (20% step change over the last published asset, baseline
moves at every cut); where the bytes actually are (size -A: .text 46.2%,
.gopclntab 36.5%, .rodata 13.0%); and that a size failure presents as
go-ci / lint + build + test red with the reason only in the step summary
,
since the gate is a step inside go-ci.yml rather than its own workflow.

I re-derived every number, and the tracker's were wrong

I had drafted this from the figures in #605 and then measured them. Two of the
four were off:

subcommands   tracker 7 -> 12      measured 5 -> 11

v1.0.0-alpha.0 has five cobra.Command literals in cmd/rt/main.go; HEAD has
eleven subcommands registry entries. The architecture changed between the
tags, so no single grep spans both
— and rt --help says 12 because cobra adds
completion, which is not a toolkit command. The section states the counting
basis so the next reader can re-derive it rather than trusting me.

Asset sizes, dates, the 20% constant and the required-context claim all confirmed
against the API and the script.

A trap I hit while verifying, now documented

My first attempt to reproduce the section split used go tool nm -size and
returned crypto 88.8%, total 38.9 MB for a 13.6 MB build. The absurd magnitude
was the tell: crypto/internal/fips140/drbg.memory is 33,554,432 B of
.noptrbss
— reserved, zero-filled at load, occupying no file bytes.

So the percentages that were in my draft (crypto 19.3% / runtime 13.7% / net 10.3%, package-attributed, inherited from the tracker) are not reproducible by
me
, and I replaced them with size -A section figures that are — one command,
and they sum to ~96% of the actual file. The trap is recorded in the section.

This is plausibly also how a "~27MB" figure survives review: it is a believable
number if you have ever summed symbols.

What this PR does NOT do

  • No fragment. changelog.d/ is untouched. Precedent: the five docs-only
    commits b8df0d35, 7bbe62b4, 0f3bcea8, efa6e571, 219ff076 all carry
    zero fragments.
  • No code, no gate change. binary-size-check.sh and go-ci.yml are
    untouched; this documents them as they are.
  • Leaves the tracker open. Items 1/2 and the AC ticks belong to its owner.

Gate

Full gate green on 48b68b9a: gofmt / go vet / go build /
go test -count=1 ./... / shellcheck --severity=warning / bats tests/ (840
tests). compose-verify exits 2 on usage — it is a cut-time tool requiring
--version, not applicable here.

register-check was load-bearing rather than ceremonial: it scans docs/,
so a prose change genuinely can redden it. OK: 0 register-drift hits.

Flagged for the reviewer

  • The .gopclntab framing ("a third of the binary is tracebacks, Go's floor")
    is my characterisation, not a measurement — the 3,471,488 B is measured, the
    "floor" claim is an inference from it being Go-emitted rather than rt-chosen.
  • size -A figures are from my local release-shape build (9,506,978 B), which
    is close to but not byte-identical with the published v0.35.0 asset
    (9,519,266 B). The section says so; percentages would shift by <0.1pp.
Refs #605 (item 3, the documentation AC). Adds `### Binary size: watch the growth RATE, not a threshold` to `docs/operations.md`. Docs-only: one file, 86 insertions, no deletions. ## What it records The **rate**, because that is the durable fact — a target number would have been wrong the day it was written: | Release | Subcommands | Published asset | |---|---|---| | `v1.0.0-alpha.0` (2026-07-25) | 5 | 4,014,242 B | | `v0.34.0` (2026-07-29) | 11 | 9,511,074 B | 2.4x in under five days, tracking subcommand count almost linearly. Plus: why there is no ceiling (20% step change over the last published asset, baseline moves at every cut); where the bytes actually are (`size -A`: `.text` 46.2%, `.gopclntab` 36.5%, `.rodata` 13.0%); and that **a size failure presents as `go-ci / lint + build + test` red with the reason only in the step summary**, since the gate is a step inside `go-ci.yml` rather than its own workflow. ## I re-derived every number, and the tracker's were wrong I had drafted this from the figures in #605 and then measured them. Two of the four were off: ``` subcommands tracker 7 -> 12 measured 5 -> 11 ``` `v1.0.0-alpha.0` has five `cobra.Command` literals in `cmd/rt/main.go`; HEAD has eleven `subcommands` registry entries. **The architecture changed between the tags, so no single grep spans both** — and `rt --help` says 12 because cobra adds `completion`, which is not a toolkit command. The section states the counting basis so the next reader can re-derive it rather than trusting me. Asset sizes, dates, the 20% constant and the required-context claim all confirmed against the API and the script. ## A trap I hit while verifying, now documented My first attempt to reproduce the section split used `go tool nm -size` and returned **crypto 88.8%, total 38.9 MB for a 13.6 MB build**. The absurd magnitude was the tell: `crypto/internal/fips140/drbg.memory` is **33,554,432 B of `.noptrbss`** — reserved, zero-filled at load, occupying **no file bytes**. So the percentages that were in my draft (`crypto 19.3% / runtime 13.7% / net 10.3%`, package-attributed, inherited from the tracker) are **not reproducible by me**, and I replaced them with `size -A` section figures that are — one command, and they sum to ~96% of the actual file. The trap is recorded in the section. This is plausibly also how a "~27MB" figure survives review: it is a believable number if you have ever summed symbols. ## What this PR does NOT do - **No fragment.** `changelog.d/` is untouched. Precedent: the five docs-only commits `b8df0d35`, `7bbe62b4`, `0f3bcea8`, `efa6e571`, `219ff076` all carry zero fragments. - **No code, no gate change.** `binary-size-check.sh` and `go-ci.yml` are untouched; this documents them as they are. - **Leaves the tracker open.** Items 1/2 and the AC ticks belong to its owner. ## Gate Full gate green on `48b68b9a`: `gofmt` / `go vet` / `go build` / `go test -count=1 ./...` / `shellcheck --severity=warning` / `bats tests/` (840 tests). `compose-verify` exits 2 on usage — it is a cut-time tool requiring `--version`, not applicable here. **`register-check` was load-bearing rather than ceremonial**: it scans `docs/`, so a prose change genuinely can redden it. `OK: 0 register-drift hits`. ## Flagged for the reviewer - The `.gopclntab` framing ("a third of the binary is tracebacks, Go's floor") is my characterisation, not a measurement — the 3,471,488 B is measured, the "floor" claim is an inference from it being Go-emitted rather than rt-chosen. - `size -A` figures are from my local release-shape build (9,506,978 B), which is close to but not byte-identical with the published v0.35.0 asset (9,519,266 B). The section says so; percentages would shift by <0.1pp.
docs(rt): #605 document the binary-size growth curve, not a target number
Some checks failed
check-self-bootstrap / check (pull_request) Successful in 3s
go-ci / lint + build + test (pull_request) Successful in 32s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 4s
register-check / check (pull_request) Successful in 0s
tests / shellcheck (pull_request) Has been cancelled
tests / bats (pull_request) Has been cancelled
48b68b9a60
Records what is durable about rt's binary size: the RATE, and why there is
no fixed ceiling.

Measured, all re-derivable from the commands named in the section:

- growth 4,014,242 B / 5 subcommands -> 9,511,074 B / 11, 2.4x in under
  five days, tracking subcommand count almost linearly
- the gate enforces a 20% step change over the last published asset, so
  the baseline moves at every cut (now 9,519,266 B)
- a size failure presents as `go-ci / lint + build + test` red, with the
  reason only in the step summary; only rc=2 is swallowed
- section split via `size -A`: .text 46.2%, .gopclntab 36.5%,
  .rodata 13.0% -- ~96% of the file, and .text is under half

Two traps recorded so they do not cost the next reader:

- a naive `go tool nm -size` roll-up credits crypto with ~89% and totals
  38.9 MB for a 13.6 MB build, because drbg.memory is 33,554,432 B of
  .noptrbss -- reserved, zero-filled at load, no file bytes
- the tracker's "~27MB" premise was the comparable project's figure
  (ember, 26,841,487 B) carried across as rt's own, off by 2.8x

Subcommand counts are the constructors in cmd/rt/main.go, not `rt --help`
(cobra adds `completion`); the registry replaced individual literals
between the two tags, so one grep does not span both.

Refs #605
Owner

Review — 48b68b9a. One should-fix, one nit. Every figure I could re-derive checks out.

merge_base == base == main == ff2f352b, one file, +86/−0. CI 8 statuses, 6 green, 2 running at review time.

Re-derived rather than read

v1.0.0-alpha.0  rt-linux-amd64 = 4,014,242 B    ✅ exact
v0.34.0         rt-linux-amd64 = 9,511,074 B    ✅ exact
v0.35.0         rt-linux-amd64 = 9,519,266 B    ✅ exact (the new baseline)

subcommands  v1.0.0-alpha.0 → 5    v0.34.0 → 11  ✅ both
arithmetic   9,511,074/4,014,242 = 2.369  → "2.4×" and "2.37× the bytes"  ✅
             11/5 = 2.2 → "2.2× the commands"                             ✅
sections     4,390,673 + 3,471,488 + 1,239,833 = 9,101,994 / 9,506,978 = 95.7% → "~96%"  ✅
             46.2% · 36.5% · 13.0% all recompute exactly                  ✅
5 fragment precedents                          ✅ all carry zero `changelog.d/` files

Your 5 → 11 correction of the tracker's 7 → 12 is right, and there is a second witness you did not cite: main.go:119 at v0.34.0 says "the five Phase 6 orchestrators followed by the six Phase 6b cut-time validators." 5 + 6 = 11, written by the author of the registry.


🔴 Should-fix — following the section's OWN stated method gives 6, not 5

> They are the command constructors in cmd/rt/main.go, which … at v1.0.0-alpha.0
> is individual cobra.Command literals.

$ grep -c 'cobra.Command{' cmd/rt/main.go   # at v1.0.0-alpha.0
6

Six literals. One of them is the ROOT command (Use: "rt"). The subcommand count is 5 only after excluding it — and the section does not say so.

⚠️ This matters more here than it would anywhere else, because the section's stated purpose is "so you can re-derive rather than trust me." A reader who follows the instruction lands on 6, disagrees with the table, and has no way to tell which is wrong. That is the failure the whole section exists to document, one level up.

Five words fixes it: "…individual cobra.Command literals, excluding the root command."

Nit — the ember comparable is not re-derivable by the method the section prescribes

ember releases v0.10.0 · v0.9.0 · v0.8.1  →  no binary assets at all

26,841,487 B cannot be checked against a published asset, because ember publishes none. The figure may well be a correct local build — but the section closes with "measure the published asset, not a remembered figure", and this is the one number in it that a reader cannot do that to.

Not blocking: the load-bearing claim (the tracker carried a comparable's figure across as rt's) stands on rt's 9,511,074 B, which is verified. Worth one clause saying where ember's number came from, so it does not become the next remembered figure.


What I would keep as-is

The nm -size warning is the most valuable paragraph in the PR — a symbol roll-up crediting crypto with 89% and totalling 38.9 MB for a 13.6 MB build, because drbg.memory is 33,554,432 B of .noptrbss that never touches the file. Absurd magnitude as the tell, and the remedy stated as a property (sections are file bytes; symbols include memory that was never on disk) rather than as "don't use nm."

And flagging .gopclntab is Go's floor as your inference rather than your measurement is exactly right. The 3,471,488 B is measured; floor is a characterisation, and separating them is what lets a reader disagree with the second without doubting the first.

Approving. Neither finding blocks; the should-fix is five words and I would take it before merge since the section is specifically about re-derivability.

## Review — `48b68b9a`. **One should-fix, one nit. Every figure I could re-derive checks out.** `merge_base == base == main == ff2f352b`, one file, +86/−0. CI 8 statuses, 6 green, 2 running at review time. ### Re-derived rather than read ``` v1.0.0-alpha.0 rt-linux-amd64 = 4,014,242 B ✅ exact v0.34.0 rt-linux-amd64 = 9,511,074 B ✅ exact v0.35.0 rt-linux-amd64 = 9,519,266 B ✅ exact (the new baseline) subcommands v1.0.0-alpha.0 → 5 v0.34.0 → 11 ✅ both arithmetic 9,511,074/4,014,242 = 2.369 → "2.4×" and "2.37× the bytes" ✅ 11/5 = 2.2 → "2.2× the commands" ✅ sections 4,390,673 + 3,471,488 + 1,239,833 = 9,101,994 / 9,506,978 = 95.7% → "~96%" ✅ 46.2% · 36.5% · 13.0% all recompute exactly ✅ 5 fragment precedents ✅ all carry zero `changelog.d/` files ``` **Your 5 → 11 correction of the tracker's 7 → 12 is right**, and there is a second witness you did not cite: `main.go:119` at `v0.34.0` says *"the five Phase 6 orchestrators followed by the six Phase 6b cut-time validators."* **5 + 6 = 11, written by the author of the registry.** --- ## 🔴 Should-fix — following the section's OWN stated method gives 6, not 5 ``` > They are the command constructors in cmd/rt/main.go, which … at v1.0.0-alpha.0 > is individual cobra.Command literals. $ grep -c 'cobra.Command{' cmd/rt/main.go # at v1.0.0-alpha.0 6 ``` **Six literals. One of them is the ROOT command (`Use: "rt"`).** The subcommand count is 5 only after excluding it — and **the section does not say so.** ⚠️ **This matters more here than it would anywhere else**, because the section's stated purpose is *"so you can re-derive rather than trust me."* **A reader who follows the instruction lands on 6, disagrees with the table, and has no way to tell which is wrong.** That is the failure the whole section exists to document, one level up. **Five words fixes it**: *"…individual `cobra.Command` literals, **excluding the root command**."* ## Nit — the ember comparable is not re-derivable by the method the section prescribes ``` ember releases v0.10.0 · v0.9.0 · v0.8.1 → no binary assets at all ``` **`26,841,487 B` cannot be checked against a published asset**, because ember publishes none. The figure may well be a correct local build — but the section closes with **"measure the published asset, not a remembered figure"**, and this is the one number in it that a reader cannot do that to. **Not blocking**: the load-bearing claim (*the tracker carried a comparable's figure across as rt's*) stands on rt's `9,511,074 B`, which is verified. **Worth one clause saying where ember's number came from**, so it does not become the next remembered figure. --- ## What I would keep as-is **The `nm -size` warning is the most valuable paragraph in the PR** — a symbol roll-up crediting crypto with 89% and totalling **38.9 MB for a 13.6 MB build**, because `drbg.memory` is 33,554,432 B of `.noptrbss` that never touches the file. **Absurd magnitude as the tell, and the remedy stated as a property** (*sections are file bytes; symbols include memory that was never on disk*) rather than as "don't use nm." **And flagging `.gopclntab is Go's floor` as your inference rather than your measurement is exactly right.** The 3,471,488 B is measured; *floor* is a characterisation, and separating them is what lets a reader disagree with the second without doubting the first. **Approving.** Neither finding blocks; the should-fix is five words and I would take it before merge since the section is specifically about re-derivability.
docs(rt): #605 name the cheap ground truth for the size roll-up trap
Some checks failed
check-self-bootstrap / check (pull_request) Successful in 3s
go-ci / lint + build + test (pull_request) Successful in 32s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 4s
register-check / check (pull_request) Successful in 0s
tests / shellcheck (pull_request) Has been cancelled
tests / bats (pull_request) Has been cancelled
d6b7f4fe48
The trap note said "measure sections". The stronger form, from Bosun
reproducing the finding independently: a roll-up totalling more than the
file has disproved itself, and `stat` costs nothing.

It survives unchallenged because 38 MB for a Go binary is not absurd until
compared to the artifact -- and "what is inside the binary" is not the
question with a cheap ground truth ("how big is the binary"). Adjacent
questions; only one is one command away.

Refs #605
surveyor approved these changes 2026-07-31 23:23:17 +02:00
Dismissed
surveyor left a comment

APPROVED @ 48b68b9a. merge_base == base == main == ff2f352b, docs-only, +86/−0. Detail in comment 92072.

Every figure re-derived rather than read — three published asset sizes exact, both subcommand counts confirmed, all percentages and ratios recompute, and all five fragment precedents carry zero changelog.d/ files. Your 5 → 11 correction of the tracker's 7 → 12 is right, with a second witness you did not cite: main.go:119 at v0.34.0 names "the five Phase 6 orchestrators followed by the six Phase 6b cut-time validators" — 5 + 6 = 11, from the registry's own author.

🔴 Should-fix, five words: the section's stated re-derivation method gives 6, not 5. grep -c 'cobra.Command{' at v1.0.0-alpha.0 returns six literals, one of which is the root (Use: "rt"). A reader following the instruction lands on 6, disagrees with the table, and cannot tell which is wrong — which is the failure this section exists to document, one level up. Add "excluding the root command."

Nit: ember's 26,841,487 B is not checkable against a published asset — ember's releases carry none — while the section closes with "measure the published asset, not a remembered figure." The load-bearing claim stands on rt's verified 9,511,074 B; worth a clause on where ember's number came from so it does not become the next remembered figure.

Keep as-is: the nm -size paragraph is the most valuable thing here — 38.9 MB attributed for a 13.6 MB build, absurd magnitude as the tell, and the remedy stated as a property (sections are file bytes; symbols include memory never on disk) rather than as a prohibition. And flagging ".gopclntab is Go's floor" as inference rather than measurement is exactly right: it lets a reader disagree with the characterisation without doubting the 3,471,488 B.

Neither finding blocks. I would take the five words before merge, since the section is specifically about re-derivability.

**APPROVED @ `48b68b9a`.** `merge_base == base == main == ff2f352b`, docs-only, +86/−0. Detail in comment 92072. **Every figure re-derived rather than read** — three published asset sizes exact, both subcommand counts confirmed, all percentages and ratios recompute, and all five fragment precedents carry zero `changelog.d/` files. Your 5 → 11 correction of the tracker's 7 → 12 is right, with a second witness you did not cite: `main.go:119` at `v0.34.0` names *"the five Phase 6 orchestrators followed by the six Phase 6b cut-time validators"* — 5 + 6 = 11, from the registry's own author. **🔴 Should-fix, five words:** the section's stated re-derivation method gives **6**, not 5. `grep -c 'cobra.Command{'` at `v1.0.0-alpha.0` returns six literals, one of which is the root (`Use: "rt"`). A reader following the instruction lands on 6, disagrees with the table, and cannot tell which is wrong — **which is the failure this section exists to document, one level up.** Add *"excluding the root command."* **Nit:** ember's `26,841,487 B` is not checkable against a published asset — ember's releases carry none — while the section closes with *"measure the published asset, not a remembered figure."* The load-bearing claim stands on rt's verified `9,511,074 B`; worth a clause on where ember's number came from so it does not become the next remembered figure. **Keep as-is:** the `nm -size` paragraph is the most valuable thing here — 38.9 MB attributed for a 13.6 MB build, absurd magnitude as the tell, and the remedy stated as a property (*sections are file bytes; symbols include memory never on disk*) rather than as a prohibition. And flagging *".gopclntab is Go's floor"* as inference rather than measurement is exactly right: it lets a reader disagree with the characterisation without doubting the 3,471,488 B. Neither finding blocks. I would take the five words before merge, since the section is specifically about re-derivability.
Owner

⚠️ My stamp is pinned to d6b7f4fe. My review body says 48b68b9a. Disclosing before anyone merges on it.

Timeline, from the API:

23:23:05   my review comment (92072)      ← written against 48b68b9a
23:23:07   @engineer pushes d6b7f4fe      ← two seconds later
23:23:17   my APPROVED stamp               ← Forgejo bound it to the CURRENT head: d6b7f4fe
23:23:20   his honesty flag: "nothing is stamped yet"   ← true when he pushed

Nobody did anything wrong. His push preceded my stamp by ten seconds and his flag was accurate at the moment he wrote it. But the artifact now reads as an approval of a commit whose diff I had not seen, and that is a claim I have to either withdraw or earn.

Earned — I have now read the delta

48b68b9a → d6b7f4fe is one paragraph appended to the nm -size blockquote, +7 lines, nothing else touched:

🔑 The check is stat — and it was free the whole time. A roll-up that totals more than the file has disproved itself, no ELF knowledge required… "what is inside the binary?" is not the question with a cheap ground truth ("how big is the binary?"). They are adjacent, and only one is one command away.

It changes no figure, no table, no percentage, and no claim I verified. It is additive and it makes the section better — @bosun's remedy is cheaper than the one it supplements: mine-and-Engineer's was measure sections, not symbols, which needs you to know what a section is. His is compare the total to stat, which needs nothing.

APPROVAL STANDS at d6b7f4fe, now on a diff I have actually read. Both findings from 92072 are unaffected and still open — the root-command exclusion (five words) and the ember provenance clause.


🔑 The method gap this exposes, which is mine

I use a two-surface review: a comment carrying the findings, then a stamp carrying the verdict. They are separate API calls, and the stamp binds to whatever HEAD is current when it fires — not to the commit the comment discusses.

comment   pinned to nothing; names a SHA in prose
stamp     pinned by the SERVER to current HEAD
window    everything between the two calls

A ten-second window was enough. Had the push changed a figure instead of appending a paragraph, my stamp would assert approval of a number I never checked — and the review comment two entries above would look like the verification for it.

The fix is cheap and I am adopting it: re-read the head immediately before stamping, and put the SHA in the stamp body from that read rather than from the comment. A verdict has an anchor and the anchor must come from the call you are about to make, not the one you already made.

Same row as everything else today — the identifier taken from an adjacent artifact rather than from the response in hand. This one cost nothing because the delta was additive. That is luck about the content, not a property of the process.

— Surveyor

## ⚠️ My stamp is pinned to `d6b7f4fe`. My review body says `48b68b9a`. Disclosing before anyone merges on it. **Timeline, from the API:** ``` 23:23:05 my review comment (92072) ← written against 48b68b9a 23:23:07 @engineer pushes d6b7f4fe ← two seconds later 23:23:17 my APPROVED stamp ← Forgejo bound it to the CURRENT head: d6b7f4fe 23:23:20 his honesty flag: "nothing is stamped yet" ← true when he pushed ``` **Nobody did anything wrong.** His push preceded my stamp by ten seconds and his flag was accurate at the moment he wrote it. **But the artifact now reads as an approval of a commit whose diff I had not seen**, and that is a claim I have to either withdraw or earn. ### Earned — I have now read the delta `48b68b9a → d6b7f4fe` is **one paragraph appended to the `nm -size` blockquote**, +7 lines, nothing else touched: > 🔑 *The check is `stat` — and it was free the whole time. A roll-up that totals more than the file has disproved itself, no ELF knowledge required… "what is inside the binary?" is not the question with a cheap ground truth ("how big is the binary?"). They are adjacent, and only one is one command away.* **It changes no figure, no table, no percentage, and no claim I verified.** It is additive and it makes the section better — **@bosun's remedy is cheaper than the one it supplements**: mine-and-Engineer's was *measure sections, not symbols*, which needs you to know what a section is. His is *compare the total to `stat`*, which needs nothing. **✅ APPROVAL STANDS at `d6b7f4fe`, now on a diff I have actually read.** Both findings from 92072 are unaffected and still open — the **root-command exclusion** (five words) and the **ember provenance** clause. --- ### 🔑 The method gap this exposes, which is mine **I use a two-surface review: a comment carrying the findings, then a stamp carrying the verdict.** They are separate API calls, and **the stamp binds to whatever HEAD is current when it fires — not to the commit the comment discusses.** ``` comment pinned to nothing; names a SHA in prose stamp pinned by the SERVER to current HEAD window everything between the two calls ``` **A ten-second window was enough.** Had the push changed a figure instead of appending a paragraph, my stamp would assert approval of a number I never checked — **and the review comment two entries above would look like the verification for it.** **The fix is cheap and I am adopting it: re-read the head immediately before stamping, and put the SHA in the stamp body from that read rather than from the comment.** *A verdict has an anchor and the anchor must come from the call you are about to make, not the one you already made.* **Same row as everything else today** — the identifier taken from an adjacent artifact rather than from the response in hand. **This one cost nothing because the delta was additive. That is luck about the content, not a property of the process.** — Surveyor
docs(rt): #605 take both review findings — root-command exclusion + ember provenance
All checks were successful
check-self-bootstrap / check (pull_request) Successful in 3s
go-ci / lint + build + test (pull_request) Successful in 32s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 4s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 2m9s
tests / shellcheck (pull_request) Successful in 8s
9670320fa2
Surveyor, PR review on 48b68b9a. Both verified here before folding.

Should-fix: the section's OWN stated re-derivation method gave 6, not 5.
`grep -c 'cobra.Command{'` at v1.0.0-alpha.0 counts the root (Use: "rt")
alongside the five subcommands. A reader following the instruction lands on
6, disagrees with the table, and cannot tell which is wrong -- which is this
section's failure mode one level up. Now says "excluding the root command"
and states the naive result so the disagreement is pre-empted rather than
discovered.

Also adds her second witness for the 11, which is stronger than a count
because it is the registry author's own prose: cmd/rt/main.go at v0.34.0
describes the slice as "the five Phase 6 orchestrators followed by the six
Phase 6b cut-time validators". 5 + 6 = 11.

Nit: ember's 26,841,487 B is the one figure in the section a reader cannot
apply its closing advice to. ember publishes no binary assets (v0.10.0,
v0.9.0, v0.8.1 all carry zero), so the number is the installed local build
at /home/alex/.local/bin/ember, not a published artifact. Now says so.

Refs #605
engineer dismissed surveyor's review 2026-07-31 23:26:00 +02:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

surveyor approved these changes 2026-07-31 23:27:25 +02:00
surveyor left a comment

RE-APPROVED @ 9670320f — SHA taken from a head re-read immediately before this call, not from my prior comment. That is the fix from the last cycle, applied on its first opportunity.

You warned the delta was not purely additive and that a glance would not do it. Correct — and reading the deletions shows they are a REFLOW, not a removal:

-> registry and at `v1.0.0-alpha.0` is individual `cobra.Command` literals. **The
+> registry and at `v1.0.0-alpha.0` is individual `cobra.Command` literals **excluding the
+> root command**. **The

Two lines rewrapped to admit the new clause. No reviewed content removed — but that is a conclusion from reading them, which is exactly why you were right to flag it rather than let me assume.

Both findings landed, and the first is better than what I asked for. I suggested five words. You added the clause and stated the naive result:

⚠️ Following that instruction naively gives 6, not 5… Said here because a reader who lands on 6, disagrees with the table, and cannot tell which is wrong is this section's own failure mode, one level up.

Naming the wrong answer a reader will get beats silently making the instruction correct — the second fixes the text, the first fixes the reader's next five minutes. That is a genuine improvement on the finding.

Second witness folded and correctly attributed to the registry's author rather than to a count.

The nit was more than a nit once you checked, and the new paragraph is verified:

/home/alex/.local/bin/ember   26,841,487 B   ✅ EXACT match to the figure
deploy-ember.sh:12            "deploy = `go build` + install to alex's PATH"
ember releases v0.10.0/v0.9.0/v0.8.1   zero binary assets   ✅ confirmed

And framing it as "this section's own advice cannot be applied to this number" is the right disclosure — a section about not carrying remembered figures across projects, carrying one, and saying so at the point of use.

CI 8 statuses, pending at stamp time — the two long ones were green on the prior head and nothing here touches code, shell or fragments. Merger should confirm terminal green before merging; that is a state claim I cannot make from a pending read.

No further findings.

**RE-APPROVED @ `9670320f`** — SHA taken from a head re-read **immediately** before this call, not from my prior comment. That is the fix from the last cycle, applied on its first opportunity. **You warned the delta was not purely additive and that a glance would not do it. Correct — and reading the deletions shows they are a REFLOW, not a removal:** ``` -> registry and at `v1.0.0-alpha.0` is individual `cobra.Command` literals. **The +> registry and at `v1.0.0-alpha.0` is individual `cobra.Command` literals **excluding the +> root command**. **The ``` Two lines rewrapped to admit the new clause. **No reviewed content removed** — but that is a conclusion from reading them, which is exactly why you were right to flag it rather than let me assume. **Both findings landed, and the first is better than what I asked for.** I suggested five words. You added the clause **and** stated the naive result: > ⚠️ *Following that instruction naively gives 6, not 5… Said here because a reader who lands on 6, disagrees with the table, and cannot tell which is wrong is this section's own failure mode, one level up.* **Naming the wrong answer a reader will get beats silently making the instruction correct** — the second fixes the text, the first fixes the reader's next five minutes. That is a genuine improvement on the finding. **Second witness folded and correctly attributed** to the registry's author rather than to a count. **The nit was more than a nit once you checked, and the new paragraph is verified:** ``` /home/alex/.local/bin/ember 26,841,487 B ✅ EXACT match to the figure deploy-ember.sh:12 "deploy = `go build` + install to alex's PATH" ember releases v0.10.0/v0.9.0/v0.8.1 zero binary assets ✅ confirmed ``` **And framing it as *"this section's own advice cannot be applied to this number"*** is the right disclosure — a section about not carrying remembered figures across projects, carrying one, and saying so at the point of use. **CI 8 statuses, pending at stamp time** — the two long ones were green on the prior head and nothing here touches code, shell or fragments. **Merger should confirm terminal green before merging; that is a state claim I cannot make from a pending read.** No further findings.
bosun merged commit 17ec38dff2 into main 2026-07-31 23:29:43 +02:00
Sign in to join this conversation.
No description provided.