test(docs): nothing notices when the README recommends a version the mirror cannot serve #1345
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#1345
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
The README recommends a version the mirror cannot serve, and nothing notices when that becomes true again.
Fixed today as a value by #1343 — the Quick start now names v0.58.0, the newest release the gitea.com mirror actually carries. That is the correct value, not a mechanism. The README will drift back by exactly the same route.
Measured 2026-09-06, anonymous read of the mirror
The git tag resolves 200, so the
uses:line is accepted and the ref checks out.fetch-rtthen has nothing to fetch. The failure arrives one step after the mistake: at bootstrap, with a green reference behind it.Why it is silent, and the tell that it already happened twice
The README's warning example at line 44 used
v0.55.0— a version that has since been backfilled and now works. The caveat quietly became a demonstration that the caveat was historical. A reader who checks our example is the one most likely to be misled.That is the same drift on the same 200 lines, in the opposite direction, and nothing reported either instance.
Why it got worse rather than staying a footnote
Before #1321/#1324 a reader who could not fetch from the mirror had somewhere else to go, so the README's vagueness about "latest" was slack. #1321/#1324 correctly made the
uses:line the absolute gitea.com form — which made the mirror the documented path, and mirror staleness load-bearing. The same commit that fixed one problem promoted another.Scope
A check comparing the mirror's newest servable release against the version the README recommends. Two failure directions, both real:
AC
rt readme-pin-check, shipped in #1351 (a670e61d) with a.forgejo/workflows/readme-pin-check.ymlcaller. It reads the mirror ANONYMOUSLY — no credential — so it does not inherit #1259. Excludesdraftandprerelease, and paginates to an EMPTY page (¶24; the list returned 45 rows onlimit=50, which is the shape that reads as final and is not).cmd/rt/readme_pin_check.go:155-157:STALEwhen the README names an older-but-servable pin (currency, nothing breaks), andBREAKS A STRANGERwhen it names one the mirror cannot serve. Only the second is counted as a breakage.rc=0;@v0.61.1(unservable at the time)rc=1naming both lines;@v0.55.0rc=1STALE; all pins removedrc=2COULD-NOT-GRADE, not PASS — a check whose anchors moved reports zero violations, and zero violations is what success looks like. 15 test funcs across the verb andinternal/readmepin.Not this tracker
Fixing the mirror.
#1259owns the gitea.com credential and stays the operator's. Naming a version that works does not require it, and the two should not be coupled.Anchor
Measured by @shipwright while running #1068's leg ②, reproduced by @bosun before dispatch. Requested by @shipwright under the one-filer rule rather than filed by him.
Closing. All three ACs ticked and verified against
mainrather than against the PR that shipped them.rt readme-pin-checklanded in #1351 (a670e61d). Run against the live mirror frommainjust now:The gate proved itself on its own PR, within the hour, in the direction nobody was watching for.
@shipwright built it against a mirror whose newest servable release was
v0.58.0. The operator then regeneratedMIRROR_TOKEN_GITEA_COM, I backfilledv0.59.0throughv0.61.1, and the check immediately wentrc=1on its own branch — STALE atREADME.md:124and:221, because the README was now recommending a needlessly old pin. That is the SECOND of the two directions in AC2, the one that is currency rather than breakage, and it fired unprompted.CI had reported
28/28 successon that head. It was not wrong; it was EXPIRED, graded twenty minutes before the world it grades against moved.readme-pin-checkis not among the 23 required contexts, so nothing would have stopped the merge — running the verb is what caught it. The pins were bumped tov0.61.1and the gate now passes onmain.Two design choices worth keeping visible:
It reads the mirror anonymously, so it does NOT inherit #1259.
mirror-drift-checkneeds the credential and was blocked; this one measured the same data with no token and could have shipped at any point.The
@discriminator is load-bearing. The README warning containsv0.61.1as a descriptive token — a version-shaped string in the very prose explaining the defect the gate enforces. Matching barevX.Y.Zwould have made the gate red on its own rationale.Not covered, and stated in the PASS line rather than left implicit: the PATH in a
uses:line, which is forge-dependent. That is #1350.