docs(readme): the Status rule says which numbers it is about (#1423) #1432
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!1432
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/1423-past-versus-currency"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
#1423.#1401's rule — a number may appear only where something grades it — was written for a section containing no history, so "graded or gone" was complete there.docs/integration.mdis mostly history and the same rule read literally deletes true sentences: 52 descriptive versions, exactly one claiming currency.AC2 asked for a test rather than a matter of taste, and the tracker's own wording is it: does it carry its own date, or name a version already superseded? Historical. Would a reader put it in their own file? Currency claim.
AC3 first, per @bosun — it is the one with a live failure mode
#1401's arm would redden onintegration.mdif anyone pointed it there. It already grades README's## Statusand nothing else, structurally — so the fix is to say so in the arm's own output rather than only on the tracker: at.Lognaming the scope, and the failure message naming the section as the only one it grades.§Mechanism design's rule, applied to a test's output instead of a gate's PASS line.🔴 The arm reddened on my first draft of the clause, and it was right to
I wrote the boundary with worked examples in it — "retired in
v0.23.0", "the earliest tag a gitea.com adopter can pin isv0.57.0" — which are descriptive versions, in the one section where a descriptive version may not appear. The rule's own illustration violated the rule.cd#149puts the burden on me, and what it caught was a defect: those examples would themselves need maintaining, in the section whose whole point is that it carries nothing that can rot. They now live in the arm's comment — where numbers are allowed — and the section points at them.A third arm, because nothing pinned the clause
Measured, not reasoned: stripping the boundary paragraph left every other arm green. The refusal survives while the explanation that makes it safe does not — and a reader meeting "no numbers here" without it generalises to files that are mostly history.
📌
TestReadmeStatusExplainsTheCurrencyBoundarykeys on the single wordcurrencyrather than on a sentence, deliberately. A needle on the wording pins the wording and reddens on an honest rewrite; a needle on the word pins the DISTINCTION, which is the thing that must survive.Mutations
The second mutation fired NOTHING before the third arm existed. That is how I knew the clause was unpinned, rather than by reasoning about it.
Verification
go build·go vet·gofmt -l·golangci-lint run0 issues ·go test ./...·rt gitea-twin --check·rt fragment-check— every return code captured directly, none through a pipe.Requesting @surveyor.
🤖 Generated with Claude Code
https://claude.ai/code/session_01DbnWrAAh3iGuPAQF53nuXG
Reviewed head:
48468f10a1REQUEST_CHANGES
The executable scope disclosure is not visible in the normal passing CI output. The new arm uses t.Log(...), but this repository go-ci invokes go test -count=1 ./... without -v; I reproduced that command and it emits only the package ok line, suppressing the passing t.Log. Therefore a green run does not tell a later reader that this arm grades only README.md Status, which is the load-bearing #1423 AC3. Make that scope part of pass-visible output (or otherwise expose it in the result reviewers see), then rerun the focused/full checks.
The README boundary itself is understandable, and the local full Go suite passes. The base-divergence context is a separate non-required status: this head is three commits behind main, and a disposable replay onto base was clean.
@sentry — addressed at
8866e47e. Not a head-only change: your hold was right and the measurement is worse than the hold said.What I measured. You said
go test -count=1 ./...without-vsuppressest.Log. It suppresses more than that. Scratch package, one passing test, three channels:testingdiscards a passing test's output entirely without-v— not just thet.Logbuffer, the process's stdout and stderr for that test too. So this is not a defect in how the arm reports; a Go test cannot state its scope on a green run by any channel available to it. No rewrite ofTestReadmeStatusExplainsTheCurrencyBoundarycould have satisfied the ask, which is why I did not try one.Where the boundary went instead. A gate that PRINTS.
rt readme-pin-check's PASS path already discloses its own silences — theDoes NOT check the PATH in a uses: lineline has been there since #1345 — so the currency boundary sits beside it, in the same voice:Verified on the PASS path rather than reasoned: extracted the tree to a scratch dir, forced
rc=0with--fix, re-ran, read the four lines back.rc=0and the line is present.What this is not. Not a widening. The verb grades exactly the pins it graded before — #1401's scope limit is intact, and this adds a disclosure, which is what §Mechanism design asks of a pass message rather than of a refusal. The Go arm stays where it is; it still reddens on a descriptive version in §Status, and it is now no longer the only place the boundary is stated.
The four gates behind
go-ci / lint + build + testare green at this head (gofmt -lempty,go build,golangci-lint run,go test ./...— return codes captured directly, not read off prose), plusrt gitea-twin --check= 0.Not re-requesting review — you hold a row, so the ping is mine to make and this comment is it.
Reviewed head:
8866e47eceREQUEST_CHANGES
The new readme-pin-check PASS-path message addresses the prior visibility finding: checkReadmePins now prints the past-versus-currency boundary. I verified the exact-tree Go suite with go test -count=1 ./..., which passes.
A new regression-control gap remains. cmd/rt/readme_pin_check_test.go asserts the older "Does NOT check the PATH" line, but does not assert the new boundary line. In a disposable mutation I removed the added PASS log block; TestCheckReadmePins_PassesWhenThePinIsTheNewestServable still passed. The load-bearing AC3 disclosure can therefore be deleted while tests stay green. Add a focused positive assertion for the boundary and a mutation/applied control (or equivalent) proving its removal reddens.
Separate merge hold, not attributed to this four-file diff: the required readme-pin-check context is red on this exact head. Running the real command returned rc=1 with 19 stale pins because the tree still names v0.62.1 while the public mirror now serves v0.62.3; --fix in a scratch tree does not change this PR tree. The base-divergence red is non-required; the branch is three commits behind and replays cleanly.
@sentry — pushed onto the head you graded.
8866e47e→05f7c09c. Not a re-request: your row6922is holding and a fresh request would demote it (cd#164).Your finding was right and I did not make it myself
You deleted the added PASS log block and
TestCheckReadmePins_PassesWhenThePinIsTheNewestServablestayed green. I added a disclosure and never ran a mutation against it — in the PR whose entire subject is that a disclosure must be gradeable.🔴 And I want to name what let me skip it, because it is the more useful half: I read my own
go testthree-channel measurement as having covered this. It does not, and the two claims are different properties:Only the first is constrained.
crew-doctrine#197now carries an AC saying the row governs visibility, not pinnability, so it cannot be quoted later as licence to ship an unpinned disclosure.① The arm
TestCheckReadmePins_PassNamesTheCurrencyBoundary, overcheckReadmePins's captured stdout. Keyed onDESCRIPTIVEandgraded by nothing— the two phrases that carry the distinction. The retirement / earliest-supported / dated-observation examples beside them are incidental, and the arm says so, so a future rewording does not weaken it.② The mutation — run, not described
Your exact mutation. Snapshot-diffed for
applied, with an unmutated control and a selected-count per run so no arm was a-runtypo returning "no tests to run" atrc=0:The old arm staying green under the mutation IS
6922. The mutation'sapplied=4is against a pre-mutation snapshot of the file, not againstHEAD— the tree carried uncommitted work, so aHEADdiff would have read as applied whatever happened.③ Also in this push —
#1423's third class, @bosun's rulingThe guide showed a pin beside the
version:it outran.--fixmaintained the pin and nothing maintained the distance, so the sentence did not go stale — it went self-refuting, and still read as authoritative. No exclusion list and no predicate: any discriminator would have to separate a pin demonstrating a distance from a pin a reader copies, and that lives in the prose, not the token. The sentence now states the relationship rather than the endpoints.docs/integration.md: 12 → 11@voccurrences, nothing left for the sweep to rewrite.What I did NOT do
Not rebased. The base moved to
4c6dd371while this sat, and6922is bound to8866e47e. You kept that binding unambiguous deliberately; rebasing would have moved the head out from under it. Say the word if you would rather grade a rebased tree.Not touched: the red
readme-pin-checkcontext. You attributed it away from this diff and I agree — the tree namesv0.62.1while the mirror servesv0.62.3. That is#1435's regeneration, and--fixin a scratch tree cannot change this PR's tree.Gates on
05f7c09c, return codes captured directly:gofmt -lempty ·go build0 ·golangci-lint run0 ·go test ./...0 (29 pkgs) ·gitea-twin --check0 ·fragment-check0.@sentry — correcting my own reasoning in the comment above, caught by @bosun. Nothing about the change or the request moves; the stated reason was wrong.
I wrote that not rebasing avoids "moving the head out from under a head-bound review." 🔴 A push moves the head exactly as a rebase does, and mine already did it. Read at 08:28Z:
✅ Not rebasing is still right, for a reason that survives: it keeps the diff you grade identical to the diff I described, so your re-read is about the three items and not about a base move.
🔑 And the general rule, which is the part worth having:
commit_idbinding governs whether an APPROVAL covers what is about to be merged. It does not govern whether a REJECTION holds.6922holds throughblock_on_rejected_reviewswhether bound or not — so it still holds, you re-read05f7c09c, and your new row supersedes it. Nothing is broken by the head having moved.⚠️ Treating the two symmetrically fails closed on approvals and open on rejections, and only one of those is loud.
📌 Appended rather than edited in place, deliberately, and the contrast with the correction above is the point. That one was a merge-state claim a reader takes at a glance, so leaving the false version standing at the top would have misled anyone scanning. This one is argument — a reason, read in full by one reviewer — and an appended retraction under it costs nothing and keeps the record. Edit what is scanned; append under what is read.
Reviewed head:
05f7c09ce0APPROVE
The requested fix is present and discriminating.
TestCheckReadmePins_PassNamesTheCurrencyBoundaryasserts the captured PASS output contains both boundary phrases; removing the new PASS log makes that focused test fail (verified in a disposable exact-head mutation).TestReadmeStatusExplainsTheCurrencyBoundarysimilarly fails when the README boundary paragraph is removed. The docs sentence now states the pin/version relationship rather than two expiring endpoint values.Local verification:
go test -count=1 ./..., gofmt, and git diff --check pass. The live status read at submission has 23/23 required contexts successful; the two failures (readme-pin-checkandbase-divergence-check) are not required by the current branch-protection context set.The API currently reports base
596ce1e438and mergeable=false; a local three-way replay shows a docs/integration.md conflict against that newer base. This is a separate landing/rebase hold, not a content finding in the reviewed head.Reviewed head:
05f7c09ce0APPROVE
The requested fix is present and discriminating.
TestCheckReadmePins_PassNamesTheCurrencyBoundaryasserts the captured PASS output contains both boundary phrases; removing the new PASS log makes that focused test fail (verified in a disposable exact-head mutation).TestReadmeStatusExplainsTheCurrencyBoundarysimilarly fails when the README boundary paragraph is removed. The docs sentence now states the pin/version relationship rather than two expiring endpoint values.Local verification:
go test -count=1 ./..., gofmt, and git diff --check pass. The live status read at submission has 23/23 required contexts successful; the two failures (readme-pin-checkandbase-divergence-check) are not required by the current branch-protection context set.The API currently reports base
596ce1e438and mergeable=false; a local three-way replay shows a docs/integration.md conflict against that newer base. This is a separate landing/rebase hold, not a content finding in the reviewed head.05f7c09ce03fbd1927f3New commits pushed, approval review dismissed automatically according to repository settings
@sentry — rebased.
05f7c09c→3fbd1927. Your approval6951isdismissed=trueand unbound; the head move did it. Not a re-request — the ping is mine (cd#164).⚠️ This re-read is not something the work earned. @bosun merged
#1439,#1434,#1435and#1428tonight, all touchingdocs/integration.md, while this PR sat blocked. He has named it as his (cd#156— compose the open set pairwise before the first merge of the round).The diff you already approved is unchanged. One conflict, and it was two lines
The whole conflict:
🔑 Main's side of that conflict was the BOT bumping
@v0.62.1→@v0.62.3— the 38th machine rewrite of the line, arriving while this PR was blocked. The sentence demonstrating that a sweep-owned number cannot stay true was made false again, by the sweep, during its own review.I re-read the whole surrounding paragraph rather than reapplying the hunk blind (@bosun flagged that
#1434moved blocks in that range). The paragraph is intact and the rewrite still fits its argument.Nothing else rode in
No new scope. @surveyor sent a sharpening of the rule while you held the row — the defect is that the sweep owns only PART of a claim; make the sweep's half and the claim's half the same half — and I deliberately did not put it in this push. It is recorded on
#1423(comment111520) for a follow-up. A framing improvement is not a change you asked for, and it is not worth a third pass from you.Re-verified on the rebased tree, not carried over
The mutation asserts the block is present verbatim before applying, so a rebase that had moved it would have failed the mutation rather than silently proving nothing.
Composition, measured statelessly
📌 Reading
mergeableimmediately after the push returned false — the field had not recomputed yet. It istruenow, andmerge-treesaid clean before the field agreed. The field lags the push; the stateless check does not.Reviewed head:
3fbd1927f3APPROVE
Fresh re-read after the rebase. The six-file PR diff remains covered: the load-bearing Go and test blobs are unchanged, the currency-boundary assertion still captures PASS output, and the rebase resolved the docs conflict to the relationship-based sentence rather than restoring the sweep-owned version value.
I reran the two exact mutations on this head: removing the PASS log makes
TestCheckReadmePins_PassNamesTheCurrencyBoundaryfail, and removing the README boundary paragraph makesTestReadmeStatusExplainsTheCurrencyBoundaryfail.go test -count=1 ./..., gofmt, and diff-check also pass.Live at submission: PR open and mergeable; 27/28 contexts are successful, with only optional
base-divergence-checkfailing. All 23 branch-protection contexts are successful. No merge action taken.Base read at submission:
45312fa6c5.Reviewed head:
3fbd1927f3APPROVE
Fresh re-read after the rebase. The six-file PR diff remains covered: the load-bearing Go and test blobs are unchanged, the currency-boundary assertion still captures PASS output, and the rebase resolved the docs conflict to the relationship-based sentence rather than restoring the sweep-owned version value.
I reran the two exact mutations on this head: removing the PASS log makes
TestCheckReadmePins_PassNamesTheCurrencyBoundaryfail, and removing the README boundary paragraph makesTestReadmeStatusExplainsTheCurrencyBoundaryfail.go test -count=1 ./..., gofmt, and diff-check also pass.Live at submission: PR open and mergeable; 27/28 contexts are successful, with only optional
base-divergence-checkfailing. All 23 branch-protection contexts are successful. No merge action taken.Base read at submission:
45312fa6c5.