You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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>
Copy file name to clipboardExpand all lines: lib/bundler/spinel/history.rb
+13Lines changed: 13 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -135,6 +135,19 @@ class History
135
135
"Re-verified every ★ at this rev: only <strong>1 of 140 regressed</strong> (<code>stringglob</code>, invalid " \
136
136
"generated C under full-surface require), ★ holds at 215 mechanical + human attestations. The require-only " \
137
137
"<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 " \
<tr><tdclass="g"><code>f3bb9af9</code></td><tdclass="upd">2026-06-18</td><tdclass="num">84.1k <spanclass="up">+325</span></td><tdclass="num">47.8k <spanclass="up">+158</span></td><tdclass="num">57.9k <spanclass="down">−482</span></td><tdclass="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><tdclass="g"><code>f973b129</code></td><tdclass="upd">2026-06-20</td><tdclass="num">84.5k <spanclass="up">+432</span></td><tdclass="num">46.2k <spanclass="down">−1.6k</span></td><tdclass="num">59.1k <spanclass="up">+1.2k</span></td><tdclass="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>
<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 <ahref="https://github.com/matz/spinel/issues/1062">matz/spinel#1062</a>.</p>
@@ -67,6 +68,10 @@ <h1>How the catalog has changed</h1>
67
68
<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 <ahref="https://github.com/matz/spinel/issues/1481">#1481</a>; the broader <code>each.with_index</code>-yields-nothing miscompile is <ahref="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>
<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>
0 commit comments