Fever BaseballFuture Value Radar (FVR) · On the record
RECORD: 0 HIT · 0 MISS · 11 OPEN · FIRST CALL RESOLVES AUG 12

The receipts · published verbatim from the working file

The pitcher luck gap — results (gate PASSED, edge modest)

FIP carries real forward information about next-year ERA beyond ERA (primary, passed, p=0.0024), robust across roles — so the arm-call engine is authorized. But out of sample FIP is co-equal to ERA, not superior (secondary head-to-head missed). A real but modest edge.

Last changed

H-ARMGAP confirmatory results — the gate passed, the edge is modest

One run against the reserved seasons, executed 2026-07-15 under the protocol frozen the same day in armgap-preregistration-2026-07-15.md (commit 4a61eab, cut and pushed before this script was run).

The ship/kill gate passed. FIP carries real, independent forward information about a pitcher's next-year ERA, beyond his current ERA (PRIMARY, PASS, p=0.0024), and it holds for starters and relievers alike. By the frozen protocol the pitcher arm-call engine is authorized. But the edge is more modest than the training years promised, and the honest framing has to change with it: out of sample FIP does not beat ERA and does not dominate it — the two are co-equal predictors of next year's ERA. The clean "the noise-stripped number is the truth and the ERA is noise" story is a training-years artifact. What survives is real but smaller: FIP and ERA each carry independent signal, and the gap between them flags regression that resolves.

PRIMARY — PASS

z(era_next) ~ z(era) + z(fip)
pooled predictor seasons 2022, 2023, 2024      n = 953

ra9   beta +0.124   p = 0.0018
fip   beta +0.120   p = 0.0024      R2 0.048

Criterion (fip beta > 0 AND p < 0.05): PASS

FIP adds real, significant forward information about next-year ERA on top of current ERA. That is the non-mechanical foundation the arm call rests on — FIP knows something about where the ERA is going that the ERA itself does not — and it is why the gate was set on FIP's significance, not on the fragile comparisons below. It passed at p=0.0024, robust.

The training years said FIP would DOMINATE; out of sample it does not. On train, fip beta was +0.158 and current ERA was not even significant (+0.060, p=0.07). Out of sample the two are level: fip +0.120, era +0.124, both significant. Read plainly: a pitcher's ERA and his FIP each tell you something real and independent about next year's ERA, in roughly equal measure. Neither is the whole truth. The call uses both — it is a gap — so this does not sink it, but it reframes it.

SECONDARY — MISS (as pre-declared)

|corr(fip, era_next)| = 0.194
|corr(era, era_next)| = 0.196

Criterion (|r(FIP)| > |r(ERA)|): MISS

A dead tie, ERA a hair ahead. The pre-registration called this fragile (train margin 0.034, and H-ARM's larger CSW margin had flipped). It flipped to a tie. FIP does not out-predict ERA out of sample; it matches it. The call does not depend on this — it uses the gap, not FIP alone — but the "beats the box score" headline is dead, and this document does not print it.

TERTIARY (reported, no criterion)

The arm-call simulated on the reserved seasons (gap = ERA − FIP on the ERA scale; buy = gap>0 unlucky, predict ERA falls; fade = gap<0 lucky, predict ERA rises):

r(gap, next-year ERA move) = -0.456
|gap|>0.50:  558 calls   72.6% moved as called
|gap|>1.00:  251 calls   79.3%
|gap|>1.50:  103 calls   81.6%

The calls resolve, and the bigger the mispricing the more reliably — out of sample. Partly mechanical, as declared (an ERA far off its FIP is an extreme ERA, and extremes regress), so this is the demo, not the gate. The non-mechanical part — that FIP knows where it regresses to — is the PRIMARY, and that is what passed.

The foundation within role:

SP  n=471   fip beta +0.249   p = 0.0004
RP  n=482   fip beta +0.207   p = 0.0002

FIP's forward signal is significant and similar for starters and relievers. Not a starter-only effect.

Does CSW% add to FIP (the leading-indicator angle)?

z(era_next) ~ z(fip) + z(csw):  csw beta -0.067, p = 0.084

No — out of sample CSW does not add to FIP for predicting next-year ERA (p=0.08). Consistent with H-ARM: CSW's out-of-sample edge is fragile. The engine's baseline is FIP; CSW stays context, not an input.

The gate, and what it authorizes

PRIMARY passed, so under the frozen ship/kill gate the pitcher arm-call engine is authorized — the founder's standing pre-commitment was that a pass ships it. But the pre-registration also routed the actual BUILD to founder ratification "with the full picture, not just a P/F," precisely for the case that arrived: a significant but not dominant primary. So the honest handoff is: the door is open, and here is exactly how strong the thing behind it is.

What the result supports building: an ERA-FIP luck-gap call — "this pitcher's ERA is running below/above the quality his strikeouts, walks and homers describe; expect it to move" — filed with metric/threshold/window/timestamp and graded forward in public. The foundation is real (FIP adds independent signal, p=0.0024) and the calls resolve (79% at |gap|>1).

What the result does NOT support: the claim that FIP is a better gauge than ERA (it is a co-equal one), or that the call has a large edge over naive regression (the edge is real but modest). A surface that implied either would overstate what the holdout granted.

Caveats honoured

  • Third and FINAL pitcher test on the 2022–2025 reserved seasons, as pre-committed. No further pitcher relationship is tested on this holdout; the next waits for fresh reserved seasons.
  • FIP put on the ERA scale via the season constant (IP-weighted), so the gap is an honest expected-ERA gap. Without it the raw core sits ~3 runs low and every pitcher reads "unlucky" — a scale error the exploratory's call simulation caught before the freeze.
  • One evaluation. armgap_confirmatory.py, committed and pushed in 4a61eab before it was run, unedited since.