What's New · Updates & Verification

Recent projection + UI improvements with direct links to verify each one. Tap Verify to jump to the page that shows the fix in action.

Pitcher Hitter / Prospect Park factors Standings UI Infrastructure
Pitcher projection fixes
R372
"so" → "k" column typo fix · chain[1] K% seed for hitters w/ ≥30 YTD PA was blending toward 0 instead of YTD actual. 2027+ projection K% restored to realistic. Verify: Henderson 2027 K% should be ~24% (was 15%). Raleigh 2027 K% ~29% (was 19%).
R367
Pitcher comp aging disabled · R366 version broke Skenes (career WAR 43→33). Restored to population-only aging. Comp arc pairs with injury years were producing steep per-year deltas. Verify: Skenes career WAR should be ~46 (5.9/5.8/5.8/5.6...).
R362
xERA dead-code fix + luck-gap blend · Statcast xERA anchor was silently bypassed by the projection wrapper. Now wired through with luck-gap weighting (only applies when raw vs xERA disagree by >0.25, so elite arms stay elite). Verify: Lowder ROS ERA ~3.93 (was 2.70 — was fluky from 30 IP 2024 lucky sample). Skenes ROS ERA still ~2.4 (xERA agrees with FIP for elite).
R357
Pitcher WAR root cause (IP-injury-factor compounding) · Every healthy starter's in-progress 2026 IP was triggering a "major drop" flag, applying 0.93× IP discount that COMPOUNDED across the chain. Removed the bug; career WAR for elite arms recovered. Verify: Skenes career WAR ~46 (was 38 pre-fix). Crochet ~30 (was 22).
Hitter & Prospect projection fixes
R371
PA-evidence gate on aging boosts · Young prospects with thin samples (e.g. Elián Peña, 17yo with 223 ROK PA) no longer get full development-curve boosts compounded across multiple chain years. Boost scales by lifetime PA / 600. Verify: Peña 2027/2028 should show "MiLB still in minors · estimated debut 2031" (no more historically-elite peak). Top 10 prospect peak BAs should be .258–.285 range (was .256–.356).
R370
Hitter comp aging fully disabled · Phase 3 implementation was compounding per-year contact deltas, inflating young prospect peak BAs to .325-.356. Restored to population-curve aging only. Verify: Top prospect peak AVG should be ≤ .310 (Clark .258, Made .276, De Vries .262).
R368
Fix B — war_pf preservation · For the first time, the leaderboard's "park-adjusted WAR" column actually shows park-adjusted WAR (previously showed neutral chain WAR with the same value as "neutral" column). Verify: Coors hitters' park-WAR > neutral-WAR; Petco/SF/Oakland hitters' park-WAR < neutral. Hover any leaderboard WAR cell to see both numbers.
R366
Ohtani two-way row fix · Hitter leaderboard row was double-counting his pitcher WAR (showed 11.2 instead of hitter-only 7.7). Player page hero badge still shows the 2-way total correctly. Verify: Ohtani on leaderboard shows hitter-only WAR; his player page hero shows combined 2-way WAR.
R360
Prospect over-promotion mathematical fix · Per-year debut-distance bust multiplier tightened from 0.85 to 0.75 (matches empirical level-jump bust rates ~25%, not the 15% the old curve implied). Curbs unproven low-level guys at the source. Verify: 18yo A-ball prospects no longer flood top-30 of trade value. Witt, Anthony, Merrill cluster at top with real proven players.
R359
Hit-tool floor guardrail · Power-only A-ball bats (Nimmala, Neyens, Montes) no longer get full HR/PA credit when hit-tool grade is weak. Multiplicative joint prior: HR target × (1 + (hit−50)/100). Verify: Nimmala/Neyens/Montes ranked below industry consensus before (#16/30/22 OGV vs Cons #98/128/103). Should now be more aligned.
Park factor fixes
R363
MLB park-factor override (480 entries) · DB-computed MLB park factors were 7.3 pts off industry on average (Coors at 101, Petco at 105 flipped to inflator). Wired in the hand-curated MLB_PARK_PROFILES with per-handed factors. Coors now back to 117 HR factor. Verify: Park Factors page should show Coors pf_hr ~117, Petco ~91, Yankee Stadium RHB ~117, Fenway LHB ~115 (Pesky's Pole).
R363
MiLB PA-based PF regression · Park factors now regress by total PA evidence (Tangotiger Bayesian), not by player count. PCL parks (Albuquerque, El Paso, Reno, Asheville) recovered to their structural altitude truth. Verify: org-page park stats for COL system (PCL Albuquerque), TEX (PCL Round Rock), KC (AAA Omaha) should reflect proper PA-weighted regression.
R359
MLE A/A+ HR caps (Davenport 2024) · Low-A HR retention 0.86 → 0.80, A+ 0.88 → 0.83 (selection-bias cap matching FG/Davenport). Power-only A-ball profiles no longer over-translate to MLB. Verify: MLE Factors page should show A=0.80, A+=0.83 (was 0.86/0.88).
Standings & WAR aggregation
R365
WAR-inflation Bug A fix (PA/IP-capped aggregation) · Team WAR was summed across full roster (22 hitters × 350 PA = 7,755 PA per team vs 5,832 PA budget). Now sorted by PA desc, allocated to budget. SD/CLE bumped toward FG consensus. Verify: Standings page — SD 76W (was 74W), CLE 73W (was 72W) closer to FG.
R361
Standings spread amplifier tightened · 1.30/1.50 → 1.15/1.25. RMSE vs FG/PECOTA dropped 9%. Spread now 37W (was 43W), matching industry. NYM/LAD compressed slightly; COL/WSH lifted. Verify: Top team (LAD) ~100-104W, bottom (COL) ~60-65W, spread ~37W.
R363
Cross-org WAR attribution · Mid-season trade players' YTD WAR now splits proportionally by PA/IP at each org instead of crediting current team with full-season WAR. Verify: Patrick Bailey (SF→CLE), Jonah Heim (OAK→ATL) etc. — old team gets credit for their pre-trade PA.
UI & user experience
R369
Trade-value condensed layout · Contract grid font 10.5→9.5, padding 2px→0 vert, chart 198×72→198×56. Each row ~80px shorter on Trade Value page. Verify: Trade Value list — 1 player row fits comfortably; more players visible per screen.
R369
Skubal health grade fix · SP Tiers health pill was reading injuries.json wrong (looking at top level vs nested players key). Skubal D15 was showing 100/Healthy; now ~75/Manage. Verify: SP Tiers page — Skubal's Health pill should show ~75 (Manage band), not 100.
R361
SP Tiers redesigned · Sort by Win % Added per hypothetical start. New columns: Health grade (0-100, Verducci IP-spike + velocity decline + IL + age + durability), Real GS/ERA/FIP, Projected GS/IP/ERA/FIP, Avg start. Game Score removed. Verify: SP Tiers page — primary sort by Win%+, Health pill colored by tier, columns include Real and Projected stats.
R361
Mobile hamburger menu · Old horizontal-scroll nav was unusable on touch (dropdowns cut off, scroll/tap conflicts). Replaced with proper slide-in overlay sheet + body scroll lock + ESC-to-close. Verify: Open the site on a phone or narrow your browser to ~600px wide; tap the hamburger → full-width overlay with all sections.
R358
Throwback team logos (30 teams, 8 authentic 1994 designs) · Wahoo (CLE), Expos eb (WSH), Florida Marlins tri-color (MIA logo not found, ESPN modern), CA Angels (LAA), Rangers diamond (TEX), Padres script (SD), Orioles cartoon (BAL), Rockies wordmark (COL), MB ball-in-glove (MIL). Halo + drop-shadow CSS on every logo. Verify: Standings page — team logos should have white halo + soft drop shadow, "retro" feel. CLE shows Wahoo. WSH shows Expos. LAA shows CA roundel.
R359
Improvers dashboard · New page showing players whose 2026 YTD performance most exceeds (or falls short of) the model's projection. Sample-weighted by √PA. Verify: Top improvers + decliners for hitters and pitchers, refreshed daily.
Behind the scenes
R372
Daily build validator · 25 sanity checks, drift detection on top-100 dynasty list, holdout-backtest MAE comparison, injury-status gating (so IL→Active PA bouncebacks don't false-alarm). Runs after every build, ~1.5s. Verify: Internal infrastructure — output in analysis/validation_report_*.json. No user-facing change.
R358
Cot's contract source-level fixes · 5 surgical scraper patches: regex tightening (no more $2031M phantom option salaries), OPT_YR_CAP (no more 6 phantom option years), detail_html truncation, Spotrac span detection, BBRef graft for missing players. 112 corrupt contracts → 0. Verify: Trade Value contracts — Cal Raleigh, Bellinger, Sánchez, Contreras now have clean option years.
17 releases shipped tonight (R357 → R372) · 21 background agent runs · 2 infrastructure tools (Improvers + build_validator) · 6 user-caught bugs fixed mid-iteration · 2 regressions reverted by validator before they hardened · 0 production-breaking ships.

Drift detection is now self-healing for IL → Active transitions (Acuña's +1.9 WAR bounceback was the proof case). Comp aging (hitter + pitcher) is currently disabled pending Steamer/ZiPS-validated redesign — population aging is the proven baseline.