Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ after publication.

| tool | what it judges | its authority |
|---|---|---|
| `conformancefigure` | every **present-tense** claim about the ruby/spec total. A *dated* sweep going stale is not an error, and is exempt by its date. | the gate's own `BASELINE` |
| `conformancefigure` | every **present-tense** claim about the ruby/spec total, **and the Ruby version that total was counted at** — the version selects the population before anything is counted, so a total stated without it is half a measurement. A *dated* sweep going stale is not an error, and is exempt by its date. The differential **oracle** named on these pages is a different claim, free to be newer, and is deliberately not matched. | the gate's own `BASELINE`, and the version read from **both** files that spell it — the runtime's `rubyVersion` and the shim's `CUR_VERSION` — refusing if they disagree, and reporting which state it found (`two copies, agreeing`, or `derived from RUBY_VERSION` once [ruby#799](https://github.com/go-embedded-ruby/ruby/issues/799) lands and there is only one) |
| `docexample` | every fenced `ruby` block that claims an answer in a `# =>` comment is **run**, and the lines it prints compared in order. A block that claims nothing is skipped. | a real interpreter |
| `numericsurface` | every method name the prose **prints** in a module's section, and the counts the pages state. | a real interpreter |
| `upstreamlinks` | every **library a module section links to** is one rbgo still depends on. | rbgo's `go.mod` |
Expand Down
8 changes: 7 additions & 1 deletion content/en/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ C toolchain and no libruby.

**How complete is it?** It passes **23,511** of ruby/spec's `language/` + `core/`
examples — a large and growing subset of Ruby, and **not** a drop-in replacement for
CRuby. [Conformance]({{< relref "conformance.md#where-it-stands-measured-2026-09-26" >}}) states
CRuby. That count is taken with ruby/spec's own version guards set to resolve at
Ruby **3.4.1**, the version this runtime reports: every example behind a
`ruby_version_is "4.0"` guard is removed from the suite before anything is
counted, so the figure describes 3.4-shaped behaviour even though the project
targets 4.0 semantics — 61 block guards and 5 inline sites sit at that boundary
([ruby#799](https://github.com/go-embedded-ruby/ruby/issues/799)).
[Conformance]({{< relref "conformance.md#where-it-stands-measured-2026-09-26" >}}) states
exactly what that counts and what it leaves out, and
[Known limitations]({{< relref "conformance.md#known-limitations" >}}) is worth reading before you
depend on it.
Expand Down
7 changes: 6 additions & 1 deletion content/en/conformance.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,11 @@ workflow enforces it on every push and pull request.
{{< callout type="info" >}}
**The gate's current total is **23 511****

Counted with ruby/spec's version guards set to resolve at Ruby **3.4.1** — the
version `RUBY_VERSION` reports and the version the shim measures at. That
selects the population before any counting happens, so the total is not a
percentage of Ruby 4.0; see [Known limitations](#known-limitations).

The table below is one **dated full sweep**, and a dated measurement going
stale is not an error: it is what it says it is. The number that moves with
every merge is the per-file baseline's sum, which the badge and the README
Expand Down Expand Up @@ -286,7 +291,7 @@ the call returns successfully and nothing says the guarantee is missing:

| | |
| --- | --- |
| `RUBY_VERSION` reports `"3.4.1"`, though the differential oracle is MRI 4.0.7 and the pinned corpus is 4.0.x. That is not only cosmetic: the shim's version guard is pinned to the same `3.4.1`, so **167 examples behind a `ruby_version_is "4.0"` guard are never reached**, while 40 guards that end *before* 4.0 are being asserted | [#799](https://github.com/go-embedded-ruby/ruby/issues/799) |
| `RUBY_VERSION` reports `"3.4.1"`, though the differential oracle is MRI 4.0.7, the pinned corpus is 4.0.x, and the latest MRI release is 4.0.9 (2026-10-23). That is not only cosmetic: the shim's `CUR_VERSION` is pinned to the same `3.4.1`, so **61 block guards and 5 inline sites at the `ruby_version_is "4.0"` boundary never run**, while **41 guards that end *before* 4.0 are being asserted**. Guard counts are exact, censused by `scripts/conformance/rubyspec/cmd/guards`; the example count behind them is not stated here because a static scan cannot expand `it_behaves_like`, and the figure of 167 quoted when this was first reported does not reproduce — it needs a CI sweep that moves `CUR_VERSION` without regenerating the baseline, so the ratchet names every file that moves in both directions | [#799](https://github.com/go-embedded-ruby/ruby/issues/799) |
| `Errno` carries all **158** of MRI's constant names, but **32** report errno `0` where MRI has a real number (`EAUTH`, `EBADRPC`, `EDEVERR`, …). By set difference on darwin: 81 names are zero-valued under rbgo, 49 under MRI, and every MRI zero is also zero under rbgo | [#633](https://github.com/go-embedded-ruby/ruby/issues/633) |
| `Thread#backtrace` answers for the **current** thread only; another thread raises `NotImplementedError` | — |
| `Process.fork` **does not exist** — Go's runtime cannot be forked safely | — |
Expand Down
Loading
Loading