Skip to content

Raise ruby/spec floor 22215 -> 22345 after wave 30 - #659

Merged
tannevaled merged 1 commit into
mainfrom
wave30/floor
Sep 25, 2026
Merged

tannevaled merged 1 commit into
mainfrom
wave30/floor

Conversation

@tannevaled

Copy link
Copy Markdown
Contributor

Three units, and one of them closes the last wholly-absent subsystem.

PR area gain
#654 TracePoint core/tracepoint 0 → 69 of 75
#656 String/IO encoding — gsub's result-encoding negotiation, IO paragraph mode, $/, grapheme clusters, chomp character-wise, UTF-16/32 transcoding +44
#653 core/module — Module#dup returned the receiver, Module#ruby2_keywords did not exist, visibility directives, const_source_location's search +19

TracePoint

core/tracepoint sat at pass=0 across six censuses. It stayed untouched because it is not an API to complete but hooks in the execution core — and because a tracepoint must report a line number, which the VM could not do at all until #645 built the line map. Events line/class/end/call/return/b_call/b_return/rescue, every accessor, enable with target:/target_line:/target_thread:, allow_reentry.

It costs ~1–2% on every program, including ones that never build a TracePoint. That trade was made deliberately and is recorded in #658 with the measurements, the shape already rejected for costing +3.65%, and the zero-cost alternative — MRI rewrites instruction encodings rather than testing per instruction, which is a compiler change.

Measurement

scripts/conformance/rubyspec/run.sh, pinned corpus 87b1631, 16-way, TIMEOUT=25, three consecutive runs:

passing examples: 22359   (files loaded: 2192, failed to load: 14)
passing examples: 22359
passing examples: 22358
frozen floor:     22215

Floor set thirteen below the lowest, the margin rule the last five bumps used.

A caveat that belongs on this number

#655 records that the shim's should.equal? asserts nothing — it never reaches the matcher, because ShouldProxy defines equal and not equal? — and it is used 765 times across 328 corpus files. An unknown share of the total above is therefore vacuous.

Fixing it will move the floor in an unpredictable direction, and the result must be re-measured rather than assumed. This number is the best we can currently measure; it is not a claim that every example beneath it tests something.

Three defects in our own harness have now been found in three weeks (#621, #630, #655). Each was counted as VM behaviour until someone ran MRI through the same shim — which is now the standing method for establishing a per-file ceiling, and which overturned three premises of this wave's own briefs.

🤖 Generated with Claude Code

Three units, and one of them closes the last wholly-absent subsystem.

  #654  TracePoint, 0 -> 69 of 75. core/tracepoint had been pass=0 across six
        censuses, untouched because it is hooks in the execution core rather
        than an API to complete — and because a tracepoint must report a line,
        which the VM could not do until #645. Events line/class/end/call/
        return/b_call/b_return/rescue, every accessor, enable with target:/
        target_line:/target_thread:, allow_reentry. Costs ~1-2% on every
        program; that trade is recorded and justified in issue #658, together
        with the zero-cost alternative (MRI rewrites instruction encodings
        rather than testing per instruction).
  #656  String/IO encoding conformance: gsub's result-encoding negotiation,
        IO paragraph mode's second swallow, $/ seeded to "\n", grapheme
        clusters, chomp character-wise, UTF-16/32 transcoding      (+44)
  #653  core/module: Module#dup RETURNED THE RECEIVER, Module#ruby2_keywords
        did not exist at all, visibility directives, const_source_location's
        search                                                     (+19)

Measured with scripts/conformance/rubyspec/run.sh against the pinned corpus at
87b1631, 16-way, TIMEOUT=25, three consecutive runs: 22359, 22359, 22358. The
floor is set thirteen below the lowest, the margin rule the last five bumps
used.

A caveat that belongs on this number rather than a later one: issue #655
records that the shim's `should.equal?` asserts NOTHING — it never reaches the
matcher — and it is used 765 times across 328 corpus files. An unknown share of
the total above is therefore vacuous. Fixing it will move the floor in an
unpredictable direction and the result must be re-measured, not assumed. The
number is the best we can currently measure, not a claim that every example
beneath it tests something.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@tannevaled
tannevaled merged commit be34ac9 into main Sep 25, 2026
7 checks passed
@tannevaled
tannevaled deleted the wave30/floor branch September 25, 2026 17:06
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