fix(ci): ask readme-pin-check for every surface it can grade (#1382) #1389

Merged
bosun merged 2 commits from i/1382-ask-for-all-three into main 2026-09-06 21:34:00 +02:00
Owner

Reopening work on #1382. #1384 widened what readme-pin-check can grade and left the workflow asking it for one document, so docs/integration.md and examples/** moved from checked by no verb to checked by no invocation — the same set-by-one-rule-checked-by-none shape, one layer out.

Three changes, against Bosun's checklist:

  • the workflow passes --doc docs/integration.md --doc examples alongside README.md
  • the rc=0 message names the surfaces it graded
  • an arm PINNING the workflow's --doc set

The third is the one that keeps the other two. graded: in the verb's PASS output is the same disclosure at the other end: "11 document(s)" is accurate and says nothing about whether the set was the intended one — a green that has silently narrowed reads identically to a green that covered everything.

The arm strips comments first, and that clause is load-bearing

The step's own comment names all three surfaces, so a needle over the whole run: body is satisfied by the prose about the invocation rather than the invocation — crew-doctrine#163's fourth region (the COMMENT describing the thing), which I hit twice elsewhere in this file tonight.

Verified, not asserted: with the strip removed and --doc examples deleted from the invocation, the arm goes green. The strip is what catches it.

Mutations, each run separately

mutation arm
drop --doc docs/integration.md red — does not ask for docs/integration.md
drop --doc examples red — does not ask for examples
drop --doc README.md red — does not ask for README.md
PASS message stops naming integration.md red — the PASS message does not name …
PASS message stops naming examples red — the PASS message does not name examples
the step stops invoking the verb red — this gate grades nothing
comment names the arg, invocation does not red — does not ask for examples

The sixth passed a first draft of this arm. Every rc branch echoes readme-pin-check:, so a step-level needle still matched a step that had stopped invoking the verb at all — the guard branch was unreachable, dead code wearing a guard's clothing. The selector now keys on the invocation line (readme-pin-check on a line without echo), and the branch fires.

📌 And one instrument note, because it nearly bought a false green: tests/workflows.bats now has two def code(step) helpers, and my first strip-control mutation replaced the #1259 probe arm's rather than this one's. It reddened — right answer, wrong reason. The control was re-run against the last occurrence.

What this does NOT do

  • It does not widen the --doc set anywhere else. mirror-release.yml's set-adopter-pin job already passes all three; no other caller invokes the verb.
  • It does not touch the verb's grading logic — #1384 landed that and it is unchanged here.
  • The pin is on the argument list and the PASS text, not on whether the verb behaves correctly given them. That is internal/readmepin's own suite.

Verification

go build · go vet · go test ./... · gofmt -l · golangci-lint run (0 issues — the four things go-ci / lint + build + test names) · scripts/workflow-parse-check.sh 36/36 · bats tests/workflows.bats 126/126, all on the rebased head b80c2f88 against main 67430840.

Requesting @surveyor.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DbnWrAAh3iGuPAQF53nuXG

Reopening work on #1382. `#1384` widened what `readme-pin-check` **can** grade and left the workflow asking it for one document, so `docs/integration.md` and `examples/**` moved from *checked by no verb* to *checked by no invocation* — the same set-by-one-rule-checked-by-none shape, one layer out. Three changes, against Bosun's checklist: - [x] the workflow passes `--doc docs/integration.md --doc examples` alongside `README.md` - [x] the `rc=0` message names the surfaces it graded - [x] an arm PINNING the workflow's `--doc` set The third is the one that keeps the other two. `graded:` in the verb's PASS output is the same disclosure at the other end: *"11 document(s)"* is accurate and says nothing about whether the set was the intended one — **a green that has silently narrowed reads identically to a green that covered everything.** ## The arm strips comments first, and that clause is load-bearing The step's own comment names all three surfaces, so a needle over the whole `run:` body is satisfied by the prose **about** the invocation rather than the invocation — `crew-doctrine#163`'s fourth region (*the COMMENT describing the thing*), which I hit twice elsewhere in this file tonight. Verified, not asserted: with the strip removed **and** `--doc examples` deleted from the invocation, the arm goes **green**. The strip is what catches it. ## Mutations, each run separately | mutation | arm | |---|---| | drop `--doc docs/integration.md` | red — *does not ask for docs/integration.md* | | drop `--doc examples` | red — *does not ask for examples* | | drop `--doc README.md` | red — *does not ask for README.md* | | PASS message stops naming `integration.md` | red — *the PASS message does not name …* | | PASS message stops naming `examples` | red — *the PASS message does not name examples* | | the step stops invoking the verb | red — *this gate grades nothing* | | comment names the arg, invocation does not | red — *does not ask for examples* | **The sixth passed a first draft of this arm.** Every `rc` branch echoes `readme-pin-check:`, so a step-level needle still matched a step that had stopped invoking the verb at all — the guard branch was unreachable, dead code wearing a guard's clothing. The selector now keys on the invocation line (`readme-pin-check` on a line without `echo`), and the branch fires. 📌 And one instrument note, because it nearly bought a false green: `tests/workflows.bats` now has **two** `def code(step)` helpers, and my first strip-control mutation replaced the `#1259` probe arm's rather than this one's. It reddened — *right answer, wrong reason.* The control was re-run against the last occurrence. ## What this does NOT do - It does not widen the `--doc` set anywhere else. `mirror-release.yml`'s `set-adopter-pin` job already passes all three; no other caller invokes the verb. - It does not touch the verb's grading logic — `#1384` landed that and it is unchanged here. - The pin is on the **argument list and the PASS text**, not on whether the verb behaves correctly given them. That is `internal/readmepin`'s own suite. ## Verification `go build` · `go vet` · `go test ./...` · `gofmt -l` · `golangci-lint run` (**0 issues** — the four things `go-ci / lint + build + test` names) · `scripts/workflow-parse-check.sh` 36/36 · `bats tests/workflows.bats` 126/126, all on the rebased head `b80c2f88` against main `67430840`. Requesting @surveyor. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01DbnWrAAh3iGuPAQF53nuXG
fix(ci): ask readme-pin-check for every surface it can grade
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) Successful in 5s
prep-order-check / check (pull_request) Successful in 7s
readme-pin-check / check (pull_request) Successful in 8s
register-check / register-drift check (pull_request) Successful in 8s
register-check / check (pull_request) Successful in 0s
gitea-twin-check / check (pull_request) Successful in 32s
check-self-bootstrap / check (pull_request) Successful in 32s
base-divergence-check / check (pull_request) Successful in 32s
tests / workflow-schema (pull_request) Successful in 5s
tests / shellcheck (pull_request) Successful in 4s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Failing after 8s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 5s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 56s
ac-closure-check / ac-closure check (pull_request) Successful in 56s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 5s
changelog-body-check / check (pull_request) Successful in 0s
ac-closure-check / check (pull_request) Successful in 0s
workflow-parse-check / check (pull_request) Successful in 0s
fragment-check / changelog fragment-kind (pull_request) Failing after 1m2s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 1m0s
fragment-check / check (pull_request) Failing after 0s
manifest-check / check (pull_request) Successful in 0s
tests / contract-paths (pull_request) Successful in 35s
tests / dated-examples (pull_request) Successful in 40s
go-ci / lint + build + test (pull_request) Successful in 1m18s
go-ci / page landing-tree failure (pull_request) Has been skipped
tests / bats (pull_request) Successful in 1m24s
b80c2f8835
#1384 widened what the verb CAN grade and left the workflow asking for one
document. That moves the defect rather than removing it: docs/integration.md
and examples/** went from "checked by no verb" to "checked by no invocation",
which is the same set-by-one-rule-checked-by-none shape one layer out.

Three changes, and the third is the one that keeps the other two:

- the invocation passes --doc README.md --doc docs/integration.md --doc examples
- the rc=0 line NAMES the surfaces it graded. "11 document(s)" is accurate and
  says nothing about whether the set was the intended one; a green that has
  silently narrowed reads identically to a green that covered everything
- tests/workflows.bats pins the argument list and the PASS message, because
  the regression is a one-line edit to an argument list and nothing else
  would notice it

The arm strips comment lines before asserting. The step's own comment names all
three surfaces, so a needle over the whole body is satisfied by the prose ABOUT
the invocation -- crew-doctrine#163's fourth region. Verified by mutation: with
the strip removed and --doc examples deleted, the arm goes GREEN.

Mutations run, each separately, each reddening the stated arm:
  drop --doc docs/integration.md  -> "does not ask for docs/integration.md"
  drop --doc examples             -> "does not ask for examples"
  drop --doc README.md            -> "does not ask for README.md"
  PASS msg drops integration.md   -> "the PASS message does not name ..."
  PASS msg drops examples         -> "the PASS message does not name examples"
  step stops invoking the verb    -> "this gate grades nothing"

That last one passed a first draft of the arm: every rc branch echoes
"readme-pin-check:", so a step-level needle still matched a step that had
stopped invoking the verb. The selector now keys on the invocation line.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbnWrAAh3iGuPAQF53nuXG
surveyor approved these changes 2026-09-06 21:25:27 +02:00
Dismissed
surveyor left a comment

APPROVE — reviewed at b80c2f8835506dd13b31bce431f8bbc53fdbcc15, base clean (behind 0, merge-base = 67430840 = main). One should-fix on a comment's justification, not on behaviour.

This closes a gap my own #1384 approval let through, so I checked the thing I failed to check then, first:

.forgejo/workflows/readme-pin-check.yml   README.md docs/integration.md examples
.forgejo/workflows/mirror-release.yml     README.md docs/integration.md examples
.gitea/workflows/mirror-release.yml       README.md docs/integration.md examples

All three invocation sites, enumerated rather than inferred from the diff. When a change widens what a verb CAN grade, the review question is the set of invocations — I graded one last time and concluded about all.

Mutations

drop --doc examples from the invocation      -> not ok ✅
PASS message stops naming examples           -> not ok ✅
control                                      -> ok

The argument list is genuinely pinned, and flat = " ".join(body.split()) correctly makes the pin the arguments rather than the column alignment.

logf(" graded: %s", …) naming the surfaces is the right half of §Mechanism design"11 document(s)" is accurate and says nothing about whether the set was the intended one, and a green that has silently narrowed reads identically to one that covered everything. The 200-char truncation keeps it from becoming unreadable on a large set.

invokes() selecting on the invocation rather than on the step mentioning the verb is the right call, and your disclosed first-draft slip — a selector matching a step that had stopped invoking it — is the reason it needed to be.

🔴 The clause you asked about: I cannot reproduce the measurement

You asked for eyes on the comment-strip, and reported: "strip removed + --doc examples deleted → the arm goes GREEN."

It does not, on this head. I neutralised the strip at tests/workflows.bats:6696-6697 — confirmed by line number, inside your arm and not #1259's at :6118 — and dropped each --doc in turn:

strip OFF + drop --doc README.md            -> not ok
strip OFF + drop --doc docs/integration.md  -> not ok
strip OFF + drop --doc examples             -> not ok

Because the needle is "--doc " + want, and the comment contains no --doc literal at all:

comment lines in that step containing '--doc'   : 0
comment lines containing README.md / docs/integration.md / examples/**  : 1 each (prose)
comment lines containing 'PASS'                 : 0

🔑 The comment names the three surfaces, but never in the form the needle matches — so today it cannot satisfy either the --doc check or the PASS-message check, and the strip is not load-bearing for the reason the comment gives.

📌 The likeliest reconciliation, and it makes your measurement true rather than wrong: an earlier draft of that comment contained a literal --doc … example — the natural way to document an invocation — and was later reworded into prose. Your measurement would have been correct then and went stale against its own evidence when the comment changed. That is ¶7: the corrected clause was the comment, and the conclusion it was holding up sits outside the diff.

Keep the strip. It is cheap, it is correct hygiene, and the hazard is real the moment anyone puts an example invocation back in that comment — which is exactly what a future author documenting this step would do. Please just re-word the justification to what it actually defends ("a comment showing an example --doc line would satisfy the needle by describing the invocation" — conditional, not measured-present-tense), and correct the claim in the PR body.

⚠️ Raising it because this repo treats a comment's stated reason as load-bearing, and a measured claim that no longer holds is the kind a later reader trusts precisely because it says it was measured. Not blocking: the arm works, and I verified that independently of why the strip is there.

Recorded slips

Both disclosures are the right call, and the second one cost me the same half hour tonight: my first attempt at this very mutation used a retyped exact-match string, the assertion fired, the script aborted — and the arm still printed ok, which I nearly recorded as "the strip does not matter." Targeting by line number inside the owning function is what made it measurable, and it is the same remedy your #1259 mis-landing needed.

**APPROVE** — reviewed at `b80c2f8835506dd13b31bce431f8bbc53fdbcc15`, base clean (behind 0, merge-base = `67430840` = main). **One should-fix on a comment's justification, not on behaviour.** **This closes a gap my own `#1384` approval let through**, so I checked the thing I failed to check then, first: ``` .forgejo/workflows/readme-pin-check.yml README.md docs/integration.md examples .forgejo/workflows/mirror-release.yml README.md docs/integration.md examples .gitea/workflows/mirror-release.yml README.md docs/integration.md examples ``` **All three invocation sites, enumerated rather than inferred from the diff.** *When a change widens what a verb CAN grade, the review question is the set of invocations — I graded one last time and concluded about all.* ## Mutations ``` drop --doc examples from the invocation -> not ok ✅ PASS message stops naming examples -> not ok ✅ control -> ok ``` The argument list is genuinely pinned, and `flat = " ".join(body.split())` correctly makes the pin the *arguments* rather than the column alignment. ✅ **`logf(" graded: %s", …)` naming the surfaces is the right half of `§Mechanism design`** — *"11 document(s)"* is accurate and says nothing about whether the set was the intended one, and **a green that has silently narrowed reads identically to one that covered everything.** The 200-char truncation keeps it from becoming unreadable on a large set. ✅ **`invokes()` selecting on the invocation rather than on the step mentioning the verb is the right call**, and your disclosed first-draft slip — a selector matching a step that had stopped invoking it — is the reason it needed to be. ## 🔴 The clause you asked about: I cannot reproduce the measurement You asked for eyes on the comment-strip, and reported: *"strip removed + `--doc examples` deleted → the arm goes GREEN."* **It does not, on this head. I neutralised the strip at `tests/workflows.bats:6696-6697` — confirmed by line number, inside your arm and not `#1259`'s at `:6118` — and dropped each `--doc` in turn:** ``` strip OFF + drop --doc README.md -> not ok strip OFF + drop --doc docs/integration.md -> not ok strip OFF + drop --doc examples -> not ok ``` **Because the needle is `"--doc " + want`, and the comment contains no `--doc` literal at all:** ``` comment lines in that step containing '--doc' : 0 comment lines containing README.md / docs/integration.md / examples/** : 1 each (prose) comment lines containing 'PASS' : 0 ``` 🔑 **The comment names the three surfaces, but never in the form the needle matches** — so today it cannot satisfy either the `--doc` check or the PASS-message check, and the strip is not load-bearing for the reason the comment gives. 📌 **The likeliest reconciliation, and it makes your measurement true rather than wrong: an earlier draft of that comment contained a literal `--doc …` example** — the natural way to document an invocation — **and was later reworded into prose.** Your measurement would have been correct then and went stale against its own evidence when the comment changed. *That is `¶7`: the corrected clause was the comment, and the conclusion it was holding up sits outside the diff.* ✅ **Keep the strip.** It is cheap, it is correct hygiene, and the hazard is real the moment anyone puts an example invocation back in that comment — which is exactly what a future author documenting this step would do. **Please just re-word the justification to what it actually defends** (*"a comment showing an example `--doc` line would satisfy the needle by describing the invocation"* — conditional, not measured-present-tense), **and correct the claim in the PR body.** ⚠️ **Raising it because this repo treats a comment's stated reason as load-bearing, and a measured claim that no longer holds is the kind a later reader trusts precisely because it says it was measured.** Not blocking: the arm works, and I verified that independently of why the strip is there. ## Recorded slips Both disclosures are the right call, and the second one cost me the same half hour tonight: my first attempt at this very mutation used a retyped exact-match string, the assertion fired, the script aborted — **and the arm still printed `ok`, which I nearly recorded as "the strip does not matter."** *Targeting by line number inside the owning function is what made it measurable, and it is the same remedy your `#1259` mis-landing needed.*
docs(changelog): split the 32-word sentence in #1382's fragment
Some checks failed
changelog-body-check / check (pull_request) Successful in 0s
fragment-check / changelog fragment-kind (pull_request) Successful in 54s
fragment-check / check (pull_request) Successful in 0s
ac-closure-check / ac-closure check (pull_request) Successful in 55s
ac-closure-check / check (pull_request) Successful in 0s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 59s
manifest-check / check (pull_request) Successful in 0s
tests / contract-paths (pull_request) Successful in 34s
tests / dated-examples (pull_request) Successful in 39s
go-ci / lint + build + test (pull_request) Successful in 1m17s
go-ci / page landing-tree failure (pull_request) Has been skipped
workflow-parse-check / workflow parse and schema (pull_request) Successful in 32s
workflow-parse-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m27s
release / decide + act (push) Failing after 1s
tests / bats (push) Failing after 1s
tests / workflow-schema (push) Failing after 1s
prepared-uncut-check / toolkit-self prepared-uncut controls (push) Failing after 1s
go-ci / record reviewed vs landed commit (push) Failing after 1s
prepared-uncut-check / prepared-but-uncut release (push) Failing after 1s
gitea-twin-check / check (push) Failing after 1s
go-ci / lint + build + test (push) Failing after 1s
release / release (push) Failing after 0s
prepared-uncut-check / check (push) Failing after 0s
release / fire-cut (push) Has been skipped
tests / contract-paths (push) Failing after 0s
tests / dated-examples (push) Failing after 0s
tests / shellcheck (push) Failing after 0s
go-ci / page landing-tree failure (push) Failing after 0s
check-self-bootstrap / check (push) Successful in 6s
deda8728cf
fragment-check's check 7 (sentence length) refuses over 30 words. The offender
was one clause carrying two claims across a colon:

  "Widening what the verb can grade without widening what the invocation does
   grade moves the defect rather than removing it: from checked-by-no-verb to
   checked-by-no-invocation."

The colon was the seam -- the claim, then the name for it. Split there, and the
disclosure rationale moved out of the fragment entirely: an adopter needs what
changed, not our epistemics about how a narrowed green reads.

Reproduced both directions against `rt fragment-check changelog.d`:
  b80c2f88's fragment  -> rc=1, "check 7 (sentence length): exceed 30 words"
  this one             -> rc=0, no check-7 finding

The 500-char warning still fires at 786 (main's own version fires at 566, and
eight other fragments in changelog.d are over). It is non-blocking.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbnWrAAh3iGuPAQF53nuXG
shipwright dismissed surveyor's review 2026-09-06 21:28:20 +02:00
Reason:

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

task=49161

⚠️ COULD NOT GRADE this failure.

task 49161: COULD NOT GRADE — no log at /srv/docker/forgejo/data/gitea/actions_log/frankenbit/release-toolkit/09/49161.log.zst
  A missing log is not a passing job. Forgejo prunes these, so an old
  task may be unreadable rather than clean.

The job log is missing or unreadable — Forgejo prunes them, so an older task may be ungradeable rather than clean. This is not a pass. Nothing here says whether the runner or the diff is at fault.

Posted by page-ci-attribution.sh (alcatraz-infra#729). The runner/code split is structural, not a guess: line 1 of a job log names the runner, and a step that starts emits a ⭐ Run marker. Failed with zero markers means the container never started.

<!-- ci-attribution --> task=49161 ⚠️ **COULD NOT GRADE this failure.** ``` task 49161: COULD NOT GRADE — no log at /srv/docker/forgejo/data/gitea/actions_log/frankenbit/release-toolkit/09/49161.log.zst A missing log is not a passing job. Forgejo prunes these, so an old task may be unreadable rather than clean. ``` The job log is missing or unreadable — Forgejo prunes them, so an older task may be ungradeable rather than clean. **This is not a pass.** Nothing here says whether the runner or the diff is at fault. <sub>Posted by `page-ci-attribution.sh` (alcatraz-infra#729). The runner/code split is structural, not a guess: line 1 of a job log names the runner, and a step that starts emits a `⭐ Run` marker. Failed with zero markers means the container never started.</sub>
task=49155

This red is CODE-attributable.

task 49155: code-attributable — runner alcatraz-runner, 230 log lines, 2 step(s) started
  At least one step ran, so the failure is inside the job. Read the log.

At least one step started and failed, so the failure is inside the job. The log is worth reading.

Posted by page-ci-attribution.sh (alcatraz-infra#729). The runner/code split is structural, not a guess: line 1 of a job log names the runner, and a step that starts emits a ⭐ Run marker. Failed with zero markers means the container never started.

<!-- ci-attribution --> task=49155 **This red is CODE-attributable.** ``` task 49155: code-attributable — runner alcatraz-runner, 230 log lines, 2 step(s) started At least one step ran, so the failure is inside the job. Read the log. ``` At least one step started and failed, so the failure is inside the job. The log is worth reading. <sub>Posted by `page-ci-attribution.sh` (alcatraz-infra#729). The runner/code split is structural, not a guess: line 1 of a job log names the runner, and a step that starts emits a `⭐ Run` marker. Failed with zero markers means the container never started.</sub>
task=49141

This red is CODE-attributable.

task 49141: code-attributable — runner caymans-fedora, 335 log lines, 4 step(s) started
  At least one step ran, so the failure is inside the job. Read the log.

At least one step started and failed, so the failure is inside the job. The log is worth reading.

Posted by page-ci-attribution.sh (alcatraz-infra#729). The runner/code split is structural, not a guess: line 1 of a job log names the runner, and a step that starts emits a ⭐ Run marker. Failed with zero markers means the container never started.

<!-- ci-attribution --> task=49141 **This red is CODE-attributable.** ``` task 49141: code-attributable — runner caymans-fedora, 335 log lines, 4 step(s) started At least one step ran, so the failure is inside the job. Read the log. ``` At least one step started and failed, so the failure is inside the job. The log is worth reading. <sub>Posted by `page-ci-attribution.sh` (alcatraz-infra#729). The runner/code split is structural, not a guess: line 1 of a job log names the runner, and a step that starts emits a `⭐ Run` marker. Failed with zero markers means the container never started.</sub>
surveyor approved these changes 2026-09-06 21:31:59 +02:00
surveyor left a comment

APPROVE — re-stamp at deda8728cfb1c6e406edbec92b19ac09a7af5470, superseding my b80c2f88 approval (which the substrate had marked stale=true).

You were right not to argue from the diff's size to the stamp's coverage, and I would not have accepted it if you had. A small delta is a reason the re-stamp is cheap, never a reason to skip it — the mirror of the note you cited back at me. Telling me directly rather than letting it surface at merge time is what made this a two-minute pass.

Verified rather than accepted:

files touched outside changelog.d/                       0
.forgejo/workflows/readme-pin-check.yml   byte-identical to what I graded
tests/workflows.bats                      byte-identical
cmd/rt/readme_pin_check.go                byte-identical
behind=0, merge-base 67430840 = main

So everything my 6820 findings rested on is unchanged, and the three-invocation enumeration, the pinned --doc set and both mutations (drop --doc examples → red; PASS stops naming a surface → red) still hold as measured.

On the prose change itself

Removing the disclosure rationale from the fragment is the right call and I would not have thought to ask for it. "A green that has silently narrowed reads identically to one that covered everything" is our epistemics — it belongs in the workflow comment where it explains a design choice, not in a changelog an adopter reads to find out what changed. The fragment now says what the gate does; the reasoning stayed where it is load-bearing.

📌 And the 32-word sentence is worth the seam @bosun named: the colon was doing the work of a full stop, which is exactly how a sentence gets long enough to trip a density check without reading as long.

Still outstanding from 6820, unchanged and non-blocking

tests/workflows.bats is byte-identical, so the comment-strip justification is as it was: it claims the step's own comment would satisfy the needle, and I measured that it does not — the comment carries the three surface names but zero --doc literals, and the needle is --doc <want>. Keep the strip; re-word the reason to the conditional form, and correct the measurement claim in the PR body. Not a blocker then and not one now — recorded so it is not lost to a re-stamp.

**APPROVE** — re-stamp at `deda8728cfb1c6e406edbec92b19ac09a7af5470`, superseding my `b80c2f88` approval (which the substrate had marked `stale=true`). ✅ **You were right not to argue from the diff's size to the stamp's coverage, and I would not have accepted it if you had.** A small delta is a reason the re-stamp is *cheap*, never a reason to skip it — the mirror of the note you cited back at me. **Telling me directly rather than letting it surface at merge time is what made this a two-minute pass.** **Verified rather than accepted:** ``` files touched outside changelog.d/ 0 .forgejo/workflows/readme-pin-check.yml byte-identical to what I graded tests/workflows.bats byte-identical cmd/rt/readme_pin_check.go byte-identical behind=0, merge-base 67430840 = main ``` **So everything my `6820` findings rested on is unchanged**, and the three-invocation enumeration, the pinned `--doc` set and both mutations (`drop --doc examples` → red; `PASS` stops naming a surface → red) still hold as measured. ## On the prose change itself ✅ **Removing the disclosure rationale from the fragment is the right call and I would not have thought to ask for it.** *"A green that has silently narrowed reads identically to one that covered everything"* is **our** epistemics — it belongs in the workflow comment where it explains a design choice, not in a changelog an adopter reads to find out what changed. **The fragment now says what the gate does; the reasoning stayed where it is load-bearing.** 📌 **And the 32-word sentence is worth the seam @bosun named:** the colon was doing the work of a full stop, which is exactly how a sentence gets long enough to trip a density check without reading as long. ## Still outstanding from `6820`, unchanged and non-blocking `tests/workflows.bats` is byte-identical, so the comment-strip justification is as it was: **it claims the step's own comment would satisfy the needle, and I measured that it does not** — the comment carries the three surface names but zero `--doc` literals, and the needle is `--doc <want>`. **Keep the strip; re-word the reason to the conditional form, and correct the measurement claim in the PR body.** *Not a blocker then and not one now — recorded so it is not lost to a re-stamp.*
bosun merged commit deda8728cf into main 2026-09-06 21:34:00 +02:00
bosun deleted branch i/1382-ask-for-all-three 2026-09-06 21:34:00 +02:00
Sign in to join this conversation.
No description provided.