{
 "version": 1,
 "measured_on": "2026-09-17",
 "revision_published": 2,
 "supersedes": {
  "receipt": "mlb-ingame-regeneration",
  "note": "The first regeneration pass rebuilt the thirteen label-consuming artifacts and left six timing artifacts under review. This receipt closes that list. The revision 1 timing values are recorded here and are not republished as current."
 },
 "method": {
  "summary": "The five timing artifacts left under review, plus the derived market-foresight premium, were rebuilt from the same segmented corpus the first pass used. Each producer takes its corpus root from CV_INGAME_CORPUS_SUFFIX; with the suffix set to _segmented the glob-backed producers read <sport>_segmented and the artifact-backed producers read the staged out_segmented copies, so no artifact can mix a rebuilt input with an unrebuilt one.",
  "override_env": "CV_INGAME_CORPUS_SUFFIX=_segmented",
  "segmentation_tool": "scripts/platformkit/segment_ingame_join.py",
  "checker_tool": "scripts/platformkit/check_ingame_join_integrity.py",
  "diff_tool": "scripts/platformkit/diff_timing_artifacts.py",
  "corpus_before": "data/cache/ingame_grade_joined/{mlb,soccer_intl}",
  "corpus_after": "data/cache/ingame_grade_joined/{mlb_segmented,soccer_intl_segmented}",
  "staging_dir": "scripts/platformkit/analytics_showcase/out_segmented",
  "recorded_source_paths": "An artifact-backed producer records the path it read. The staged copies were built against out_segmented and their recorded source paths were normalised to out/ at publication, because out/ then holds exactly those bytes; a default re-run with the override unset reproduces each published artifact byte for byte apart from the as_of and corpus stamps added here."
 },
 "checker": {
  "root": "data/cache/ingame_grade_joined",
  "rerun_on": "2026-09-17",
  "segmented": {
   "mlb_segmented": {
    "games": 178,
    "ticks": 27351,
    "stateless_ticks": 668,
    "label_disagreements": 0,
    "frozen_quote_files": 1,
    "ticks_outside_game_date": 0,
    "short_path_files": 4,
    "multi_game_files": 0
   },
   "soccer_intl_segmented": {
    "games": 27,
    "ticks": 4265,
    "stateless_ticks": 233,
    "label_disagreements": 0,
    "frozen_quote_files": 1,
    "ticks_outside_game_date": 0,
    "short_path_files": 1,
    "multi_game_files": 0
   }
  },
  "leader_at_last_tick": {
   "mlb_segmented": {
    "games_margin_ge_1": 166,
    "observed": 1.0,
    "expected": 1.0
   },
   "soccer_intl_segmented": {
    "games_margin_ge_1": 12,
    "observed": 1.0,
    "expected": 1.0
   }
  },
  "verdict": "Re-run on 2026-09-17 the checker reproduces the first pass exactly: both segmented roots report 0 label disagreements, 0 multi-game files and no tick outside the date of its own game, and the leading side at the last tick agrees with the label in every game. The same residual single-file defects are disclosed rather than removed: one frozen-quote file per sport, plus 4 MLB and 1 soccer file shorter than 10 ticks."
 },
 "artifacts": [
  {
   "artifact": "blowout_dynamics",
   "file": "blowout_dynamics.json",
   "n_field": "MLB games with a usable score path",
   "n_before": 178,
   "n_after": 174,
   "headline_before": "MLB (178 games): a 2-run gap becomes permanent by a median inning 6.0 in 75 percent of games; a 5-run gap by a median inning 7.5 in 27 percent. Soccer (29 games): a 1-goal gap by a median minute 39.5 in 48 percent.",
   "headline_after": "MLB (174 games): a 2-run gap becomes permanent by a median inning 5.0 in 75 percent of games; a 5-run gap by a median inning 6.0 in 32 percent. Soccer (26 games): a 1-goal gap by a median minute 37.0 in 46 percent."
  },
  {
   "artifact": "novel_live_clock_fraction",
   "file": "novel_live_clock_fraction.json",
   "n_field": "MLB games behind the near-median threshold",
   "n_before": 178,
   "n_after": 174,
   "headline_before": "MLB Live-Clock Fraction 0.8333 at the 3-run threshold; soccer 0.7475 at the 1-goal threshold.",
   "headline_after": "MLB Live-Clock Fraction 0.7368 at the 3-run threshold; soccer 0.5994 at the 1-goal threshold."
  },
  {
   "artifact": "market_convergence",
   "file": "market_convergence.json",
   "n_field": "MLB ticks across game-time checkpoints",
   "n_before": 52628,
   "n_after": 26677,
   "headline_before": "MLB disagreement between the model and the reference quote widens from 0.07 at inning 1 to 0.2791 at inning 10; reference entropy falls 0.9669 to 0.8761 bits.",
   "headline_after": "MLB disagreement between the model and the reference quote widens from 0.0839 at inning 1 to 0.2067 at inning 10; reference entropy falls 0.9553 to 0.8488 bits."
  },
  {
   "artifact": "why_attribution",
   "file": "why_attribution.json",
   "n_field": "adjacent-time state transitions scored",
   "n_before": 120,
   "n_after": 120,
   "headline_before": "Largest calibrated win-prob drop: soccer 15-30:.4-.6 to 30-45:.2-.4 = -0.7683 (minimum support n=120).",
   "headline_after": "Largest calibrated win-prob drop: MLB mid(inn4-6):.8-1 to late(inn7+):0-.2 = -0.8985 (minimum support n=1462)."
  },
  {
   "artifact": "comeback_atlas",
   "file": "comeback_atlas.json",
   "n_field": "NBA lead-by-time state buckets",
   "n_before": 84,
   "n_after": 84,
   "headline_before": "84 NBA state buckets, 7 below the n>=30-games mask.",
   "headline_after": "84 NBA state buckets, 7 below the n>=30-games mask -- every cell unchanged. This atlas reads the NBA reliability map built from data/cache/inplay_odds/nba_checkpoints_full.parquet, not the MLB and soccer in-game join, so the segmentation cannot move it; the re-run on the segmented roots reproduced every published cell and only stamped the corpus it actually reads."
  },
  {
   "artifact": "novel_market_foresight_premium",
   "file": "novel_market_foresight_premium.json",
   "n_field": "MLB game-time checkpoints with both instruments",
   "n_before": 10,
   "n_after": 10,
   "headline_before": "MLB foresight premium rises from 0.063 at inning 1 to 0.2365 at inning 10 (mean 0.2461); soccer 0.6393 to 1.7056 (mean 0.9211).",
   "headline_after": "MLB foresight premium rises from 0.051 at inning 1 to 0.411 at inning 10 (mean 0.1487); soccer 0.6779 to 1.4861 (mean 0.9225)."
  }
 ],
 "reading": [
  "These are population changes, not forecaster improvement. No forecaster changed. Segmentation dropped 49 of 227 MLB files and 24 of 51 soccer files outright, so the timing exhibits now describe 178 MLB and 27 soccer stored games instead of 227 and 51, and 174 MLB and 26 soccer games once the 10-tick floor is applied. Read every move as what the measurement should have said all along.",
  "Timing artifacts were hit harder than the label-consuming ones, and for a different reason. A mixed file concatenates two score paths, so a lead that never reverts inside the stored file can be two separate games' leads laid end to end. That pushes the point of no return later and inflates the share of the clock that looks contested. The MLB Live-Clock Fraction falls 0.8333 to 0.7368 and the soccer one 0.7475 to 0.5994; the median MLB inning at which a 5-run gap becomes permanent falls from 7.5 to 6.0. Those falls are the artifact being removed.",
  "Comeback and blowout rates move in both directions because the denominator moved too. A 3-run MLB gap is now decided in 55.75 percent of games against 53.37 percent before, and a 5-run gap in 31.61 percent against 26.97 percent, while the 2-run share barely moves (74.71 against 75.28 percent). The soccer 1-goal share falls 48.28 to 46.15 percent on 26 games, which is three games of movement and not a finding.",
  "Convergence paths are now measured on 26,677 MLB ticks instead of 52,628. The model and the reference quote still diverge over the game, but less far: the late-inning disagreement reads 0.2067 instead of 0.2791. The market foresight premium inherits both rebuilt inputs and stops mixing revisions; its MLB mean falls from 0.2461 to 0.1487 while its last checkpoint rises from 0.2365 to 0.411, which is the small late-inning sample and not a trend to read.",
  "comeback_atlas is the honest exception. It was listed under review with the other timing artifacts, but its corpus is the NBA reliability map, not the MLB and soccer in-game join, so the segmentation could not touch it. Re-running it on the segmented roots reproduced all 84 state buckets exactly. Its status is cleared on that evidence, not on a rebuild.",
  "The smaller population requires newly estimated intervals rather than rescaled ones: the intervals published with these artifacts were re-estimated on the segmented corpus, not widened from the revision 1 figures. For the record the two shares behind that smaller population are different numbers: 27,076 of 78,986 MLB ticks, 34.3 percent, were the identified label mismatches, while segmentation excluded 51,635 MLB ticks in all, 65.4 percent, and 4,738 of 9,003 soccer ticks, 52.6 percent. None of these figures is a claim about money."
 ],
 "papers_outstanding": "The research papers that quote the revision 1 timing numbers were not rewritten in this pass and are reported separately; see docs/research/ingame_timing_regeneration_diff_2026-09-17.md.",
 "status": "regenerated"
}
