Skip to content

Commit 76725a5

Browse files
OriPekelmanclaude
andcommitted
catalog: promote to f973b129 — stricter+honest (send-runtime-name diagnostic)
Reprobed the ~190k corpus at matz/spinel master f973b129 (the per-method codegen + diagnostics wave, ≈#1499-#1509) and re-earned the verify tiers. Catalog @ f973b129: ★225 · loaded 2,307 · clean 81,979 · risky 46,144 · rejected 59,096 Net is stricter but more honest, not bigger: rejected +1,215 (57.9k->59.1k), risky -1,647, clean +432 - The dominant move is 1,939 risky->rejected: matz's new send/public_send diagnostic now refuses a *runtime* method name ("AOT needs a compile-time- known name") instead of silently compiling code that fails at runtime. ~2,000 dynamic-dispatch gems can't AOT-compile and are now marked so — correct, not regressions (verified: 2DArray/apiif/basic_model... all `send` w/ runtime name). - Genuine fixes: 491 rejected->clean (method_missing dispatch, or/and writes, super-into-module). Load-bearing blockers still don't clear (deeper failures). - ★ up 215->225 (codegen fixes restored some). Re-verified every prior ★: 1 regressed — try-for (verified->rejected), a #1367-class layout-sensitive `unsupported call` on a top-level def-with-block (compiles under one require path, fails under another) — an instance of the open #1367, not separately filable. - All 3 issues from the f3bb9af9 reprobe were fixed upstream in this window: #1481 (15f4242c), #1483 (d4078d13), #1498 (40871cfe). - Load-bearing refreshed (buildable 85,695 · blocked 45,293 · rejected 59,096 — buildable dips as the stricter rejections drag closures down). History timeline + per-rev snapshot (survey-f973b129/) added. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent e2e8378 commit 76725a5

9 files changed

Lines changed: 380762 additions & 190996 deletions

File tree

harness/load-bearing/blockers.tsv

Lines changed: 580 additions & 581 deletions
Large diffs are not rendered by default.

harness/load-bearing/targets.tsv

Lines changed: 580 additions & 581 deletions
Large diffs are not rendered by default.

harness/load-bearing/top-load-bearing.tsv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ net-http 8557 40 rejected
4949
faraday-net_http_persistent 8510 33 rejected
5050
faraday-multipart 8510 181 rejected
5151
erubi 8507 34 rejected
52-
faraday 8507 3586 risky
52+
faraday 8507 3586 rejected
5353
faraday-retry 8507 94 rejected
5454
arel 8487 53 risky
5555
activerecord 8461 3004 risky

lib/bundler/spinel/history.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,19 @@ class History
135135
"Re-verified every ★ at this rev: only <strong>1 of 140 regressed</strong> (<code>stringglob</code>, invalid " \
136136
"generated C under full-surface require), ★ holds at 215 mechanical + human attestations. The require-only " \
137137
"<code>loaded</code> tier was materialized here for the first time (<strong>0 → 2,311</strong>)." },
138+
{ rev: "f973b129", date: "2026-06-20", commit: "A per-method codegen + diagnostics wave (≈#1499–#1509): method_missing dispatch for unresolved object calls, super into an included-module method, or/and/operator writes, alias under a statement modifier, block_given? in lowered methods, poly arithmetic→bigint (SP_TAG_BIGINT), and new compile-time diagnostics for send/public_send/eval with a runtime (non-constant) name. All three spinelgems issues from the f3bb9af9 reprobe fixed in this window: #1481 (15f4242c), #1483 (d4078d13), #1498 (40871cfe).",
139+
file: "survey-f973b129/compat.jsonl",
140+
note: "<strong>Stricter, more honest — driven by new diagnostics, not regressions.</strong> Net: rejected " \
141+
"<strong>+1,215</strong> (57.9k → 59.1k), risky −1,647, clean +432. The big move is <strong>1,939 " \
142+
"<code>risky</code>→<code>rejected</code></strong>: the new <code>send</code>/<code>public_send</code> " \
143+
"diagnostic now refuses a <em>runtime</em> method name (<code>unsupported send with a runtime method name — " \
144+
"AOT needs a compile-time-known name</code>) instead of silently compiling code that would fail at runtime. " \
145+
"That's the closed-world limit surfaced honestly: ~2,000 dynamic-dispatch gems can't AOT-compile and are now " \
146+
"marked so. Genuine fixes also landed — <strong>491 <code>rejected</code>→<code>clean</code></strong> " \
147+
"(method_missing dispatch, or/and writes, super-into-module). The load-bearing blockers " \
148+
"(<code>thor</code>/<code>json</code>/<code>logger</code>/<code>redis</code>) still don't clear — their " \
149+
"failures are deeper (analyze-failed / C-extension). The 55 <code>clean</code>→<code>rejected</code> are the " \
150+
"same <code>send</code>-diagnostic, not codegen regressions." },
138151
].freeze
139152

140153
ORDER = %w[clean risky rejected].freeze

lib/bundler/spinel/load_bearing.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ class LoadBearing
1212
DATA = File.expand_path("../../../harness/load-bearing/targets.tsv", __dir__)
1313
GLYPH = Site::GLYPH
1414

15-
# Buildability snapshot @ f3bb9af9 (from harness/load-bearing/buildability.rb).
16-
BUILDABLE = 86_458
17-
BLOCKED = 45_747
18-
REJECTED = 57_879
15+
# Buildability snapshot @ f973b129 (from harness/load-bearing/buildability.rb).
16+
BUILDABLE = 85_695
17+
BLOCKED = 45_293
18+
REJECTED = 59_096
1919

2020
def initialize(data = DATA) = (@data = data)
2121

site/history.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ <h1>How the catalog has changed</h1>
2222
<tr><td class="g"><code>b60fbd7</code></td><td class="upd">2026-06-15</td><td class="num">79.7k <span class="up">+22.1k</span></td><td class="num">52.4k <span class="up">+22.6k</span></td><td class="num">57.7k <span class="down">−46.3k</span></td><td class="desc">636 commits — the largest wave yet. A type-inference + codegen rewrite (typed-array/poly ~222, inference/cast/box ~168, string ~124, block/yield ~101, module/singleton ~94) closing many harness-filed issues at once: reopened-builtin self (#1386), hash-block String type (#1382/#1394), circular require_relative (#1373), computed require (#1383), class-method yield (#1387), Scheduled-server boot + SIGTERM (#1369/#1384). New surfaces: value-type objects, --rbs/--emit-rbs/--emit-symbol-map.</td></tr>
2323
<tr><td class="g"><code>478cc93</code></td><td class="upd">2026-06-16</td><td class="num">83.7k <span class="up">+4.1k</span></td><td class="num">47.7k <span class="down">−4.7k</span></td><td class="num">58.4k <span class="up">+670</span></td><td class="desc">46 commits — the b60fbd7 follow-up wave. Every spinelgems-filed bug from b60fbd7 closed + fixed: const-alias receiver #1399 (a5f3044), require-in-conditional #1400 (3b17d67), instance_methods(false) #1401 (6902b50), respond_to? builtins #1408 (89c4832); plus thor proc-return #1372, Float→Integer map #1392 (landed via our PR #1407). New: `...` arg forwarding, instance_exec/eval trampolines, sprintf positional args, Math::DomainError.</td></tr>
2424
<tr><td class="g"><code>f3bb9af9</code></td><td class="upd">2026-06-18</td><td class="num">84.1k <span class="up">+325</span></td><td class="num">47.8k <span class="up">+158</span></td><td class="num">57.9k <span class="down">−482</span></td><td class="desc">The post-478cc93 codegen + Ractor wave (≈#1413–#1476). Whole-program inference, codegen (poly dispatch, ivar/default-arg typing, loop control-flow, GC rooting of FFI/fresh temps) and a new Ractor API surface (make_shareable, select, RemoteError, introspection). The serve-path regression chain closed (#1420/#1422/#1425/#1434).</td></tr>
25+
<tr><td class="g"><code>f973b129</code></td><td class="upd">2026-06-20</td><td class="num">84.5k <span class="up">+432</span></td><td class="num">46.2k <span class="down">−1.6k</span></td><td class="num">59.1k <span class="up">+1.2k</span></td><td class="desc">A per-method codegen + diagnostics wave (≈#1499–#1509): method_missing dispatch for unresolved object calls, super into an included-module method, or/and/operator writes, alias under a statement modifier, block_given? in lowered methods, poly arithmetic→bigint (SP_TAG_BIGINT), and new compile-time diagnostics for send/public_send/eval with a runtime (non-constant) name. All three spinelgems issues from the f3bb9af9 reprobe fixed in this window: #1481 (15f4242c), #1483 (d4078d13), #1498 (40871cfe).</td></tr>
2526
</tbody></table>
2627
<div class="delta-card"><h3><code>a03bb49</code> &rarr; <code>8d88ebe</code> <span class="up">&uarr; 64 graduated</span> <span class="down">&darr; 1.6k regressed</span></h3>
2728
<p>Mixed: the module-object fixes graduated gems, but <code>96b21e6</code> (module_function support) <strong>regressed</strong> ~160 gems whose objects were built from a variable-held class (the <code>brass</code> cluster) — caught by the re-probe and filed as <a href="https://github.com/matz/spinel/issues/1062">matz/spinel#1062</a>.</p>
@@ -67,6 +68,10 @@ <h1>How the catalog has changed</h1>
6768
<p><strong>A modest, honesty-improving wave for the bulk catalog.</strong> The big codegen movement was whole-program (serve/Ractor/training), not the single-gem compile-check this corpus runs — so the load-bearing blockers (<code>thor</code>, <code>json</code>, <code>logger</code>, <code>redis</code>, <code>rake</code>) did <em>not</em> clear. Net: <strong>+394 gems out of <code>rejected</code></strong> (58.4k → 57.9k), +326 <code>clean</code>. The ~32 <code>clean</code><code>rejected</code> moves are mostly the analyzer getting <em>more honest</em> — refusing cases it previously <strong>silently miscompiled</strong>: <code>base26</code>'s <code>each.with_index.inject</code> ran to empty output at 478cc93 and is correctly rejected now (filed <a href="https://github.com/matz/spinel/issues/1481">#1481</a>; the broader <code>each.with_index</code>-yields-nothing miscompile is <a href="https://github.com/matz/spinel/issues/1483">#1483</a>). Re-verified every ★ at this rev: only <strong>1 of 140 regressed</strong> (<code>stringglob</code>, invalid generated C under full-surface require), ★ holds at 215 mechanical + human attestations. The require-only <code>loaded</code> tier was materialized here for the first time (<strong>0 → 2,311</strong>).</p>
6869
<p class="meta">Top transitions: rejected-&gt;clean <b>356</b> &middot; rejected-&gt;risky <b>201</b> &middot; risky-&gt;rejected <b>43</b> &middot; clean-&gt;rejected <b>32</b></p>
6970
</div>
71+
<div class="delta-card"><h3><code>f3bb9af9</code> &rarr; <code>f973b129</code> <span class="up">&uarr; 783 graduated</span> <span class="down">&darr; 2.0k regressed</span></h3>
72+
<p><strong>Stricter, more honest — driven by new diagnostics, not regressions.</strong> Net: rejected <strong>+1,215</strong> (57.9k → 59.1k), risky −1,647, clean +432. The big move is <strong>1,939 <code>risky</code><code>rejected</code></strong>: the new <code>send</code>/<code>public_send</code> diagnostic now refuses a <em>runtime</em> method name (<code>unsupported send with a runtime method name — AOT needs a compile-time-known name</code>) instead of silently compiling code that would fail at runtime. That's the closed-world limit surfaced honestly: ~2,000 dynamic-dispatch gems can't AOT-compile and are now marked so. Genuine fixes also landed — <strong>491 <code>rejected</code><code>clean</code></strong> (method_missing dispatch, or/and writes, super-into-module). The load-bearing blockers (<code>thor</code>/<code>json</code>/<code>logger</code>/<code>redis</code>) still don't clear — their failures are deeper (analyze-failed / C-extension). The 55 <code>clean</code><code>rejected</code> are the same <code>send</code>-diagnostic, not codegen regressions.</p>
73+
<p class="meta">Top transitions: risky-&gt;rejected <b>1.9k</b> &middot; rejected-&gt;clean <b>491</b> &middot; rejected-&gt;risky <b>292</b> &middot; clean-&gt;rejected <b>59</b></p>
74+
</div>
7075

7176
</main>
7277
<footer><div class="foot-wrap">

0 commit comments

Comments
 (0)