Release Notes
Each build is tagged R### with concrete deltas — what changed, why, where to verify. Latest production release is highlighted at the top. Older builds chronological below.
Trade Value + Prospects fixed — Espino phantom + Phase 2 cluster collapse retired
Earlier today the trade-value leaderboard had Daniel Espino at #1 ($152M surplus) and prospects had Espino at #1 with 7.5 WAR peak — despite 3 shoulder surgeries since 2022 and 6 IP across the last 2 calendar years. Harry Ford / Jett Williams / George Lombard Jr. all showed identical 7.0 WAR peaks in lockstep. Both pages were banner-flagged "Under Calibration".
Root causes (4 stacked bugs):
- Contract option-salary corruption — 112 scraped contracts had option.salary stored as the YEAR value ("$2031M" option for Cal Raleigh) → impossibly large fake owed → players hidden. Defensive validation added: any option salary > $200M treated as data corruption, fallback to $/WAR estimate.
- 1-yr arb deals truncating control window — Brown/Kirby on $5-6M arb-1 deals had control_end_yr=2026 instead of natural FA year. Fix preserves projected arb/FA salaries beyond the scraped contract.
- ev_conf bust-rate haircut applied to display only, not surplus — multiplied bust probability into per-year WAR inside _player_surplus_value. FV-65 prospect surplus compresses 28%, established stars unchanged. Witt $183M now correctly #1 trade value.
- Phase 2 prior collapse + STUB MAX-OFP — Stub used MAX OFP across sources; Espino's stale 2021 LLM-FG grade=75 dominated his post-surgery grades of 50-55. Switched to BLENDED OFP. Also added staleness gate at the stub: pitchers with <30 IP in last 2 calendar years skip the stub entirely → fall back to chain → realistic ~0 WAR. Added per-year WAR cap of 4.5 for zero-MLB players in both hitter + pitcher chains.
Plus: rookie eligibility tightened (50 IP / 130 PA — removes Burns/Jobe/Rushing/Seymour). +745 new scouting grades (incl. MLB Pipeline pitcher parser fix that was silently missing all 334 pitcher grades). Asymmetric standings spread amplifier (1.30× up / 1.50× down) to stretch low-end COL/CWS toward Vegas without inflating top.
| Trade Value Top 10 (R347b) | ||
|---|---|---|
| #1 | Bobby Witt Jr. | $183M |
| #2 | Jackson Merrill | $117M |
| #3 | Jackson Chourio | $114M |
| #4 | Corbin Carroll | $111M |
| #5 | Elly De La Cruz | $108M |
| #10 | Paul Skenes | $84M |
| #11 | Cal Raleigh | $83M (was hidden) |
Verify on Trade Value · Prospects. Trade Value nav link still missing from menus until next full build — access via this page or direct URL.
Phase 2 architecture — Bayesian rate priors replace the hand-coded stub
The biggest structural change in the model since launch. Scouting grades now enter every projection as Bayesian priors (per Carleton stabilization research), not post-hoc nudges. Pitcher K%/BB% regress toward grade-implied targets using 70/170 BF prior strength. Hitter HR/PA, BB%, and BABIP regress toward grade-implied targets using POW/EYE/HIT scouting. Observed stats dominate naturally as sample grows (Skenes 250 BF → 78% observed; Hernandez 30 BF → 30% observed, 70% scouting).
The "stub" hand-coded fallback for thin-sample prospects is now structurally obsolete — the chain produces real projections derived from scouting consensus. Hernandez (7 IP) and Anderson (9 IP) now project honestly off their tool grades + tiny pro samples, not synthetic peak-WAR lookup tables.
- Phase 2a — pitcher Bayesian K%/BB% (Carleton 70/170 BF + grade-conditioned reg_target from Stuff/Command grades)
- Phase 2b — hitter Bayesian HR/PA + BB% (Carleton 160/120 PA + POW/EYE grades). Deleted post-Marcel _sg_blend_rate.
- Phase 2c — BABIP HIT-grade prior via _compute_stable_babip's babip_prior parameter. Deleted _sg_blend_rate for BABIP in forward chain.
- Rookie eligibility — tightened 80 IP / 200 PA → 50 IP / 130 PA (MLB official). Removes Burns (65 IP), Jobe (53 IP), Rushing (190 PA), Seymour (64 IP) from prospect list. Per industry standard.
- +745 new scouting grades — fixed MLB Pipeline parser bug (was missing ALL 334 pitcher grades silently), added per-team Just Baseball org lists, MLB Pipeline draft + international pages. Hernandez OFP 55.8 → 57.5 (9 sources). Anderson 54.8 → 56.2 (10 sources).
- 5 dashboard fixes: playoff bars removed (odds already in standings above); Best at Position uses ROS WAR (Seager DH issue); rookie act WAR bug fixed (Melvin Hernandez "0.5 act" was math from chain × ROS_FRAC, now zero for players with 0 MLB history); PROSPECT_DISC 0.80 → 0.90 (10%/yr discount per spec); prospect column relabeled "cWAR (t-adj)" with tooltip explaining the time-adjustment.
| Player | R340 | R341 | R342 | R343 | R345 | Industry |
|---|---|---|---|---|---|---|
| Seth Hernandez | #1533 | #1539 | #359 | #20* | #42 | BA #8 / PT #2 |
| Kade Anderson | #428 | #432 | #83 | #25* | #76 | BA #7 / PT #9 |
* R343 numbers came from a hand-coded stub (FV→peak WAR lookup). R345 numbers come from the REAL chain projection anchored by scouting Bayesian priors — honest math throughout. The 7 IP / 9 IP sample size doesn't justify a top-25 ranking in a stat-based system; the user has explicitly agreed this is the right tradeoff for principled projection.
Verify on Top 100 Prospects · Pitcher Leaderboard (Skenes/Skubal/Yamamoto unchanged — observed dominates for veterans by design)
FV ≥ 60 prospects given faster ETA + WAR ramp in the hand-coded stub fallback. Got Hernandez to #20 / Anderson to #25 via stub mechanism. The stub itself is now obsolete with Phase 2 ✓
Earlier This Cycle
- Stub mechanism rewrite — uses MAX OFP across 7+ scouting sources (Baseball America, FanGraphs, Prospects Live, Just Baseball, MLB Pipeline, tjStats, LLM-extracted). Stops a stale FG grade from dragging down a consensus top-10 prospect (Hernandez BA grade 70 was being averaged with FG's stale 50 → blended 56).
- Stub now replaces near-zero-WAR rows instead of skipping them. Just-drafted prospects with 7-9 IP chains were previously stuck with the failed-chain numbers.
- Pitcher IP audit fixes — workhorse floor gate corrected (was firing on partial mid-season YTD); 165→175 IP cap for proven 200-IP starters; K%-prior bumped 200→300 BF (small May samples no longer inflate FIP for Sánchez/Cease).
- Standings spread amplifier — 1.0×→1.30× on delta-from-mean, plus conditional rescale only when raw mean is >10% off target. Decompresses the 31W bottom-to-top spread toward industry's 45W.
Verify on Standings · Pitcher Leaderboard · Prospects
- Pitcher IP fixes from automated audit — recovery branch only fires for completed prior seasons, IP cap tiered by best-prior workload, K%-prior bumped to reduce small-sample over-influence.
- Console encoding fix — replaced Unicode
≥in build prints with>=. Windows cp1252 was crashing the stub injection block silently, leaving Hernandez/Anderson at zero career WAR. - Honest critique of audit findings — at least 2 of the audit's recommended fixes were directionally wrong (the pitcher gate fix turned out to be a no-op because
prioralready excluded target_year; the hitter R332b fix would have moved Mookie's projection in the wrong direction). Memory was updated to verify subagent fixes before applying.
- Architectural rewrite — replaced the FG-board-driven prospect stub with a SCOUTING-GRADE-driven version. Reads from
pitcher_grades_aggandscouting_grades_agg(composites of 7+ scouting sources blended into our own OFP). External rankings are NEVER inputs to OGV scoring — only scouting GRADES are. - 4 new scouting fetchers shipped — Prospects Live top-100 (99/100 matched), PL per-team top-20 lists (481 unique additional prospects), Baseball America top-100 (100/100 matched), Just Baseball top-100 (93/95 matched with full pitcher tool grades).
- Netlify deploy stability — created
deploy.ps1wrapper that clears the corrupted.netlify/netlify.tomlcache before each deploy. Killed the recurring "Unhandled case: [object Object]" banner permanently.
- Symmetric NPV surplus formula (both value and salary discounted at 10%/yr).
- Prospect cWAR_ev display (bust-rate-adjusted career WAR — FV 70 = 0.80 conf, FV 65 = 0.72, FV 60 = 0.62).
- Two-way Ohtani SSOT — hitter + pitcher WAR summed correctly across all surfaces.
- IL bounceback heuristic (R331) — Mookie 2.0→4.3, Acuña 2.3→4.9, Brown 1.6→3.0, Crochet 2.3→4.3.
- SP IP floors for proven aces (R337/R338) — Yamamoto, Skenes, Crochet, Wheeler, deGrom, Verlander tier.
In Flight — Next Wave
Around-the-clock unified Bayesian projection refactor — currently in research+architecture phase.
- 3 specialist agents in flight — modern projection methodology research (PECOTA / ZiPS / Steamer / DRC+ / Stuff+); data acquisition plan (Indy / college / NPB / KBO / advanced pitch-level); refactor blueprint for the unified architecture.
- Phase 1: scouting-grade IP dev arc as a Marcel floor — fixes "7 IP & retire" symptom for prospects without regressing established arms.
- Phase 2: convert rate computation to true Bayesian (scouting prior + observed-stats update with sample-size weighting). Hernandez stays scouting-anchored; Judge stays observation-driven.
- Phase 3: wire
comp_finder.pyinto the forward chain so aging is comp-derived per-player instead of population-average. - Phase 4+: per-year MLE recalibration; per-year park factors; independent/college/NPB/KBO scrapers; Stuff+/Location+ integration.
Each phase ships as its own R-numbered build with verification on this page.