{
  "as_of": "2026-08-15",
  "sealed_at": "2026-08-16",
  "subject": "Cal Raleigh (MLBAM 663728), SEA",
  "data": "Statcast regular season 2021-2026 (2026 through 2026-08-15); wOBA = sum(woba_value | woba_denom>0)/sum(woba_denom) (standard, IBB-excluded); PA = rows with events notna (incl. 1 truncated_pa row: 381 vs official 380)",
  "remaining_pa_assumption": {
    "sea_games_played_2026": 124,
    "sea_games_remaining": 38,
    "raleigh_pa_2026": 381,
    "raleigh_pa_per_team_game": 3.073,
    "remaining_pa_primary": 117,
    "note": "primary = 38 x 3.073 = 116.8 -> 117 PA (his 2026 PA per SEA team game, which is diluted by the 34-day IL stint); if he plays every remaining game at his 4.23 PA/game-played the figure is 161; the brief's ~150 is the healthy-with-rest-days case. Scenario tables at 150 and 161 are in ros_results.json; medians are unchanged, bands narrow."
  },
  "ros_scenarios": {
    "definition": "Rest-of-season 2026-08-16 .. end of regular season; iid resampling of his own PA outcomes at a FIXED talent level (bands = sampling noise at the stated PA, not talent uncertainty); 20,000 draws, seed 20260815; standard wOBA. 2025 pool = 706 PA incl. 17 IBB rows (contribute 0/0 to standard wOBA); 2026 pool = 381 PA (0 IBB).",
    "S1_still_2026_Cal": {
      "woba_median": 0.253,
      "woba_80_band": [
        0.199,
        0.312
      ],
      "p_woba_gt_300": 0.151,
      "p_woba_gt_330": 0.048,
      "p_woba_gt_360": 0.011,
      "hr_median": 4.0,
      "hr_80_band": [
        1.0,
        6.0
      ]
    },
    "S2a_partial_recovery_50_50": {
      "woba_median": 0.322,
      "woba_80_band": [
        0.257,
        0.391
      ],
      "p_woba_gt_300": 0.668,
      "p_woba_gt_330": 0.442,
      "p_woba_gt_360": 0.239,
      "hr_median": 7.0,
      "hr_80_band": [
        4.0,
        10.0
      ]
    },
    "S2b_partial_recovery_25_75": {
      "woba_median": 0.357,
      "woba_80_band": [
        0.287,
        0.431
      ],
      "p_woba_gt_300": 0.85,
      "p_woba_gt_330": 0.689,
      "p_woba_gt_360": 0.478,
      "hr_median": 8.0,
      "hr_80_band": [
        5.0,
        12.0
      ]
    },
    "S3_2025_Cal_is_back": {
      "woba_median": 0.392,
      "woba_80_band": [
        0.32,
        0.471
      ],
      "p_woba_gt_300": 0.948,
      "p_woba_gt_330": 0.861,
      "p_woba_gt_360": 0.714,
      "hr_median": 10.0,
      "hr_80_band": [
        6.0,
        14.0
      ]
    },
    "S3_literal_wOBA_sensitivity": {
      "woba_median": 0.402,
      "woba_80_band": [
        0.329,
        0.479
      ],
      "p_woba_gt_300": 0.966,
      "p_woba_gt_330": 0.898,
      "p_woba_gt_360": 0.766,
      "hr_median": 10.0,
      "hr_80_band": [
        6.0,
        14.0
      ]
    },
    "S4_empirical_ros_prior": {
      "definition": "pooled 2022-2025 hitters whose through-Aug-15 wOBA sat >= .080 below their prior full season (prior PA>=300, through-8/15 PA>=200, Aug-16+ PA>=50): mean RoS change = Aug-16+ wOBA minus through-8/15 wOBA",
      "n": 20,
      "mean_ros_change": 0.032,
      "sd": 0.054,
      "se_mean": 0.012,
      "median": 0.028,
      "share_positive": 0.7,
      "mean_ros_pa": 124.5,
      "cell_mean_drop": -0.092,
      "raleigh_drop": -0.139,
      "league_all_hitters_mean_ros_change": -0.006,
      "raleigh_point": 0.287,
      "raleigh_80_band_one_hitter": [
        0.218,
        0.356
      ],
      "p_woba_gt_300": 0.405,
      "p_woba_gt_330": 0.213,
      "p_woba_gt_360": 0.088,
      "implied_2026_pool_share": 0.77,
      "alternatives": {
        "drop>=.080_from_prior>=.370 (n=11)": 0.273,
        "drop>=.100 (n=5)": 0.311,
        "pooled_OLS_ros~first45+prior (n=741)": 0.311,
        "Grandal_2022_in_season (n=1)": 0.254
      }
    }
  },
  "SEALED_ros_2026": {
    "model": "S4 empirical RoS prior (drop>=.080 cell, n=20)",
    "woba_point": 0.287,
    "woba_80_band": [
      0.218,
      0.356
    ],
    "p_woba_gt_300": 0.405,
    "p_woba_gt_330": 0.213,
    "p_woba_gt_360": 0.088,
    "hr_median": 5.0,
    "hr_80_band": [
      2.0,
      8.0
    ],
    "hr_note": "HR from the per-PA mixture at the S4-implied share (0.77 2026-Cal / 0.23 2025-Cal) over 117 PA",
    "scoring": "RoS wOBA (standard) from 2026-08-16 through the final regular-season game; scored if RoS PA >= 50; check which of S1/S2/S3 bands the realized value falls in and whether it clears .300/.330/.360"
  },
  "y2027": {
    "a_pooled_ols": {
      "model": "next-yr dwOBA = c + b1*d12 + b2*wOBA_1 on 666 chains (PA>=300/300/200, y1=2021..2024)",
      "recomputed_literal": {
        "params": {
          "const": 0.0947,
          "d12": -0.5484,
          "woba_1": -0.301
        },
        "n": 666,
        "r2": 0.21,
        "resid_sd": 0.0321,
        "woba_2027": 0.31,
        "pi80_normal_with_se_fit": [
          0.268,
          0.351
        ],
        "pi80_empirical_resid": [
          0.272,
          0.349
        ],
        "se_fit": 0.0053
      },
      "recomputed_std": {
        "params": {
          "const": 0.0984,
          "d12x": -0.5554,
          "woba_x_1": -0.3141
        },
        "n": 666,
        "r2": 0.212,
        "resid_sd": 0.0319,
        "woba_2027": 0.307,
        "pi80_normal_with_se_fit": [
          0.265,
          0.348
        ],
        "pi80_empirical_resid": [
          0.269,
          0.346
        ],
        "se_fit": 0.005
      },
      "notes_coefficients_literal": {
        "pred_d23": 0.0549,
        "woba_2027": 0.3099,
        "pi80_resid_only": [
          0.269,
          0.351
        ],
        "assumptions": "next-yr dwOBA = .095 - .548*d12 - .301*wOBA_1; residual sd .032; normal, homoscedastic residuals; band = point +/- 1.2816*sd; ignores parameter uncertainty (se_fit), extrapolation (Raleigh's d12 is at/below the sample minimum), year-3 PA>=200 survivorship, partial-2026 base, catcher aging, and mechanism."
      },
      "notes_coefficients_std": {
        "pred_d23": 0.0525,
        "woba_2027": 0.3075,
        "pi80_resid_only": [
          0.266,
          0.348
        ],
        "assumptions": "next-yr dwOBA = .095 - .548*d12 - .301*wOBA_1; residual sd .032; normal, homoscedastic residuals; band = point +/- 1.2816*sd; ignores parameter uncertainty (se_fit), extrapolation (Raleigh's d12 is at/below the sample minimum), year-3 PA>=200 survivorship, partial-2026 base, catcher aging, and mechanism."
      },
      "robustness_pred_d23": {
        "chains_ending_le2025": 0.0535,
        "droppers_d12_le-.05_only(n=61)": 0.0603,
        "woba1_ge.350_only(n=263)": 0.0509,
        "with_dHH_term": 0.0501
      }
    },
    "b_analogs": {
      "drop080_from370_strict": {
        "label": "drop>=.080 from wOBA_1>=.370, PA 300/300/200",
        "n": 8,
        "mean_woba_1": 0.398,
        "mean_woba_2": 0.297,
        "mean_woba_3": 0.317,
        "mean_drop": -0.101,
        "mean_next": 0.02,
        "median_next": 0.02,
        "sd_next": 0.033,
        "frac_recovered_ratio_of_means": 0.202,
        "share_next_positive": 0.875,
        "share_back_to_370": 0.0,
        "raleigh_2027_mean_next": 0.275,
        "raleigh_2027_frac_recovered": 0.285,
        "raleigh_80_band_from_sd": [
          0.234,
          0.317
        ]
      },
      "drop080_from370_pa2ge200": {
        "label": "drop>=.080 from >=.370, PA 300/200/200",
        "n": 12,
        "mean_woba_1": 0.403,
        "mean_woba_2": 0.3,
        "mean_woba_3": 0.327,
        "mean_drop": -0.102,
        "mean_next": 0.027,
        "median_next": 0.029,
        "sd_next": 0.036,
        "frac_recovered_ratio_of_means": 0.26,
        "share_next_positive": 0.833,
        "share_back_to_370": 0.167,
        "raleigh_2027_mean_next": 0.282,
        "raleigh_2027_frac_recovered": 0.294,
        "raleigh_80_band_from_sd": [
          0.235,
          0.328
        ]
      },
      "drop100_from370_strict": {
        "label": "drop>=.100 from >=.370, PA 300/300/200",
        "n": 3,
        "mean_woba_1": 0.4,
        "mean_woba_2": 0.28,
        "mean_woba_3": 0.318,
        "mean_drop": -0.121,
        "mean_next": 0.039,
        "median_next": 0.032,
        "sd_next": 0.039,
        "frac_recovered_ratio_of_means": 0.321,
        "share_next_positive": 1.0,
        "share_back_to_370": 0.0,
        "raleigh_2027_mean_next": 0.294,
        "raleigh_2027_frac_recovered": 0.303,
        "raleigh_80_band_from_sd": [
          0.243,
          0.344
        ]
      },
      "grandal": {
        "grandal_chain_literal": [
          0.414,
          0.269,
          0.301
        ],
        "next_change": 0.032,
        "frac_recovered": 0.22,
        "raleigh_2027_next_change_basis": 0.287,
        "raleigh_2027_frac_recovered_basis": 0.288,
        "grandal_after": {
          "2023": 0.301,
          "2024": 0.335
        }
      },
      "only_combined_wOBA_and_HH_analog": [
        {
          "name": "Yasmani Grandal",
          "chain": "2021->2022->2023",
          "woba": [
            0.414,
            0.269,
            0.301
          ],
          "hh": [
            0.532,
            0.4,
            0.344
          ],
          "next": 0.032
        }
      ]
    },
    "c_mechanism_prior": {
      "raleigh_25_26": {
        "d_squared_up": -0.078,
        "d_flush": -0.081,
        "d_bat_speed": -0.57
      },
      "cell_24_25_26_sq<=-5pp_AND_flush<=-5pp_|dbs|<1": {
        "n": 3,
        "mean_d_sq": -0.092,
        "mean_d_flush": -0.066,
        "mean_d_bs": 0.37,
        "mean_d12_woba": -0.017,
        "mean_next_d23": -0.021,
        "median_next": -0.021,
        "sd_next": 0.032,
        "share_next_positive": 0.333,
        "raleigh_2027": 0.234
      },
      "cell_pooled_incl_2023partial": {
        "n": 7,
        "mean_d_sq": -0.084,
        "mean_d_flush": -0.081,
        "mean_d_bs": 0.39,
        "mean_d12_woba": -0.024,
        "mean_next_d23": -0.008,
        "median_next": 0.003,
        "sd_next": 0.025,
        "share_next_positive": 0.571,
        "raleigh_2027": 0.247
      },
      "cell_resid_vs_pooled_OLS": {
        "24-25-26": {
          "n": 3,
          "mean_resid": -0.0219,
          "sd": 0.0243,
          "mean_pred_d23": 0.0008,
          "mean_actual_d23": -0.0211
        },
        "pooled": {
          "n": 7,
          "mean_resid": -0.0106,
          "sd": 0.0236,
          "mean_pred_d23": 0.0025,
          "mean_actual_d23": -0.0081
        }
      },
      "regression_with_mech_terms": {
        "24-25-26": {
          "n": 162,
          "params": {
            "const": 0.1452,
            "d12": -0.7429,
            "woba_1": -0.4536,
            "d_sq": 0.0865,
            "d_flush": 0.1256,
            "d_bs": 0.0057
          },
          "pvalues": {
            "const": 0.0,
            "d12": 0.0,
            "woba_1": 0.0,
            "d_sq": 0.18,
            "d_flush": 0.117,
            "d_bs": 0.024
          },
          "r2_with_mech": 0.312,
          "r2_base": 0.276,
          "raleigh_pred_d23_with_mech": 0.0523,
          "raleigh_2027_with_mech": 0.307,
          "raleigh_pred_d23_base_same_sample": 0.0591,
          "raleigh_2027_base_same_sample": 0.314,
          "se_pred_with_mech": 0.0333,
          "pi80_with_mech": [
            0.265,
            0.35
          ]
        },
        "pooled": {
          "n": 310,
          "params": {
            "const": 0.1313,
            "d12": -0.6315,
            "woba_1": -0.406,
            "d_sq": 0.0082,
            "d_flush": 0.118,
            "d_bs": 0.0039
          },
          "pvalues": {
            "const": 0.0,
            "d12": 0.0,
            "woba_1": 0.0,
            "d_sq": 0.843,
            "d_flush": 0.029,
            "d_bs": 0.038
          },
          "r2_with_mech": 0.266,
          "r2_base": 0.249,
          "raleigh_pred_d23_with_mech": 0.0488,
          "raleigh_2027_with_mech": 0.304,
          "raleigh_pred_d23_base_same_sample": 0.0535,
          "raleigh_2027_base_same_sample": 0.309,
          "se_pred_with_mech": 0.0323,
          "pi80_with_mech": [
            0.262,
            0.345
          ]
        }
      },
      "caveat": "n is tiny (3 / 7) and none of the centering-losers had Raleigh's outcome drop; the mechanism cell is not an outcome analog. Regression with mechanism terms shaves ~.005 off the plain OLS."
    }
  },
  "SEALED_2027": {
    "model": "pooled next-season OLS on standard (IBB-excluded) wOBA, recomputed: dwOBA_next = 0.0984 -0.555*d12 -0.314*wOBA_1 (n=666)",
    "inputs": {
      "woba_2025_std": 0.3936,
      "woba_2026_through_0815": 0.255,
      "d12": -0.1386
    },
    "woba_2027_point": 0.307,
    "woba_2027_80_band": [
      0.265,
      0.348
    ],
    "band_assumptions": "normal residuals (Shapiro p .08), homoscedastic (resid sd .033 on d12<=-.05 subsample vs .032 overall), half-width 1.2816*sqrt(resid_sd^2 + se_fit^2) = 1.2816*sqrt(.0319^2+.0050^2); extrapolation: Raleigh's d12 (std -.139 / literal -.148) sits at the edge of the sample (min -.145 = Grandal 21->22, the only comparable chain; the literal value is below the sample minimum); year-3 PA>=200 survivorship (optimistic); 2026 base is 381 PA through 8/15; no aging/catcher/mechanism term",
    "where_alternatives_sit": {
      "literal_wOBA_OLS": 0.31,
      "notes_coefficients": 0.3099,
      "analogs_drop080_from370": [
        0.275,
        0.294
      ],
      "grandal": 0.287,
      "mechanism_augmented_regression": [
        0.304,
        0.307
      ],
      "mechanism_cell_tiny_n": 0.247
    },
    "expectation_note": "analog (.275-.294, Grandal .287) and mechanism-augmented (.304-.307) alternatives sit at or below the sealed point; the sealed band covers all of them except the n=7 mechanism cell (.247), which is not an outcome analog",
    "scoring": "2027 regular-season wOBA (standard, IBB-excluded, Statcast woba_value/woba_denom); scored if 2027 PA >= 200; hit = inside the 80% band; direction check = above/below .255"
  },
  "stopping_rule": {
    "note": "Filled by the synthesizer 2026-08-16 from forward/stoprule (verified by forward/verify_stoprule_projection). H0 'still 2026-Cal' = plug-in bootstrap of Raleigh's own 2026 regular-season BIP/swing rows (208 BIP, 206 tracked; 829 swings); H1 '2025-Cal is back' = same from his 2025 rows (411 BIP, 401 tracked; 1,423 swings); 20,000 draws, seed 20260816. Reject line = smallest value with P_H0(metric >= line) <= .10 (one-sided); power = P_H1(metric >= line); 'consistent with 2025-Cal' band = central 80% (p10-p90) of the H1 distribution. Two-stage values (also resampling the reference pools) in parentheses. Definitions: BIP = hit_into_play; hard-hit = EV >= 95; flush = EV / (1.23*bat_speed + 0.23*0.915*release_speed) >= .95 on tracked BIP; upper half = plate_z >= 2.469 ft (midline of his fixed 2026 ABS box 3.282/1.656). The clock starts 2026-08-16 at N = 0 balls in play.",
    "leading_metric": "flush-contact share (tracked BIP with EV/EV_max >= .95): the metric that broke most (.130 -> .049, 1st pctile of league YoY change), the most separable at 80 BIP (power .91), and the only watch metric whose H0 tail is unchanged (.096) if the reference is his post-IL level instead of the full 2026 season. League split-half reliability at 75 BIP is .46 (below the coin-flip line, 88 BIP), so it is a COUNT to watch (7 of 80 vs ~10 expected for 2025-Cal), not a graded rate.",
    "secondary_metric": "hard-hit% (EV >= 95, all BIP): the most reliable contact-quality metric at his remaining sample (league split-half .63 at 75 BIP / .66 at 84; coin-flip 43 BIP), gap .496 -> .351 = 2.6 sampling SD, power .88 at 80 BIP. Tiebreaker: upper-half hard-hit% (plate_z >= 2.469 ft; .512 -> .297; power .92 at 80 BIP but a ~22 / ~35-ball cell at 50 / 80 BIP -> every reading is 'suggestive only').",
    "next_50_bip": {
      "reject_still_2026_Cal_if_metric_ge": {
        "flush_share": "0.083 = 5 of 50 tracked BIP (exact-binomial alpha .094; plug-in line .083, H0 tail .098)",
        "hard_hit_pct": "0.460 = 23 of 50 BIP (H0 tail .071)",
        "upper_half_hh_pct": "0.433 (~22 upper-half balls; suggestive only; H0 tail .090)"
      },
      "consistent_with_2025_Cal_if_metric_ge": {
        "flush_share": "0.064 (2025-Cal 80% band .064-.188; 2026-Cal band .020-.082)",
        "hard_hit_pct": "0.400 (2025 band .400-.580; 2026 band .260-.440)",
        "upper_half_hh_pct": "0.381 (2025 band .381-.640; 2026 band .174-.429)"
      },
      "power_vs_2025_distribution": {
        "flush_share": "0.82 plug-in (0.72 two-stage; exact-binomial 5/50 rule 0.79)",
        "hard_hit_pct": "0.74 (0.73)",
        "upper_half_hh_pct": "0.78 (0.74)",
        "joint_2_of_3": "P(>=2 of 3 cross) = .047 under 2026-Cal vs .816 under 2025-Cal (two-stage .051 / .771)"
      }
    },
    "next_80_bip": {
      "reject_still_2026_Cal_if_metric_ge": {
        "flush_share": "0.0875 = 7 of 80 tracked BIP (exact-binomial alpha .094; plug-in line .078, H0 tail .099)",
        "hard_hit_pct": "0.438 = 35 of 80 BIP (H0 tail .069)",
        "upper_half_hh_pct": "0.405 (~35 upper-half balls; suggestive only; H0 tail .093)"
      },
      "consistent_with_2025_Cal_if_metric_ge": {
        "flush_share": "0.079 (2025-Cal 80% band .079-.179; 2026-Cal band .025-.077)",
        "hard_hit_pct": "0.425 (2025 band .425-.562; 2026 band .288-.425)",
        "upper_half_hh_pct": "0.410 (2025 band .410-.615; 2026 band .200-.400)"
      },
      "power_vs_2025_distribution": {
        "flush_share": "0.91 plug-in (0.86 two-stage; exact-binomial 7/80 rule 0.91)",
        "hard_hit_pct": "0.88 (0.80)",
        "upper_half_hh_pct": "0.92 (0.87)",
        "joint_2_of_3": "P(>=2 of 3 cross) = .048 under 2026-Cal vs .934 under 2025-Cal (two-stage .048 / .882); all three .006 vs .784; hard-hit + flush both .014 vs .816"
      }
    },
    "decision_rule": "Declare 'still 2026-Cal REJECTED' only when at least 2 of the 3 (flush, hard-hit, upper-half HH) cross their lines at the same N; declare 'consistent with 2025-Cal' only when the crossing metrics also sit inside their 2025 bands. False-alarm rate .048 is against the FULL-2026 pool; against his post-IL rows (HH .392 / upper .375 / flush .049) the 2-of-3 rule fires .199 (last-80 pool .234) because HH and upper-half HH have already recovered about halfway - flush is the only metric whose H0 tail is unchanged (.096), hence primary. Swing-marker companion (mechanism, not outcome; H4/H5): mean contact depth >= 34.5 in over the next 100 tracked swings (power .78; 2025 band 33.9-37.0) / >= 34.2 in over 150 swings (power .90; 2025 band 34.2-36.7; 2026 band 31.8-34.2). Depth rising without the outcome metrics crossing = the footprint moved but the ball did not; outcomes crossing without depth = the footprint was a bystander.",
    "does_post_IL_or_august_already_clear": "NO - 'still 2026-Cal' on everything banked. Post-IL 6/16-8/15 (102 BIP): flush .049 (5/102; line at this N .079), hard-hit .392 (.422), upper-half HH .375 on 48* (.387), xwOBAcon .352 (.425) - none crosses, and all four sit OUTSIDE the 2025 band (P_2025 of a value this low: flush .003, HH .014 strict / .024 <=, upper .024 / .030, xwOBAcon .010; depth 32.9 in .000; attack direction -4.8 .004); inside the 2025 band only on unconditional squared-up (.647), mean EV (90.6) and bat speed (72.7). Last 80 BIP 6/28-8/15 (the rule's own horizon, already banked): flush .062 (line .078), HH .400 (.438), upper .361 on 36* (.404-.405), xwOBAcon .360 (.432) - none crosses, all four outside the 2025 band (P_2025 .020 / .033-.052 / .029-.030 / .032). August 8/1-8/15 (26 BIP*, suggestive only): flush .077 (line .120), HH .462 (.500), upper .500 on 14* (.529), xwOBAcon .357 (.489) - none crosses; the only crossing is mean EV 93.5 (line 92.4, P_H0 .044) with a .35 pop-up share and xwOBAcon .357. Permutation within 2026 (5,000 shuffles): 1 of 25 window x metric tests p < .05 (post-IL squared-up .647, p .045); HH uptick p .09-.15 in every window; flush and xwOBAcon did not move; best-50-BIP-window scan p ~ .8. * = suggestive only (n < 60)."
  },
  "hash_note": "sha256 of this file (stopping_rule filled, sealed_at stamped) is recorded in PILOT_NOTES.md ('Forward-looking (H_E)' section), forward/synthesis/RESULT.md and forward/projection/predictions.sha256. Pre-fill hash (placeholders present) was a14273b021249e55b883accf6c96152255b9c637fa395c4b475118c8209f720c."
}
