Which reports actually fed the diagnosis. A source shown as missing was not silently assumed.
| Source | Status | Evidence supplied | Path | Bytes |
|---|---|---|---|---|
| prediction review | loaded | official outcomes and scoring errors | /app/output/reports/prediction_review_20261007.json | n/a |
| forensic deep audit | loaded | probability, provenance, starter and decision contracts | /app/output/reports/PREDICTION_SYSTEM_DEEP_AUDIT_20261007.json | n/a |
| continuous learning | loaded | pipeline-stage quality, calibration, probability lineage | /app/output/learning/continuous_learning_daily_20261007.json | n/a |
| game artifacts | loaded | per-game model trace and structural audit source | /app/output/games | n/a |
Deterministic findings across data integrity, model validation, calibration, score distribution, pipeline stages, simulation, and coverage. Critical is reserved for broken evidence or an unexplained contract violation; high marks material model/process risk. Each row pairs the action to take (Do this) with the wrong conclusion to avoid (Don't conclude).
| Severity | Domain | Finding and evidence | Affected | Action & guardrail |
|---|---|---|---|---|
| HIGH | pipeline_stages | An intermediate stage materially degraded winner direction historical_ml → variance_applied changed winner accuracy by -0.2500 (-1 hits) | MIL@SD | Do thisList the exact games whose winner flipped at this stage, and keep both the before-stage and after-stage picks in the trace. Don't concludeEven if a later stage recovers the pick, this unstable step is still a risk; do not treat it as harmless. |
| HIGH | calibration | Published confidence buckets were poorly aligned on this slate weighted absolute calibration error 0.2272 across 4 games | CLE@CHW, LAD@ATL, MIL@SD, TB@NYY | Do thisWatch the same confidence buckets over the full rolling window before changing any calibration weight. Don't concludeA single slate has far too few games to establish a stable calibration curve. |
| HIGH | model_validation | Validated run models explain very little holdout variance home/away/total R² = 0.0021/0.0309/0.0024 | CLE@CHW, LAD@ATL, MIL@SD, TB@NYY | Do thisTreat exact run scores as low-confidence estimates, and look for stronger features or a better target before tuning the score tails. Don't concludeA small positive R² only means the model beats guessing the average; it does not make the exact scores reliable. |
| INFO | coverage | Every settled game received structural QA 4/4 games structurally audited | CLE@CHW, LAD@ATL, MIL@SD, TB@NYY | Do thisKeep the per-game audit receipt in every report. Don't concludeFull audit coverage does not cancel the findings raised inside the audited games. |
| INFO | probability_lineage | Material calibrated-to-published movements have recorded lineage 1 material movement(s), all explained by named score-coherence and/or recency transformations | TB@NYY | Do thisKeep showing every probability layer and the named transformation between them. Don't concludeA published probability above the calibrated one is not a governor bypass when a recorded transformation explains it. |
| INFO | simulation | Simulation produced no winner-direction intervention on this slate flip candidates 0; published flips 0 | CLE@CHW, LAD@ATL, MIL@SD, TB@NYY | Do thisMeasure the simulation's contribution across rolling slates, separating score realization from winner flipping. Don't concludeZero winner flips is not a defect and does not mean the simulation did no score-reconciliation work. |
A finding that has repeated at or beyond the escalation streak is no longer single-slate noise. It carries its target registered lever and an action-oriented guardrail.
| Finding | Persistence | Target lever(s) | Direction | Guardrail |
|---|---|---|---|---|
| simulation_inert_on_slate | 11 consecutive · 11 in window | simulation.allow_score | confirm the simulation module is running, not silently no-oping | simulation_inert_on_slate has persisted 11 consecutive slates; this is no longer single-slate noise. Treat it as an actionable pattern and raise the code/diagnostic action named; do not force a parameter move. |
| single_slate_calibration_instability | 5 consecutive · 8 in window | confidence.empirical_max_weight, confidence.base_cap, confidence.moderate_cap | increase empirical shrinkage | single_slate_calibration_instability has persisted 5 consecutive slates; this is no longer single-slate noise. Treat it as an actionable pattern and propose a bounded shadow experiment against a target lever. |
| weak_run_model_signal | 5 consecutive · 9 in window | training.xgb.n_estimators, training.xgb.max_depth, training.xgb.learning_rate | investigate features/target via isolated training backtest (manual) | weak_run_model_signal has persisted 5 consecutive slates; this is no longer single-slate noise. Treat it as an actionable pattern and raise the code/diagnostic action named; do not force a parameter move. |
| Finding | Consecutive slates | Incidence | Present now | Fix type |
|---|---|---|---|---|
| pipeline_winner_instability | 1 | 3/11 | yes | code/diagnostic |
| score_margin_compression | 0 | 4/11 | no | param |
| simulation_inert_on_slate | 11 | 11/11 | yes | code/diagnostic |
| single_slate_calibration_instability | 5 | 8/11 | yes | param |
| weak_run_model_signal | 5 | 9/11 | yes | code/diagnostic |
| Metric | Direction | Series (old → new) |
|---|---|---|
| winner_accuracy | flat | 0.6429, –, 1.0, 0.75, 1.0, –, 1.0, 0.5, 0.0, 1.0, 0.75 |
| weighted_calibration_error | improving | 0.1031, –, 0.4792, 0.2317, 0.4832, –, 0.4705, 0.4806, 0.5291, 0.4642, 0.2272 |
| margin_bias | regressing | -1.571, –, -4.25, -2.75, -3.0, –, -0.25, 0.0, -0.5, -0.5, -1.75 |
| team_run_error_on_losses | improving | 4.8, –, –, 2.0, –, –, –, 2.0, 3.5, –, 2.0 |
Every stored stage is scored against the same official finals. A later recovery remains visible; it does not erase an unstable intermediate flip.
| Stage | Winner hits | Accuracy | Team-run MAE | Total-run MAE | Margin MAE |
|---|---|---|---|---|---|
| historical_ml | 3/4 | 75% | 1.89 | 3.759 | 2.675 |
| variance_applied | 2/4 | 50% | 1.875 | 3.75 | 2.75 |
| enhanced_prediction | 2/4 | 50% | 2 | 3 | 3 |
| kpi_layer | 2/4 | 50% | 2 | 3 | 3 |
| embedded_savant_run_environment | 2/4 | 50% | 2.125 | 3.25 | 2.75 |
| fundamental_edge_target_review | 3/4 | 75% | 2.375 | 3.75 | 2.25 |
| capped_target | 3/4 | 75% | 2.375 | 3.75 | 2.25 |
| simulation_result | 3/4 | 75% | 2.375 | 3.75 | 2.25 |
| published_final | 3/4 | 75% | 2.375 | 3.75 | 2.25 |
| Transition | Δ accuracy | Δ hits | Δ team-run MAE | Δ margin MAE | Games whose winner/tie changed |
|---|---|---|---|---|---|
| historical_ml → variance_applied | -0.25 | -1 | -0.0148 | 0.0755 | MIL@SD: MIL → TIE |
| variance_applied → enhanced_prediction | 0 | 0 | 0.125 | 0.25 | MIL@SD: TIE → SD |
| enhanced_prediction → kpi_layer | 0 | 0 | 0 | 0 | |
| kpi_layer → embedded_savant_run_environment | 0 | 0 | 0.125 | -0.25 | |
| embedded_savant_run_environment → fundamental_edge_target_review | 0.25 | 1 | 0.25 | -0.5 | MIL@SD: SD → MIL |
| fundamental_edge_target_review → capped_target | 0 | 0 | 0 | 0 | |
| capped_target → simulation_result | 0 | 0 | 0 | 0 | |
| simulation_result → published_final | 0 | 0 | 0 | 0 |
All columns are pick-side probabilities, so away favorites are not accidentally compared using home-side semantics.
| Game | Outcome | Raw model | Calibrated | Governor | Score coherence | Published | Explanation |
|---|---|---|---|---|---|---|---|
| CLE@CHW | hit | 0.5846 | 0.5486 | 0.5486 | 0.5486 | 0.5351 | score coherence followed by matchup-recency guardrail |
| LAD@ATL | hit | 0.5097 | 0.5084 | 0.5084 | 0.5084 | 0.5072 | published probability matches the calibrated/governed value |
| MIL@SD | hit | 0.5 | 0.505 | 0.505 | 0.505 | 0.505 | published probability matches the calibrated/governed value |
| TB@NYY | miss | 0.6185 | 0.5665 | 0.5665 | 0.5665 | 0.544 | score coherence followed by matchup-recency guardrail |
One blown start is noise. The same failure repeating across the slate is a model problem. These are the repeats.
| Sides analyzed | Broke on pitching | Broke on offense | Both | Variance | Mean starter ERA error | Mean lineup runs vs proj |
|---|---|---|---|---|---|---|
| 8 | 1 | 2 | 0 | 5 | 0.85 | -0.38 |
The blend mixes the trained win classifier with the margin-derived probability. It is only worth its weight if its decision survives the downstream reconciliation to the projected score.
On all 4 games with an applied blend, the blend's side and the published side agree.
Blend side survived on 4 of 4 games; the blend flagged a winner change on 1.
A bias on one slate is noise. The same sign across slates, large relative to how much it moves between them, is a model defect. Only the ones that pass both tests are turned into a named parameter change; the rest are held deliberately.
starter ERA error (actual minus projected)
Mean 0.03 over 10 slates (sign shared by 0.30 of them, z = 0.04).
starters were hit harder than projected: the run model under-credits opposing offenses.
Hold: no change: this bias is not separable from slate-to-slate noise yet
3 of 10 slates share the sign, mean 0.03 +/- 0.8 standard error: not separable from noise
lineup runs actual minus projected
Mean -0.41 over 10 slates (sign shared by 0.60 of them, z = -1.07).
lineups scored below projection: the run environment is set too high.
Hold: no change: this bias is not separable from slate-to-slate noise yet
6 of 10 slates share the sign, mean -0.41 +/- 0.38 standard error: not separable from noise
| Slate | Games | Winner acc | Mean starter ERA error | Mean lineup runs vs proj | Sides broke on pitching | Sides broke on offense |
|---|---|---|---|---|---|---|
| 20261007 | 4 | 0.750 | 6.75 | 1.50 | 1 | |
| 20261006 | 2 | 1.000 | -1.40 | -1.25 | 1 | |
| 20261005 | 2 | 0.000 | -1.11 | -0.75 | 2 | |
| 20261004 | 2 | 0.500 | -1.24 | -2.00 | 2 | |
| 20261003 | 4 | 1.000 | -0.95 | -2.25 | 4 | |
| 20261002 | — | — | — | |||
| 20261001 | 1 | 1.000 | 0.00 | 0.50 | ||
| 20260930 | 4 | 0.750 | 0.78 | 0.12 | 1 | |
| 20260929 | 4 | 1.000 | -0.76 | -0.50 | 3 | |
| 20260928 | — | — | — | |||
| 20260927 | 14 | 0.643 | -2.33 | -0.11 | 2 | 5 |
| 20260926 | 13 | 0.538 | 0.55 | 0.69 | 3 | 4 |
Narrow predicted margins next to wide actual margins is the signature the score-variance tail is too tight.
| Game | Pred margin | Actual margin | Pred − actual |
|---|---|---|---|
| CLE@CHW | 1 | 6 | -5 |
| LAD@ATL | 2 | 3 | -1 |
| MIL@SD | 1 | 2 | -1 |
| TB@NYY | 1 | 1 | 0 |
| Team | Starter | Projected | Actual | ER err |
|---|---|---|---|---|
| CLE | Daniel Espino | 3 ER / 12 outs | 1 ER / 2 outs | -2 |
| CHW | Sean Newcomb | 2 ER / 10 outs | 0 ER / 6 outs | -2 |
Every value is actual / projected. Run impact approximates how far each hitter's real line moved run expectancy from its projection; it orders the movers and is not a published stat.
Top deviations that drove the game:
Starter miss: Daniel Espino (CLE) posted 13.50 ERA vs projected 6.75 (1 ER in 2 outs); no credible venue, opponent-strength or experience signal explains it — an outlier start (variance).
What to do: Variance — no model change is warranted for this start.
Pitcher versus batter: what actually broke this game
Per-pitch matchup fields are not populated in the current feeds, so this is reconstructed from the settled box: each starter's workload-adjusted ERA, the bullpen share behind him, and the opposing lineup's real production against its projection, with the hitters who beat that projection named.
AWAY pitching
Daniel Espino (CLE) threw 2 outs, 1 ER = 13.5 ERA against a projected 6.75 ERA (6.75 ERA error)
Bullpen behind him: 0 ER over 5 outs.
The HOME lineup he faced produced 2 runs on 4 hits and 0 HR, against a projected 2 runs / 5 hits (0 runs vs projection).
Who did the damage to him:
Verdict: pitching: the starter gave up runs at a far worse rate than projected
HOME pitching
No settled pitching line for this club. The forecast named Sean Newcomb (CHW) at a projected 5.4 ERA, but the per-player feed carries no pitching row for him in this game, so the actual-versus-projected comparison cannot be made on this side. That is a source-coverage gap in the settled box, not a forecasting failure.
Bullpen behind him: 1 ER over 2 outs.
The AWAY lineup he faced produced 8 runs on 10 hits and 0 HR, against a projected 5 runs / 9 hits (3 runs vs projection).
Who did the damage to him:
Verdict: neither side broke materially - the result is closer to variance
Starting pitchers & relievers: actual / projected + context (ERA is workload-aware: ER over 9 innings, so a short blow-up is not read like a quality start; ERA error in parentheses when material. exp BB and exp SO are the continuous rate expectations. The integer beside each is a simulation draw reconciled to the opposing simulated batting box, so it is not the line that ranks pitchers: on the 2026-09-07 slate the integers published 39 walks and 121 strikeouts against 51 and 130 real, while these expectations landed on 50.4 and 132.6.)
| Pitcher | Team | Outs | ERA | ER | H | HR | BB | exp BB | SO | exp SO | Context (as-of) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| CLE | Daniel Espino (Starter) | 2 / 12 | 13.5 / 6.75 (+6.75) | 1 / 3 | 2 / 3 | 0 / 1 | 1 / 1 | 1.73 | 2 / 5 | 2.41 | venue away: 0 vs 27 ERA (ok) · opp run factor 0.98 (average) · 15 prior appearances this season |
| CLE | Tim Herrin (Middle Reliever) | 3 / 3 | 0 / 9 (-9.00) | 0 / 1 | 0 / 1 | 0 / 1 | 0 / 0 | 0.49 | 3 / 1 | 0.97 | |
| CLE | Shawn Armstrong (Middle Reliever (High Leverage)) | 2 / 9 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 0 | 0 / 0 | 0.47 | 1 / 3 | 0.88 | |
| CHW | Hagen Smith (Long Reliever) | 2 / 4 | 13.5 / 13.5 | 1 / 2 | 1 / 2 | 0 / 1 | 2 / 0 | 0.94 | 1 / 1 | 1.87 |
Hitters: actual / projected (sorted by run impact vs projection)
| Batter | Team | AB | H | 2B | 3B | HR | RBI | R | BB | SO | Run impact | Season xwOBA | Signal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Jo Adell (DH) | CLE | 4 / 4 | 2 / 1 | 0 / 0 | 1 / 0 | 0 / 0 | 3 / 0 | 0 / 1 | 1 / 0 | 1 / 2 | 1.42 | 0.329 above average | projection too low |
| Munetaka Murakami (1B) | CHW | 4 / 4 | 0 / 2 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 2 | 0 / 0 | 0 / 0 | 3 / 0 | -1.25 | 0.351 elite | bad day |
| Randal Grichuk (LF) | CHW | 4 / 3 | 1 / 1 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 1 | 0 / 1 | 0 / 0 | 1 / 1 | -0.93 | 0.335 above average | bad day |
| Patrick Bailey (C) | CLE | 4 / 4 | 2 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 1 / 0 | 1 / 1 | 0.8 | 0.307 average | no signal |
| Kyle Teel (C) | CHW | 4 / 4 | 1 / 0 | 1 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 0 / 0 | 2 / 2 | 0.78 | 0.321 above average | projection too low |
| Nathaniel Lowe (1B) | CLE | 2 / 3 | 0 / 2 | 0 / 2 | 0 / 0 | 0 / 0 | 0 / 1 | 1 / 1 | 3 / 0 | 0 / 0 | -0.57 | 0.335 above average | bad day |
| Brayan Rocchio (SS) | CLE | 4 / 4 | 2 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 0 / 0 | 0 / 2 | 0.47 | 0.294 below average | — |
| José Ramírez (3B) | CLE | 4 / 5 | 2 / 2 | 1 / 0 | 1 / 0 | 0 / 1 | 2 / 2 | 2 / 1 | 1 / 0 | 0 / 0 | 0.33 | 0.325 above average | — |
| Chase DeLauter (RF) | CLE | 4 / 5 | 1 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 1 / 1 | 1 / 0 | 0 / 0 | 0.33 | 0.346 elite | — |
| Braden Montgomery (RF) | CHW | 3 / 4 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 1 / 0 | 2 / 2 | 0.33 | 0.325 above average | — |
| Chase Meidroth (2B) | CHW | 4 / 4 | 1 / 1 | 1 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 2 / 1 | 0.31 | 0.301 below average | — |
| Steven Kwan (CF) | CLE | 6 / 4 | 1 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 1 / 0 | 0 / 1 | 1 / 0 | 0.14 | 0.328 above average | — |
| Travis Bazzana (2B) | CLE | 2 / 3 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 2 | 2 / 1 | 2 / 1 | 0 / 1 | -0.14 | 0.299 below average | — |
| Miguel Vargas (3B) | CHW | 4 / 4 | 1 / 1 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 1 / 0 | 2 / 1 | 0.02 | 0.378 elite | — |
| Angel Martínez (LF) | CLE | 4 / 4 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 3 / 1 | 0 | 0.299 below average | — |
| Signal | Home-away edge | Meaning |
|---|---|---|
| Season quality | 0.161 | positive favors home; negative favors away |
| Recent form | 0.03 | positive favors home; negative favors away |
| Starting-pitcher matchup | -0.008 | positive favors home; negative favors away |
| Composite | -0.102 | positive favors home; negative favors away |
| Stage | Away-home runs | Confidence | What changed |
|---|---|---|---|
| historical_ml | 4.63-2.8 | n/a | Base ML historical model prediction |
| variance_applied | 5-3 | n/a | Deterministic baseline target (variance factor 1.0) |
| enhanced_prediction | 5-4 | 0.535 | Enhanced ML with recent form, H2H, low-score analysis (confidence shrunk by projected_margin_is_one_run, matchup_recency_guardrail) |
| kpi_layer | 5-4 | n/a | Savant KPI blend applied to the model target |
| embedded_savant_run_environment | 5-4 | n/a | Target score adjusted by temporal Savant lineup quality versus opposing starter quality |
| fundamental_edge_target_review | 5-4 | n/a | Refreshed score target and win probability after Savant/pitcher/team-strength adjustments |
| capped_target | 5-4 | n/a | Capped at max 12 realistic runs |
| simulation_result | 5-4 | n/a | Final inning-by-inning simulation result |
| Stage | Before | After | Toward final pick | What changed |
|---|---|---|---|---|
| variance_applied | 4.63-2.8 | 5-3 | 0.172 | Deterministic baseline target (variance factor 1.0) |
| enhanced_prediction | 5-3 | 5-4 | -1 | Enhanced ML with recent form, H2H, low-score analysis (confidence shrunk by projected_margin_is_one_run, matchup_recency_guardrail) |
| kpi_layer | 5-4 | 5-4 | -0 | Savant KPI blend applied to the model target |
| embedded_savant_run_environment | 5-4 | 5-4 | -0 | Target score adjusted by temporal Savant lineup quality versus opposing starter quality |
| fundamental_edge_target_review | 5-4 | 5-4 | -0 | Refreshed score target and win probability after Savant/pitcher/team-strength adjustments |
| capped_target | 5-4 | 5-4 | -0 | Capped at max 12 realistic runs |
| simulation_result | 5-4 | 5-4 | -0 | Final inning-by-inning simulation result |
These are pregame model adjustments, not claims about actual postgame player error.
| Team | Player | Role | Net effect | Largest change |
|---|---|---|---|---|
| CHW | Sean Newcomb | pitcher / Starter | worse | predicted_SO -4 |
| CHW | Bryan Hudson | pitcher / Middle Reliever (High Leverage) | better | predicted_IP 2.1 |
| CLE | Daniel Espino | pitcher / Starter | better | predicted_BB -2 |
| CLE | Shawn Armstrong | pitcher / Middle Reliever (High Leverage) | better | predicted_IP 2 |
| CHW | Jordan Hicks | pitcher / Middle Reliever (High Leverage) | better | predicted_ER -2 |
| CLE | Nathaniel Lowe | batter / 1B | better | predicted_2B 1.814 |
| CLE | Travis Bazzana | batter / 2B | better | predicted_RBI 1.71 |
| CHW | Munetaka Murakami | batter / 1B | deboosted | predicted_SO -1.557 |
| Severity | Rule | Finding | Subject |
|---|---|---|---|
| info | RECONCILIATION_PROPAGATION | No score_target_reconciliation step was used for this game. |
| Team | Starter | Projected | Actual | ER err |
|---|---|---|---|---|
| LAD | Tyler Glasnow | 2 ER / 16 outs | 1 ER / 14 outs | -1 |
| ATL | Tyler Mahle | 3 ER / 15 outs | 1 ER / 19 outs | -2 |
Every value is actual / projected. Run impact approximates how far each hitter's real line moved run expectancy from its projection; it orders the movers and is not a published stat.
Top deviations that drove the game:
Pitcher versus batter: what actually broke this game
Per-pitch matchup fields are not populated in the current feeds, so this is reconstructed from the settled box: each starter's workload-adjusted ERA, the bullpen share behind him, and the opposing lineup's real production against its projection, with the hitters who beat that projection named.
AWAY pitching
Tyler Glasnow (LAD) threw 14 outs, 1 ER = 1.93 ERA against a projected 3.38 ERA (-1.45 ERA error)
Bullpen behind him: 0 ER over 2 outs.
The HOME lineup he faced produced 0 runs on 0 hits and 0 HR, against a projected 0 runs / 0 hits (0 runs vs projection).
No individual hitter beat his projection by a meaningful margin.
Verdict: offense: the lineup scored well below its projection
HOME pitching
No settled pitching line for this club. The forecast named Tyler Mahle (ATL) at a projected 5.4 ERA, but the per-player feed carries no pitching row for him in this game, so the actual-versus-projected comparison cannot be made on this side. That is a source-coverage gap in the settled box, not a forecasting failure.
Bullpen behind him: 0 ER over 0 outs.
The AWAY lineup he faced produced 3 runs on 5 hits and 1 HR, against a projected 6 runs / 9 hits (-3 runs vs projection).
Who did the damage to him:
Verdict: neither side broke materially - the result is closer to variance
Starting pitchers & relievers: actual / projected + context (ERA is workload-aware: ER over 9 innings, so a short blow-up is not read like a quality start; ERA error in parentheses when material. exp BB and exp SO are the continuous rate expectations. The integer beside each is a simulation draw reconciled to the opposing simulated batting box, so it is not the line that ranks pitchers: on the 2026-09-07 slate the integers published 39 walks and 121 strikeouts against 51 and 130 real, while these expectations landed on 50.4 and 132.6.)
| Pitcher | Team | Outs | ERA | ER | H | HR | BB | exp BB | SO | exp SO | Context (as-of) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| LAD | Tyler Glasnow (Starter) | 14 / 16 | 1.93 / 3.38 | 1 / 2 | 1 / 4 | 0 / 2 | 5 / 0 | 1.83 | 5 / 5 | 6.81 | venue away: 2.84 vs 4.25 ERA (ok) · opp run factor 1.06 (strong) · 13 prior appearances this season |
| LAD | Alex Vesia (Middle Reliever) | 2 / 3 | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 0 / 0 | 0.45 | 0 / 1 | 1.34 |
Hitters: actual / projected (sorted by run impact vs projection)
| Batter | Team | AB | H | 2B | 3B | HR | RBI | R | BB | SO | Run impact | Season xwOBA | Signal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Freddie Freeman (1B) | LAD | 4 / 5 | 0 / 3 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 0 | 0 / 2 | -1.41 | 0.363 elite | bad day |
| Will Smith (C) | LAD | 4 / 5 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 2 | 0 / 1 | 0 / 0 | 2 / 0 | -1.4 | 0.389 elite | bad day |
| Teoscar Hernández (LF) | LAD | 4 / 3 | 1 / 1 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 1 | 1 / 2 | 0 / 1 | 2 / 1 | -1.26 | 0.332 above average | bad day |
| Andy Pages (CF) | LAD | 3 / 4 | 2 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 2 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0.94 | 0.343 elite | projection too low |
| Max Muncy (3B) | LAD | 4 / 4 | 1 / 1 | 0 / 0 | 0 / 0 | 1 / 0 | 1 / 2 | 1 / 0 | 0 / 0 | 0 / 2 | 0.93 | 0.349 elite | projection too low |
| Shohei Ohtani (DH) | LAD | 3 / 3 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 1 | 1 / 1 | 1 / 1 | -0.47 | 0.397 elite | — |
| Enrique Hernández (2B) | LAD | 2 / 4 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 1 | -0.47 | 0.279 weak | — |
| Mookie Betts (SS) | LAD | 4 / 4 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 1 | 0 / 1 | -0.33 | 0.339 above average | — |
| Kyle Tucker (RF) | LAD | 3 / 4 | 1 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 0.33 | 0.331 above average | — |
| Signal | Home-away edge | Meaning |
|---|---|---|
| Season quality | -0.61 | positive favors home; negative favors away |
| Recent form | -0.314 | positive favors home; negative favors away |
| Starting-pitcher matchup | 0.139 | positive favors home; negative favors away |
| Composite | -0.469 | positive favors home; negative favors away |
| Stage | Away-home runs | Confidence | What changed |
|---|---|---|---|
| historical_ml | 4.7-3.97 | n/a | Base ML historical model prediction |
| variance_applied | 5-4 | n/a | Deterministic baseline target (variance factor 1.0) |
| enhanced_prediction | 5-4 | 0.507 | Enhanced ML with recent form, H2H, low-score analysis (confidence shrunk by matchup_recency_guardrail) |
| kpi_layer | 5-4 | n/a | Savant KPI blend applied to the model target |
| embedded_savant_run_environment | 6-4 | n/a | Target score adjusted by temporal Savant lineup quality versus opposing starter quality |
| fundamental_edge_target_review | 6-4 | n/a | Refreshed score target and win probability after Savant/pitcher/team-strength adjustments |
| capped_target | 6-4 | n/a | Capped at max 12 realistic runs |
| simulation_result | 6-4 | n/a | Final inning-by-inning simulation result |
| Stage | Before | After | Toward final pick | What changed |
|---|---|---|---|---|
| variance_applied | 4.7-3.97 | 5-4 | 0.276 | Deterministic baseline target (variance factor 1.0) |
| enhanced_prediction | 5-4 | 5-4 | -0 | Enhanced ML with recent form, H2H, low-score analysis (confidence shrunk by matchup_recency_guardrail) |
| kpi_layer | 5-4 | 5-4 | -0 | Savant KPI blend applied to the model target |
| embedded_savant_run_environment | 5-4 | 6-4 | 1 | Target score adjusted by temporal Savant lineup quality versus opposing starter quality |
| fundamental_edge_target_review | 6-4 | 6-4 | -0 | Refreshed score target and win probability after Savant/pitcher/team-strength adjustments |
| capped_target | 6-4 | 6-4 | -0 | Capped at max 12 realistic runs |
| simulation_result | 6-4 | 6-4 | -0 | Final inning-by-inning simulation result |
These are pregame model adjustments, not claims about actual postgame player error.
| Team | Player | Role | Net effect | Largest change |
|---|---|---|---|---|
| LAD | Tyler Glasnow | pitcher / Starter | worse | predicted_BB -4 |
| LAD | Brock Stewart | pitcher / Middle Reliever (High Leverage) | worse | predicted_SO 4 |
| ATL | Dylan Dodd | pitcher / Middle Reliever | better | predicted_ER -4 |
| ATL | Tyler Mahle | pitcher / Starter | worse | predicted_SO 3 |
| ATL | Grant Holmes | pitcher / Long Reliever | worse | predicted_ER 2 |
| LAD | Freddie Freeman | batter / 1B | worse | predicted_H 1.91 |
| ATL | Austin Riley | batter / 3B | worse | predicted_SO 1.762 |
| LAD | Max Muncy | batter / 3B | worse | predicted_RBI 1.71 |
| Severity | Rule | Finding | Subject |
|---|---|---|---|
| info | RECONCILIATION_PROPAGATION | No score_target_reconciliation step was used for this game. |
| Team | Starter | Projected | Actual | ER err |
|---|---|---|---|---|
| MIL | Robert Gasser | 2 ER / 11 outs | 1 ER / 12 outs | -1 |
| SD | Walker Buehler | 3 ER / 11 outs | 1 ER / 9 outs | -2 |
Every value is actual / projected. Run impact approximates how far each hitter's real line moved run expectancy from its projection; it orders the movers and is not a published stat.
Top deviations that drove the game:
Pitcher versus batter: what actually broke this game
Per-pitch matchup fields are not populated in the current feeds, so this is reconstructed from the settled box: each starter's workload-adjusted ERA, the bullpen share behind him, and the opposing lineup's real production against its projection, with the hitters who beat that projection named.
AWAY pitching
Robert Gasser (MIL) threw 12 outs, 1 ER = 2.25 ERA against a projected 4.91 ERA (-2.66 ERA error)
Bullpen behind him: 0 ER over 12 outs.
The HOME lineup he faced produced 0 runs on 0 hits and 0 HR, against a projected 0 runs / 0 hits (0 runs vs projection).
No individual hitter beat his projection by a meaningful margin.
Verdict: offense: the lineup scored well below its projection
HOME pitching
No settled pitching line for this club. The forecast named Walker Buehler (SD) at a projected 7.36 ERA, but the per-player feed carries no pitching row for him in this game, so the actual-versus-projected comparison cannot be made on this side. That is a source-coverage gap in the settled box, not a forecasting failure.
Bullpen behind him: 0 ER over 0 outs.
The AWAY lineup he faced produced 3 runs on 10 hits and 0 HR, against a projected 6 runs / 8 hits (-3 runs vs projection).
Who did the damage to him:
Verdict: neither side broke materially - the result is closer to variance
Starting pitchers & relievers: actual / projected + context (ERA is workload-aware: ER over 9 innings, so a short blow-up is not read like a quality start; ERA error in parentheses when material. exp BB and exp SO are the continuous rate expectations. The integer beside each is a simulation draw reconciled to the opposing simulated batting box, so it is not the line that ranks pitchers: on the 2026-09-07 slate the integers published 39 walks and 121 strikeouts against 51 and 130 real, while these expectations landed on 50.4 and 132.6.)
| Pitcher | Team | Outs | ERA | ER | H | HR | BB | exp BB | SO | exp SO | Context (as-of) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| MIL | Robert Gasser (Starter) | 12 / 11 | 2.25 / 4.91 | 1 / 2 | 3 / 3 | 1 / 0 | 1 / 1 | 1.66 | 3 / 4 | 3.3 | venue away: 4.66 vs 3.4 ERA (worse here) · opp run factor 0.97 (average) · 21 prior appearances this season |
| MIL | Aaron Ashby (Setup Man) | 9 / 4 | 0 / 6.75 (-6.75) | 0 / 1 | 0 / 1 | 0 / 1 | 2 / 0 | 0.42 | 3 / 2 | 1.56 | |
| MIL | Trevor Megill (Closer) | 3 / 12 | 0 / 0 | 0 / 0 | 0 / 3 | 0 / 0 | 0 / 1 | 0.18 | 2 / 1 | 1.07 |
Hitters: actual / projected (sorted by run impact vs projection)
| Batter | Team | AB | H | 2B | 3B | HR | RBI | R | BB | SO | Run impact | Season xwOBA | Signal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Brice Turang (2B) | MIL | 5 / 4 | 1 / 3 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 2 | 0 / 1 | 0 / 1 | 0 / 1 | -1.58 | 0.344 elite | bad day |
| Garrett Mitchell (CF) | MIL | 4 / 4 | 2 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 1 / 0 | 1 / 0 | 0 / 0 | 0 / 2 | 1.56 | 0.353 elite | projection too low |
| Joey Ortiz (3B) | MIL | 4 / 4 | 0 / 2 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 0 | 1 / 0 | -0.94 | 0.297 below average | projection too high |
| Christian Yelich (DH) | MIL | 4 / 5 | 1 / 1 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 2 | 0 / 2 | 0 / 0 | 1 / 0 | -0.93 | 0.308 average | no signal |
| Jackson Chourio (LF) | MIL | 4 / 5 | 1 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 1 / 0 | 0 / 0 | 0.8 | 0.344 elite | projection too low |
| William Contreras (C) | MIL | 5 / 3 | 2 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 1 | 0 / 2 | 0.61 | 0.334 above average | projection too low |
| Sal Frelick (RF) | MIL | 3 / 4 | 1 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 0 | 1 / 0 | 0 / 0 | 1 / 1 | 0.47 | 0.281 weak | — |
| Jake Bauers (1B) | MIL | 1 / 4 | 1 / 1 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 1 / 1 | 3 / 1 | 0 / 1 | 0.35 | 0.371 elite | — |
| Cooper Pratt (SS) | MIL | 4 / 5 | 1 / 1 | 1 / 1 | 0 / 0 | 0 / 0 | 0 / 2 | 0 / 0 | 0 / 0 | 0 / 2 | 0 | 0.315 average | — |
| Signal | Home-away edge | Meaning |
|---|---|---|
| Season quality | -0.723 | positive favors home; negative favors away |
| Recent form | 0.334 | positive favors home; negative favors away |
| Starting-pitcher matchup | -0.045 | positive favors home; negative favors away |
| Composite | -0.233 | positive favors home; negative favors away |
| Stage | Away-home runs | Confidence | What changed |
|---|---|---|---|
| historical_ml | 4.32-3.96 | n/a | Base ML historical model prediction |
| variance_applied | 4-4 | n/a | Deterministic baseline target (variance factor 1.0) |
| enhanced_prediction | 4-5 | 0.505 | Enhanced ML with recent form, H2H, low-score analysis (confidence shrunk by projected_margin_is_one_run) |
| kpi_layer | 4-5 | n/a | Savant KPI blend applied to the model target |
| embedded_savant_run_environment | 4-5 | n/a | Target score adjusted by temporal Savant lineup quality versus opposing starter quality |
| fundamental_edge_target_review | 6-5 | n/a | Refreshed score target and win probability after Savant/pitcher/team-strength adjustments |
| capped_target | 6-5 | n/a | Capped at max 12 realistic runs |
| simulation_result | 6-5 | n/a | Final inning-by-inning simulation result |
| Stage | Before | After | Toward final pick | What changed |
|---|---|---|---|---|
| variance_applied | 4.32-3.96 | 4-4 | -0.358 | Deterministic baseline target (variance factor 1.0) |
| enhanced_prediction | 4-4 | 4-5 | -1 | Enhanced ML with recent form, H2H, low-score analysis (confidence shrunk by projected_margin_is_one_run) |
| kpi_layer | 4-5 | 4-5 | -0 | Savant KPI blend applied to the model target |
| embedded_savant_run_environment | 4-5 | 4-5 | -0 | Target score adjusted by temporal Savant lineup quality versus opposing starter quality |
| fundamental_edge_target_review | 4-5 | 6-5 | 2 | Refreshed score target and win probability after Savant/pitcher/team-strength adjustments |
| capped_target | 6-5 | 6-5 | -0 | Capped at max 12 realistic runs |
| simulation_result | 6-5 | 6-5 | -0 | Final inning-by-inning simulation result |
These are pregame model adjustments, not claims about actual postgame player error.
| Team | Player | Role | Net effect | Largest change |
|---|---|---|---|---|
| MIL | Robert Gasser | pitcher / Starter | deboosted | predicted_ER -3 |
| MIL | Trevor Megill | pitcher / Closer | worse | predicted_H 3 |
| SD | Walker Buehler | pitcher / Starter | worse | predicted_BB 3 |
| SD | Adrian Morejon | pitcher / Closer | worse | predicted_H 3 |
| SD | Jackson Merrill | batter / CF | worse | predicted_RBI 2.46 |
| SD | Austin Hays | batter / DH | boosted | predicted_AB 2.325 |
| MIL | Aaron Ashby | pitcher / Setup Man | worse | predicted_SO 2 |
| SD | Fernando Tatis Jr. | batter / RF | worse | predicted_AB -1.96 |
| Severity | Rule | Finding | Subject |
|---|---|---|---|
| info | RECONCILIATION_PROPAGATION | No score_target_reconciliation step was used for this game. |
No large single-factor errors.
| Team | Starter | Projected | Actual | ER err |
|---|---|---|---|---|
| TB | Nick Martinez | 2 ER / 13 outs | 2 ER / 11 outs | 0 |
| NYY | Max Fried | 2 ER / 16 outs | 4 ER / 17 outs | 2 |
Every value is actual / projected. Run impact approximates how far each hitter's real line moved run expectancy from its projection; it orders the movers and is not a published stat.
Top deviations that drove the game:
Pitcher versus batter: what actually broke this game
Per-pitch matchup fields are not populated in the current feeds, so this is reconstructed from the settled box: each starter's workload-adjusted ERA, the bullpen share behind him, and the opposing lineup's real production against its projection, with the hitters who beat that projection named.
AWAY pitching
Nick Martinez (TB) threw 11 outs, 2 ER = 4.91 ERA against a projected 4.15 ERA (0.76 ERA error)
Bullpen behind him: 0 ER over 5 outs.
The HOME lineup he faced produced 0 runs on 0 hits and 0 HR, against a projected 0 runs / 0 hits (0 runs vs projection).
No individual hitter beat his projection by a meaningful margin.
Verdict: neither side broke materially - the result is closer to variance
HOME pitching
No settled pitching line for this club. The forecast named Max Fried (NYY) at a projected 3.38 ERA, but the per-player feed carries no pitching row for him in this game, so the actual-versus-projected comparison cannot be made on this side. That is a source-coverage gap in the settled box, not a forecasting failure.
Bullpen behind him: 0 ER over 0 outs.
The AWAY lineup he faced produced 3 runs on 6 hits and 1 HR, against a projected 3 runs / 6 hits (0 runs vs projection).
Who did the damage to him:
Verdict: neither side broke materially - the result is closer to variance
Starting pitchers & relievers: actual / projected + context (ERA is workload-aware: ER over 9 innings, so a short blow-up is not read like a quality start; ERA error in parentheses when material. exp BB and exp SO are the continuous rate expectations. The integer beside each is a simulation draw reconciled to the opposing simulated batting box, so it is not the line that ranks pitchers: on the 2026-09-07 slate the integers published 39 walks and 121 strikeouts against 51 and 130 real, while these expectations landed on 50.4 and 132.6.)
| Pitcher | Team | Outs | ERA | ER | H | HR | BB | exp BB | SO | exp SO | Context (as-of) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| TB | Nick Martinez (Starter) | 11 / 13 | 4.91 / 4.15 | 2 / 2 | 5 / 4 | 0 / 0 | 1 / 2 | 0.9 | 3 / 4 | 3.17 | venue away: 2.38 vs 3.9 ERA (ok) · opp run factor 0.97 (strong) · 31 prior appearances this season |
| TB | Cam Booser (Setup Man) | 2 / 2 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0.13 | 0 / 1 | 0.71 | |
| TB | Bryan Baker (Closer) | 3 / 3 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 0 | 1 / 0 | 0.29 | 2 / 1 | 0.93 |
Hitters: actual / projected (sorted by run impact vs projection)
| Batter | Team | AB | H | 2B | 3B | HR | RBI | R | BB | SO | Run impact | Season xwOBA | Signal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Jonathan Aranda (1B) | TB | 3 / 3 | 1 / 1 | 0 / 0 | 0 / 0 | 0 / 1 | 1 / 1 | 0 / 2 | 0 / 1 | 0 / 0 | -1.26 | 0.343 elite | bad day |
| Ryan Vilade (RF) | TB | 2 / 3 | 1 / 1 | 0 / 0 | 0 / 0 | 1 / 0 | 1 / 0 | 1 / 0 | 0 / 1 | 0 / 2 | 0.6 | 0.327 above average | projection too low |
| Junior Caminero (3B) | TB | 4 / 4 | 1 / 2 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 1 / 0 | 0 / 0 | 1 / 0 | -0.47 | 0.364 elite | — |
| Liam Hicks (C) | TB | 4 / 4 | 0 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 2 / 1 | -0.47 | 0.319 average | — |
| Taylor Walls (SS) | TB | 3 / 4 | 1 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 0.47 | 0.251 weak | — |
| Richie Palacios (2B) | TB | 3 / 3 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 2 / 1 | -0.33 | 0.306 average | — |
| Yandy Díaz (DH) | TB | 4 / 4 | 1 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 0 / 1 | 2 / 0 | 0.14 | 0.346 elite | — |
| Jonny DeLuca (CF) | TB | 3 / 4 | 1 / 1 | 0 / 0 | 0 / 0 | 0 / 0 | 0 / 1 | 1 / 0 | 0 / 0 | 0 / 1 | 0 | 0.261 weak | — |
| Signal | Home-away edge | Meaning |
|---|---|---|
| Season quality | 0.176 | positive favors home; negative favors away |
| Recent form | 0.182 | positive favors home; negative favors away |
| Starting-pitcher matchup | -0.014 | positive favors home; negative favors away |
| Composite | 0.291 | positive favors home; negative favors away |
| Stage | Away-home runs | Confidence | What changed |
|---|---|---|---|
| historical_ml | 3.96-5.57 | n/a | Base ML historical model prediction |
| variance_applied | 4-6 | n/a | Deterministic baseline target (variance factor 1.0) |
| enhanced_prediction | 3-4 | 0.544 | Enhanced ML with recent form, H2H, low-score analysis (confidence shrunk by projected_margin_is_one_run, matchup_recency_guardrail) |
| kpi_layer | 3-4 | n/a | Savant KPI blend applied to the model target |
| embedded_savant_run_environment | 3-4 | n/a | Target score adjusted by temporal Savant lineup quality versus opposing starter quality |
| fundamental_edge_target_review | 3-4 | n/a | Refreshed score target and win probability after Savant/pitcher/team-strength adjustments |
| capped_target | 3-4 | n/a | Capped at max 12 realistic runs |
| simulation_result | 3-4 | n/a | Final inning-by-inning simulation result |
| Stage | Before | After | Toward final pick | What changed |
|---|---|---|---|---|
| variance_applied | 3.96-5.57 | 4-6 | 0.391 | Deterministic baseline target (variance factor 1.0) |
| enhanced_prediction | 4-6 | 3-4 | -1 | Enhanced ML with recent form, H2H, low-score analysis (confidence shrunk by projected_margin_is_one_run, matchup_recency_guardrail) |
| kpi_layer | 3-4 | 3-4 | 0 | Savant KPI blend applied to the model target |
| embedded_savant_run_environment | 3-4 | 3-4 | 0 | Target score adjusted by temporal Savant lineup quality versus opposing starter quality |
| fundamental_edge_target_review | 3-4 | 3-4 | 0 | Refreshed score target and win probability after Savant/pitcher/team-strength adjustments |
| capped_target | 3-4 | 3-4 | 0 | Capped at max 12 realistic runs |
| simulation_result | 3-4 | 3-4 | 0 | Final inning-by-inning simulation result |
These are pregame model adjustments, not claims about actual postgame player error.
| Team | Player | Role | Net effect | Largest change |
|---|---|---|---|---|
| TB | Nick Martinez | pitcher / Starter | better | predicted_H -4 |
| TB | Cole Sulser | pitcher / Middle Reliever | worse | predicted_H 4 |
| NYY | Max Fried | pitcher / Starter | worse | predicted_ER 2 |
| NYY | Ryan Weathers | pitcher / Middle Reliever | better | predicted_ER -2 |
| NYY | Cody Bellinger | batter / LF | better | predicted_AB -1.65 |
| NYY | Luis García Jr. | batter / 1B | better | predicted_R 1.533 |
| TB | Jonathan Aranda | batter / 1B | worse | predicted_R 1.519 |
| TB | Yandy Díaz | batter / DH | worse | predicted_H -1.35 |
| Severity | Rule | Finding | Subject |
|---|---|---|---|
| info | RECONCILIATION_PROPAGATION | No score_target_reconciliation step was used for this game. |
Each candidate fix, and exactly which games it would help versus hurt. A lever that repairs one game and breaks two is visible here before it is proposed.
> Coverage receipt: COMPLETE · 9/8 sections; 4/4 games; 6/6 causes; 7/7 sources
All 7 source_manifest entries are recorded as loaded. The supplied evidence identifies each by path, purpose, and byte count:
prediction review — /app/output/reports/prediction_review_20261007.json, 32,361 bytes; official outcomes and scoring errors.forensic deep audit — /app/output/reports/PREDICTION_SYSTEM_DEEP_AUDIT_20261007.json, 75,958 bytes; probability, provenance, starter, and decision contracts.continuous learning — /app/output/learning/continuous_learning_daily_20261007.json, 681,969 bytes; pipeline-stage quality, calibration, probability lineage, score distribution, and starter comparisons.detailed report — /app/output/reports/detailed_20261007.html, 108,248 bytes; game and simulation rendering.ultra detailed player audit — /app/output/reports/20261007_ultra_detailed_player_audit.html, 6,962,831 bytes; player-level prediction trace.structural audit — /app/output/reports/audit_report_20261007.html, 473,259 bytes; invariant findings.integrity revision audit — /app/output/reports/audit_report_20261007_integrity_revision.html, 1,646,215 bytes; audit of 14 post-start revision artifacts.The manifest says the files were loaded; this analysis cannot independently verify their contents against the paths. All 4 games listed in the diagnosis are reviewed, matching games_reviewed: 4, expected_games: 4, and the coverage matrix’s 4/4 counts for structural audits, deep audits, continuous-learning games, canonical artifacts, and starter comparisons.
Gaps and internal inconsistencies to retain in the record:
TB@NYY has no joined player-level actuals: the slate feed has 25 rows but none match that game ID. Its player-level causes therefore cannot be assessed from these data.MIL@SD probability lineage says predicted_side: home and published pick probability 0.505, while the game record predicts MIL (away), the diagnostic says home probability 0.495, and the displayed home-minus-away edge is −0.01. These point to an away pick. This is an internal probability-side/label inconsistency.raw_model_pick_probability and governor_input_probability values. The trace records the governor inputs and named transformations, but the meaning and exact ordering of all “raw” fields are not fully explicit. This is a lineage-clarity issue; it does not, by itself, establish an unrecorded calibrated-to-published bypass.probability_reversions reports one blend flip at the blend stage, four sides surviving to publication, no overwrites, and an empty games list. The flip cannot be identified from that object.The slate went 3/4 (75%), with one miss, TB@NYY. This exceeds the supplied walk-forward accuracy of 0.570149 and historical winner accuracy of 0.600414, but four games do not establish improved performance. The cross-slate winner-accuracy trend is explicitly flat, with mean 0.7381 over the reported series.
A correct winner is not evidence that the score or confidence was good. Three games had the correct winner but substantial run errors.
The four-game confidence bucket reports average confidence 0.5228, hit rate 0.75, and signed bucket calibration error −0.2272, labeled underconfident under the stated convention (published confidence minus observed hit rate). Its weighted absolute calibration error is 0.2272. That is a large single-slate mismatch, but the bucket contains only four games and the causal register explicitly says not to change calibration on this slate alone.
The reported published pick-side confidence values average approximately 0.528; the bucket’s 0.5228 matches the average of the displayed *home* probabilities (including probabilities below 0.5), not the average pick-side confidence. The signed-error definition is stated, but the confidence convention underlying that bucket is not fully clear. The conclusion is still poor slate-level alignment, not a reliable direction for a global curve.
Published team-run MAE is 2.375 and total-run MAE is 3.75 across four games. Team-run absolute errors are 5, 5, 7, and 2. Predicted margins are compressed: 1, 2, 1, and 1 runs, versus actual margins of 6, 3, 2, and 1. The holdout run-model R² values are near zero: home 0.002143, away 0.030936, total 0.002415. Exact score outputs therefore have weak demonstrated signal.
All four games have starter comparisons in starter_lines, with identity matches true. The starter outcomes were mixed: CLE’s Daniel Espino allowed one earned run in two outs against a 3-ER projection, while TB’s Max Fried allowed four ER against a 2-ER projection. These comparisons do not show a uniform slate-wide starter miss, and the conspicuous Espino result is identified as an outlier/variance event. The diagnosis does not support tuning starter weights from this slate alone.
No supplied game structural audit has critical, error, or warning findings; all four are PASS, and the game diagnostic says the forecast file was clean. Coverage is complete for the four games. These facts argue against a saved-score artifact causing the TB miss. They do not resolve the internal MIL@SD probability-side contradiction or the missing TB player join. The latter are evidence/contract-quality issues to address in reporting and trace validation.
pipeline_winner_instability: historical_ml → variance_applied reduced winner accuracy by 0.2500 (one hit); affected game MIL@SD. Keep and expose the exact before/after game picks. Do not treat a later recovery as harmless.single_slate_calibration_instability: weighted absolute calibration error 0.2272 over four games; affects all four. Watch the same buckets over the rolling window before changing calibration. Do not infer a stable calibration curve from this slate.weak_run_model_signal: holdout home/away/total R² 0.0021/0.0309/0.0024; affects all four. Treat exact scores as low-confidence and investigate features/targets; do not infer that positive but tiny R² makes exact scores reliable.complete_slate_audit_coverage: 4/4 structurally audited; all four. Keep the audit receipt. Coverage does not cancel in-game findings.probability_publication_delta_explained: one material movement, with recorded score-coherence and/or recency transformations; TB@NYY is listed. Keep every probability layer visible. A published value above a calibrated value is not a bypass when the movement is recorded.simulation_inert_on_slate: zero flip candidates and zero published flips; all four. Measure simulation contribution over rolling slates. Zero flips alone is not a defect and does not mean score reconciliation did no work.No critical or error item appears in the causal register. The separate internal probability-label inconsistency is an evidence/contract issue discussed in section 6.
“Home-minus-away edge” below is the supplied signed system edge, not a probability distance from 50%. A 0.12 signed home-away edge is moderate, not a near coin flip. Runs and starter lines are the supplied projections and outcomes; no missing player results are inferred.
no_change; Savant adjustment applied. The supplied stage table does not identify a CLE-specific winner flip.large_savant_run_environment_swing diagnostic flag; Savant adjustment applied; volatility action no_change. The final run total remained five too high.no_change. Pipeline stages show this is the one game with a winner-direction regression at variance application and later recovery; details appear in section 4.large_savant_run_environment_swing flag; Savant adjustment applied; volatility action no_change. Prediction put one run on the wrong side.The earliest explicitly supplied pregame evidence already favored the result that lost: season edge +0.1757, recent edge +0.182, and composite home edge +0.2909 all favored NYY; pitcher edge was only −0.0142 for the home side. The confidence trace then reports governed probability 0.5665 for the home pick, and the published home probability remains 0.544016. The system therefore did not merely miss on a nominal 0.50 selection: its published lean was for NYY at a 0.088 home-away edge.
The probability fields are not fully ordered transparently: the trace governor input is 0.521431, but the governed output is 0.5665; the separate lineage raw-model field is 0.6185. The named calibration/governor, score-coherence, and recency stages are recorded, so the supplied evidence does not justify calling the calibrated-to-published movement a bypass. It does justify checking the mapping and semantics of the multiple raw fields.
Attribution by category:
All stages are measured against official final scores; positive deltas versus historical_ml are regressions.
| Stage | Winner hits | Winner accuracy | Team-run MAE | Total-run MAE | Margin MAE | Change in winner direction |
|---|---|---|---|---|---|---|
historical_ml | 3/4 | 0.75 | 1.8898 | 3.7594 | 2.6745 | Baseline |
variance_applied | 2/4 | 0.50 | 1.875 | 3.75 | 2.75 | MIL: MIL → TIE |
enhanced_prediction | 2/4 | 0.50 | 2.0 | 3.0 | 3.0 | MIL: TIE → SD |
kpi_layer | 2/4 | 0.50 | 2.0 | 3.0 | 3.0 | No change |
embedded_savant_run_environment | 2/4 | 0.50 | 2.125 | 3.25 | 2.75 | No change |
fundamental_edge_target_review | 3/4 | 0.75 | 2.375 | 3.75 | 2.25 | MIL: SD → MIL |
capped_target | 3/4 | 0.75 | 2.375 | 3.75 | 2.25 | No change |
simulation_result | 3/4 | 0.75 | 2.375 | 3.75 | 2.25 | No change |
published_final | 3/4 | 0.75 | 2.375 | 3.75 | 2.25 | No change |
The historical → variance transition regressed winner accuracy by one hit (−0.25) on MIL@SD; its team-run MAE improved only 0.0148. The next stage changed MIL from tie to SD without restoring the correct direction. The embedded-Savant-to-fundamental-review transition later flipped MIL from SD to MIL and restored the slate to 3/4. That recovery does not erase the intermediate regression. From fundamental review onward, the score and winner did not change through publication; simulation produced no winner intervention.
Team-run MAE ended 0.4852 worse than historical ML, despite margin MAE improving 0.4245. Total-run MAE finished essentially unchanged from the historical baseline (3.75 versus 3.7594). This is not a consistent score-quality improvement.
Every supplied lever_tension entry:
score.variance_multiplier / score.variance_floor (widen run distributions), targets Brier/calibrationplayer.pitcher.v4 form weights / player.pitcher_prior_games, targets starter ER/outs MAErecent.* / season.* run-mean weightingTempting one-game fixes to reject:
all_games_structurally_audited: true. It is appropriate to say game-level structural coverage is complete, but not that every diagnostic is complete: TB player-level actuals do not join.probability_reversions incomplete event identification: one blend-stage flip is reported, but games is empty. No game can be named from this field, so it is not possible to check that flip against the per-game trace.Values below preserve the supplied lineage. “Governor input” corresponds to the trace’s raw pick probability; the separate raw-model field is also shown so the distinction is visible.
| Game | Separate raw model | Governor input → output / calibrated | Score coherence → published | Recency / recorded transformation |
|---|---|---|---|---|
| CLE@CHW | 0.5846 | 0.555841 → 0.5486 / 0.5486 | 0.548621 → 0.535129 | Guardrail applied; named score coherence then matchup-recency |
| LAD@ATL | 0.5097 | 0.535236 → 0.5084 / 0.5084 | 0.508443 → 0.507177 | Guardrail applied; published value recorded as matching calibrated/governed value |
| MIL@SD | 0.5000 | 0.524296 → 0.505 / 0.505 | 0.505 → 0.505 | No guardrail; published equals calibrated. Side label conflicts with game record. |
| TB@NYY | 0.6185 | 0.521431 → 0.5665 / 0.5665 | 0.566481 → 0.544016 | Guardrail applied; named score coherence then matchup-recency |
All four lineage entries say unexplained_material_delta: false. Calibrated-to-published movements are recorded as score-coherence and/or recency transformations; the TB material movement is therefore not called a bypass. The audit register specifically says TB’s published value being above a calibrated one is not a governor bypass when the recorded transformations explain it. The raw-model/governor-input distinction and the absent numeric recency factors remain trace-clarity issues, not established unrecorded bypasses.
The report includes 10 prior slates and an 11-slate trend window. Finding streaks:
| Finding | Consecutive slates | Present now? | Persistence interpretation |
|---|---|---|---|
pipeline_winner_instability | 1 | Yes | Current-slate regression; not an established multi-slate streak. |
score_margin_compression | 0 | No | Incidence in window is 4, but it is not current and has no present streak. |
simulation_inert_on_slate | 11 | Yes | Escalated, established failure pattern; do not dismiss as single-slate noise. |
single_slate_calibration_instability | 5 | Yes | Escalated persistent calibration pattern. |
weak_run_model_signal | 5 | Yes | Escalated persistent near-zero run-signal pattern. |
For every escalated finding:
simulation_inert_on_slate — 11 consecutive, 11 incidences; targets simulation.allow_score; metrics team-run MAE and total-run MAE. Direction: ensure the simulation module is actually producing an independent, informative distribution rather than a silent no-op. The self-assessment identifies the shared target-search draws and early exit as the root cause; fix/diagnose the simulation path, not a forced parameter change.single_slate_calibration_instability — 5 consecutive, 8 incidences; targets confidence.empirical_max_weight, confidence.base_cap, confidence.moderate_cap; metrics Brier and calibration error. Direction: increase empirical shrinkage via a bounded shadow experiment, then judge on rolling Brier/calibration.weak_run_model_signal — 5 consecutive, 9 incidences; lists training.xgb.n_estimators, training.xgb.max_depth, and training.xgb.learning_rate, but is marked not parameter-actionable. The self-assessment says no nightly knob can supply missing run signal; investigate features/target with an isolated training backtest. Do not turn those listed training controls into an unsupported tuning change.The self-assessment separately records run_model_near_zero_signal, with total/home/away R² 0.002415/0.002143/0.030936, as an operator action. This agrees with the escalated weak-run-signal finding rather than adding a reason for a nightly parameter adjustment.
score_margin_compression is not current and has a zero consecutive streak.diagnostic_only_without_independent_support. This aligns with the 11-slate escalation.The trend directions are explicitly:
The top-confidence-pick loss streak is 1: the 20261005 top pick missed, 20261006 hit, and 20261007 missed. The current slate’s top-confidence pick is therefore a loss but does not extend a consecutive loss streak from 20261005 because a hit intervened. Two dates in the supplied sequence are blank/unknown and should not be treated as results.
These are bounded proposals for shadow evaluation, not live changes. Persistence is ranked ahead of single-slate evidence. No promotion is recommended from this diagnosis alone.
confidence.empirical_max_weight upward by +0.02 absolute.simulation.allow_score is listed, but the finding is marked param_actionable: false; the self-assessment gives a code-level root cause.simulation.allow_score as a tuning change in place of fixing the no-op behavior.training.xgb.n_estimators, training.xgb.max_depth, training.xgb.learning_rate; finding is explicitly not parameter-actionable. The supplied action calls for a manual isolated training backtest.score.variance_multiplier upward by 2% relative to its current value.No recent.* / season.* run-mean change is recommended today: its slate tension is 3 helped versus 1 hurt, but the entry does not specify the direction or sub-weight, and its clearest evidence concerns run errors rather than winners. No pitcher-weight change is recommended from this mixed slate.
Known: the slate finished 3/4, with three correct winners but materially inaccurate scores; TB@NYY was the only winner miss, despite a moderate 0.088 published home edge. The pipeline temporarily moved MIL in the wrong winner direction at variance application before later recovering. Run-model holdout signal is near zero, calibration instability and simulation inertness are persistent escalations, and the saved forecast artifacts passed the reported game-level structural checks.
Uncertain: the precise TB offensive/bullpen/player contribution, the causal source of the wrong team-run allocation, the interpretation of every raw probability field, and whether a variance change would improve outcomes. TB player actuals are missing; MIL probability-side lineage is internally inconsistent.
Safest next action for the very next slate: preserve the full probability and stage trace, add a contract check that rejects side/probability-label contradictions such as MIL@SD, and keep any calibration change in a bounded shadow experiment with rolling Brier/calibration monitoring. This addresses a concrete evidence-integrity risk without pretending that one slate identifies a winning model adjustment.