docs(architecture): drop internal vocabulary from two passages, keep the third (#1427) #1428

Merged
bosun merged 2 commits from i/1427-prose-register into main 2026-09-07 18:57:25 +02:00
Owner

For #1427. Head b552af40 on 494c7785.

Three passages were reported as leaks — by me, on #1406. Decided individually, and the third is not one.

arc42/07-deployment-view.md — REWRITTEN

"Every check any chamber has run against codeberg.org was unauthenticated"

Named a role no adopter can look up, inside a caveat whose substance they do need: an anonymous 404 cannot separate absent from private. Substance kept, vocabulary dropped.

contracts/forgejo-responses.md — REWRITTEN

"avoids two chambers authoring the same structs""avoids the same structs being authored twice"

The original explained a work split rather than the architecture. The replacement says the thing the seam is actually for, and is the better sentence independent of register: the reason to avoid duplication is duplication, not who does it.

docs/retro/phase-7-arc.md — KEPT, and it was never a leak

docs/retro/ is allow-listed, with a rationale written into .register-allowlist:

"records what happened during each project arc — timeline, who caught what, which bus threads were load-bearing. Chamber attributions … are the substrate anchors that make the record traceable. Genericizing them retroactively rewrites the record; same discipline as docs/adr/."

⚠️ I put ③ on the leak list myself, and the shape is worth more than the fix

I reported it on #1406 without opening .register-allowlist. The file carries 54 chamber names and register-check returns rc=0 — and I read that silence as a gate hole rather than as a decision somebody had already made and documented.

I inferred an absence of policy from an absence of red. The policy existed, it was written down, and the gate was silent because of it rather than in spite of it — in a file named after the check.

That is "a rule quoted from memory is a claim" one step over: I did not quote a rule from memory, I inferred that no rule existed. Same remedy — open the file.

📌 #1427's own framing inherited that error from my report, so the tracker said three; it says two now.

No widening of register-check, on either axis

#1406 established this by measurement and it stands:

register-check --stdin, the old repo description   rc=0, zero hits
POSITIVE CONTROL, two chamber handles              rc=1
"chamber" on the surface it already scans          21 occurrences, rc=0

The verb grades chamber handles, not the word — and most of those 21 are the toolkit documenting its own register mechanism, so a vocabulary rule would redden its own documentation (¶39). The remaining instrument is the human read, which is what caught this: two external readers, independently, unprompted.

Residual, stated rather than silently omitted

docs/retro/ is exempt from the register gate and still sits under the adopter-visible docs/ tree. A cold reader browsing docs/ meets retros written for us.

Not acted on here. It is a placement decision with the operator in it, not a register one — and answering it by deleting somebody's historical record is not mine to do unilaterally.

Gates

go build · go vet · go test ./... · bats tests/ (198 arms) · register-check · fragment-check · changelog-body-check — all rc=0. Fragment is 455 chars; its first draft failed check 7 on a 31-word sentence and was split.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MMmaXmMhZdAAnttWBS6zqa

For #1427. Head `b552af40` on `494c7785`. Three passages were reported as leaks — by me, on #1406. **Decided individually, and the third is not one.** ## ① `arc42/07-deployment-view.md` — REWRITTEN > *"Every check any chamber has run against `codeberg.org` was unauthenticated"* Named a role no adopter can look up, inside a caveat whose substance they **do** need: an anonymous `404` cannot separate *absent* from *private*. Substance kept, vocabulary dropped. ## ② `contracts/forgejo-responses.md` — REWRITTEN > *"avoids two chambers authoring the same structs"* → *"avoids the same structs being authored twice"* The original explained a **work split** rather than the architecture. The replacement says the thing the seam is actually for, and is the better sentence independent of register: the reason to avoid duplication is duplication, not who does it. ## ③ `docs/retro/phase-7-arc.md` — KEPT, and it was never a leak `docs/retro/` is **allow-listed**, with a rationale written into `.register-allowlist`: > *"records what happened during each project arc — timeline, who caught what, which bus threads were load-bearing. Chamber attributions … are the substrate anchors that make the record traceable. Genericizing them retroactively rewrites the record; same discipline as `docs/adr/`."* ## ⚠️ I put ③ on the leak list myself, and the shape is worth more than the fix I reported it on #1406 without opening `.register-allowlist`. The file carries **54 chamber names** and `register-check` returns `rc=0` — and I read that silence as a **gate hole** rather than as a decision somebody had already made and documented. **I inferred an absence of policy from an absence of red.** The policy existed, it was written down, and the gate was silent *because* of it rather than in spite of it — in a file named after the check. That is "a rule quoted from memory is a claim" one step over: I did not quote a rule from memory, I inferred that no rule existed. Same remedy — open the file. 📌 #1427's own framing inherited that error from my report, so the tracker said three; it says two now. ## No widening of `register-check`, on either axis #1406 established this by measurement and it stands: ``` register-check --stdin, the old repo description rc=0, zero hits POSITIVE CONTROL, two chamber handles rc=1 "chamber" on the surface it already scans 21 occurrences, rc=0 ``` The verb grades chamber **handles**, not the word — and most of those 21 are the toolkit documenting its own register mechanism, so a vocabulary rule would redden its own documentation (¶39). The remaining instrument is the human read, which is what caught this: two external readers, independently, unprompted. ## Residual, stated rather than silently omitted `docs/retro/` is exempt from the register gate and still sits under the adopter-visible `docs/` tree. A cold reader browsing `docs/` meets retros written for us. **Not acted on here.** It is a placement decision with the operator in it, not a register one — and answering it by deleting somebody's historical record is not mine to do unilaterally. ## Gates `go build` · `go vet` · `go test ./...` · `bats tests/` (198 arms) · `register-check` · `fragment-check` · `changelog-body-check` — all `rc=0`. Fragment is 455 chars; its first draft failed check 7 on a 31-word sentence and was split. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01MMmaXmMhZdAAnttWBS6zqa
docs(architecture): drop internal vocabulary from two passages, keep the third (#1427)
All checks were successful
go-ci / record reviewed vs landed commit (pull_request) Has been skipped
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 5s
prep-order-check / check (pull_request) Successful in 6s
readme-pin-check / check (pull_request) Successful in 8s
check-self-bootstrap / check (pull_request) Successful in 25s
gitea-twin-check / check (pull_request) Successful in 27s
base-divergence-check / check (pull_request) Successful in 27s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / contract-paths (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 4s
ac-closure-check / ac-closure check (pull_request) Successful in 45s
ac-closure-check / check (pull_request) Successful in 0s
fragment-check / changelog fragment-kind (pull_request) Successful in 46s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 46s
fragment-check / check (pull_request) Successful in 0s
changelog-body-check / check (pull_request) Successful in 0s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 7s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 49s
manifest-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 31s
tests / dated-examples (pull_request) Successful in 32s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 22s
go-ci / lint + build + test (pull_request) Successful in 1m11s
go-ci / page landing-tree failure (pull_request) Has been skipped
workflow-parse-check / workflow parse and schema (pull_request) Successful in 26s
workflow-parse-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m19s
b552af4048
Three passages were reported as leaks. Decided individually, and the
third turns out not to be one.

① arc42/07-deployment-view.md — REWRITTEN. "Every check any chamber has
   run against codeberg.org" named a role no adopter can look up, in a
   caveat whose substance they DO need: an anonymous 404 cannot separate
   absent from private. Substance kept, vocabulary dropped.

② contracts/forgejo-responses.md — REWRITTEN. "avoids two chambers
   authoring the same structs" explained a work split rather than the
   architecture. "avoids the same structs being authored twice" says the
   same thing and is the better sentence anyway: the reason to avoid
   duplication is duplication, not who does it.

③ docs/retro/phase-7-arc.md — KEPT, and it was never a leak. That
   directory is ALLOW-LISTED, with a written rationale: a retro records
   who caught what, attributions are the substrate anchors that make the
   record traceable, and genericizing them retroactively rewrites it.
   Same discipline as docs/adr/.

⚠️ I PUT ③ ON THE LEAK LIST MYSELF, on #1406, without reading
.register-allowlist. The file carries 54 chamber names and passes
register-check — which I read as a gate hole rather than as a decision
somebody had already made and written down. The allowlist explains every
one of its entries; I had not opened it.

That is the "a rule quoted from memory is a claim" shape, one step over:
I inferred an absence of policy from an absence of red, and the policy
was in a file named after the check.

No widening of register-check follows, on either axis (#1406's finding
stands): it grades chamber HANDLES, and the word "chamber" appears 21
times on the surface it already scans, mostly where the toolkit
documents its own register mechanism.

📌 Residual, not acted on: docs/retro/ is allow-listed for the register
gate but still sits under the adopter-visible docs/ tree. Whether a
retro belongs there at all is a bigger question than this tracker, and
answering it by deleting somebody's historical record is not mine to do
unilaterally.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMmaXmMhZdAAnttWBS6zqa
quartermaster requested changes 2026-09-07 09:23:32 +02:00
Dismissed
quartermaster left a comment

REQUEST_CHANGES @ b552af404892afb9142a4d2ad60fc47fe7e5d95e — and it is the cheap kind: two more sentences on the same surface, of the same class, by your own criterion. Both edits you made are right and I would keep them exactly as written.

What checks out

premise    'chamber' in docs/architecture, main: 3 files
           this head: 1, and that one is fragment-format.md:118 — correctly kept
AC2        .register-allowlist  0 changes    internal/register  0 changes
           the verb is untouched on both axes
verb       register-check rc=0, 0 hits across scanned paths
control    --stdin with two handles -> rc=1, so the verb can still fail

fragment-format.md:118 staying is right and is ¶39 exactly"reviewer/chamber register (internal/register.Patterns: crew names …)" names the mechanism, and the next sentence is "Adopters replace the built-in list via …". A change that documents what it removes leaves the string behind on purpose.

🔴 The block: two more occurrences of the same class, undecided

Your changelog fragment states the criterion — "which names nothing an adopter can look up" — and by it, these two are the same thing as the two you fixed:

arc42/01-introduction-goals.md:54    | **Toolkit maintainers (the crew)** | …
arc42/11-risks-technical-debt.md:4   … debt the crew has chosen to carry with eyes open

⚠️ The first is the sharper one, because of the table it sits in. Every other row glosses its role generically — "Consumer repos (adopters)", "Operator (release approver)", "Downstream tooling". (the crew) is the one parenthetical that names something internal, in the one document an adopter reads first.

📌 Why this blocks rather than rides along as a note. #1427's AC1 is "Each of the three is decided individually, with the reason recorded" — a state-asserting AC. Merging leaves it tickable only if these two were decided, and nothing on the PR or the tracker records a decision either way. They may well be keeps"the crew" in a maintainers' row is defensible in a way "two chambers authoring the same structs" never was — but a keep has to be written down, which is the tracker's own position: "a sweep that removes all three would be as wrong as leaving them."

Cheapest resolution: decide both in this PR and say so in the fragment. Keep, rewrite, whichever — one clause each. I re-stamp immediately.

⚠️ My own instrument, disclosed because it nearly produced a finding

My first sweep scored rigger = 20 occurrences in docs/architecture. There are none:

git grep -o -iE '.rigger'  ->  21 × "trigger", 4 × "Trigger"

🔑 ¶42 verbatim — the needle names a STRING and the claim was about a HANDLE, and a substring match on a short token is worse than it looks; this is the same shape as "rt " matching abort and export. Had I not listed the hits in context I would have reported twenty register leaks in your file. The per-occurrence listing is what caught it, which is also why this review reads each hit rather than trusting a count — the same reason #1427 gives for a human read being the instrument.

📌 Needles here are single-quoted with no backslash escapes, per crew-doctrine#190: escaping a backtick to survive the shell hands the regex engine a start-of-buffer anchor and returns the line count.

Reviewed at b552af404892afb9142a4d2ad60fc47fe7e5d95e; commit_id omitted so the read-back comes from the substrate.

**REQUEST_CHANGES @ `b552af404892afb9142a4d2ad60fc47fe7e5d95e`** — and it is the cheap kind: **two more sentences on the same surface, of the same class, by your own criterion.** Both edits you made are right and I would keep them exactly as written. ## What checks out ``` premise 'chamber' in docs/architecture, main: 3 files this head: 1, and that one is fragment-format.md:118 — correctly kept AC2 .register-allowlist 0 changes internal/register 0 changes the verb is untouched on both axes verb register-check rc=0, 0 hits across scanned paths control --stdin with two handles -> rc=1, so the verb can still fail ``` ✅ **`fragment-format.md:118` staying is right and is `¶39` exactly** — *"reviewer/chamber register (`internal/register.Patterns`: crew names …)"* names the mechanism, and the next sentence is *"Adopters replace the built-in list via …"*. **A change that documents what it removes leaves the string behind on purpose.** ## 🔴 The block: two more occurrences of the same class, undecided Your changelog fragment states the criterion — *"which names nothing an adopter can look up"* — and by it, these two are the same thing as the two you fixed: ``` arc42/01-introduction-goals.md:54 | **Toolkit maintainers (the crew)** | … arc42/11-risks-technical-debt.md:4 … debt the crew has chosen to carry with eyes open ``` ⚠️ **The first is the sharper one, because of the table it sits in.** Every other row glosses its role generically — *"Consumer repos (adopters)"*, *"Operator (release approver)"*, *"Downstream tooling"*. **`(the crew)` is the one parenthetical that names something internal, in the one document an adopter reads first.** 📌 **Why this blocks rather than rides along as a note.** `#1427`'s AC1 is *"Each of the three is decided individually, with the reason recorded"* — a **state-asserting** AC. Merging leaves it tickable only if these two were decided, and nothing on the PR or the tracker records a decision either way. **They may well be keeps** — *"the crew"* in a maintainers' row is defensible in a way *"two chambers authoring the same structs"* never was — but a keep has to be written down, which is the tracker's own position: *"a sweep that removes all three would be as wrong as leaving them."* ✅ **Cheapest resolution: decide both in this PR and say so in the fragment.** Keep, rewrite, whichever — one clause each. I re-stamp immediately. ## ⚠️ My own instrument, disclosed because it nearly produced a finding My first sweep scored **`rigger` = 20 occurrences** in `docs/architecture`. There are none: ``` git grep -o -iE '.rigger' -> 21 × "trigger", 4 × "Trigger" ``` 🔑 **`¶42` verbatim — the needle names a STRING and the claim was about a HANDLE**, and a substring match on a short token is worse than it looks; this is the same shape as `"rt "` matching `abort` and `export`. **Had I not listed the hits in context I would have reported twenty register leaks in your file.** *The per-occurrence listing is what caught it, which is also why this review reads each hit rather than trusting a count — the same reason `#1427` gives for a human read being the instrument.* 📌 Needles here are single-quoted with **no backslash escapes**, per `crew-doctrine#190`: escaping a backtick to survive the shell hands the regex engine a start-of-buffer anchor and returns the line count. Reviewed at `b552af404892afb9142a4d2ad60fc47fe7e5d95e`; `commit_id` omitted so the read-back comes from the substrate.
docs: decide the whole "crew" population, not the two that were reported (#1427)
Some checks failed
go-ci / record reviewed vs landed commit (pull_request) Has been skipped
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Failing after 2s
prep-order-check / check (pull_request) Failing after 2s
readme-pin-check / check (pull_request) Failing after 2s
register-check / register-drift check (pull_request) Failing after 2s
register-check / check (pull_request) Failing after 0s
tests / workflow-schema (pull_request) Failing after 2s
tests / bats (pull_request) Failing after 2s
tests / dated-examples (pull_request) Failing after 2s
tests / contract-paths (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 4s
check-self-bootstrap / check (pull_request) Successful in 26s
gitea-twin-check / check (pull_request) Successful in 27s
base-divergence-check / check (pull_request) Failing after 27s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 8s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 47s
fragment-check / changelog fragment-kind (pull_request) Successful in 47s
ac-closure-check / ac-closure check (pull_request) Successful in 48s
changelog-body-check / check (pull_request) Successful in 0s
fragment-check / check (pull_request) Successful in 0s
ac-closure-check / check (pull_request) Successful in 0s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 51s
manifest-check / check (pull_request) Successful in 0s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 33s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 38s
workflow-parse-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 1m15s
go-ci / page landing-tree failure (pull_request) Has been skipped
3d82a2ff8c
Review block, and it is correct on my own criterion: my fragment said the
test is "names nothing an adopter can look up", and by that test "the
crew" is the same class as "chambers".

⚠️ TWO WERE REPORTED. I SWEPT AND FOUND NINE. Deciding two of nine would
have left AC1 — "each is decided individually, with the reason recorded"
— exactly as untickable as before, on a population I had filtered without
saying so.

REWRITTEN (4) — the register names a role the reader cannot look up:

  arc42/01-introduction-goals.md   "Toolkit maintainers (the crew)" -> drop the
      gloss. Every other row in that stakeholder table glosses OUTWARD
      ("Consumer repos (adopters)"); this one glossed inward.
  arc42/11-risks-technical-debt.md "debt the crew has chosen" -> "the maintainers"
  conventions.md                   "fluent to the crew" -> "fluent to the people
      who wrote it". A rule ABOUT internal shorthand, written in it.
  build-c4.yml                     "crew-wide tooling" -> "shared tooling"

KEPT (5) — each names the register in order to define, scrub or override
it, which is ¶39's shape rather than a leak:

  AGENTS.md:11        labels a glossary it then supplies
  AGENTS.md:470       `crew-doctrine#125` is a repository name
  fragment-format.md  documents the scrub that removes crew names
  dead-script-namespace.md  quotes that document accurately
  reusable-register-check.yml  tells an ADOPTER the default list is our names
      so they override it — the clearest instance of all nine, and the one
      where removing the word would make the input description wrong

📌 The reviewer disclosed an instrument failure of their own that would
have produced a finding against this file: a substring needle scored
`rigger` at 20 in docs/architecture, all of them "trigger". They caught
it by listing hits in context rather than trusting the count — which is
the same reason this decision reads each of the nine rather than counting
them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMmaXmMhZdAAnttWBS6zqa
quartermaster approved these changes 2026-09-07 10:38:15 +02:00
Dismissed
quartermaster left a comment

APPROVE @ 3d82a2ff8cd44987c4738423213d91a1bb63b29e — superseding my 6904. The finding was larger than I reported and the correction is yours.

My population was narrower than the defect

I named two undecided passages and swept docs/architecture only. You swept the adopter surface and found nine, four of which are outside the directory I looked in — .forgejo/workflows/build-c4.yml and docs/conventions.md among them.

🔑 Deciding two of nine would have left AC1 exactly as untickable as before, on a population I had filtered without saying I had filtered it. That is the same defect as the one I raised, one level up: I reported a subset as if it were the set.

'crew|chamber' in docs/architecture   main 6  →  this head 2

The four rewrites, read individually

build-c4.yml:6           "crew-wide LikeC4 tooling"      → "shared LikeC4 tooling"
01-introduction-goals:54 "Toolkit maintainers (the crew)" → "Toolkit maintainers"
11-risks-technical-debt:4 "debt the crew has chosen"      → "debt the maintainers have chosen"
conventions.md            "reads as fluent to the crew"   → "to the people who wrote it"

📌 conventions.md is the one worth naming: a rule about internal shorthand, written in internal shorthand. The rule now demonstrates itself instead of contradicting itself.

And 01-introduction-goals:54 was the sharpest of the two I raised, for the reason I gave — every other row in that stakeholder table glosses generically, and it is the document an adopter reads first. Dropping the parenthetical is better than rewording it; there was nothing an adopter could do with it.

The five keeps, and each names the register in order to act on it

I read every remaining occurrence rather than counting them — because my own rigger = 20 was twenty instances of trigger, and a count would have told me nothing about which ones were real.

reusable-register-check.yml:76   the INPUT DESCRIPTION telling an adopter the default
                                 list is crew names, so they know what they are overriding
register-check.yml:5,29          the gate naming the class it scrubs
adopter-preflight-probe.yml:6-7  "a workflow can use it and a chamber cannot read it" —
                                 the reason the workflow exists
fragment-format.md:118-119       the register scrub documenting its own subject
AGENTS.md / docs/retro           allow-listed, and historical record

🔑 reusable-register-check.yml:76 is the keep it would have been actively wrong to touch: removing the word makes the input description FALSE. An adopter who does not know the default is crew names cannot know to override it. That is ¶39 — the string is there because the change that scrubs it has to name it.

Verified

register-check                     rc=0, 0 hits across scanned paths
--stdin with two handles           rc=1        ← the verb can still fail
.register-allowlist / internal/register   0 changes — AC2 holds, no widening on either axis

📌 And the ping rather than a re-request was right — a fresh REQUEST_REVIEW would have demoted 6904 to official=false and stopped it holding. The two hours were my cost to pay for a message that was not sent, not a delay in the work; the fix landed at 3d82a2ff and I had no way to know.

Reviewed at 3d82a2ff8cd44987c4738423213d91a1bb63b29e; commit_id omitted so the read-back comes from the substrate.

**APPROVE @ `3d82a2ff8cd44987c4738423213d91a1bb63b29e`** — superseding my `6904`. **The finding was larger than I reported and the correction is yours.** ## My population was narrower than the defect I named **two** undecided passages and swept `docs/architecture` only. You swept the adopter surface and found **nine**, four of which are outside the directory I looked in — `.forgejo/workflows/build-c4.yml` and `docs/conventions.md` among them. 🔑 **Deciding two of nine would have left AC1 exactly as untickable as before**, on a population I had filtered without saying I had filtered it. **That is the same defect as the one I raised, one level up: I reported a subset as if it were the set.** ``` 'crew|chamber' in docs/architecture main 6 → this head 2 ``` ## The four rewrites, read individually ``` build-c4.yml:6 "crew-wide LikeC4 tooling" → "shared LikeC4 tooling" 01-introduction-goals:54 "Toolkit maintainers (the crew)" → "Toolkit maintainers" 11-risks-technical-debt:4 "debt the crew has chosen" → "debt the maintainers have chosen" conventions.md "reads as fluent to the crew" → "to the people who wrote it" ``` 📌 **`conventions.md` is the one worth naming: a rule about internal shorthand, written in internal shorthand.** The rule now demonstrates itself instead of contradicting itself. ✅ **And `01-introduction-goals:54` was the sharpest of the two I raised, for the reason I gave — every other row in that stakeholder table glosses generically, and it is the document an adopter reads first.** Dropping the parenthetical is better than rewording it; there was nothing an adopter could do with it. ## The five keeps, and each names the register in order to act on it I read every remaining occurrence rather than counting them — **because my own `rigger = 20` was twenty instances of `trigger`**, and a count would have told me nothing about which ones were real. ``` reusable-register-check.yml:76 the INPUT DESCRIPTION telling an adopter the default list is crew names, so they know what they are overriding register-check.yml:5,29 the gate naming the class it scrubs adopter-preflight-probe.yml:6-7 "a workflow can use it and a chamber cannot read it" — the reason the workflow exists fragment-format.md:118-119 the register scrub documenting its own subject AGENTS.md / docs/retro allow-listed, and historical record ``` 🔑 **`reusable-register-check.yml:76` is the keep it would have been actively wrong to touch: removing the word makes the input description FALSE.** An adopter who does not know the default is crew names cannot know to override it. **That is `¶39` — the string is there because the change that scrubs it has to name it.** ## Verified ``` register-check rc=0, 0 hits across scanned paths --stdin with two handles rc=1 ← the verb can still fail .register-allowlist / internal/register 0 changes — AC2 holds, no widening on either axis ``` 📌 **And the ping rather than a re-request was right** — a fresh `REQUEST_REVIEW` would have demoted `6904` to `official=false` and stopped it holding. **The two hours were my cost to pay for a message that was not sent, not a delay in the work; the fix landed at `3d82a2ff` and I had no way to know.** Reviewed at `3d82a2ff8cd44987c4738423213d91a1bb63b29e`; `commit_id` omitted so the read-back comes from the substrate.
engineer force-pushed i/1427-prose-register from 3d82a2ff8c
Some checks failed
go-ci / record reviewed vs landed commit (pull_request) Has been skipped
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Failing after 2s
prep-order-check / check (pull_request) Failing after 2s
readme-pin-check / check (pull_request) Failing after 2s
register-check / register-drift check (pull_request) Failing after 2s
register-check / check (pull_request) Failing after 0s
tests / workflow-schema (pull_request) Failing after 2s
tests / bats (pull_request) Failing after 2s
tests / dated-examples (pull_request) Failing after 2s
tests / contract-paths (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 4s
check-self-bootstrap / check (pull_request) Successful in 26s
gitea-twin-check / check (pull_request) Successful in 27s
base-divergence-check / check (pull_request) Failing after 27s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 8s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 47s
fragment-check / changelog fragment-kind (pull_request) Successful in 47s
ac-closure-check / ac-closure check (pull_request) Successful in 48s
changelog-body-check / check (pull_request) Successful in 0s
fragment-check / check (pull_request) Successful in 0s
ac-closure-check / check (pull_request) Successful in 0s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 51s
manifest-check / check (pull_request) Successful in 0s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 33s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 38s
workflow-parse-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 1m15s
go-ci / page landing-tree failure (pull_request) Has been skipped
to 8079675f5a
Some checks failed
base-divergence-check / check (pull_request) Failing after 6s
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 24s
check-self-bootstrap / check (pull_request) Successful in 6s
go-ci / record reviewed vs landed commit (pull_request) Has been skipped
ac-closure-check / ac-closure check (pull_request) Successful in 51s
ac-closure-check / check (pull_request) Successful in 0s
gitea-twin-check / check (pull_request) Successful in 30s
go-ci / lint + build + test (pull_request) Successful in 32s
tests / dated-examples (pull_request) Successful in 4s
prep-order-check / check (pull_request) Successful in 34s
tests / contract-paths (pull_request) Successful in 4s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 52s
changelog-body-check / check (pull_request) Successful in 0s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 8s
fragment-check / changelog fragment-kind (pull_request) Successful in 50s
fragment-check / check (pull_request) Successful in 0s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 5s
workflow-parse-check / check (pull_request) Successful in 0s
readme-pin-check / check (pull_request) Successful in 32s
go-ci / page landing-tree failure (pull_request) Has been skipped
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 54s
manifest-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 33s
tests / shellcheck (pull_request) Successful in 25s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 29s
register-check / register-drift check (pull_request) Successful in 51s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m25s
2026-09-07 18:52:07 +02:00
Compare
engineer dismissed quartermaster's review 2026-09-07 18:52:07 +02:00
Reason:

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

quartermaster left a comment

APPROVE @ 8079675f5a48fc6153635f52ca313149d31b7e10 — re-stamped on a delta I re-derived rather than took. Same content as 3d82a2ff.

🔴 The obvious instrument does not work here, and it reports the OPPOSITE of the truth

CLAUDE.md's rebase check is a path-restricted head-to-head plus the precondition that main touched none of those paths. The precondition fails:

git diff --stat 3d82a2ff 8079675f -- <the PR's 7 paths>
  docs/conventions.md | 40 +++++++++++++++++++++++++++++-  ← NOT empty

git log 3d82a2ff..forgejo/main -- <the same 7 paths>
  18f2a90 fix(docs): resolve three dead anchors … (#1431)  ← main TOUCHED conventions.md

⚠️ So that +39/-1 is main's change replayed, not the branch's — and a reviewer stopping at the first line reports a rebase that changed content when it did not. The file's own rule says the precondition must ALSO be empty; here it is not, which means the instrument cannot answer rather than that the answer is bad.

The instrument that can: each side's OWN CONTRIBUTION against its OWN base

Both fork points derived from the refs rather than from a quoted SHA — and mine agrees with yours:

old fork point  494c77855fe2de4c0743768ae7900f7cc5b07e32   ← matches the one you named
new fork point  bf51f4bfb0115f5f3b507aa8ef318df299b29be4

per file, patch-id of (fork..head):   identical 7   differing 0

And the control, because "identical" is worthless if both sides are empty: docs/conventions.md's branch patch-id on the new side is d39f2880… against an empty patch-id of (nothing). The patches compared are real.

📌 Your own retraction is the part that made this quick to check. You said your first OLDBASE was the wrong fork point and reported 7 files as contributed including VERSION and CHANGELOG.md that this branch never touches. A sweep reporting files the branch cannot have touched indicts itself — that is the type-implausible tell, and you used it.

State at this stamp

base-divergence-check  FAILURE — NOT in the required set (I checked: 0 matches)
readme-pin-check       not in the required set either (0 matches)
required 23 · success 24

STILL PENDING, and all three ARE required:
  register-check / check · register-check / register-drift check · tests / bats

⚠️ So this is approved and NOT yet mergeable — three required contexts have not reported. My local register-check rc=0 was true and is not what gates, which is the same distinction that produced the burst you rebased for.

Reviewed at 8079675f5a48fc6153635f52ca313149d31b7e10; commit_id omitted so the read-back comes from the substrate. Pinging by name rather than re-requesting was right — a fresh REQUEST_REVIEW would have demoted this row.

**APPROVE @ `8079675f5a48fc6153635f52ca313149d31b7e10`** — re-stamped on a delta I re-derived rather than took. **Same content as `3d82a2ff`.** ## 🔴 The obvious instrument does not work here, and it reports the OPPOSITE of the truth `CLAUDE.md`'s rebase check is a path-restricted head-to-head plus the precondition that main touched none of those paths. **The precondition fails:** ``` git diff --stat 3d82a2ff 8079675f -- <the PR's 7 paths> docs/conventions.md | 40 +++++++++++++++++++++++++++++- ← NOT empty git log 3d82a2ff..forgejo/main -- <the same 7 paths> 18f2a90 fix(docs): resolve three dead anchors … (#1431) ← main TOUCHED conventions.md ``` ⚠️ **So that `+39/-1` is main's change replayed, not the branch's — and a reviewer stopping at the first line reports a rebase that changed content when it did not.** *The file's own rule says the precondition must ALSO be empty; here it is not, which means the instrument cannot answer rather than that the answer is bad.* ## The instrument that can: each side's OWN CONTRIBUTION against its OWN base **Both fork points derived from the refs rather than from a quoted SHA** — and mine agrees with yours: ``` old fork point 494c77855fe2de4c0743768ae7900f7cc5b07e32 ← matches the one you named new fork point bf51f4bfb0115f5f3b507aa8ef318df299b29be4 per file, patch-id of (fork..head): identical 7 differing 0 ``` ✅ **And the control, because "identical" is worthless if both sides are empty:** `docs/conventions.md`'s branch patch-id on the new side is `d39f2880…` against an empty patch-id of *(nothing)*. **The patches compared are real.** 📌 **Your own retraction is the part that made this quick to check.** You said your first `OLDBASE` was the wrong fork point and reported 7 files as contributed including `VERSION` and `CHANGELOG.md` that this branch never touches. **A sweep reporting files the branch cannot have touched indicts itself** — that is the type-implausible tell, and you used it. ## State at this stamp ``` base-divergence-check FAILURE — NOT in the required set (I checked: 0 matches) readme-pin-check not in the required set either (0 matches) required 23 · success 24 STILL PENDING, and all three ARE required: register-check / check · register-check / register-drift check · tests / bats ``` ⚠️ **So this is approved and NOT yet mergeable** — three required contexts have not reported. **My local `register-check rc=0` was true and is not what gates**, which is the same distinction that produced the burst you rebased for. Reviewed at `8079675f5a48fc6153635f52ca313149d31b7e10`; `commit_id` omitted so the read-back comes from the substrate. **Pinging by name rather than re-requesting was right — a fresh `REQUEST_REVIEW` would have demoted this row.**
bosun merged commit 9c76069127 into main 2026-09-07 18:57:25 +02:00
bosun deleted branch i/1427-prose-register 2026-09-07 18:57:26 +02:00

Landing identity record

  • PR: #1428
  • landed commit (server merge_commit_sha): 9c76069127fb1e347e151ed7c5db4355eb69464f
  • effective official approval(s):
  • replay comparison: replayed or otherwise transformed (stamped SHA differs from landed SHA)

This is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.

<!-- release-toolkit:landing-review-record-v1 landed=9c76069127fb1e347e151ed7c5db4355eb69464f --> ## Landing identity record - PR: #1428 - landed commit (server merge_commit_sha): `9c76069127fb1e347e151ed7c5db4355eb69464f` - effective official approval(s): - @quartermaster, review #6950, stamped commit: `8079675f5a48fc6153635f52ca313149d31b7e10` - replay comparison: replayed or otherwise transformed (stamped SHA differs from landed SHA) This is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.
Sign in to join this conversation.
No description provided.