Skip to content

say which Ruby version the 23,511 was counted at, and check it - #33

Merged
tannevaled merged 3 commits into
mainfrom
state-the-version-the-total-was-counted-at
Oct 31, 2026
Merged

tannevaled merged 3 commits into
mainfrom
state-the-version-the-total-was-counted-at

Conversation

@tannevaled

Copy link
Copy Markdown
Contributor

say which Ruby version the 23,511 was counted at

This page states the ruby/spec total five times and never said which population
it counts over. The shim resolves ruby/spec's own ruby_version_is guards at
Ruby 3.4.1, so every example behind a ruby_version_is "4.0" guard is removed
from the suite before anything runs — 61 block guards and 5 inline sites at that
boundary (censused by the interpreter repo's cmd/guards), and 41 guards
asserting what 4.0 changed away from.

Meanwhile the same page says the project targets Ruby 4.0 semantics and names an
MRI 4.0.5 oracle. Every one of those statements is true, and together they read
as a 4.0 result. It is a 3.4-shaped one.

Two sentences, in the two places that carry the figure most plainly: the
"Conformance, measured" card, beside the existing caveat that only language/
and core/ are swept — the same kind of caveat, and it was missing its pair —
and the Phase 8 blurb in hugo.toml, which already explains the gate at length.

Measured with the tool that will enforce it:

$ go run ./tools/conformancefigure --root
5 total claim(s) and 2 version claim(s) checked against the gate's 23511 at Ruby 3.4.1 (two copies, agreeing)

Both new sentences are recognised and agree. "two copies, agreeing" is the state
of the interpreter repository today: the version is spelled in both
internal/vm/kernel_introspect.go and the conformance shim, and
go-embedded-ruby/ruby#845 collapses that to one — at which point the same line
will read "derived from RUBY_VERSION" without anything here changing.

The lane bump to the version of the tool that performs this check comes in the
next commit, once that release exists; stating the version without the check
would be the unguarded half of the change.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com


conformancefigure@v0.6.0: turn the stated version into a checked claim

The previous commit added the sentences; this is the half that makes them
guarded, and neither is worth having alone — a version stated and unchecked is
the next figure to rot, and a check with nothing to check exits 1.

Verified with the exact published command this lane will run, fetched through
the proxy:

$ go run github.com/go-embedded-ruby/docs/tools/conformancefigure@v0.6.0 --root .
go: downloading github.com/go-embedded-ruby/docs v0.6.0
5 total claim(s) and 2 version claim(s) checked against the gate's 23511 at Ruby 3.4.1 (two copies, agreeing)

Five totals and both new version sentences, all agreeing. actionlint clean.

The version is read from both files in the interpreter repository that spell
it — internal/vm/kernel_introspect.go's rubyVersion and the conformance
shim's CUR_VERSION — and a disagreement between them is a refusal (exit 2),
not a verdict on this page: with the copies apart there is no single version to
judge it against. go-embedded-ruby/ruby#799 records that those are two hardcoded
copies of one fact and that "today they happen to agree" is the defect waiting
to happen.

(two copies, agreeing) is that repository's state today. ruby#845 collapses it
to one, and the same line will then read (derived from RUBY_VERSION) with
nothing here to change — v0.6.0 already recognises that spelling, so this lane
does not break on the day the thing it reports gets fixed.

The differential oracle this page names (MRI 4.0.5) is a different claim,
free to be newer than the version guards resolve at, and is deliberately not
matched; three real oracle sentences are negative cases in the tool's own
vocabulary control.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

🤖 Generated with Claude Code

tannevaled and others added 3 commits October 31, 2026 21:51
This page states the ruby/spec total five times and never said which population
it counts over. The shim resolves ruby/spec's own `ruby_version_is` guards at
Ruby 3.4.1, so every example behind a `ruby_version_is "4.0"` guard is removed
from the suite before anything runs — 61 block guards and 5 inline sites at that
boundary (censused by the interpreter repo's `cmd/guards`), and 41 guards
asserting what 4.0 changed away from.

Meanwhile the same page says the project targets Ruby 4.0 semantics and names an
MRI 4.0.5 oracle. Every one of those statements is true, and together they read
as a 4.0 result. It is a 3.4-shaped one.

Two sentences, in the two places that carry the figure most plainly: the
"Conformance, measured" card, beside the existing caveat that only `language/`
and `core/` are swept — the same kind of caveat, and it was missing its pair —
and the Phase 8 blurb in hugo.toml, which already explains the gate at length.

Measured with the tool that will enforce it:

  $ go run ./tools/conformancefigure --root <this tree>
  5 total claim(s) and 2 version claim(s) checked against the gate's 23511 at Ruby 3.4.1 (two copies, agreeing)

Both new sentences are recognised and agree. "two copies, agreeing" is the state
of the interpreter repository today: the version is spelled in both
internal/vm/kernel_introspect.go and the conformance shim, and
go-embedded-ruby/ruby#845 collapses that to one — at which point the same line
will read "derived from RUBY_VERSION" without anything here changing.

The lane bump to the version of the tool that performs this check comes in the
next commit, once that release exists; stating the version without the check
would be the unguarded half of the change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The previous commit added the sentences; this is the half that makes them
guarded, and neither is worth having alone — a version stated and unchecked is
the next figure to rot, and a check with nothing to check exits 1.

Verified with the exact published command this lane will run, fetched through
the proxy:

    $ go run github.com/go-embedded-ruby/docs/tools/conformancefigure@v0.6.0 --root .
    go: downloading github.com/go-embedded-ruby/docs v0.6.0
    5 total claim(s) and 2 version claim(s) checked against the gate's 23511 at Ruby 3.4.1 (two copies, agreeing)

Five totals and both new version sentences, all agreeing. actionlint clean.

The version is read from **both** files in the interpreter repository that spell
it — `internal/vm/kernel_introspect.go`'s `rubyVersion` and the conformance
shim's `CUR_VERSION` — and a disagreement between them is a refusal (exit 2),
not a verdict on this page: with the copies apart there is no single version to
judge it against. go-embedded-ruby/ruby#799 records that those are two hardcoded
copies of one fact and that "today they happen to agree" is the defect waiting
to happen.

`(two copies, agreeing)` is that repository's state today. ruby#845 collapses it
to one, and the same line will then read `(derived from RUBY_VERSION)` with
nothing here to change — v0.6.0 already recognises that spelling, so this lane
does not break on the day the thing it reports gets fixed.

The **differential oracle** this page names (MRI 4.0.5) is a different claim,
free to be newer than the version guards resolve at, and is deliberately not
matched; three real oracle sentences are negative cases in the tool's own
vocabulary control.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two things, one of them a correction to what I wrote in the previous commit.

## The build lane was right, and it caught what my own check cannot

The push before this one broke the site:

    ERROR failed to load config: "hugo.toml:74:713":
    unmarshal failed: toml: expected newline but got U+0034 '4'

My sentence contained `` `ruby_version_is "4.0"` `` — double quotes inside a
double-quoted TOML string, unescaped. Mine, straightforwardly.

Worth recording is **why `conformancefigure` was green on it**: that tool reads
`.toml` as TEXT, looking for figures in prose, and never parses it. A file that
cannot load is invisible to it, and always will be. `hugo --minify` is the check
for that and it did its job on the first push. What I should have done, and had
no excuse not to — hugo is installed here — is build the site locally before
pushing. Doing that now: `hugo` exits 0.

## ⛔ And then the build showed the sentence was never going to be read

With the quotes escaped and the site building, the rendered page did not contain
it. Nor does it contain anything else from deep in that blurb:

| in the built site | |
|---|---|
| the Phase 8 blurb's **first sentence** | present |
| `LinuxONE` (pre-existing, deep in the same blurb) | **absent** |
| my new sentence (also deep in it) | **absent** |
| the sentence I added to `layouts/index.html` | present |

The site builds two pages (`index.html`, `performance/index.html`) and the string
appears in neither. **Everything in a `params.phases[].blurb` after its first
sentence is unpublished** — the home page takes the first sentence for its card
and nothing else renders the rest.

So the sentence is withdrawn rather than escaped. A guard reporting *"2 version
claim(s) checked"* while the page publishes **one** is a measurement flattering
itself, which is the exact failure this whole change exists to prevent. After
this commit the tool reports `1 version claim(s)` and the page publishes 1 — the
numbers agree because they are counting the same thing.

The claim is still guarded where it is read: `layouts/index.html`, in the
"Conformance, measured" card, beside the existing caveat that only `language/`
and `core/` are swept.

## ⛔ Correcting the previous commit and go-embedded-ruby/docs#41

I wrote that `hugo.toml`'s `params.phases[].blurb` is *"prose Hugo renders into
the page like any other"* and that the stale `23,481` in it *"read 23,481 for 26
days under a green check"*. **The first is wrong for this site's layout, and the
second is therefore overstated.** That figure was stale in a file that feeds only
a first sentence; it was not a wrong number on the published page, and the
published figures were correct throughout.

What stands: the figure WAS stale in the repository, two readings of one number
had drifted, and a tool that reads `.toml` is cheap insurance for the day a
layout change starts publishing that text. What does not stand is the severity I
gave it.

Separately worth deciding, and not decided here: a long prose body kept in
`hugo.toml` that nothing renders is a trap — it cost me this round trip, and it
will cost the next person the same. Either it should be rendered or it should be
deleted. Filed rather than guessed at.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@tannevaled

Copy link
Copy Markdown
Contributor Author

A follow-up branch is waiting on this one, deliberately not opened yet

consume-kit-icons is pushed and complete: it deletes this repository's three
duplicated files

layouts/partials/icons/graph.html
layouts/partials/icons/rocket.html
layouts/partials/icons/OCTICONS-LICENSE   # byte-identical to the kit's

and bumps landingkit v0.14.0 → v0.17.0 (go-fleettools/landingkit#27 moved
those two Octicons into the kit; v0.17.0 is released and on the proxy). Three
minors of catch-up, which was overdue independently of the icons.

Proven the way the kit's own README asks for: diff -r between the site built
before and after is byte-identical, zero lines. Had a partial gone missing,
hugo would have failed rather than rendered nothing — so that also proves the
kit really supplies them. landingkit links on the rebuilt site: every URL 200.

Why it is not a pull request yet. It branches from main, which does not
have this PR's version sentence, so running the new tool against it reports
"found no statement of the version" — correctly. Opening both at once and
letting one squash-merge land first would orphan the follower, which this
project has paid for before. It goes up rebased once this merges.

And a note on this PR's own history

The first push broke the site: `ruby_version_is "4.0"` is double quotes
inside a double-quoted TOML string, so hugo.toml would not parse. The build
lane caught it. Worth recording is that conformancefigure was green on
that same tree — it reads .toml as text looking for figures in prose and never
parses it, so a file that cannot load is invisible to it and always will be.
hugo --minify is the check for that, it did its job, and I should have run it
locally before pushing — hugo is installed on this machine.

Fixing the quotes then showed the sentence would never be read: everything in a
params.phases[].blurb after its first sentence is unpublished on this site
(two pages are built and the text appears in neither). So it was withdrawn
rather than escaped — a guard reporting "2 version claim(s) checked" while the
page publishes one is a measurement flattering itself. The tool now reports 1
and the page publishes 1.

That also corrects something I wrote in go-embedded-ruby/docs#41, where I called
that blurb "prose Hugo renders into the page like any other". It is not, for this
layout, and the severity I gave the stale 23,481 was therefore overstated — it
was stale in the repository, not wrong on the published page.

🤖 Generated with Claude Code

@tannevaled
tannevaled merged commit 2e5a57d into main Oct 31, 2026
3 checks passed
@tannevaled
tannevaled deleted the state-the-version-the-total-was-counted-at branch October 31, 2026 23:43
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