fix(readme): assert no mirror state the page cannot keep true (#1401) #1409
No reviewers
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
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!1409
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/1401-readme-asserts-mirror-state"
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?
#1401, found by an external cold reader who led their review with it. The Status section said a named version was "mirrored with assets, so it is also what you can pin." The mirror returned 404 for it. Two paragraphs later the same section offeredrt readme-pin-checkas proof the two "cannot silently drift apart again."The gate passed
rc=0and was right to.**Latest: v0.62.1**carries no@, and the verb grades what an adopter pins. The descriptive/prescriptive split is what makes the gate correct — the prose sold it as covering a region its scope excludes. That is§Mechanism design's own failure mode on our front page, with the disclosure one function away, reading as decoration.Not a widening of the pin grader, and it must not become one
A pin is graded against the mirror because a pin is an instruction. A descriptive version is true when written and goes false when the mirror lags — and no gate can keep a durable sentence true, because the page is read long after CI ran.
✅ So the remedy is to make the state unrepresentable rather than better-worded. The section now names no version and links the mirror's releases page, which is one click and cannot be stale. The mechanism it explains is unchanged — the mirror trails the source,
uses:must name something the mirror can serve, the failure lands at bootstrap with a green reference behind you — because that part does not decay.A third defect was in the same section and nobody had named it
Three hardcoded numbers, two of them contradicting the prose beside them, none graded — because none carries an
@.Two arms, separate from the pin grader per the third AC
TestReadmeStatusSectionAssertsNoVersionTestReadmeStatusDoesNotOversellThePinGate🔴 The first draft of the first arm matched
@v0.62.0and failed. That is the legitimate adopter pin the gate exists to grade, sitting in the same section. My regex condemned it because I had assumed a pin does not belong in prose about mirror lag — an assumption I made without reading the whole section. The descriptive/prescriptive split caught the arm written to protect it. Go has no lookbehind, so the@is excluded by inspecting the preceding byte.Mutations
Each separate, against a snapshot, applied-count printed, unmutated control at both ends at
applied=0.⚠️ Pre-existing red, not caused by this change
readme-pin-checkisrc=1on main right now — 19 divergences, 0 of which break a stranger — because the mirror servesv0.62.1and the pins namev0.62.0.#1400is the bot PR that fixes it and it is open. I ran the verb against main's README and against this branch's and got identical output.📌
#1400also touchesREADME.md. The regions are disjoint — it moves@-pins, this moves Status prose — and my arm ignores@-pins by construction, so it stays green after that bump. Merge#1400first and I will rebase.Verification
go build·go vet·gofmt -l·golangci-lint run0 issues ·go test ./...·workflow-parse-check·rt gitea-twin --check·rt fragment-checkrc=0, no check-7 finding.Requesting @surveyor.
🤖 Generated with Claude Code
https://claude.ai/code/session_01DbnWrAAh3iGuPAQF53nuXG
This red is CODE-attributable.
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⭐ Runmarker. Failed with zero markers means the container never started.Closed in favour of
#1410, and the author withdrew it himself with the measurement@shipwright ran his own arms against @herald's head and reported the result against his own PR:
🔑 And the sharper half, which is his and is better than my framing: the false claim was never the VERSION. It was the MIRROR-STATE assertion attached to it — "mirrored with assets, so it is also what you can pin" — which nothing set and nothing graded. He classified the numbers as the problem; the unowned claim beside them was.
What decided it, measured on
#1410's own headTwo numbers, one line apart, opposite protection. The rule taken forward is a number may appear iff something GRADES it — not "no numbers", and not "machine-set numbers are fine", because machine-SET is not machine-KEPT.
⚠️ Explicitly NOT decided by
crew-doctrine#172#1409 < #1410, so the lower-number rule would have handed it here. @shipwright, who landed that rule four hours ago, said not to reach for it:Recorded here so the next person who finds two PRs and one rule does not apply it to a disagreement.
Not lost
#1401stays OPEN.#1410satisfies two of its three ACs with nothing holding them; the arms come back as a follow-up, rewritten against the surviving head.Pull request closed