Skip to content

README: the Go badge reads go.mod instead of restating it - #810

Merged
tannevaled merged 1 commit into
mainfrom
docs/dynamic-go-badge
Oct 10, 2026
Merged

tannevaled merged 1 commit into
mainfrom
docs/dynamic-go-badge

Conversation

@tannevaled

Copy link
Copy Markdown
Contributor

Three corrections, and the third was undone

The Go badge has been corrected for the same reason three times (#793, #795,
and once more yesterday) — and the third time it was corrected and then
reverted: on 2026-10-10 Renovate force-pushed renovate/deps over a
commit that had fixed the badge and gone green on every lane, reinstating
1.27.1 against a 1.27.2 directive.

12f575945 my fix — ci success, rubyspec-ratchet success
88c62b8b5 Renovate's force-push — ci failure on the badge guard

A number a human has to retype is a number that comes back. So it stops being
retyped: shields.io's github/go-mod/go-version endpoint reads the directive
out of the repository — verified against this one, where it renders
Go: v1.27.1 — the same way the release badge stopped naming a version in #801.

The guard gets stricter, not weaker

Three ways, because removing a thing to check is exactly when a guard quietly
becomes decorative:

  • A dynamic badge is not compared against a value, since it cannot disagree
    with one. Instead the test now fails if a literal badge is left beside it —
    that would be a second, rottable copy, which is the thing being removed.
  • The number of hand-written statements required drops from 2 to 1 only when
    the badge is dynamic
    . Demanding two would force someone to add a rottable
    number back. It never drops to 0: a README that states the minimum nowhere
    would pass a check for "no wrong statement" by saying nothing, and a reader
    deciding whether they can depend on the module needs the number on the page.
  • No badge of either kind is still a hard failure.

Checked in four directions — and one of my controls was wrong

control guard
as written passes
go.mod moves, prose left behind fails, naming the prose
the prose statement removed fails
a literal badge added back beside the dynamic one fails

The second one took two attempts, and the first attempt is the part worth
reporting. Setting the directive to a nonexistent go 1.27.9 made go test
refuse to start (go: go.mod requires go >= 1.27.9), so the guard looked
green when it had simply never run. The file had changed — which is what I had
verified — and the test had not executed, which is what I had not. Redone with
a real 1.27.2:

README states a Go minimum of 1.27.1 in "Go 1.27.1+"; go.mod requires 1.27.2

A control has to break the value with something plausible, or it breaks the
harness instead and the silence reads exactly like a pass.

🤖 Generated with Claude Code

The badge has now been corrected three times for the same reason, and the third
time it was corrected and then UNDONE: on 2026-10-10 Renovate force-pushed its
branch over a commit that had fixed the badge and gone green on every lane,
reinstating 1.27.1 against a 1.27.2 directive. A number a human has to retype is
a number that comes back.

So it stops being retyped. shields.io's github/go-mod/go-version endpoint reads
the directive out of the repository -- verified against this one, where it
renders "Go: v1.27.1" -- which takes the badge out of the maintenance loop
entirely, the same way the release badge stopped naming a version in #801.

The guard gets STRICTER, not weaker, in three ways:

  A dynamic badge is not compared against a value, because it cannot disagree
  with one. Instead the test now fails if a LITERAL badge is left beside it --
  that would be a second, rottable copy, which is the thing being removed.

  The number of hand-written statements required drops from 2 to 1 only when the
  badge is dynamic. Demanding two would force somebody to add a rottable number
  back. It never drops to 0: a README that states the minimum nowhere would pass
  a check for "no WRONG statement" by saying nothing at all, and a reader
  deciding whether they can depend on the module needs the number on the page.

  No badge of either kind is still a hard failure.

Checked in four directions, and one of the four controls was itself wrong, which
is worth recording: setting the directive to a nonexistent 1.27.9 made `go test`
refuse to START, so the guard looked green when it had simply never run. The
file had changed -- which is what I had verified -- and the test had not
executed, which is what I had not. Redone with 1.27.2 it fails correctly:

  README states a Go minimum of 1.27.1 in "Go 1.27.1+"; go.mod requires 1.27.2

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tannevaled added a commit that referenced this pull request Oct 10, 2026
Renovate force-pushed this branch over 12f5759 -- a commit that had corrected
both statements of the Go minimum and gone GREEN on ci and rubyspec-ratchet --
reinstating 1.27.1 against the 1.27.2 directive the same branch sets. So the
badge guard fails again, on exactly the lines it failed on before.

Re-applied. The durable half is #810, which replaces the badge with one that
READS go.mod (shields.io's github/go-mod/go-version) so there is one
hand-written copy left instead of two; that one still has to be corrected by
hand, and the guard still names it every time.

Worth knowing for whoever reads these lanes next: the five red checks on this
branch were never about these dependency bumps. They were
`go: go.mod requires go >= 1.27.2 (running go 1.27.1; GOTOOLCHAIN=local)` --
every lane stopped at `go vet`, before a single dependency was exercised. The
other half of that pair was #808, now merged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@tannevaled
tannevaled merged commit 3cfa10a into main Oct 10, 2026
9 checks passed
@tannevaled
tannevaled deleted the docs/dynamic-go-badge branch October 10, 2026 20:34
tannevaled added a commit that referenced this pull request Oct 11, 2026
The only red check left on this branch, and the LAST hand-written copy of the
number: #810 made the badge read go.mod, so there is one statement to correct
instead of two, and the guard named it exactly.

    readme_go_floor_test.go:83: README states a Go minimum of 1.27.1
      in "Go 1.27.1+"; go.mod requires 1.27.2

Everything else on this branch is green -- internal/vm passes in 373s on
arch amd64, and the dependency bumps themselves are being exercised for the
first time, since every earlier run on this branch stopped at `go vet` on the
toolchain pin (#808, merged).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant