{
 "source": {
  "readTest": "/Users/terrellwoods/Desktop/MAXCLIPZ_GAME_READ_TEST_2026-09-20.md",
  "buildSpec": "/Users/terrellwoods/Desktop/amp_apps/max_clipz/BUILD_SPEC_game_expansion_2026-09-23.md",
  "engineStyles": "/Users/terrellwoods/Desktop/amp_apps/max_clipz/engine/max_clipz_engine.py",
  "ankleBreaker": "/Users/terrellwoods/Desktop/amp_apps/max_clipz/engine/game_vocab.py NBA2K_FEEDBACK.ankle_breaker_rule",
  "wired": "/Users/terrellwoods/Desktop/amp_apps/max_clipz/engine/GAMES_WIRED_2026-09-25.json",
  "routes": "/Users/terrellwoods/Desktop/amp_apps/max_clipz/engine/maxclipz_worker.py ROUTE_OF",
  "provenSince": "/Users/terrellwoods/Desktop/amp_apps/max_clipz/engine/GAMES_PROVEN_SINCE_2026-10-28.json"
 },
 "measured": "2026-09-20 — 24 games, frames pulled off YouTube ~2 s each, every verdict quoted with raw tesseract output",
 "generated": "2026-10-28",
 "generator": "engine/tests/test_games_json.py --regen",
 "scoreboard": {
  "green": 8,
  "yellow": 9,
  "orange": 6,
  "red": 1
 },
 "counts": {
  "total": 29,
  "built": 2,
  "killfeed": 5,
  "reads": 17,
  "amber": 4,
  "red": 1,
  "tested_2026_09_20": 24,
  "reads_2026_09_20": 15,
  "worker": 19
 },
 "glyphs": {
  "built": "✅",
  "killfeed": "✅",
  "reads_personal": "✅",
  "reads_match": "◑",
  "amber": "◐",
  "red": "✕"
 },
 "legend": [
  "✅ built — a Max Clipz reader exists (NBA 2K: run_tape · Call of Duty: run_cod); MAKE THE MONTAGE runs it when the game is switched on",
  "✅ killfeed reads YOUR kills — gamertag on the killfeed, measured 9-24 at precision ≥ 0.9; switched-on games cut through run_killfeed.py",
  "✅ reads YOUR stat line — measured 9-20; switched-on games cut through run_statline.py, run_healthbar.py or run_banner.py (9-26: the game's own banner words), the rest have no cut profile yet",
  "◑ reads the match, not you — numbers OCR fine but nothing says which plays were HIS (killfeed/gamertag workaround where noted)",
  "◐ plan — OCR can't hold it; the 9-23 spec names the route (pixel · cloud API · model · voice)",
  "✕ no HUD — nothing on screen to read"
 ],
 "notes": [
  "status is the contract's four values; bucket/personal preserve the 9-20 report's own 🟢🟡🟠🔴 verdict so a 🟡 game is never drawn as ✅",
  "2026-09-24: a fifth status, 'killfeed' — games whose OWN kills the killfeed detector attributed at precision ≥ 0.9 with a stated n (engine/KILLFEED_CALIBRATION_2026-09-24.md scoreboard). Those flip to bucket green / personal true; their 9-20 bucket is kept in bucket_2026_09_20",
  "'amber' = the 6 🟠 + Escape from Tarkov (🔴 on 9-20; permanent plan = voice per the 9-23 spec)",
  "GTA Online + Fight Night Champion are included from the report's 'Previously measured' line with evidence:[] — no OCR block exists on disk",
  "the report caps each field line; fields that stop mid-sentence are listed per game in `truncated`, and the last evidence line of a block may be cut mid-token",
  "lanes for non-built games are the report's own Tracks list split on commas — what the HUD shows, not what any profile cuts yet",
  "2026-09-25: worker:true (MAKE THE MONTAGE enabled) ONLY where engine/GAMES_WIRED_2026-09-25.json records a lane's proof on real footage AND a passing LIVE job for that reader kind, maxclipz_worker.ROUTE_OF routes the game, and the runner is on the M4. Those games lead their lanes with the runner's own lane ids (engine:true, 'best' checked); a game the ledger names but did not switch on carries notWired {why, needs}",
  "2026-09-26: Rocket League + WWE 2K25 lifted out of amber by the banner reader (engine/banner_reader.py — the game's own big words: RL '<NAME> SCORED!' + GOAL +100 for the camera player, WWE the ref's 1-2-3 + the WINNER plate's name = his side; calib 32/33 tapes at ±0.5 s with 0 extra events, holdout RL P .64 R .64 · WWE P 1.00 R .57, engine/INTEGRATION_2026-09-26.md). Like the killfeed five they flip to status reads / bucket green / personal true, keep the 9-20 bucket in bucket_2026_09_20 and the 9-23 plan on record; `banner` carries the measured numbers. proven[*].wired dates the WIRED line (2026-09-26). Fortnite's `wins` lane = the #1 VICTORY ROYALE banner read by the same reader inside run_statline.py",
  "2026-10-01: NBA 2K's ten boxes — EVERY BOX STANDS ALONE (T 9-29): Threes · Rim · Mid-range · Assists · Buckets · Steals · Blocks · Rebounds · Ankle breakers · Best of everything, each its own engine lane (max_clipz_engine.py STYLES). lane.events = the lane's play classes in STYLES; lane.geoms (only when it is not every 2K) = the 2Ks whose engine profile lists the lane — Rim and Mid-range read 2K27's badge slots, so games.js greys them on a 2K26 tape instead of sending a lane that comes back empty. nba2k.noBox = the engine lanes with no box (everything · dunks · defense): the words an old montage shows for the id, and why there is no box",
  "2026-10-28 (the go-live pack): games proved AFTER the 9-20 read test come from a dated list, engine/GAMES_PROVEN_SINCE_2026-10-28.json (source 7: Gears of War: E-Day). The proof rule is engine/AWAVE_PROVEN.json's: 9 of 10 right or better, 5+ uploaders, every moment checked by eye on a frame. Their rows are tested '2026-10-28' (never counted in tested_2026_09_20), status reads / bucket green / personal true with no 9-20 bucket and no plan; `evidence` = the banner reader's own raw reads off the proof tapes, one line per section, each naming its run folder; worker:true still only through source 6. A box the proof passed that T has not switched on is greyed as held (engine:false) with its words, until the runner offers the lane"
 ],
 "games": [
  {
   "id": "nba2k",
   "name": "NBA 2K26 / 2K27",
   "status": "built",
   "bucket": "green",
   "personal": true,
   "tested": "built",
   "worker": true,
   "profile": "2k27",
   "variants": [
    {
     "label": "NBA 2K26",
     "geom": "2k26"
    },
    {
     "label": "NBA 2K27",
     "geom": "2k27"
    }
   ],
   "lanes": [
    {
     "id": "threes",
     "label": "Threes — your made threes",
     "default": true,
     "engine": true,
     "events": [
      "three"
     ],
     "note": "a +3 on your own stat line (PTS3 / PTS4) — the stat vouches, no eye test"
    },
    {
     "id": "rim",
     "label": "Rim — dunks + layups",
     "default": true,
     "engine": true,
     "events": [
      "rim"
     ],
     "note": "a made two where 2K27's Finishing badge slot jumped — dunks and layups together, for every player, Shot Feedback on or off, no eye test. MEASURED 10-01 on T's tapes (THE_BOARD 10-01 12 AM): every layup / dunk moved the Finishing slot (9/9), 0 false in 61 slot jumps. The badge slots are read on 2K27 only — on a 2K26 tape this lane is empty, so the box is greyed there",
     "geoms": [
      "2k27"
     ]
    },
    {
     "id": "midrange",
     "label": "Mid-range — made jumpers inside the arc",
     "default": false,
     "engine": true,
     "events": [
      "midrange"
     ],
     "note": "a made two where 2K27's Shooting badge slot jumped (MEASURED 10-01: every jumper moved it, 17/17); with no slot read, a shot panel that printed a distance at or past the engine's MIDRANGE_MIN_FT (10 ft — a PLACEHOLDER in the engine, 2K's own close / mid line is not measured). 2K27 only — greyed on 2K26",
     "geoms": [
      "2k27"
     ]
    },
    {
     "id": "dimes",
     "label": "Assists — your dimes",
     "default": true,
     "engine": true,
     "events": [
      "assist"
     ],
     "note": "an AST tick on your own stat line"
    },
    {
     "id": "buckets",
     "label": "Buckets — every made shot, one tap",
     "default": false,
     "engine": true,
     "events": [
      "bucket"
     ],
     "note": "every made field goal, by the stat (+2, +3, +4) — the one-tap shortcut for all scoring (T 9-29: keep it). Ticking it never ticks another box. Until 10-01 this lane waited on the eye test and came back empty"
    },
    {
     "id": "steals",
     "label": "Steals — your steals",
     "default": false,
     "engine": true,
     "events": [
      "steal"
     ],
     "note": "a STL tick on your own stat line (the rotating 4th slot). Its own box since 10-01 — split out of 'Steals & blocks' (T 9-29); the badge slots agreed with the stat 6/6"
    },
    {
     "id": "blocks",
     "label": "Blocks — your blocks",
     "default": false,
     "engine": true,
     "events": [
      "block"
     ],
     "note": "a BLK tick on your own stat line (the rotating 4th slot). Its own box since 10-01 — split out of 'Steals & blocks' (T 9-29); the badge slots agreed with the stat 4/4"
    },
    {
     "id": "rebounds",
     "label": "Rebounds — your boards",
     "default": false,
     "engine": true,
     "events": [
      "rebound"
     ],
     "note": "a REB tick on your own stat line — every board can be its own clip (T 9-29: big-man builds live on the glass), not only a putback; the badge slots agreed with the stat 9/9"
    },
    {
     "id": "ankle_breakers",
     "label": "Ankle breakers — a made, open shot (≤15% contested) from 18 ft or deeper",
     "default": false,
     "engine": true,
     "events": [
      "ankle"
     ],
     "note": "the engine's 'ankle_breakers' lane (STYLES {ankle}). 2K prints NO 'ankle breaker' string — measured across 9 confirmed gameplay frames. This composite is the substitute. FIRST COUNT 2026-09-23 (max_clipz_engine.py ankle, five 09-22 tapes): 9 of 34 field goals (31 confirmed) — 17-37-25 2/3 · 18-27-47 0/2 · 20-15-24 1/3 · 21-51-02 3/6 · Rec82 3/20; distance unread 16, contested 5, short 1, not made 3. 5 of 6 eyeballed panels matched to the inch, 1 honest unread, 0 wrong. 'assisted' is NOT on the HUD (his own stat line) — the assisted:False leg is untestable from tape (known gap)."
    },
    {
     "id": "best",
     "label": "Best of everything — your top plays of any kind from the whole session",
     "default": false,
     "engine": true,
     "events": [],
     "note": "the engine's no-filter lane with its quality bar — the strongest clips of any kind (board 9-29 · 12: the NAME is T's call)"
    }
   ],
   "styles": [
    "everything",
    "dunks",
    "defense"
   ],
   "noBox": {
    "everything": {
     "label": "Everything — every confirmed play",
     "why": "a no-filter lane — offered in every montage's picks and on MONTAGES, not a box on the game panel",
     "events": []
    },
    "dunks": {
     "label": "Dunks",
     "why": "needs the eye test (EYE_ONLY) unless the worker runs with MAXCLIPZ_PANEL_DUNKS=1 (off 10-01) → it comes back empty today, so no box. Dunks are inside Rim. Kept so a montage cut on this lane before 10-01 still displays",
     "events": [
      "dunk"
     ]
    },
    "defense": {
     "label": "Steals & blocks",
     "why": "retired as a box 10-01 — split into Steals and Blocks (T 9-29). The lane stays in the engine so a montage cut on it before the split still displays",
     "events": [
      "block",
      "steal"
     ]
    }
   },
   "where": "player HUD strip (own stat line), calibrated per tape by the self-locating reader",
   "climbing": "PTS / AST / STL / BLK / REB — the personal stat line the engine already reads",
   "verdict": "Already built: NBA 2K26/2K27 (19 of 19) · Call of Duty (killfeed pipeline)",
   "evidence": [
    "Already built: NBA 2K26/2K27 (19 of 19) · Call of Duty (killfeed pipeline)",
    "engine/max_clipz_engine.py STYLES = everything, best, dunks, buckets, threes, dimes, defense, ankle_breakers, rim, midrange, steals, blocks, rebounds",
    "engine/game_vocab.py ankle_breaker_rule: 2K prints NO 'ankle breaker' string — measured across 9 confirmed gameplay frames. This composite is the substitute. FIRST COUNT 2026-09-23 (max_clipz_engine.py ankle, five 09-22 tapes): 9 of 34 field goals (31 confirmed) — 17-37-25 2/3 · 18-27-47 0/2 · 20-15-24 1/3 · 21-51-02 3/6 · Rec82 3/20; distance unread 16, contested 5, short 1, not made 3. 5 of 6 eyeballed panels matched to the inch, 1 honest unread, 0 wrong. 'assisted' is NOT on the HUD (his own stat line) — the assisted:False leg is untestable from tape (known gap)."
   ],
   "ankleBreaker": {
    "made": true,
    "coverage_max_contest": 15,
    "min_distance_ft": 18,
    "assisted": false,
    "note": "2K prints NO 'ankle breaker' string — measured across 9 confirmed gameplay frames. This composite is the substitute. FIRST COUNT 2026-09-23 (max_clipz_engine.py ankle, five 09-22 tapes): 9 of 34 field goals (31 confirmed) — 17-37-25 2/3 · 18-27-47 0/2 · 20-15-24 1/3 · 21-51-02 3/6 · Rec82 3/20; distance unread 16, contested 5, short 1, not made 3. 5 of 6 eyeballed panels matched to the inch, 1 honest unread, 0 wrong. 'assisted' is NOT on the HUD (his own stat line) — the assisted:False leg is untestable from tape (known gap).",
    "first_count": {
     "date": "2026-09-23",
     "ankles": 9,
     "field_goals": 34,
     "confirmed": 31,
     "distance_unread": 16,
     "contested": 5,
     "short": 1,
     "not_made": 3,
     "eyeballed": "6 panels: 5 match, 1 unread, 0 wrong"
    }
   },
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "2K",
   "truncated": [],
   "measured": "9-16: segmented_detect 19/19 on T's 45-point tape, 0 false clips (source line above)"
  },
  {
   "id": "cod",
   "name": "Call of Duty",
   "status": "built",
   "bucket": "green",
   "personal": true,
   "tested": "built",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — the same clips, heaviest first (streaks lead)",
     "default": true,
     "engine": true
    },
    {
     "id": "kills",
     "label": "Kills (killfeed, white-skull anchor)",
     "default": false,
     "engine": true
    },
    {
     "id": "streaks",
     "label": "Streaks (a 7 s gap breaks a streak)",
     "default": false,
     "engine": true
    }
   ],
   "styles": [],
   "where": "killfeed (standalone detector: engine/cod_reel.py, engine/killfeed.py, engine/cod_profile.py)",
   "climbing": "killfeed rows carrying his skull — append-only, the same monotone the 9-20 report leans on for Overwatch/PUBG",
   "verdict": "Already built: NBA 2K26/2K27 (19 of 19) · Call of Duty (killfeed pipeline)",
   "evidence": [
    "Already built: NBA 2K26/2K27 (19 of 19) · Call of Duty (killfeed pipeline)",
    "◐ Call of Duty — detector WORKS standalone (3 reels shipped), engine not wired to it yet"
   ],
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "COD",
   "truncated": [],
   "measured": "WIRED 2026-09-25 — engine/run_cod.py proved on real footage (full sample): run_cod.py on Devin's Warzone tape (Call of Duty®_20250928163403.webm, 300 s): the game's own ENEMY DOWNED card + ELIMINATED banner read as HIS knocks and eliminations; montage lanes kills / streaks / best; 32 tests. Live cod job OJdi91v1OPYepuW6mHrS on max-clipz-901 (cod): 50,395,625 B · 32.60 s · 3 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9911) · queued→done 787.8 s · eye check on the kill card + banner every 0.5 s: clip 1 shows ENEMY DOWNED UnKle Gernie, ENEMY DOWNED MasterTRUMP68, then '19TH KILL · ELIMINATED: MasterTRUMP68'; clip 2 ENEMY DOWNED Swinginmeat then '20TH KILL · ELIMINATED: Swinginmeat'; clip 3 ENEMY DOWNED Swinginmeat. All 6 plays are his own HUD's cards; TEAMMATE DOWN / DEAD / REVIVED appear only inside his clips as context, never cut on. The same 3 spans as the full-tape proof run (220-227, 239.5-252.5, 264-276.5 s). Rendered with the game's own audio (no song on the job, needsSong=true). Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "cod",
    "runner": "engine/run_cod.py",
    "sample": "full",
    "proof": "run_cod.py on Devin's Warzone tape (Call of Duty®_20250928163403.webm, 300 s): the game's own ENEMY DOWNED card + ELIMINATED banner read as HIS knocks and eliminations; montage lanes kills / streaks / best; 32 tests",
    "proofClip": "~/Movies/MAXCLIPZ_COD_PROOF_2026-09-25/run5_final_2025/Call of Duty®_20250928163403__streaks.mp4",
    "liveJob": {
     "jobId": "OJdi91v1OPYepuW6mHrS",
     "game": "cod",
     "at": "2026-09-25T13:11:42.957Z",
     "measured": "50,395,625 B · 32.60 s · 3 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9911) · queued→done 787.8 s · eye check on the kill card + banner every 0.5 s: clip 1 shows ENEMY DOWNED UnKle Gernie, ENEMY DOWNED MasterTRUMP68, then '19TH KILL · ELIMINATED: MasterTRUMP68'; clip 2 ENEMY DOWNED Swinginmeat then '20TH KILL · ELIMINATED: Swinginmeat'; clip 3 ENEMY DOWNED Swinginmeat. All 6 plays are his own HUD's cards; TEAMMATE DOWN / DEAD / REVIVED appear only inside his clips as context, never cut on. The same 3 spans as the full-tape proof run (220-227, 239.5-252.5, 264-276.5 s). Rendered with the game's own audio (no song on the job, needsSong=true)"
    }
   }
  },
  {
   "id": "counter_strike_2",
   "name": "Counter-Strike 2",
   "status": "killfeed",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — streaks first (heaviest clips lead)",
     "default": true,
     "engine": true
    },
    {
     "id": "kills",
     "label": "Kills (killfeed, gamertag-attributed)",
     "default": false,
     "engine": true
    },
    {
     "id": "multikills",
     "label": "Multikills — 3+ different enemies of yours in one streak (a 7 s gap breaks it), heaviest first",
     "default": false,
     "engine": true
    },
    {
     "id": "team_round_score_both_sides",
     "label": "team round score both sides",
     "default": false,
     "engine": false
    },
    {
     "id": "round_timer",
     "label": "round timer",
     "default": false,
     "engine": false
    },
    {
     "id": "per_player_money_for_all_5_teammates",
     "label": "per-player money for all 5 teammates",
     "default": false,
     "engine": false
    },
    {
     "id": "per_player_round_kills_as_skull_glyphs_u",
     "label": "per-player round kills as SKULL GLYPHS under each avatar",
     "default": false,
     "engine": false
    },
    {
     "id": "players_alive_per_side",
     "label": "players alive per side",
     "default": false,
     "engine": false
    },
    {
     "id": "own_health",
     "label": "own health",
     "default": false,
     "engine": false
    },
    {
     "id": "own_armor",
     "label": "own armor",
     "default": false,
     "engine": false
    },
    {
     "id": "own_money",
     "label": "own money",
     "default": false,
     "engine": false
    },
    {
     "id": "own_ammo_mag_and_reserve",
     "label": "own ammo mag and reserve",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Timer ~(914-1006, 4-38). Team scores ~(918-958, 38-72) and ~(960-1000, 38-72). Top team-card bar (avatars, money, round-kill skulls) ~(625-1105, 0-160). Bottom-left money ~(10-190, 1010-1058), armor ~(560-600, 1000-1054), health ~(608-700, 1000-1054). Bottom-r",
   "tracks": "team round score both sides, round timer, per-player money for all 5 teammates, per-player round kills as SKULL GLYPHS under each avatar, players alive per side, own health, own armor, own money, own ammo mag and reserve. Personal score and",
   "climbing": "Team round score, each side 0->13+, climbs only. The per-player round-kill skulls are also monotonic but reset each round. Money is NOT monotonic - it drops on every buy. The spectated player's score (AMAW 82) IS monotonic across a match, but only visible while dead.",
   "verdict": "CS2 is the most number-dense HUD of the four and the cleanest to OCR - health came back on 11 of 11 frames and money reads plainly - but none of it says which plays were his. The one true personal stat line, 'AMAW 82 / ADR 57', read perfectly and is monotonic, and it is useless for cutting because it only paints while he is DEAD and spectating a teammate. The real opening is the top team bar: his own card is the one with the colored border, and the little skulls under it are his kills this round. Tesseract cannot c",
   "evidence": [
    "PER-FIELD SWEEP (5x lanczos, gray, contrast 2.0, --psm 7/10 digit whitelist), 11 frames:",
    "t=350  TIMER='0:38' SCORE_L='2' SCORE_R='1'  HEALTH='33'  MAG='5'",
    "t=550  TIMER=''     SCORE_L='3' SCORE_R='3'  HEALTH='100' MAG='12'",
    "t=750  TIMER=''     SCORE_L=''  SCORE_R=''   HEALTH='43'  MAG=''",
    "t=860  TIMER='0:26' SCORE_L='5' SCORE_R='3'  HEALTH='5'   MAG='1'",
    "t=950  TIMER='0:48' SCORE_L=''  SCORE_R=''   HEALTH='100' MAG='26'",
    "t=1050 TIMER=':03'  SCORE_L='7' SCORE_R='4'  HEALTH='100' MAG=''",
    "t=1150 TIMER=''     SCORE_L='4' SCORE_R='8'  HEALTH='49'  MAG='10'",
    "t=1250 TIMER='1:50' SCORE_L='5' SCORE_R=''   HEALTH='100' MAG=''",
    "t=1450 TIMER=''     SCORE_L='7' SCORE_R='7'  HEALTH='86'  MAG='30'   <-- right scor"
   ],
   "evidenceChars": 691,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_killfeed.py proved on real footage (small sample): tag Kryptek, VOD xBJMU3WYn_I 484-522 + 84-118 s: 4/4 of his kills by eye, his death rejected (small sample). Live killfeed job eVdOosJlI9DfmYd2ogTM on max-clipz-901 (overwatch_2): 28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row. Not T's own footage yet — check the first real tape by eye.",
   "bucket_2026_09_20": "yellow",
   "killfeed": {
    "name": "Counter-Strike 2",
    "n": 8,
    "precision": 1.0,
    "tp": 8,
    "predicted": 8,
    "recall": 1.0,
    "wilsonLow95": 0.68,
    "verdict": "GREEN (provisional) · smallest n",
    "source": "engine/KILLFEED_CALIBRATION_2026-09-24.md"
   },
   "wired": {
    "kind": "killfeed",
    "runner": "engine/run_killfeed.py",
    "sample": "small",
    "proof": "tag Kryptek, VOD xBJMU3WYn_I 484-522 + 84-118 s: 4/4 of his kills by eye, his death rejected (small sample)",
    "proofClip": "~/Movies/MAXCLIPZ_KILLFEED_PROOF_2026-09-24/counter_strike_2/final_0925_484-522/counter_strike_2__xBJMU3WYn_I__484-522__kills.mp4",
    "liveJob": {
     "jobId": "eVdOosJlI9DfmYd2ogTM",
     "game": "overwatch_2",
     "at": "2026-09-25T12:59:28.772Z",
     "measured": "28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row"
    }
   }
  },
  {
   "id": "marvel_rivals",
   "name": "Marvel Rivals",
   "status": "killfeed",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — streaks first (heaviest clips lead)",
     "default": true,
     "engine": true
    },
    {
     "id": "kills",
     "label": "Kills (killfeed, gamertag-attributed)",
     "default": false,
     "engine": true
    },
    {
     "id": "killfeed_with_killer_and_victim_gamertag",
     "label": "Killfeed with killer and victim gamertags",
     "default": false,
     "engine": false
    },
    {
     "id": "own_health_current_max",
     "label": "own health current/max",
     "default": false,
     "engine": false
    },
    {
     "id": "ultimate_charge_percent",
     "label": "ultimate charge percent",
     "default": false,
     "engine": false
    },
    {
     "id": "ability_cooldowns",
     "label": "ability cooldowns",
     "default": false,
     "engine": false
    },
    {
     "id": "ammo",
     "label": "ammo (10/12 read clean)",
     "default": false,
     "engine": false
    },
    {
     "id": "match_clock",
     "label": "match clock",
     "default": false,
     "engine": false
    },
    {
     "id": "objective_progress_bar_and_objective_tex",
     "label": "objective progress bar and objective text",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Killfeed: top-RIGHT, a 440x120 box at (1480,18), lines stack downward, killer name on the LEFT of each line and victim on the right. Health: bottom-center, 260x40 at (850,965), format \"current / max\". Match timer: top-center, 180x60 at (880,30), large white di",
   "tracks": "Killfeed with killer and victim gamertags, own health current/max, ultimate charge percent, ability cooldowns, ammo (10/12 read clean), match clock, objective progress bar and objective text. No persistent personal K/D on the default HUD —",
   "climbing": "The KILLFEED is append-only, which is the same monotone CoD already runs on: a new line appearing with his gamertag on the LEFT is a kill he got. Within a life, ultimate charge climbs 0-100% then resets on use, so it is sawtooth, not monotone. The match clock counts down cleanly.",
   "verdict": "This one is nearly free. Marvel Rivals has the biggest, cleanest HUD text of the four — health read exact on 8 of 10 gameplay frames straight off compressed YouTube 1080p with no tricks, just crop and upscale, and the timer read 04:52 exact. More important, the killfeed names the killer, so it IS personally attributable: at t=1900 I got two consecutive lines both starting with the same player name, which is that player scoring two kills back to back. That is the exact shape the CoD pipeline already handles, so Marv",
   "evidence": [
    "HEALTH crop=260x40+850+965, gray, 4x, psm 7 — 8 clean reads of 10 gameplay frames:",
    "  t=400:  \"650 650\"      t=800:  \"250 / 250\"     t=1600: \"525 / 525\"",
    "  t=2000: \"300 / 300 |\"  t=1500: \"190 / 390\"     t=1550: \"38G / 386\"",
    "  t=1750: \"730/730\"      t=1900: \"300 / 300\"",
    "  (t=1200 and t=2400 were post-match/menu screens, correctly returned nothing)",
    "KILLFEED crop=440x120+1480+18, gray, 3x, psm 11 — THIS IS THE IMPORTANT ONE:",
    "  t=1600: \"ay|WE Soy_Deiby S——>_ 1313|oy ||DrProfRabbit \\\"Ye\"",
    "     ground truth by eye: line 1 \"Soy_Deiby -> TY313\", line 2 \"DrProfRabbit -> L-haker\"",
    "     -> BOTH KILLER NAMES CORRECT, TY313 read as 1313",
    "  t=1500: \"ae 1Y313 Fe|L-haker soe|-——|—s~ &\"",
    "  t=1900: \"a|ed|ad|is|©|Elo"
   ],
   "evidenceChars": 689,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_killfeed.py proved on real footage (full sample): tag DrProfRabbit, VOD QFpo5DTHhts 1300-1500 s: 9/9 of his kills by eye, 0 extra. Live killfeed job eVdOosJlI9DfmYd2ogTM on max-clipz-901 (overwatch_2): 28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row. Not T's own footage yet — check the first real tape by eye.",
   "bucket_2026_09_20": "yellow",
   "killfeed": {
    "name": "Marvel Rivals",
    "n": 11,
    "precision": 1.0,
    "tp": 11,
    "predicted": 11,
    "recall": 1.0,
    "wilsonLow95": 0.74,
    "verdict": "GREEN (provisional)",
    "source": "engine/KILLFEED_CALIBRATION_2026-09-24.md"
   },
   "wired": {
    "kind": "killfeed",
    "runner": "engine/run_killfeed.py",
    "sample": "full",
    "proof": "tag DrProfRabbit, VOD QFpo5DTHhts 1300-1500 s: 9/9 of his kills by eye, 0 extra",
    "proofClip": "~/Movies/MAXCLIPZ_KILLFEED_PROOF_2026-09-24/marvel_rivals/final_0925/PROOF_marvel_rivals_kills_final_720p.mp4",
    "liveJob": {
     "jobId": "eVdOosJlI9DfmYd2ogTM",
     "game": "overwatch_2",
     "at": "2026-09-25T12:59:28.772Z",
     "measured": "28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row"
    }
   }
  },
  {
   "id": "overwatch_2",
   "name": "Overwatch 2",
   "status": "killfeed",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — streaks first (heaviest clips lead)",
     "default": true,
     "engine": true
    },
    {
     "id": "kills",
     "label": "Kills (killfeed, gamertag-attributed)",
     "default": false,
     "engine": true
    },
    {
     "id": "elimination_feed_with_killer_victim_game",
     "label": "elimination feed with KILLER > VICTIM gamertags",
     "default": false,
     "engine": false
    },
    {
     "id": "own_gamertag_always_on_screen_bottom_lef",
     "label": "own gamertag always on screen bottom-left",
     "default": false,
     "engine": false
    },
    {
     "id": "own_current_max_health",
     "label": "own current/max health",
     "default": false,
     "engine": false
    },
    {
     "id": "own_hero",
     "label": "own hero",
     "default": false,
     "engine": false
    },
    {
     "id": "own_ammo_mag_reserve",
     "label": "own ammo mag|reserve",
     "default": false,
     "engine": false
    },
    {
     "id": "own_ultimate_charge_percentage",
     "label": "own ultimate charge percentage",
     "default": false,
     "engine": false
    },
    {
     "id": "ability_cooldowns",
     "label": "ability cooldowns",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Elimination feed top-right ~(1450-1910, 25-215), stacks up to 3-4 rows. Own health 'cur|max' bottom-left ~(162-312, 882-932), own gamertag directly under it ~(163-383, 958-992), hero portrait left of both. Objective banner + match timer top-center ~(800-1080,",
   "tracks": "elimination feed with KILLER > VICTIM gamertags, own gamertag always on screen bottom-left, own current/max health, own hero, own ammo mag|reserve, own ultimate charge percentage, ability cooldowns, objective banner text ('STOP THE PAYLOAD'",
   "climbing": "Yes, and it is the best of the four: count the elimination-feed rows whose LEFT name matches his gamertag. That count only goes up across a match. It is not printed as a number anywhere - the engine derives it by counting matched lines - but it is genuinely his, and t=1900 proves it catches multi-ki",
   "verdict": "This is the one that actually drops into what's already built. Overwatch 2 has no personal stat line that ticks, so it is not 2K - but it is the only one of these four where the screen tells you WHICH kills were his, and it tells you twice over: his gamertag sits permanently under his health bar, and every elimination prints as 'HISNAME > VICTIM' in the top-right feed. I read that feed back on 8 of 14 frames, and at t=1900 it returned his name three times in one frame - a triple kill, visible to OCR. That is the sa",
   "evidence": [
    "THE ELIMINATION FEED IS THE FINDING. White-text threshold lut y>190, 4x lanczos, --psm 6, top-right crop 460x190 at (1450,25). The recording player's gamertag is UNKNOWN - confirmed off his own bottom-left nameplate. 14 frames:",
    "t=700  'uUnKNOWN = >) HACKED'",
    "t=850  'NATE99 “4° > « % STRONGD ame TE A> ®  oRAcoNWHIRO )ovs \"4 STRONGBD «> > LILTAZZ EXILE > Se NIGHTMARE2 11'",
    "t=1000 'a » i gt UNKNOWN 3 > “Sf NATE99'",
    "t=1900 'UNKNOWN ©) GPALWIGHT   UNKNOWN = = >)» ATOMIC   UNKNOWN = > squat'   <-- THREE of his own kills stacked in one frame. That is a triple, and the engine can see it.",
    "t=2050 'UNKNOWN > # NACGCIES . | \\\\ aa.'",
    "t=2350 'TARAHARK OW » MASTEMCHIEF / MASTEQCEHIEF )  mtsasauip'",
    "t=2500 'KEON"
   ],
   "evidenceChars": 693,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_killfeed.py proved on real footage (full sample): tag HORUS, VOD kBr8VImNnAg 2215-2285 s: 4/4 of his kills by eye, 0 extra, his death at 11 s left out. Live killfeed job eVdOosJlI9DfmYd2ogTM on max-clipz-901 (overwatch_2): 28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row. Not T's own footage yet — check the first real tape by eye.",
   "bucket_2026_09_20": "yellow",
   "killfeed": {
    "name": "Overwatch 2",
    "n": 10,
    "precision": 1.0,
    "tp": 9,
    "predicted": 9,
    "recall": 0.9,
    "wilsonLow95": 0.7,
    "verdict": "GREEN (provisional)",
    "source": "engine/KILLFEED_CALIBRATION_2026-09-24.md"
   },
   "wired": {
    "kind": "killfeed",
    "runner": "engine/run_killfeed.py",
    "sample": "full",
    "proof": "tag HORUS, VOD kBr8VImNnAg 2215-2285 s: 4/4 of his kills by eye, 0 extra, his death at 11 s left out",
    "proofClip": "~/Movies/MAXCLIPZ_KILLFEED_PROOF_2026-09-24/overwatch_2/final_0925/overwatch_2__kBr8VImNnAg__2215-2285__kills.mp4",
    "liveJob": {
     "jobId": "eVdOosJlI9DfmYd2ogTM",
     "game": "overwatch_2",
     "at": "2026-09-25T12:59:28.772Z",
     "measured": "28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row"
    }
   }
  },
  {
   "id": "pubg_battlegrounds",
   "name": "PUBG Battlegrounds",
   "status": "killfeed",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — streaks first (heaviest clips lead)",
     "default": true,
     "engine": true
    },
    {
     "id": "kills",
     "label": "Kills (killfeed, gamertag-attributed)",
     "default": false,
     "engine": true
    },
    {
     "id": "players_remaining_in_the_lobby",
     "label": "players remaining in the lobby",
     "default": false,
     "engine": false
    },
    {
     "id": "killfeed",
     "label": "killfeed (killer name, weapon icon, victim name)",
     "default": false,
     "engine": false
    },
    {
     "id": "ammo_in_mag_reserve",
     "label": "ammo in mag / reserve",
     "default": false,
     "engine": false
    },
    {
     "id": "health_bar",
     "label": "health bar",
     "default": false,
     "engine": false
    },
    {
     "id": "boost_bar",
     "label": "boost bar",
     "default": false,
     "engine": false
    },
    {
     "id": "compass_heading",
     "label": "compass heading",
     "default": false,
     "engine": false
    },
    {
     "id": "blue_zone_phase_number_and_countdown",
     "label": "blue-zone phase number and countdown",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "\"<N> ALIVE\" top-right, x 1780-1900, y 22-58. Killfeed directly under it, x 1370-1900, y 78-200, two names per line. Compass strip across the top center, x 600-1400, y 50-80. Ammo bottom-center x 935-1030, y 990-1020, with the health bar under it at x 755-1165,",
   "tracks": "players remaining in the lobby, killfeed (killer name, weapon icon, victim name), ammo in mag / reserve, health bar, boost bar, compass heading, blue-zone phase number and countdown, equipped weapon slots",
   "climbing": "NOT A PERSONAL ONE. \"<N> ALIVE\" is monotonic but it counts DOWN and it is the whole lobby, not him — it drops when anyone anywhere dies. The phase timer counts down and resets each phase. The only way to isolate HIS kills is to read the killfeed and match his own username in the LEFT slot, which mea",
   "verdict": "Max Clipz can see PUBG but it cannot tell whose play it was, so this is a step down from Fortnite and Apex. There is no personal stat line at all — the only number that ticks is the lobby-wide ALIVE count, and it goes the wrong direction. The workable path is the killfeed: usernames OCR clean and complete on every frame where a kill lands, so if you hand the engine Terrell's gamertag it can trigger on \"his name appears in the left slot\" the same way the CoD pipeline triggers on the skull counter. Second problem to",
   "evidence": [
    "BEST FRAME t=750s.",
    "ALIVE COUNTER, crop=170:44:1735:17, 8x, gray, threshold>170, white pad, --psm 7:",
    "  t=300  -> a7 ALIVE",
    "  t=450  -> da ALIVE",
    "  t=600  -> AA ALIVE      <- I opened this crop and looked at it: it is plainly \"44 ALIVE\"",
    "  t=750  -> 36 ALIVE      <- correct",
    "  t=900  -> (empty)",
    "  t=1050 -> 30 ALIVE      <- correct",
    "  t=1200 -> 23 ALIVE      <- correct",
    "  The word ALIVE is 6/7. The DIGITS are 3/7. PUBG's 4 is an open-top glyph and tesseract calls it A or a every single time.",
    "KILLFEED, crop=560:170:1350:70, 3x, --psm 6:",
    "  t=300  -> Mr-Buttcrack Bf\" itsbilliy",
    "  t=750  -> aia ae PCD_R1QZER4 wPE™— 6 FreakExcavator ia",
    "  t=1200 -> 010_kaizeg2k o~\"\"\"—\"_ _ de_noots",
    "  Both usernames come th"
   ],
   "evidenceChars": 684,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_killfeed.py proved on real footage (small sample): tag RachitPanwar, VOD xjoaudkVubQ 932-962 s: 3/3 of his plays by eye (small sample; calibration recall 0.82). Live killfeed job eVdOosJlI9DfmYd2ogTM on max-clipz-901 (overwatch_2): 28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row. Not T's own footage yet — check the first real tape by eye.",
   "bucket_2026_09_20": "yellow",
   "killfeed": {
    "name": "PUBG Battlegrounds",
    "n": 11,
    "precision": 1.0,
    "tp": 9,
    "predicted": 9,
    "recall": 0.82,
    "wilsonLow95": 0.7,
    "verdict": "GREEN (provisional) · lowest recall",
    "source": "engine/KILLFEED_CALIBRATION_2026-09-24.md"
   },
   "wired": {
    "kind": "killfeed",
    "runner": "engine/run_killfeed.py",
    "sample": "small",
    "proof": "tag RachitPanwar, VOD xjoaudkVubQ 932-962 s: 3/3 of his plays by eye (small sample; calibration recall 0.82)",
    "proofClip": "~/Movies/MAXCLIPZ_KILLFEED_PROOF_2026-09-24/pubg_battlegrounds/final_0925/pubg_battlegrounds__xjoaudkVubQ__932-962__kills.mp4",
    "liveJob": {
     "jobId": "eVdOosJlI9DfmYd2ogTM",
     "game": "overwatch_2",
     "at": "2026-09-25T12:59:28.772Z",
     "measured": "28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row"
    }
   }
  },
  {
   "id": "valorant",
   "name": "Valorant",
   "status": "killfeed",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — streaks first (heaviest clips lead)",
     "default": true,
     "engine": true
    },
    {
     "id": "kills",
     "label": "Kills (killfeed, gamertag-attributed)",
     "default": false,
     "engine": true
    },
    {
     "id": "team_round_score",
     "label": "team round score (0-13 per side)",
     "default": false,
     "engine": false
    },
    {
     "id": "round_timer",
     "label": "round timer",
     "default": false,
     "engine": false
    },
    {
     "id": "own_health",
     "label": "own health",
     "default": false,
     "engine": false
    },
    {
     "id": "own_shield",
     "label": "own shield",
     "default": false,
     "engine": false
    },
    {
     "id": "own_ammo_mag_reserve",
     "label": "own ammo mag/reserve",
     "default": false,
     "engine": false
    },
    {
     "id": "own_credits",
     "label": "own credits",
     "default": false,
     "engine": false
    },
    {
     "id": "killfeed_killer_victim_lines",
     "label": "killfeed KILLER>VICTIM lines",
     "default": false,
     "engine": false
    },
    {
     "id": "minimap",
     "label": "minimap",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Top-center bar: left team score ~(768-824, 16-80), timer ~(920-1020, 16-80), right team score ~(1102-1158, 16-80). Bottom-left health ~(480-620, 995-1057). Bottom-right ammo ~(1330-1460, 1000-1056) and credits ~(1790-1900, 1030-1060). Killfeed ~(1110-1910, 85-",
   "tracks": "team round score (0-13 per side), round timer, own health, own shield, own ammo mag/reserve, own credits, killfeed KILLER>VICTIM lines, minimap. NO personal K/D/A anywhere on the default in-play HUD - that lives on the TAB scoreboard only.",
   "climbing": "Team round score, each side 0->13, only climbs and never resets inside a match. That is the only clean monotonic number. Credits are NOT monotonic - they reset and drop every buy. Health resets every round.",
   "verdict": "Max Clipz can read Valorant's numbers but cannot tell which kills were Terrell's from a stat line, because Valorant never puts a personal K/D on screen during play. The round score and timer read reliably once you threshold for white text; health reads ~4 of 7 frames. The one attributable signal is the killfeed, which did surface real gamertags ('powered by aw', 'Yankee', 'Jett', 'Muted') - so if you feed the engine his gamertag it could count his own kill lines the same way the CoD pipeline does. But it came back",
   "evidence": [
    "PER-FIELD SWEEP (tight crops + binarize lut y>205 -> invert, 5x nearest, tesseract --psm 7/10 digit whitelist), 7 frames:",
    "t=300  TIMER='1:24' SCORE_LEFT='2' SCORE_RIGHT='1'",
    "t=520  TIMER='0:28' SCORE_LEFT='3' SCORE_RIGHT='3'",
    "t=720  TIMER='0:28' SCORE_LEFT='4' SCORE_RIGHT='9'",
    "t=950  TIMER='0:06' SCORE_LEFT='4' SCORE_RIGHT='7'",
    "t=1300 TIMER='1:27' SCORE_LEFT='' SCORE_RIGHT=''   <-- ground truth on screen was 6 and 9, BOTH MISSED (bright sky behind the digits beat the fixed threshold)",
    "t=1500 TIMER='' SCORE_LEFT='' SCORE_RIGHT=''",
    "t=1650 TIMER='1:33' SCORE_LEFT='' SCORE_RIGHT='1'",
    "HEALTH / CREDITS (same frames):",
    "t=300  HEALTH='' CREDITS='350'",
    "t=520  HEALTH='100' CREDITS='4,250'",
    "t=720  HEALTH='1007'"
   ],
   "evidenceChars": 688,
   "plan": {
    "verdict": "CLOUD API SYNC",
    "how": "HenrikDev v4, console endpoints, timestamp-aligned",
    "failure": "personal stats hidden",
    "kind": "api",
    "source": "BUILD_SPEC_game_expansion_2026-09-23.md"
   },
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_killfeed.py proved on real footage (full sample): tag AquaPlaid, VOD 2LnFuREmbpk 1420-1620 s: 11/11 of his kills by eye, 0 extra, his death kept out; a teammate named close to you (AquaFad 0.75 vs AquaPlaid) could be credited as you — not guarded. Live killfeed job eVdOosJlI9DfmYd2ogTM on max-clipz-901 (overwatch_2): 28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row. Not T's own footage yet — check the first real tape by eye.",
   "bucket_2026_09_20": "orange",
   "killfeed": {
    "name": "Valorant",
    "n": 13,
    "precision": 1.0,
    "tp": 13,
    "predicted": 13,
    "recall": 1.0,
    "wilsonLow95": 0.77,
    "verdict": "GREEN (provisional)",
    "source": "engine/KILLFEED_CALIBRATION_2026-09-24.md"
   },
   "wired": {
    "kind": "killfeed",
    "runner": "engine/run_killfeed.py",
    "sample": "full",
    "proof": "tag AquaPlaid, VOD 2LnFuREmbpk 1420-1620 s: 11/11 of his kills by eye, 0 extra, his death kept out; a teammate named close to you (AquaFad 0.75 vs AquaPlaid) could be credited as you — not guarded",
    "proofClip": "~/Movies/MAXCLIPZ_KILLFEED_PROOF_2026-09-24/valorant/final_0925/PROOF_valorant_kills_final_720p.mp4",
    "liveJob": {
     "jobId": "eVdOosJlI9DfmYd2ogTM",
     "game": "overwatch_2",
     "at": "2026-09-25T12:59:28.772Z",
     "measured": "28,431,878 B · 18.52 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9954) · queued→done 105.9 s · eye check on a 1.5 s sheet of the killfeed box: HORUS is the killer in every row — 抜け目ない子猫, HECTPASCAL, PATORUSH, ANCRXP (his 4 kills), no death row"
    }
   }
  },
  {
   "id": "apex_legends",
   "name": "Apex Legends",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every kills + assists tick of yours",
     "default": true,
     "engine": true
    },
    {
     "id": "your_kills",
     "label": "YOUR kills",
     "default": false,
     "engine": true
    },
    {
     "id": "your_assists",
     "label": "YOUR assists",
     "default": false,
     "engine": true
    },
    {
     "id": "your_ranked_points",
     "label": "your ranked points",
     "default": false,
     "engine": false
    },
    {
     "id": "squads_remaining",
     "label": "squads remaining",
     "default": false,
     "engine": false
    },
    {
     "id": "players_remaining",
     "label": "players remaining",
     "default": false,
     "engine": false
    },
    {
     "id": "per_teammate_health_and_shield_bars_with",
     "label": "per-teammate health and shield bars with names",
     "default": false,
     "engine": false
    },
    {
     "id": "ammo_in_mag_reserve",
     "label": "ammo in mag / reserve",
     "default": false,
     "engine": false
    },
    {
     "id": "weapon_names",
     "label": "weapon names",
     "default": false,
     "engine": false
    },
    {
     "id": "legend_ability_cooldowns",
     "label": "legend ability cooldowns",
     "default": false,
     "engine": false
    },
    {
     "id": "ring_phase_and_closing_timer",
     "label": "ring phase and closing timer",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Top-right corner, two stacked banners. Upper: \"<N> SQUADS LEFT\" plus a person icon and players-alive count, x 1570-1790, y 52-82. Lower badge row (the one that matters): x 1545-1790, y 95-121 — three fields left to right, skull=YOUR kills, handshake=YOUR assis",
   "tracks": "YOUR kills, YOUR assists, your ranked points, squads remaining, players remaining, per-teammate health and shield bars with names, ammo in mag / reserve, weapon names, legend ability cooldowns, ring phase and closing timer, distance-to-ring",
   "climbing": "YES — two of them. The skull field is YOUR personal kill count and only climbs within a raid (measured 2 at t=2600, 12 at t=2400). RP in the third badge also only climbs across the session (739 -> 2225 -> 2900). Squads-left is a clean monotonic decrease as a secondary confirm.",
   "verdict": "Max Clipz can read Apex, but it needs the calibrator pointed at it first — this is the exact same defect already logged for 2K on 8-13, where the HUD strip started 23px left of the digits. The badge row is RIGHT-anchored to the screen edge, so when RP drops from 4 digits (2900) to 3 digits (739) the whole row slides right and a fixed pixel box reads nothing. Anchor the crop on the skull icon instead of on an absolute x and it is solved: with a tight per-field box the kill count came back [12] on all four page-seg m",
   "evidence": [
    "BEST FRAME t=2400s. The raw crop OCRs badly, so I thresholded it (keep only pixels brighter than 200) and it went perfectly crisp — the badge row renders as SKULL 12 / HANDSHAKE 1 / RP-ICON 2900, verified by eye against the frame.",
    "WIDE ROW, crop=280:40:1530:86, 6x, gray, threshold>200, white pad, --psm 11 digits-only:",
    "  t=2400 -> 812  42900     (skull icon bleeding into the 12; RP 2900 read as 2900 here)",
    "  t=3000 -> 7  34  42225",
    "  t=2000 -> 710  402",
    "  t=2600 -> (empty — icons defeat psm 11)",
    "TIGHT PER-FIELD CROP is where it actually works. crop=32:26:<x>:95, 10x, threshold>200, --psm 8 digits-only:",
    "  apex_2400  KILLS = [12]   RP = [2900]     <- both exactly right",
    "  apx_2600   KILLS = [2]"
   ],
   "evidenceChars": 687,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_statline.py proved on real footage (thin sample): VOD 5NID33FP6C8 700-1000: one squad wipe 9→12 read as KILL+3 with no false values; the assists lane never ticked on the tape (untested on a real tick). Live statline job T8mROI5SMtpGA1PAW5Vl on max-clipz-901 (fortnite): 33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "statline",
    "runner": "engine/run_statline.py",
    "sample": "thin",
    "proof": "VOD 5NID33FP6C8 700-1000: one squad wipe 9→12 read as KILL+3 with no false values; the assists lane never ticked on the tape (untested on a real tick)",
    "proofClip": "~/Movies/MAXCLIPZ_STATLINE_PROOF_2026-09-24/proof/apex/apex_legends__5NID33FP6C8__700-1000__best.mp4",
    "liveJob": {
     "jobId": "T8mROI5SMtpGA1PAW5Vl",
     "game": "fortnite",
     "at": "2026-09-25T13:02:58.149Z",
     "measured": "33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends"
    }
   }
  },
  {
   "id": "deadlock",
   "name": "Deadlock",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every souls tick of yours",
     "default": true,
     "engine": true
    },
    {
     "id": "his_own_player_level",
     "label": "his own player level",
     "default": false,
     "engine": true
    },
    {
     "id": "his_own_unspent_souls",
     "label": "HIS OWN unspent souls (a personal currency total)",
     "default": false,
     "engine": true
    },
    {
     "id": "unsecured_souls_pending",
     "label": "unsecured souls pending",
     "default": false,
     "engine": false
    },
    {
     "id": "match_clock_counting_up",
     "label": "match clock counting up",
     "default": false,
     "engine": false
    },
    {
     "id": "both_teams_total_souls_in_thousands",
     "label": "both teams' total souls in thousands",
     "default": false,
     "engine": false
    },
    {
     "id": "own_health_current_max",
     "label": "own health current/max",
     "default": false,
     "engine": false
    },
    {
     "id": "ability_cooldowns_and_ammo",
     "label": "ability cooldowns and ammo",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Personal souls: bottom-LEFT, mint-green digits on near-black, a 150x42 box at (88,890) at 1920x1080 — but the row floats between y=862 and y=890 depending on whether an UNSECURED line is stacked beneath it. Player level: white digits in a green circle badge at",
   "tracks": "HIS OWN unspent souls (a personal currency total), his own player level, unsecured souls pending, match clock counting up, both teams' total souls in thousands, own health current/max, ability cooldowns and ammo, plus every hero's level alo",
   "climbing": "TWO, and the difference between them matters. The MATCH CLOCK counts UP and read 7 of 7 exact (6:47 -> 36:47) — the most reliable number I read in this entire test, on any game. PLAYER LEVEL also only rises (7 -> 16 -> 19 -> 22 across the sample). But the SOULS counter is NOT monotonic and I want to",
   "verdict": "Deadlock is the best read of the four and arguably cleaner than anything outside 2K itself. The personal souls counter is big mint-green text on black in a fixed corner — 7 of 7 readable once I let the crop float — and it is HIS number, not the team's, which is exactly the thing GTA and College Football 26 were missing. The match clock came back 7 of 7 exact at precisely 5-minute spacing, which independently proves the OCR is telling the truth rather than hallucinating plausible digits. So Max Clipz can absolutely",
   "evidence": [
    "MATCH CLOCK crop=120x34+900+8, gray, 5x, psm 7 — 7 OF 7, PERFECT:",
    "  t=400:  \", 6:47\"   t=700:  \"y 11:47\"   t=1000: \"16:47\"   t=1300: \"21:47\"",
    "  t=1600: \"26:47\"    t=1900: \"31:47\"     t=2200: \"36:47\"",
    "  I sampled every 300 seconds. The readings are exactly 5:00 apart, every time. That is not me",
    "  describing a HUD — that is the OCR internally proving itself against my own sampling interval.",
    "PERSONAL SOULS COUNTER crop=150x42+88+890, gray, 6x, contrast 1.25, psm 7, whitelist 0-9 , $ :",
    "  t=700:  \"1,215\"    t=1000: \"859\"     t=1300: \"3,034\"    t=1600: \"5,893\"",
    "  t=1900: \"2,528\"    t=2200: \"2,6165\"",
    "  t=400:  (empty at y=890) -> re-cropped to y=862 and got \"1,897,\"",
    "  Verified by eye on two frames: t="
   ],
   "evidenceChars": 690,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_statline.py proved on real footage (full sample): VOD l5fVEeD1qT0 300-600: level-ups 7/7 on time, souls gains 4 of 5 (one honest miss), 0 false, his death never cut. Live statline job T8mROI5SMtpGA1PAW5Vl on max-clipz-901 (fortnite): 33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "statline",
    "runner": "engine/run_statline.py",
    "sample": "full",
    "proof": "VOD l5fVEeD1qT0 300-600: level-ups 7/7 on time, souls gains 4 of 5 (one honest miss), 0 false, his death never cut",
    "proofClip": "~/Movies/MAXCLIPZ_STATLINE_PROOF_2026-09-24/proof/deadlock/deadlock__l5fVEeD1qT0__300-600__best.mp4",
    "liveJob": {
     "jobId": "T8mROI5SMtpGA1PAW5Vl",
     "game": "fortnite",
     "at": "2026-09-25T13:02:58.149Z",
     "measured": "33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends"
    }
   }
  },
  {
   "id": "fortnite",
   "name": "Fortnite",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every elims + victory_royale tick of yours",
     "default": true,
     "engine": true
    },
    {
     "id": "your_eliminations",
     "label": "YOUR eliminations",
     "default": false,
     "engine": true
    },
    {
     "id": "wins",
     "label": "Wins — the #1 VICTORY ROYALE banner (banner_reader, 2026-09-26)",
     "default": false,
     "engine": true
    },
    {
     "id": "storm_phase_timer",
     "label": "storm/phase timer",
     "default": false,
     "engine": false
    },
    {
     "id": "players_remaining",
     "label": "players remaining",
     "default": false,
     "engine": false
    },
    {
     "id": "team_eliminations",
     "label": "team eliminations",
     "default": false,
     "engine": false
    },
    {
     "id": "health",
     "label": "health",
     "default": false,
     "engine": false
    },
    {
     "id": "shield",
     "label": "shield",
     "default": false,
     "engine": false
    },
    {
     "id": "ammo_in_mag_reserve",
     "label": "ammo in mag / reserve",
     "default": false,
     "engine": false
    },
    {
     "id": "weapon_name",
     "label": "weapon name",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Right side, in a single horizontal row directly under the minimap. Stat row box: x 1625-1925, y 292-324 at 1920x1080 — four fields left to right: storm timer, players alive, YOUR eliminations, team eliminations. Minimap sits above it at x 1630-1910, y 30-290.",
   "tracks": "storm/phase timer, players remaining, YOUR eliminations, team eliminations, health, shield, ammo in mag / reserve, weapon name, killfeed lines with both player names and the weapon used",
   "climbing": "YES — personal elimination counter, 3rd field in the HUD row (x approx 1806-1860, y 292-324). Measured 31 -> 35 over 60 seconds, never decreased. Players-alive (2nd field) is a clean monotonic DECREASE, useful as a second confirm. Storm timer resets per phase, so it is not monotonic.",
   "verdict": "Max Clipz can read Fortnite today with almost no new work. The personal elimination counter is on screen at all times during a match in a fixed-position row, and it ticks up exactly the way 2K points do — it is a drop-in replacement for the PTS field. One negate+upscale pass and --psm 6 returned all four numbers in the correct order on 7 of 7 frames, including on bright sky and dark interiors. The only build work is a regex that pulls the 3rd number out of the row and a per-match reset detector, because a long vide",
   "evidence": [
    "BEST FRAME t=600s — crop=300:32:1625:292, 4x lanczos, gray, negate, contrast 1.8, tesseract --psm 6:",
    "  ™1:10 228 621 § 21",
    "(ground truth verified against the frame image: storm timer 1:10 | 28 alive | 21 MY elims | 21 team elims. The garbage chars are the four HUD icons; the four numbers come out in fixed order every time.)",
    "SAME CROP, all 7 spread frames:",
    "  t=300  -> 61:10 $51 O12 2 12",
    "  t=600  -> ™1:10 228 621 § 21",
    "  t=900  -> © 0:00 $12.0 29 % 295",
    "  t=1200 -> ==/0:10' 32 038 £ 38",
    "  t=1500 -> f m0:10/2 74104 34",
    "  t=1800 -> © 0:04 £40 Oi9 Z19",
    "  t=2100 -> ® 0:29 £14. 0631 331",
    "MONOTONIC PROOF — 5 frames 15s apart in one match:",
    "  t=2100 -> ® 0:29 £14. 0631 331      (elims 31, 14 alive)",
    "  t=211"
   ],
   "evidenceChars": 685,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "FORTNITE",
   "truncated": [
    "tracks",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_statline.py proved on real footage (full sample): VOD lyCRqnLXE_M 360-660: 11/11 eliminations by eye, every clip shows his '+300 XP · ELIMINATED <name>' callout. Live statline job T8mROI5SMtpGA1PAW5Vl on max-clipz-901 (fortnite): 33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "statline",
    "runner": "engine/run_statline.py",
    "sample": "full",
    "proof": "VOD lyCRqnLXE_M 360-660: 11/11 eliminations by eye, every clip shows his '+300 XP · ELIMINATED <name>' callout",
    "proofClip": "~/Movies/MAXCLIPZ_STATLINE_PROOF_2026-09-24/proof/fortnite/fortnite__lyCRqnLXE_M__360-660__best.mp4",
    "liveJob": {
     "jobId": "T8mROI5SMtpGA1PAW5Vl",
     "game": "fortnite",
     "at": "2026-09-25T13:02:58.149Z",
     "measured": "33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends"
    }
   }
  },
  {
   "id": "league_of_legends",
   "name": "League of Legends",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every kills + assists tick of yours",
     "default": true,
     "engine": true
    },
    {
     "id": "personal_kills_deaths_assists",
     "label": "Personal kills/deaths/assists (K/D/A)",
     "default": false,
     "engine": true
    },
    {
     "id": "personal_creep_score",
     "label": "personal creep score (CS)",
     "default": false,
     "engine": false
    },
    {
     "id": "game_timer",
     "label": "game timer",
     "default": false,
     "engine": false
    },
    {
     "id": "champion_level",
     "label": "champion level",
     "default": false,
     "engine": false
    },
    {
     "id": "gold",
     "label": "gold",
     "default": false,
     "engine": false
    },
    {
     "id": "plus_a_text_killfeed_naming_who_killed_w",
     "label": "plus a text killfeed naming who killed whom and shutdown/bounty events",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Top-right corner, one thin strip. Personal KDA at x=1663-1733, y=0-26. CS (creep score) immediately right at x≈1784. Game timer at x≈1862. Full usable strip at 1920x1080 is approximately (1620,0)-(1920,34). Killfeed runs along the bottom-left from x≈56, y≈632.",
   "tracks": "Personal kills/deaths/assists (K/D/A), personal creep score (CS), game timer, champion level, gold, plus a text killfeed naming who killed whom and shutdown/bounty events.",
   "climbing": "YES — personal kills. Measured 0→1→2→2→5→6→8 across the sample and it never decreases; LoL has no stat reset, so K, D, A and CS all climb for the whole match. Kills is the direct analogue of 2K points. The game timer is a second monotonic channel for syncing.",
   "verdict": "Max Clipz can read this game today. It is the closest match to NBA 2K of the four tested: a personal stat line that ticks, in a fixed screen position, in a clean sans-serif font, 7 of 7 frames correct. Cutting on the kills digit incrementing would work the same way points do in 2K. Two calibration notes that matter: the crop must start right of the sword icon at x=1663 (including the icon made OCR read 5/3/1 as '25/3/1'), and upscale 4x — at 8x the '5' degraded to a '3'.",
   "evidence": [
    "Best frame (t=2200s), top-right HUD band, unrestricted psm7:",
    "  # 8/4/5 4297 © 36:44",
    "Personal KDA across all 7 frames (crop=70:26:1663:0, scale 4x, pad 30px, psm7):",
    "  t=400s  KDA=[0/0/0]",
    "  t=700s  KDA=[1/0/0]",
    "  t=1000s KDA=[2/0/0]",
    "  t=1300s KDA=[2/2/1]",
    "  t=1600s KDA=[5/3/1]",
    "  t=1900s KDA=[6/3/4]",
    "  t=2200s KDA=[8/4/5]",
    "7 of 7 frames read, 0 errors. 1600s hand-verified against the pixels (image shows 5/3/1).",
    "Full-frame psm11 at t=1000 also returned: '6vs10', '2/0/0', '4 123', '© 16:44', 'FPS: 103', '63ms', 'Enemy turret destroyed!', 'EL MEZ (Vel'Koz) has shut down AntekMar (Trundle)! (Bonus Bounty: 150G)' — the killfeed and event banner are readable too."
   ],
   "evidenceChars": 647,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [],
   "measured": "WIRED 2026-09-25 — engine/run_statline.py proved on real footage (full sample): VOD zV0Gkmlq9D8 800-1100 (ARAM): every KDA tick by eye matched, 0 extra; the clips carry his own 'killing spree' / 'rampage' calls. Live statline job T8mROI5SMtpGA1PAW5Vl on max-clipz-901 (fortnite): 33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "statline",
    "runner": "engine/run_statline.py",
    "sample": "full",
    "proof": "VOD zV0Gkmlq9D8 800-1100 (ARAM): every KDA tick by eye matched, 0 extra; the clips carry his own 'killing spree' / 'rampage' calls",
    "proofClip": "~/Movies/MAXCLIPZ_STATLINE_PROOF_2026-09-24/proof/lol/league_of_legends__zV0Gkmlq9D8__800-1100__best.mp4",
    "liveJob": {
     "jobId": "T8mROI5SMtpGA1PAW5Vl",
     "game": "fortnite",
     "at": "2026-09-25T13:02:58.149Z",
     "measured": "33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends"
    }
   }
  },
  {
   "id": "mlb_the_show_25",
   "name": "MLB The Show 25 (Road to the Show)",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — your home runs and perfect-contact hits, heaviest first",
     "default": true,
     "engine": true
    },
    {
     "id": "hr",
     "label": "Home Runs — your homers, each from the swing",
     "default": false,
     "engine": true
    },
    {
     "id": "perfect",
     "label": "Perfect Hits — your hits off a Perfect Contact swing",
     "default": false,
     "engine": true
    },
    {
     "id": "hits",
     "label": "Hits — your singles, doubles, triples and homers, each from the swing (coming, proof in progress)",
     "default": false,
     "engine": false
    },
    {
     "id": "rbi",
     "label": "RBIs — every run you drove in, from the swing (coming, proof in progress)",
     "default": false,
     "engine": false
    },
    {
     "id": "fielding",
     "label": "Fielding — the outs your throw got (IF / OF assist) (coming, proof in progress)",
     "default": false,
     "engine": false
    },
    {
     "id": "jumbotron_the_batter_s_full_personal_sea",
     "label": "Jumbotron: the batter's full personal season line -- AVG",
     "default": false,
     "engine": false
    },
    {
     "id": "runs",
     "label": "RUNS",
     "default": false,
     "engine": false
    },
    {
     "id": "bb",
     "label": "BB",
     "default": false,
     "engine": false
    },
    {
     "id": "obp",
     "label": "OBP",
     "default": false,
     "engine": false
    },
    {
     "id": "slg",
     "label": "SLG",
     "default": false,
     "engine": false
    },
    {
     "id": "ops",
     "label": "OPS",
     "default": false,
     "engine": false
    },
    {
     "id": "name_and_position",
     "label": "name and position",
     "default": false,
     "engine": false
    },
    {
     "id": "fixed_scorebug_batting_order_slot",
     "label": "Fixed scorebug: batting-order slot",
     "default": false,
     "engine": false
    },
    {
     "id": "batter_name",
     "label": "batter name",
     "default": false,
     "engine": false
    },
    {
     "id": "season_avg",
     "label": "season AVG",
     "default": false,
     "engine": false
    },
    {
     "id": "pitcher_name_and_pitch_count",
     "label": "pitcher name and pitch count",
     "default": false,
     "engine": false
    },
    {
     "id": "inning",
     "label": "inning",
     "default": false,
     "engine": false
    },
    {
     "id": "outs",
     "label": "outs",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "THREE readable zones. (1) FIXED scorebug BOTTOM-RIGHT, approx x=1420..1880, y=820..1010 (460x190): batter line, pitcher line, then the WSH 0 / BOT 1 / NYM 0 block with the bases diamond and the ball-strike count. This is the one that never moves. (2) Personal",
   "tracks": "Jumbotron: the batter's full personal season line -- AVG, HR, RBI, RUNS, BB, OBP, SLG, OPS -- with his number, name and position. Fixed scorebug: batting-order slot, batter name, season AVG, pitcher name and pitch count, inning, outs, count",
   "climbing": "YES, several, and they are the strongest of the four games. On the jumbotron across three samples of one game: AVG .424 -> .425 -> .426, HR 39 -> 39 -> 40, RBI 90 -> 90 -> 91. On the fixed scorebug, the parenthesised event counter only climbs: 'STOLEN BASE (16)', 'AUTOMATIC DOUBLE (11)'. Team runs a",
   "verdict": "This is the closest thing to a second NBA 2K that I tested -- yes, Max Clipz can read it. The jumbotron gives a labeled personal stat line in exactly the 2K shape (a row of stat words, a row of digits under it) and it OCR'd essentially clean on the first try with no preprocessing beyond a 3x upscale. The catch is that the jumbotron is IN-WORLD, so its pixel box changes with the stadium and swings with the camera -- do NOT hardcode (970,128); that is the same mistake as the 23px-off HUD strip. Use the self-locating",
   "evidence": [
    "=== JUMBOTRON player stat line, crop=345x265+970+128, x3 lanczos, psm6 ===",
    "t=800 (best frame, near-perfect read):",
    "  22   JUAN SOTO   RF",
    "  We}  HR   RBI  RUNS",
    "  425  39   90   76",
    "  BB   OBP  SLG  OPS",
    "  19   A61  905  1.366",
    "  BATS: Left     HT: 6'2\"",
    "  THROWS: Left   WT: 224 Ibs",
    "  1st in the NL with 117 Hits",
    "t=500:",
    "  AVG HR RBI RUNS",
    "  424 39 90 rhs)",
    "  BB OBP 4 > OPS",
    "  19 4go% ~ -s\\ 1371",
    "t=1200:",
    "  22 JUAN SOTO £",
    "  426  40  91",
    "  BB OBP SLOT J",
    "=== FIXED bottom-right scorebug, crop=460x190+1420+820, x3, psm6 ===",
    "t=500:",
    "  |3 suanSOTO 424 |",
    "  |P MACKENZIE GORE P:34 |",
    "  |6 BOT3 1 |",
    "t=600:",
    "  JUAN SOTO",
    "  STOLEN BASE (16)",
    "  9 BOT 7 3",
    "  WSH 4-7 NYM |",
    "t=200:",
    "  STONE GARRETT ,",
    "  AUTOMATIC DOUBLE (11)",
    "  W"
   ],
   "evidenceChars": 665,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "WIRED 2026-10-23 — engine/run_statline.py proved on real footage (Road to the Show XP feed, 6 uploaders sample): H23 2026-10-23: Home Runs 14 of 14 right and Perfect Hits 10 of 10 right, 6 uploaders each, every moment by eye. LIVE = PROVEN ONLY (statline_profiles.json proven_only: best = home runs + perfect hits); hits, RBIs and fielding are not proven yet. Live statline job T8mROI5SMtpGA1PAW5Vl on max-clipz-901 (fortnite): 33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "statline",
    "runner": "engine/run_statline.py",
    "sample": "Road to the Show XP feed, 6 uploaders",
    "proof": "H23 2026-10-23: Home Runs 14 of 14 right and Perfect Hits 10 of 10 right, 6 uploaders each, every moment by eye. LIVE = PROVEN ONLY (statline_profiles.json proven_only: best = home runs + perfect hits); hits, RBIs and fielding are not proven yet",
    "proofClip": "~/OG_WORK/maxclipz_proof_2026-10-23/h23_mlb_hr/ (sheets) + ~/OG_WORK/helpers_2026-10-23/H23_MLB_HR_FIX.md",
    "liveJob": {
     "jobId": "T8mROI5SMtpGA1PAW5Vl",
     "game": "fortnite",
     "at": "2026-09-25T13:02:58.149Z",
     "measured": "33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends"
    }
   }
  },
  {
   "id": "madden_nfl_26",
   "name": "Madden NFL 26",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every rush_yds + tds tick of yours",
     "default": true,
     "engine": true
    },
    {
     "id": "rush_yds",
     "label": "RUSH YDS",
     "default": false,
     "engine": true
    },
    {
     "id": "rush_att",
     "label": "RUSH ATT",
     "default": false,
     "engine": true
    },
    {
     "id": "tds",
     "label": "TDS",
     "default": false,
     "engine": true
    },
    {
     "id": "superstar_card_player_name",
     "label": "Superstar card: player name",
     "default": false,
     "engine": false
    },
    {
     "id": "a_live_letter_grade",
     "label": "a live letter grade (A-/A+)",
     "default": false,
     "engine": false
    },
    {
     "id": "broadcast_scorebug_both_team_scores",
     "label": "Broadcast scorebug: both team scores",
     "default": false,
     "engine": false
    },
    {
     "id": "quarter",
     "label": "quarter",
     "default": false,
     "engine": false
    },
    {
     "id": "game_clock",
     "label": "game clock",
     "default": false,
     "engine": false
    },
    {
     "id": "play_clock",
     "label": "play clock",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "TWO different HUDs. (1) Superstar/player-lock personal card: TOP-RIGHT, box approx x=1425..1885, y=122..222 at 1920x1080 (460x100). Name on the top line, three labeled stat columns under it, letter grade in the circle at the right edge. (2) Broadcast scorebug:",
   "tracks": "Superstar card: player name, RUSH ATT, RUSH YDS, TDS, and a live letter grade (A-/A+). The stat labels swap by position (a QB card shows PASS YDS / TDS / INT). Broadcast scorebug: both team scores, quarter, game clock, play clock, down & di",
   "climbing": "YES -- RUSH YDS and RUSH ATT on the Superstar card. Measured across 4 frames of one game: ATT 13 -> 25 -> 31 -> 33 and YDS 163 -> 248 -> 272 -> 281. Never decreases. TDS 2 -> 4 is a rarer, higher-value tick. In broadcast mode the only monotonic number is the team score.",
   "verdict": "Max Clipz can read Madden 26, but ONLY if Terrell plays Superstar or Player Lock -- that is the mode that puts a personal stat line on screen, and it is the same shape as the 2K HUD the engine already reads (labels on one row, digits on the row beneath). Work needed: add a `madden26` profile with the HUD strip at (1425,122,460,100) instead of the 2K coordinates, add RUSH ATT / RUSH YDS / TDS / PASS YDS / REC YDS to the stat-word vocabulary so the calibrator stops refusing with 'no stat words found', and teach the r",
   "evidence": [
    "=== SUPERSTAR MODE, player card crop=460x100+1425+122, x4 lanczos, psm6 ===",
    "t=550:",
    "  A.KING an",
    "  RUSH ATT  RUSH YDS  TDS   A-",
    "  13        163       2",
    "t=930:",
    "  | A.KING ~ Y",
    "  RUSH ATT  RUSH YDS  TDS   A+",
    "  25        248       4",
    "t=1060:",
    "  A.KING",
    "  RUSH ATT  RUSH YDS  TDS   A+",
    "  31        2/72      al",
    "t=1100:",
    "  A.KING",
    "  RUSH ATT  RUSH YDS  TDS   A+ |",
    "  33        281       4.",
    "(t=400/700/850/1000/620/760 returned junk -- the card is hidden during replays and the play-call screen, same as 2K.)",
    "=== BROADCAST CAMERA, scorebug crop=750x120+590+952, x4 lanczos, psm11 ===",
    "t=1000:",
    "  SR > ne 0 TNE} 14 our",
    "  ws*g10 02 QO:35 :36",
    "  ¥38",
    "t=400:",
    "  NE ... BUF <",
    "  20¢11 ist 1:27",
    "  35",
    "t=1600:",
    "  SE | TNE} 14 aur"
   ],
   "evidenceChars": 670,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "MADDEN",
   "truncated": [
    "where",
    "tracks",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_statline.py proved on real footage (HB card only sample): VOD q1atQPZsp-8 100-400 (Superstar HB): 7 carries, rush yards and both TDs by eye, 13/13 events; QB / WR / defense cards never seen (PLACEHOLDER). Live statline job T8mROI5SMtpGA1PAW5Vl on max-clipz-901 (fortnite): 33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "statline",
    "runner": "engine/run_statline.py",
    "sample": "HB card only",
    "proof": "VOD q1atQPZsp-8 100-400 (Superstar HB): 7 carries, rush yards and both TDs by eye, 13/13 events; QB / WR / defense cards never seen (PLACEHOLDER)",
    "proofClip": "~/Movies/MAXCLIPZ_STATLINE_PROOF_2026-09-24/proof/madden/madden_nfl_26__q1atQPZsp-8__100-400__tds.mp4",
    "liveJob": {
     "jobId": "T8mROI5SMtpGA1PAW5Vl",
     "game": "fortnite",
     "at": "2026-09-25T13:02:58.149Z",
     "measured": "33,203,779 B · 21.61 s · 1 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9878) · queued→done 302.4 s · eye check on frames at both cuts: his elimination counter 20→21 and 21→22 with '+300 XP ELIMINATION' on screen; the third tick (22→23) was refused as unverified — it lands 3 s before the segment ends"
    }
   }
  },
  {
   "id": "mortal_kombat_1",
   "name": "Mortal Kombat 1 (2023)",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every play, heaviest first",
     "default": true,
     "engine": true
    },
    {
     "id": "combos",
     "label": "Combos — every combo (DAMAGE), chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "kos",
     "label": "Kos — every KO / COMEBACK / PERFECT, chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "flawless",
     "label": "Flawless — every FLAWLESS VICTORY (his bar untouched all round and then the KO), chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "per_fighter_health_remaining_as_a_decima",
     "label": "Per-fighter health remaining as a decimal over max (495.83 / 1000)",
     "default": false,
     "engine": false
    },
    {
     "id": "both_gamertags",
     "label": "both gamertags",
     "default": false,
     "engine": false
    },
    {
     "id": "character_name_kameo_name_per_side",
     "label": "character name + Kameo name per side",
     "default": false,
     "engine": false
    },
    {
     "id": "round_timer",
     "label": "round timer",
     "default": false,
     "engine": false
    },
    {
     "id": "round_record_w_l_s",
     "label": "round record W:/L:/S:",
     "default": false,
     "engine": false
    },
    {
     "id": "combo_hit_count_and_combo_damage",
     "label": "combo hit count and combo damage",
     "default": false,
     "engine": false
    },
    {
     "id": "fatal_blow_availability_banner",
     "label": "Fatal Blow availability banner",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Health NUMBERS sit at the inboard ends of the two health bars, top-center: left fighter approx (665,95)-(895,135), right fighter approx (1055,95)-(1285,135) at 1920x1080. Gamertags top corners: left (25,68)-(385,104), right (1535,68)-(1895,104). Character + Ka",
   "tracks": "Per-fighter health remaining as a decimal over max (495.83 / 1000), both gamertags, character name + Kameo name per side, round timer, round record W:/L:/S:, combo hit count and combo damage, Fatal Blow availability banner.",
   "climbing": "YES -- per-fighter health. Within a round it only ever decreases, never increases. The OPPONENT's health number falling is a direct measure of damage HE just dealt, and the size of the drop is the size of the play (a 7-point poke vs a 300-point combo). This is the closest analogue to 2K points going",
   "verdict": "Max Clipz can read this game today. Health is printed as an actual decimal number, not just a bar, and tesseract returned it exactly right on two independent uploads with different players and stages -- 495.83/1000, 347.40/1000, 448.85/950, 730.50/1000. The gamertag reads cleanly, which solves 'which side is his'. The cut trigger is not a number going UP, it's the opponent's health number going DOWN, so the engine's compare logic has to be inverted for this game and the plateau/two-read confirmation should key on a",
   "evidence": [
    "SOURCE 1 (ct98MtEbbMY, t=320) -- HEALTH NUMBER, right fighter:",
    "  [mk_hpR/D/psm6] 495.83°/ 1000",
    "  [mk_hpR/A/psm11] 495.837 1000",
    "  [mk_hpR/D/psm7] \"495.834 1000 a",
    "  (ground truth on screen: 495.83 / 1000 -- EXACT)",
    "GAMERTAG, left:",
    "  [mk_tagL/A/psm7] YoungKensei ; ran",
    "  [mk_tagL/A/psm6] YoungKensei ; ran",
    "  [mk_tagL/A/psm11] YoungKensei ; ran",
    "  [mk_tagL/C/psm7] YoungKensei ; ran",
    "  (clean on 12 of 20 preprocessing variants)",
    "CHARACTER + KAMEO NAMES:",
    "  [mk_charL/raw/psm11] JOHNNY CAGE KANO",
    "  [mk_charR/raw/psm6] MILEENA 77 je KUNG LAO wer Tay) - -",
    "  [mk_charR/A/psm11] MILEENA » ) KUNG LAO ew.\" Ry",
    "ROUND TIMER:",
    "  [mk_timer/raw/psm8] 44          (ground truth: 44 -- EXACT)",
    "ROUND RECORD:",
    "  [mk_wlsR/r"
   ],
   "evidenceChars": 678,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "climbing",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_healthbar.py proved on real footage (full sample): tag 'comataurus', VOD ct98MtEbbMY 240-600: 15/15 of her plays by hand (4 KOs, 11 combos), 0 clips without a play of hers. Live healthbar job 2ABjv2mZ8xlhPFh0UU6Y on max-clipz-901 (tekken_8): 45,758,542 B · 29.56 s · 3 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.8507) · queued→done 487.1 s · eye check on the HUD bars at every clip: clip 1 ends on K.O. at 16 s with KAZUYA's bar (right) emptied while his (xhk Asad, LEFT, Claudio) sits near 21% — his comeback KO; clip 2 ends on K.O. at 21.5 s with KING's bar emptied, his low — his second comeback KO; clip 3 shows KAZUYA's bar fall ~96%→~59% under his combo (his '2 Hit Combo 23 Damage' counter on the left). No clip ends on his loss. Matches the lane's hand count for tape 20-95 s: KOs at 37 and 86, combo at 60 — 3 plays, 3 clips. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "healthbar",
    "runner": "engine/run_healthbar.py",
    "sample": "full",
    "proof": "tag 'comataurus', VOD ct98MtEbbMY 240-600: 15/15 of her plays by hand (4 KOs, 11 combos), 0 clips without a play of hers",
    "proofClip": "~/Movies/MAXCLIPZ_HEALTHBAR_PROOF_2026-09-25/v3_mortal_kombat_1/ct98MtEbbMY_240-600__kos.mp4",
    "liveJob": {
     "jobId": "2ABjv2mZ8xlhPFh0UU6Y",
     "game": "tekken_8",
     "at": "2026-09-25T13:06:35.384Z",
     "measured": "45,758,542 B · 29.56 s · 3 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.8507) · queued→done 487.1 s · eye check on the HUD bars at every clip: clip 1 ends on K.O. at 16 s with KAZUYA's bar (right) emptied while his (xhk Asad, LEFT, Claudio) sits near 21% — his comeback KO; clip 2 ends on K.O. at 21.5 s with KING's bar emptied, his low — his second comeback KO; clip 3 shows KAZUYA's bar fall ~96%→~59% under his combo (his '2 Hit Combo 23 Damage' counter on the left). No clip ends on his loss. Matches the lane's hand count for tape 20-95 s: KOs at 37 and 86, combo at 60 — 3 plays, 3 clips"
    }
   }
  },
  {
   "id": "tekken_8",
   "name": "Tekken 8",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every play, heaviest first",
     "default": true,
     "engine": true
    },
    {
     "id": "combos",
     "label": "Combos — every combo (DAMAGE), chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "kos",
     "label": "Kos — every KO / COMEBACK / PERFECT, chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "perfects",
     "label": "Perfects — every PERFECT KO (his bar untouched all round), chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "tekken_prowess",
     "label": "Tekken Prowess (a running numeric score per player, six figures)",
     "default": false,
     "engine": false
    },
    {
     "id": "match_wins_count",
     "label": "match WINS count",
     "default": false,
     "engine": false
    },
    {
     "id": "both_gamertags",
     "label": "both gamertags",
     "default": false,
     "engine": false
    },
    {
     "id": "both_character_names",
     "label": "both character names",
     "default": false,
     "engine": false
    },
    {
     "id": "rank_tier_badge",
     "label": "rank tier badge",
     "default": false,
     "engine": false
    },
    {
     "id": "round_timer",
     "label": "round timer",
     "default": false,
     "engine": false
    },
    {
     "id": "round_win_dots_above_each_health_bar",
     "label": "round-win dots above each health bar",
     "default": false,
     "engine": false
    },
    {
     "id": "combo_bonus_event_text",
     "label": "combo/bonus event text (Destruction, Rage Art)",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "TEKKEN PROWESS score sits just above each health bar: left (180,46)-(450,74), right (1490,46)-(1760,74) at 1920x1080. Character name below it: left (35,78)-(255,114), right (1720,78)-(1920,114). Gamertag below that: left (90,116)-(300,146), right (1720,116)-(1",
   "tracks": "Tekken Prowess (a running numeric score per player, six figures), match WINS count, both gamertags, both character names, rank tier badge, round timer, round-win dots above each health bar, combo/bonus event text (Destruction, Rage Art), an",
   "climbing": "YES, two of them. WINS N is a per-player counter that only climbs inside a session -- it read 'WINS 2' and 'WINS 4' with zero ambiguity across every preprocessing variant. And TEKKEN PROWESS is a six-figure personal score that moves after every match: 245,353 -> 243,568 -> 242,650 -> 251,03x across",
   "verdict": "This is the best of the four and the only one that is arguably easier than GTA. Tekken 8 prints a personal six-figure score (TEKKEN PROWESS) and a personal WINS counter, both per player, both read by tesseract on 8 of 8 frames, and 'WINS 2' came back identical on all 20 preprocessing variants -- that is cleaner than most of the 2K numbers. Better still, the engine gets 'which side is his' for free: YASEEN read on the right in 8 of 8 frames while the left-side tag rotated through seven different opponents. So the se",
   "evidence": [
    "TEKKEN PROWESS -- a running personal score printed for BOTH players, read on 8 of 8 frames:",
    "  t=800  [tk_prowL/raw/psm7] ATEKKEN|PROWESS S/242}650      (ground truth: TEKKEN PROWESS 242,650)",
    "  t=800  [tk_prowL/B/psm7] SNTEKKENJBROWESS 22422650 _",
    "  t=800  [tk_prowR/raw/psm7] _ TEKKENIPROWESS #924 T4247   (ground truth: 241,424)",
    "  t=200  [tkb_prowL/raw/psm11] ATEKKENIEROWESS S/245'353 el A ts",
    "  t=400  [tkb_prowL/raw/psm7] NTERKEN|FROWESS 5y243}568",
    "  t=600  [tkb_prowL/raw/psm7] ATEKKENRROWESS S243)568 im",
    "  t=1000 [tkb_prowL/raw/psm7] NTEKKEN'PROWESS S91 4251 0S",
    "  t=1200 [tkb_prowL/raw/psm7] ATEKKEN|PROWESS S01 4251 0379",
    "  t=1400 [tkb_prowL/raw/psm7] NTERKEN PROWESS 142) 67",
    "  t=1600 [tkb_prowL/r"
   ],
   "evidenceChars": 690,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_healthbar.py proved on real footage (full sample): tag 'xhk Asad', VOD SvDdeb3hz0o 300-660: 14/14 of his plays by hand (5 KOs, 9 combos), 0 clips without a play of his. Live healthbar job 2ABjv2mZ8xlhPFh0UU6Y on max-clipz-901 (tekken_8): 45,758,542 B · 29.56 s · 3 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.8507) · queued→done 487.1 s · eye check on the HUD bars at every clip: clip 1 ends on K.O. at 16 s with KAZUYA's bar (right) emptied while his (xhk Asad, LEFT, Claudio) sits near 21% — his comeback KO; clip 2 ends on K.O. at 21.5 s with KING's bar emptied, his low — his second comeback KO; clip 3 shows KAZUYA's bar fall ~96%→~59% under his combo (his '2 Hit Combo 23 Damage' counter on the left). No clip ends on his loss. Matches the lane's hand count for tape 20-95 s: KOs at 37 and 86, combo at 60 — 3 plays, 3 clips. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "healthbar",
    "runner": "engine/run_healthbar.py",
    "sample": "full",
    "proof": "tag 'xhk Asad', VOD SvDdeb3hz0o 300-660: 14/14 of his plays by hand (5 KOs, 9 combos), 0 clips without a play of his",
    "proofClip": "~/Movies/MAXCLIPZ_HEALTHBAR_PROOF_2026-09-25/v3_tekken_8/PROOF_tekken_8_kos_first3clips.mp4",
    "liveJob": {
     "jobId": "2ABjv2mZ8xlhPFh0UU6Y",
     "game": "tekken_8",
     "at": "2026-09-25T13:06:35.384Z",
     "measured": "45,758,542 B · 29.56 s · 3 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.8507) · queued→done 487.1 s · eye check on the HUD bars at every clip: clip 1 ends on K.O. at 16 s with KAZUYA's bar (right) emptied while his (xhk Asad, LEFT, Claudio) sits near 21% — his comeback KO; clip 2 ends on K.O. at 21.5 s with KING's bar emptied, his low — his second comeback KO; clip 3 shows KAZUYA's bar fall ~96%→~59% under his combo (his '2 Hit Combo 23 Damage' counter on the left). No clip ends on his loss. Matches the lane's hand count for tape 20-95 s: KOs at 37 and 86, combo at 60 — 3 plays, 3 clips"
    }
   }
  },
  {
   "id": "rocket_league",
   "name": "Rocket League",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every GOAL / SAVE / ASSIST / DEMO / MATCH_WIN of yours",
     "default": true,
     "engine": true
    },
    {
     "id": "goals",
     "label": "Goals — every GOAL of yours",
     "default": false,
     "engine": true
    },
    {
     "id": "saves",
     "label": "Saves — every SAVE of yours",
     "default": false,
     "engine": true
    },
    {
     "id": "assists",
     "label": "Assists — every ASSIST of yours",
     "default": false,
     "engine": true
    },
    {
     "id": "demos",
     "label": "Demos — every DEMO of yours",
     "default": false,
     "engine": true
    },
    {
     "id": "wins",
     "label": "Wins — every MATCH_WIN of yours",
     "default": false,
     "engine": true
    },
    {
     "id": "two_team_goal_totals",
     "label": "Two team goal totals",
     "default": false,
     "engine": false
    },
    {
     "id": "the_match_clock",
     "label": "the match clock",
     "default": false,
     "engine": false
    },
    {
     "id": "a_transient_center_screen_point_award_on",
     "label": "a transient center-screen point award on every scoring action (GOAL +100, SAVE +50, ASSIST +50, SHOT +10, CLEAR +20, DEMOLITION +20)",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Top-center score bar, approx x=770..1160, y=0..80 -- blue score box on the left (x~782..872), match clock in the middle (x~900..1050), orange score box on the right (x~1048..1138). Boost gauge is a circular dial BOTTOM-RIGHT at approx x=1620..1860, y=780..1010",
   "tracks": "Two team goal totals, the match clock, and a transient center-screen point award on every scoring action (GOAL +100, SAVE +50, ASSIST +50, SHOT +10, CLEAR +20, DEMOLITION +20). Your own cumulative score only exists on the hold-Tab scoreboar",
   "climbing": "In principle yes -- the team goal total only climbs, and the +N point toasts are personal awards -- but I could not READ either one reliably. 1 correct score digit out of 10 attempts, 1 correct clock out of 5. The '+100' under GOAL came back as bare '100' on only one of three preprocessing passes.",
   "verdict": "Do NOT ship Rocket League on tesseract. The numbers are on screen and a human reads them instantly, but Rocket League uses a custom angular/mirrored digit face -- its '4' and '2' do not look like any font tesseract was trained on -- and it failed 9 of 10 score reads and returned a FALSE '14' where a single digit was on screen, which is worse than returning nothing. The word labels do survive: 'GOAL' came back on all three preprocessing passes, so an event-word detector is viable today. The real fix is the one the e",
   "evidence": [
    "=== top-center score+clock, crop=390x80+770+0, x4/x5 lanczos, psm6 ===",
    "t=300:  = 1:00 r=}",
    "t=600:  (empty)",
    "t=900:  ae -",
    "t=1200: (empty)",
    "t=1500: (empty)",
    "t=1800: | e:H> io",
    "t=2100: oD 77 @",
    "t=450:  Be =~ @",
    "t=1050: OW) =o",
    "t=1650: ) =co a",
    "t=2400: (empty)",
    "=== single score digit isolated, x8, gray, contrast=2.0, psm10, whitelist 0123456789 ===",
    "t=300  BLUE-> (empty)   ORNG-> (empty)",
    "t=900  BLUE-> (empty)   ORNG-> 14      <-- FALSE, it is one digit on screen",
    "t=1200 BLUE-> 4         ORNG-> (empty) <-- the 4 is correct, the 2 was missed",
    "t=1800 BLUE-> (empty)   ORNG-> (empty)",
    "t=2100 BLUE-> (empty)   ORNG-> (empty)",
    "=== clock isolated, crop=150x60+900+8, x6, psm7 ===",
    "t=300 -> tJ      t=900 -> cle     t=12"
   ],
   "evidenceChars": 679,
   "plan": {
    "verdict": "SOLVABLE VIA MODEL",
    "how": "lightweight CNN on CoreML/ANE",
    "failure": "unreadable custom font",
    "kind": "model",
    "source": "BUILD_SPEC_game_expansion_2026-09-23.md"
   },
   "voiceTrigger": false,
   "trackGame": "ROCKET_LEAGUE",
   "truncated": [
    "where",
    "tracks",
    "verdict"
   ],
   "measured": "WIRED 2026-09-26 — engine/run_banner.py proved on real footage (full sample): run_banner.py (banner_reader.py) on DevFactor's 1v1 VOD dvW9KSC3du0 0:54-1:48: 'DEVFACTOR SCORED!' + GOAL +100 popping for the camera player = his goal (the 6.65 s goal clip: run-up, ball in, 0→1, the banner — frames by eye); SAVE +50 / SAVIOR +25 are the camera player's own; a teammate's SCORED is read but never his clip. Calib 6 RL tapes: 26/26 banner events at ±0.5 s, 0 false; holdout 4 tapes P 0.64 R 0.64 (an own goal inside a whole-screen explosion read 2.1 s late; a phone-filmed Switch 0/1). Live banner job iENl4KxR2XvEYYBCalB4 on max-clipz-901 (rocket_league): 20,457,068 B · 13.18 s · 2 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9919) · queued→done 89.0 s · banner DEVFACTOR SCORED! 4.5-8.5 s inside clip 0 (tape 0.0→6.625) · eye check on 2 frames of the goal clip: tape 5.0 s (montage 5.02) 'DEVFACTOR SCORED!' with SHOT ON GOAL +10 and the board 1-0; tape 6.45 s (the clip's last half-second) SCORED! still up; the saves clip = SAVE +50 + SAVIOR at 41.38 s; a probe at tape 7.0 s was past the clip's +2 s close (probe placement, not a miss). Not T's own footage yet — check the first real tape by eye.",
   "bucket_2026_09_20": "orange",
   "banner": {
    "calib": "26/26 events on 6 tapes at ±0.5 s, 0 extra",
    "holdout": {
     "tapes": 4,
     "expected": 11,
     "matched": 7,
     "precision": 0.64,
     "recall": 0.64
    },
    "words": "<NAME> SCORED! · GOAL +100 · SAVE · EPIC SAVE · SAVIOR · ASSIST · DEMOLITION · WIN +1000",
    "source": "OG_WORK/banner_reader_2026-09-26 (FIXES_2026-09-26.md, verify/score_final.txt, INTEGRATION.md §3) — wired into engine/ 2026-09-26, engine/INTEGRATION_2026-09-26.md",
    "kind": "banner",
    "proved": "2026-09-26"
   },
   "wired": {
    "kind": "banner",
    "runner": "engine/run_banner.py",
    "sample": "full",
    "proof": "run_banner.py (banner_reader.py) on DevFactor's 1v1 VOD dvW9KSC3du0 0:54-1:48: 'DEVFACTOR SCORED!' + GOAL +100 popping for the camera player = his goal (the 6.65 s goal clip: run-up, ball in, 0→1, the banner — frames by eye); SAVE +50 / SAVIOR +25 are the camera player's own; a teammate's SCORED is read but never his clip. Calib 6 RL tapes: 26/26 banner events at ±0.5 s, 0 false; holdout 4 tapes P 0.64 R 0.64 (an own goal inside a whole-screen explosion read 2.1 s late; a phone-filmed Switch 0/1)",
    "proofClip": "~/OG_WORK/banner_reader_2026-09-26/proposed/proof/rocket_league/DevFactor_dvW9KSC3du0_0054__goals.mp4",
    "liveJob": {
     "jobId": "iENl4KxR2XvEYYBCalB4",
     "game": "rocket_league",
     "at": "2026-09-27 04:45:52.723000+00:00",
     "measured": "20,457,068 B · 13.18 s · 2 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9919) · queued→done 89.0 s · banner DEVFACTOR SCORED! 4.5-8.5 s inside clip 0 (tape 0.0→6.625) · eye check on 2 frames of the goal clip: tape 5.0 s (montage 5.02) 'DEVFACTOR SCORED!' with SHOT ON GOAL +10 and the board 1-0; tape 6.45 s (the clip's last half-second) SCORED! still up; the saves clip = SAVE +50 + SAVIOR at 41.38 s; a probe at tape 7.0 s was past the clip's +2 s close (probe placement, not a miss)"
    }
   }
  },
  {
   "id": "wwe_2k25",
   "name": "WWE 2K25",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every PINFALL / MATCH_WIN of yours",
     "default": true,
     "engine": true
    },
    {
     "id": "pins",
     "label": "Pins — every PINFALL / MATCH_WIN of yours",
     "default": false,
     "engine": true
    },
    {
     "id": "nearfalls",
     "label": "Nearfalls — every KICKOUT of yours — opt-in, the side is unplaced (either he kicked out or he nearly won)",
     "default": false,
     "engine": true
    },
    {
     "id": "wrestler_name_plus_body_damage",
     "label": "Wrestler NAME (text, OCR-clean) plus body-damage",
     "default": false,
     "engine": false
    },
    {
     "id": "stamina",
     "label": "stamina",
     "default": false,
     "engine": false
    },
    {
     "id": "momentum_and_finisher_signature_charge",
     "label": "momentum and finisher/signature charge",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Bottom strip, full width, one panel per wrestler. At 1920x1080 the name row is a 24px band at y=945-969 spanning x=0-1920 (crop=1920:24:0:945). Panels tile across, ~275px apart. Bars sit directly under each name at y=965-1010. Top-left has a static \"TOGGLE INF",
   "tracks": "Wrestler NAME (text, OCR-clean) plus body-damage, stamina, momentum and finisher/signature charge — all four rendered as COLORED BAR LENGTH, never as digits. No score, no match clock in a standard match, no personal stat line anywhere.",
   "climbing": "None. There is not a single number in the WWE 2K25 in-match HUD. Damage/stamina/momentum are bar fills that move BOTH directions, and the only monotonic thing on screen is bar color drifting green to red, which is a pixel measurement, not an OCR one.",
   "verdict": "Max Clipz can read WHO is in the match but cannot read WHAT happened. The roster name row OCRs reliably (8 names came back exact across 4 frames), so a WWE profile could identify participants and detect roster changes between matches. But a digit hunt across all 12 frames returned nothing but crowd-sign and jersey noise — WWE 2K25 has no numeric HUD at all. To cut WWE, Max Clipz would need a new sensor entirely: a bar-fill reader that samples the damage/stamina bar pixel run-length per panel and fires on a sudden d",
   "evidence": [
    "WRESTLER NAME ROW — crop=1920x24+0+945, 4x lanczos, gray, negate, psm 11:",
    "  t=1800: \"_ \\ KELAN JORDAN _ / LA KNIGMT / er 9 pT / BRONSON REED / GIOVANNI VINC) / MOLLY HOLLY\"",
    "  t=2700: \"> scantert / ier tami DEMPSEY  LOGAN PAL / CEDRIC ALEXANDER\"",
    "  t=3600: \"DD samizavn / LEX?S KING / _ gi) EVE TORRES / LUKE GALLOWS\"",
    "  t=5400: \"FALLON HENLEY / LA KNIGHT / as ROMAN REIGNS / BECKY LYNCH / BUBBA RAY OUOLEY\"",
    "  t=900:  \"£1 — Se. Aa / Cae / me TT\"   (entrance/cutscene, nothing)",
    "  t=4500: (empty)",
    "Ground truth checked by eye on t=2700: SCARLETT / VALHALLA / UNDERTAKER / IVAR / CHARLIE DEMPSEY / LOGAN PAUL / CEDRIC ALEXANDER. CHARLIE DEMPSEY, LOGAN PAUL, CEDRIC ALEXANDER, LA KNIGHT, BRONSON REED, MOLL"
   ],
   "evidenceChars": 691,
   "plan": {
    "verdict": "SOLVABLE NOW — PIXEL",
    "how": "bar extraction via HSV mask + width-delta verification",
    "failure": "analog / zero numbers",
    "kind": "pixel",
    "source": "BUILD_SPEC_game_expansion_2026-09-23.md"
   },
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "verdict"
   ],
   "measured": "WIRED 2026-09-26 — engine/run_banner.py proved on real footage (full sample): run_banner.py (banner_reader.py) on Skid Gaming's Goldberg vs Lesnar VOD 1OoAP13v4OQ 13:28: the ref's 1→2→3 at his cadence + the NAME read under the WINNER plate = his side (--gamertag Goldberg → the 7.28 s pin clip cover→count→WINNER GOLDBERG; --gamertag 'Brock Lesnar' → exit 3 'his loss, never a clip'). Left the healthbar `off` list 2026-09-26 — its reason stands (WWE health regenerates (measured 75%→100% with no reset) and matches end by pin or submission, not an empty bar); the banner reads the pin the bars could not. Calib 7 WWE tapes: 6/7 at ±0.5 s, 0 extra (Skid 1224's 1 and 2 drawn over the white mat unread); holdout 5 tapes P 1.00 R 0.57 (whatsuper4o vertical 0/6: the engine box-finder's band starts at y 863 not 646). Live banner job iENl4KxR2XvEYYBCalB4 on max-clipz-901 (rocket_league): 20,457,068 B · 13.18 s · 2 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9919) · queued→done 89.0 s · banner DEVFACTOR SCORED! 4.5-8.5 s inside clip 0 (tape 0.0→6.625) · eye check on 2 frames of the goal clip: tape 5.0 s (montage 5.02) 'DEVFACTOR SCORED!' with SHOT ON GOAL +10 and the board 1-0; tape 6.45 s (the clip's last half-second) SCORED! still up; the saves clip = SAVE +50 + SAVIOR at 41.38 s; a probe at tape 7.0 s was past the clip's +2 s close (probe placement, not a miss). Not T's own footage yet — check the first real tape by eye.",
   "bucket_2026_09_20": "orange",
   "banner": {
    "calib": "6/7 tapes at ±0.5 s, 0 extra (Skid 1224: 2 white-mat digits unread)",
    "holdout": {
     "tapes": 5,
     "expected": 7,
     "matched": 4,
     "precision": 1.0,
     "recall": 0.57
    },
    "words": "1 · 2 · 3 (the ref's count) · WINNER + the name under it",
    "needsGamertag": "his wrestler's name as the WINNER plate prints it — without it a pin is left out and said so per clip (GAMERTAG_OPTIONAL, never a refusal)",
    "source": "OG_WORK/banner_reader_2026-09-26 (FIXES_2026-09-26.md, verify/score_final.txt, INTEGRATION.md §3) — wired into engine/ 2026-09-26, engine/INTEGRATION_2026-09-26.md",
    "kind": "banner",
    "proved": "2026-09-26"
   },
   "wired": {
    "kind": "banner",
    "runner": "engine/run_banner.py",
    "sample": "full",
    "proof": "run_banner.py (banner_reader.py) on Skid Gaming's Goldberg vs Lesnar VOD 1OoAP13v4OQ 13:28: the ref's 1→2→3 at his cadence + the NAME read under the WINNER plate = his side (--gamertag Goldberg → the 7.28 s pin clip cover→count→WINNER GOLDBERG; --gamertag 'Brock Lesnar' → exit 3 'his loss, never a clip'). Left the healthbar `off` list 2026-09-26 — its reason stands (WWE health regenerates (measured 75%→100% with no reset) and matches end by pin or submission, not an empty bar); the banner reads the pin the bars could not. Calib 7 WWE tapes: 6/7 at ±0.5 s, 0 extra (Skid 1224's 1 and 2 drawn over the white mat unread); holdout 5 tapes P 1.00 R 0.57 (whatsuper4o vertical 0/6: the engine box-finder's band starts at y 863 not 646)",
    "proofClip": "~/OG_WORK/banner_reader_2026-09-26/proposed/proof/wwe_goldberg/SkidGamingWWE_1OoAP13v4OQ_1328__pins.mp4",
    "liveJob": {
     "jobId": "iENl4KxR2XvEYYBCalB4",
     "game": "rocket_league",
     "at": "2026-09-27 04:45:52.723000+00:00",
     "measured": "20,457,068 B · 13.18 s · 2 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9919) · queued→done 89.0 s · banner DEVFACTOR SCORED! 4.5-8.5 s inside clip 0 (tape 0.0→6.625) · eye check on 2 frames of the goal clip: tape 5.0 s (montage 5.02) 'DEVFACTOR SCORED!' with SHOT ON GOAL +10 and the board 1-0; tape 6.45 s (the clip's last half-second) SCORED! still up; the saves clip = SAVE +50 + SAVIOR at 41.38 s; a probe at tape 7.0 s was past the clip's +2 s close (probe placement, not a miss)"
    }
   }
  },
  {
   "id": "gears_of_war_e_day",
   "name": "Gears of War: E-Day",
   "status": "reads",
   "bucket": "green",
   "personal": true,
   "tested": "2026-10-28",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every KILL of yours",
     "default": true,
     "engine": true
    },
    {
     "id": "kills",
     "label": "Kills — every KILL of yours",
     "default": false,
     "engine": true
    },
    {
     "id": "streaks",
     "label": "Streaks — every STREAK of yours",
     "default": false,
     "engine": true
    },
    {
     "id": "gibs",
     "label": "Gibs — every GIB of yours, any gun (coming)",
     "default": false,
     "engine": false,
     "note": "'+50 GIB' in your own score popups. Read as gibs from any gun it passed the proof: 35 of 38 right on 17 uploaders (the checker's strict count). As 'Gnasher Gib' it has not passed: 31 of 38 (5 were other guns' gibs, 2 read late). It switches on when T says so (the go-live pack's --with-gibs)"
    }
   ],
   "styles": [],
   "where": "The red ELIMINATED banner at the bottom centre (the victim's name under it), drawn on HIS screen only: on each of his kills and on none of his teammates' (no banner while he spectates a teammate's kill, none on the ELIMINATED BY death card). His score popups sit on the right of his own screen ('+N KILL STREAK', '+50 GIB'). engine/banner_reader.py rule 'gears', profile gears_eday; no gamertag needed",
   "tracks": "his kills (the ELIMINATED banner), his kill streaks (the '+N KILL STREAK' popup), his gibs (the '+50 GIB' popup, any gun)",
   "climbing": "none needed: the banner is the event, one ELIMINATED banner = one kill of his. Two kills the game keeps under ONE banner are ONE moment (flagged merged_suspect, both kills inside the clip, never counted twice)",
   "verdict": "PROVED 2026-10-28 on strangers' YouTube tapes (Gears team; a checker recounted each box). Kills: 52 of 52 right on 13 uploaders, 0 of 62 kills missed, 0 false fires on 4 negative sections; held out, 38 of 38 on the 10 uploaders no number was set on. Kill Streaks: 21 of 21 right on 7 uploaders, 4 of 25 popups missed (one cause: two streak lines back to back read as one long word), 0 false fires on 4 negatives; Team Deathmatch only. Gibs: 35 of 38 right read as any-gun gibs on 17 uploaders ('Gnasher Gib' 31 of 38, not yet), held for T's call. Covers the English UI, 16:9 full frame, 1080p at 30 and 60 fps, Xbox Series X and PC; none of it is T's own footage yet, so the first real tape gets checked by eye",
   "evidence": [
    "gears_team prover_kills/runs/SORE_BBByFAUeetI_396-470/banner.json: ELIMINATED 5.875-10.875 s (19 reads) · ELIMINATED 28.375-32.125 s (15 reads) · ELIMINATED 51.375-55.125 s (15 reads) · ELIMINATED 57.625-61.375 s (15 reads) · ELIMINATED 64.125-67.875 s (15 reads)",
    "gears_team prover_kills/runs/iLLoGy_WnCUEzKHaek_442-512/banner.json: ELIMINATED 5.625-9.375 s (15 reads) · ELIMINATED 14.375-20.125 s (21 reads) · ELIMINATED 38.625-42.375 s (12 reads) · ELIMINATED 59.125-63.125 s (16 reads)",
    "gears_team prover_kills/runs/Skycaptin5_yhxiSB9-IhU_4594-4656/banner.json: ELIMINATED 5.375-9.125 s (15 reads) · ELIMINATED 11.625-15.375 s (15 reads) · ELIMINATED 17.625-21.375 s (15 reads) · ELIMINATED 23.875-27.625 s (15 reads) · ELIMINATED 28.625-32.625 s (16 reads) · ELIMINATED 44.875-51.625 s (26 reads)",
    "gears_team prover_kills/runs/MatodanDLC_e-3-jze3fgE_640-700/banner.json: ELIMINATED 6.125-6.625 s (2 reads) · ELIMINATED 7.625-10.875 s (13 reads) · ELIMINATED 15.625-20.625 s (18 reads) · ELIMINATED 43.875-50.875 s (27 reads)",
    "gears_team prover_kills/runs/Gentility_rRcAD577YUk_123-195/banner.json: ELIMINATED 5.375-9.375 s (16 reads) · ELIMINATED 16.875-20.375 s (14 reads) · ELIMINATED 46.375-49.875 s (14 reads) · ELIMINATED 50.875-54.375 s (14 reads) · ELIMINATED 64.875-68.625 s (15 reads)",
    "gears_team prover_kills/runs/Mil_ZOhpHlAoKyo_1300-1372/banner.json: ELIMINATED 5.625-9.375 s (15 reads) · ELIMINATED 10.875-14.625 s (15 reads) · ELIMINATED 20.125-23.625 s (14 reads) · ELIMINATED 59.875-63.625 s (15 reads) · ELIMINATED 64.375-67.125 s (11 reads)",
    "gears_team prover_kills/runs/EMISSIVE_QMbZj2pnQwg_552-622/banner.json: ELIMINATED 5.875-12.875 s (26 reads) · ELIMINATED 20.875-23.625 s (11 reads) · ELIMINATED 34.375-38.125 s (15 reads) · ELIMINATED 49.625-53.625 s (16 reads) · ELIMINATED 59.625-63.375 s (15 reads)",
    "gears_team prover_kills/runs/AOLDERA__7AT439XgB0_1112-1172/banner.json: ELIMINATED 5.875-9.625 s (15 reads) · ELIMINATED 32.625-38.125 s (21 reads) · ELIMINATED 40.625-44.625 s (16 reads)",
    "gears_team prover_kills/runs/JokersGambit_9zd1gRH32eY_74-144/banner.json: ELIMINATED 4.875-8.625 s (15 reads) · ELIMINATED 34.125-38.125 s (16 reads) · ELIMINATED 60.875-64.625 s (15 reads)",
    "gears_team prover_kills/runs/DuppyxGaming_JVH0uqYsZ6w_142-202/banner.json: ELIMINATED 6.125-9.875 s (15 reads) · ELIMINATED 32.625-36.375 s (15 reads) · ELIMINATED 42.875-46.125 s (13 reads)",
    "gears_team prover_kills/runs/AngryFPSGamer_J2CGZs7DdXs_896-956/banner.json: ELIMINATED 9.875-13.625 s (15 reads) · ELIMINATED 33.125-40.125 s (27 reads)",
    "gears_team prover_kills/runs/UnitedG_w_epmIzBTRU_192-262/banner.json: ELIMINATED 5.125-8.875 s (15 reads) · ELIMINATED 13.875-17.625 s (15 reads) · ELIMINATED 43.375-47.125 s (15 reads)",
    "gears_team prover_kills/runs/UnitedG_w_epmIzBTRU_354-424/banner.json: ELIMINATED 6.375-10.125 s (15 reads) · ELIMINATED 24.625-28.375 s (15 reads) · ELIMINATED 33.125-36.875 s (15 reads)",
    "gears_team prover_kills/runs/Isaac4K_-l3i_6V3-0E_936-1000/banner.json: ELIMINATED 5.375-9.125 s (15 reads) · ELIMINATED 52.625-56.375 s (15 reads)",
    "gears_team prover_streak/runs/ADC_gGnQjvnQZxI_280-355/banner.json: KILL STREAK 35.875-39.875 s (16 reads)",
    "gears_team prover_streak/runs/JokersGambit_9zd1gRH32eY_203-278/banner.json: KILL STREAK 34.875-38.875 s (16 reads) · KILL STREAK 66.125-70.125 s (16 reads)",
    "gears_team prover_streak/runs/Gentility_rRcAD577YUk_125-200/banner.json: KILL STREAK 3.375-7.375 s (16 reads) · KILL STREAK 14.625-18.625 s (16 reads) · KILL STREAK 62.625-66.625 s (16 reads)",
    "gears_team prover_streak/runs/FenixLIGHTS_iCx9tNSZFv4_150-225/banner.json: KILL STREAK 12.625-16.375 s (15 reads)",
    "gears_team prover_streak/runs/PoghGames_1bk8Ezl1LHM_60-135/banner.json: KILL STREAK 3.875-7.875 s (16 reads) · KILL STREAK 32.375-36.375 s (16 reads) · KILL STREAK 45.125-48.875 s (15 reads) · KILL STREAK 61.375-65.375 s (16 reads) · KILL STREAK 69.375-73.125 s (15 reads)",
    "gears_team prover_streak/runs/HollowGoCrazy24_Q5z-KPZDDhw_190-265/banner.json: KILL STREAK 5.625-9.625 s (16 reads) · KILL STREAK 30.625-34.375 s (15 reads) · KILL STREAK 51.625-55.375 s (15 reads) · KILL STREAK 63.375-65.125 s (7 reads)",
    "gears_team prover_kills/runs/Skycaptin5_yhxiSB9-IhU_4594-4656/banner.json: KILL STREAK 11.625-15.375 s (14 reads) · KILL STREAK 17.625-21.375 s (15 reads) · KILL STREAK 23.875-27.625 s (15 reads) · KILL STREAK 28.875-32.625 s (15 reads) · KILL STREAK 44.875-47.625 s (11 reads)"
   ],
   "evidenceChars": 4405,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [],
   "measured": "WIRED 2026-10-28 — engine/run_banner.py proved on real footage (YouTube sections: Kills 14 on 13 uploaders (934 s), Kill Streaks 7 on 7 uploaders, 4 + 4 negative sections sample): Gears team 2026-10-28 (GEARS_EDAY_GOLIVE_2026-10-28.md §3; a checker recounted each box, every moment checked by eye on a frame): Kills, the red ELIMINATED banner drawn on his screen only = 52 of 52 right on 13 uploaders, 0 of 62 kills missed, 0 false fires on 4 negative sections (spectating, deaths, death cards, round and match ends); Kill Streaks, his '+N KILL STREAK' popup = 21 of 21 right on 7 uploaders, 4 of 25 popups missed (two streak lines back to back read as one word over max_dur_s), 0 false fires; Gibs, '+50 GIB' = 35 of 38 as any-gun gibs on 17 uploaders, 'Gnasher Gib' NOT YET (31 of 38): a lane only on T's word. Live banner job iENl4KxR2XvEYYBCalB4 on max-clipz-901 (rocket_league): 20,457,068 B · 13.18 s · 2 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9919) · queued→done 89.0 s · banner DEVFACTOR SCORED! 4.5-8.5 s inside clip 0 (tape 0.0→6.625) · eye check on 2 frames of the goal clip: tape 5.0 s (montage 5.02) 'DEVFACTOR SCORED!' with SHOT ON GOAL +10 and the board 1-0; tape 6.45 s (the clip's last half-second) SCORED! still up; the saves clip = SAVE +50 + SAVIOR at 41.38 s; a probe at tape 7.0 s was past the clip's +2 s close (probe placement, not a miss). Not T's own footage yet — check the first real tape by eye.",
   "provenSince": {
    "list": "engine/GAMES_PROVEN_SINCE_2026-10-28.json",
    "proved": "2026-10-28",
    "proof": {
     "kills": "52 of 52 right, 13 uploaders, 0 of 62 kills missed, 0 false fires on 4 negatives",
     "streaks": "21 of 21 right, 7 uploaders, 4 of 25 popups missed (one cause), 0 false fires on 4 negatives",
     "gibs": "35 of 38 right as any-gun gibs, 17 uploaders (held: T's call)"
    },
    "sources": [
     "~/OG_WORK/maxclipz_gears_team_2026-10-28/GEARS_EDAY_GOLIVE_2026-10-28.md",
     "~/OG_WORK/maxclipz_gears_team_2026-10-28/proof_kills.md",
     "~/OG_WORK/maxclipz_gears_team_2026-10-28/verify_kills.md",
     "~/OG_WORK/maxclipz_gears_team_2026-10-28/proof_streak.md",
     "~/OG_WORK/maxclipz_gears_team_2026-10-28/verify_streak.md",
     "~/OG_WORK/maxclipz_gears_team_2026-10-28/proof_gib.md",
     "~/OG_WORK/maxclipz_gears_team_2026-10-28/verify_gib.md"
    ]
   },
   "banner": {
    "calib": "the v2 detectors were measured on Isaac4K only; 50 of 50 kills right on the 12 other uploaders",
    "holdout": {
     "uploaders": 10,
     "expected": 38,
     "matched": 38,
     "precision": 1.0,
     "recall": 1.0,
     "what": "kills on the uploaders whose tapes set no number (without Isaac4K, UnitedG, Skycaptin5)"
    },
    "words": "ELIMINATED (the red banner, bottom centre) · +N KILL STREAK · +50 GIB (read; a lane only on T's word)",
    "source": "OG_WORK/maxclipz_gears_team_2026-10-28 (GEARS_EDAY_GOLIVE_2026-10-28.md, proof_kills.md + verify_kills.md, proof_streak.md + verify_streak.md, proof_gib.md + verify_gib.md) — wired by the go-live pack 2026-10-28",
    "kind": "banner",
    "proved": "2026-10-28"
   },
   "wired": {
    "kind": "banner",
    "runner": "engine/run_banner.py",
    "sample": "YouTube sections: Kills 14 on 13 uploaders (934 s), Kill Streaks 7 on 7 uploaders, 4 + 4 negative sections",
    "proof": "Gears team 2026-10-28 (GEARS_EDAY_GOLIVE_2026-10-28.md §3; a checker recounted each box, every moment checked by eye on a frame): Kills, the red ELIMINATED banner drawn on his screen only = 52 of 52 right on 13 uploaders, 0 of 62 kills missed, 0 false fires on 4 negative sections (spectating, deaths, death cards, round and match ends); Kill Streaks, his '+N KILL STREAK' popup = 21 of 21 right on 7 uploaders, 4 of 25 popups missed (two streak lines back to back read as one word over max_dur_s), 0 false fires; Gibs, '+50 GIB' = 35 of 38 as any-gun gibs on 17 uploaders, 'Gnasher Gib' NOT YET (31 of 38): a lane only on T's word",
    "proofClip": "~/OG_WORK/maxclipz_gears_team_2026-10-28/prover_kills/runs/WORKERPATH_AOLDERA__7AT439XgB0_1112-1172 (run_banner.py AOLDERA 1112-1172 gears_of_war_e_day --lanes kills: rc 0, 34,473,056 B, 22.29 s, h264 1920x1080 + aac non-zero; measured, then deleted)",
    "liveJob": {
     "jobId": "iENl4KxR2XvEYYBCalB4",
     "game": "rocket_league",
     "at": "2026-09-27 04:45:52.723000+00:00",
     "measured": "20,457,068 B · 13.18 s · 2 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.9919) · queued→done 89.0 s · banner DEVFACTOR SCORED! 4.5-8.5 s inside clip 0 (tape 0.0→6.625) · eye check on 2 frames of the goal clip: tape 5.0 s (montage 5.02) 'DEVFACTOR SCORED!' with SHOT ON GOAL +10 and the board 1-0; tape 6.45 s (the clip's last half-second) SCORED! still up; the saves clip = SAVE +50 + SAVIOR at 41.38 s; a probe at tape 7.0 s was past the clip's +2 s close (probe placement, not a miss)"
    }
   }
  },
  {
   "id": "dota_2",
   "name": "Dota 2",
   "status": "reads",
   "bucket": "yellow",
   "personal": false,
   "tested": "2026-09-20",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "team_kills_for_both_sides",
     "label": "Team kills for both sides",
     "default": false,
     "engine": false
    },
    {
     "id": "match_clock",
     "label": "match clock",
     "default": false,
     "engine": false
    },
    {
     "id": "personal_hero_level",
     "label": "personal hero level",
     "default": false,
     "engine": false
    },
    {
     "id": "personal_gold",
     "label": "personal gold",
     "default": false,
     "engine": false
    },
    {
     "id": "hp_mana",
     "label": "HP/mana",
     "default": false,
     "engine": false
    },
    {
     "id": "the_hero_attribute_block",
     "label": "the hero attribute block (strength/agility/intelligence, damage, armour)",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Top-centre bar: Radiant kills at x≈866-910, Dire kills at x≈1014-1058, match clock at x≈928-988, all in y=0-46. Personal gold bottom-right at x≈1640-1725, y≈1030-1064. Hero level in the circle bottom-left at x≈448-490, y≈1040-1074. Hero portrait/attribute pane",
   "tracks": "Team kills for both sides, match clock, personal hero level, personal gold, HP/mana, and the hero attribute block (strength/agility/intelligence, damage, armour). Notably it does NOT show personal K/D/A in the default HUD — that only appear",
   "climbing": "Team kills — Radiant 1→3→5→10→14→20→25 and Dire 2→7→10→16→21→28, both strictly climbing and cleanly read. Match clock is a second monotonic channel. Personal hero LEVEL is monotonic and personal (5→10→14→22) but far too coarse, about 25 steps across a whole match, so it cannot mark individual plays.",
   "verdict": "Readable, but it cannot tell you which plays were his. The numbers that read reliably are team-wide (kills, clock); the numbers that are personal are either too coarse (level) or non-monotonic (gold). There is no personal K/D/A on screen at all in the default HUD, which is the single thing that would make this a 2K-style read. Two real occlusion failures showed up in the sample and are not OCR weakness: at t=600 the shop overlay covered the whole bottom HUD, and at t=1400 the mouse cursor sat directly on top of the",
   "evidence": [
    "Team kills, clock and hero level across all 7 frames:",
    "  t=200s  RADIANT[1]  DIRE[]   CLOCK[2:06]  LEVEL[]",
    "  t=400s  RADIANT[3]  DIRE[2]  CLOCK[5:26]  LEVEL[5]",
    "  t=600s  RADIANT[5]  DIRE[7]  CLOCK[8:46]  LEVEL[10]",
    "  t=800s  RADIANT[10] DIRE[10] CLOCK[12:06] LEVEL[14]",
    "  t=1000s RADIANT[14] DIRE[16] CLOCK[15:26] LEVEL[]",
    "  t=1200s RADIANT[20] DIRE[21] CLOCK[18:46] LEVEL[22]",
    "  t=1400s RADIANT[25] DIRE[28] CLOCK[22:06] LEVEL[]",
    "Personal gold, bottom-right (crop=85:34:1640:1030, 3x):",
    "  t=200s[179] t=400s[917] t=600s[] t=800s[1214] t=1000s[1748] t=1200s[1424] t=1400s[]",
    "Full-frame psm11 at t=800 returned: '10', '10', '12:0', 'FPS / PING 112', 'LOSS IN/OUT 0 0', 'DOOM', '111 +28', '150', '8 +19', '29"
   ],
   "evidenceChars": 688,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "verdict"
   ],
   "measured": "2026-09-20 off YouTube, ~2 s frames, raw tesseract quoted in `evidence`"
  },
  {
   "id": "ea_college_football_26",
   "name": "EA College Football 26",
   "status": "reads",
   "bucket": "yellow",
   "personal": false,
   "tested": "2026-09-20",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "both_team_scores",
     "label": "Both team scores",
     "default": false,
     "engine": false
    },
    {
     "id": "quarter",
     "label": "quarter",
     "default": false,
     "engine": false
    },
    {
     "id": "game_clock",
     "label": "game clock",
     "default": false,
     "engine": false
    },
    {
     "id": "play_clock",
     "label": "play clock",
     "default": false,
     "engine": false
    },
    {
     "id": "down_and_distance",
     "label": "down and distance",
     "default": false,
     "engine": false
    },
    {
     "id": "team_names",
     "label": "team names",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "One broadcast banner across the bottom-centre, spanning roughly (385,878)-(1545,1043) at 1920x1080. Left team name/score: ARMY score right-aligned ending at x≈822, y=944-1002. Centre module: quarter at x≈863-890, game clock at x≈918-1018, play clock at x≈1035-",
   "tracks": "Both team scores, quarter, game clock, play clock, down and distance, and team names. Nothing about the individual player the user controls.",
   "climbing": "Team score only — ARMY climbed 0→0→0→0→8→8→15 across the sample and never decreased. The game clock counts DOWN monotonically within each quarter but resets every quarter, so it is a within-quarter signal only. There is no personal counter of any kind to tick.",
   "verdict": "Second opinion CONFIRMS the earlier finding: YES_TEAM_OR_EVENT_ONLY. The scorebug reads reliably once tuned (7 of 8 frames, and the one blank is a CHALLENGE screen, not a failure), and team score is a clean monotonic trigger — but it only tells you a touchdown happened, not that HE made the play, and on defense or special teams the score moves for reasons that are not his highlight. Getting it to read at all required three fixes worth carrying into the engine: pad the crop (an isolated clean white '8' returned NOTH",
   "evidence": [
    "Scorebug band, unrestricted psm11 at t=800s:",
    "  'ZASPORTS ay BLACK el ah a 1:29 AIR FORCE E) o'",
    "and at t=350s:",
    "  'amy AIR FORCE BLACK KNIGHTS 0 e 34 | ae 0'",
    "After isolating each element (pad + O->0 mapping), scores across all 8 frames:",
    "  t=200s  ARMY[0]  AIRFORCE[0]",
    "  t=350s  ARMY[0]  AIRFORCE[0]",
    "  t=500s  ARMY[0]  AIRFORCE[0]",
    "  t=650s  ARMY[0]  AIRFORCE[0]",
    "  t=800s  ARMY[8]  AIRFORCE[0]",
    "  t=950s  ARMY[8]  AIRFORCE[0]",
    "  t=1100s ARMY[]   AIRFORCE[]    (CHALLENGE screen - correctly blank)",
    "  t=1250s ARMY[15] AIRFORCE[0]",
    "Clock: t=200s[1:26] t=800s[1:29] t=1250s[1:02]",
    "Down & distance (crop=105:34:915:985, psm7):",
    "  t=200s['1st &10'] t=350s['end & 3'] t=500s['ist & 10'] t=650s['and & 10'] t=800s['"
   ],
   "evidenceChars": 683,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "verdict"
   ],
   "measured": "2026-09-20 off YouTube, ~2 s frames, raw tesseract quoted in `evidence`"
  },
  {
   "id": "ea_sports_fc_26",
   "name": "EA Sports FC 26",
   "status": "reads",
   "bucket": "yellow",
   "personal": false,
   "tested": "2026-09-20",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "two_team_abbreviations",
     "label": "Two team abbreviations",
     "default": false,
     "engine": false
    },
    {
     "id": "two_team_goal_totals",
     "label": "two team goal totals",
     "default": false,
     "engine": false
    },
    {
     "id": "the_running_match_clock",
     "label": "the running match clock",
     "default": false,
     "engine": false
    },
    {
     "id": "the_name_number_of_the_player_you_are_co",
     "label": "the name + number of the player you are controlling right now",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Scoreboard is TOP-LEFT, a small stacked block at approx x=92..302, y=48..143 (210x95): home row, away row, match clock underneath. The currently-controlled player's jersey number and surname sit BOTTOM-LEFT at approx x=98..438, y=972..1017, with a stamina bar",
   "tracks": "Two team abbreviations, two team goal totals, the running match clock, and the name + number of the player you are controlling right now. That is the whole in-play HUD -- there is no goals/assists/shots line for your own player anywhere on",
   "climbing": "TWO, both weak. The match clock climbs monotonically (20:48 -> 45:44 -> 70:02 -> 93:38 across my frames) but it is a timer, not an achievement. Team goals climb monotonically (0-0 -> 1-1) but fire 1-4 times in a 90-minute match and do not say who scored. There is no per-player counter.",
   "verdict": "Max Clipz CAN read FC 26 cleanly -- the OCR is the best of the four games after inverting the name bar -- but what it reads does not tell you which plays were HIS. A goal changing 0 -> 1 is a real cut trigger, it is just extremely sparse compared to a 2K points line that ticks 30+ times a game. There IS one trick worth building: at the instant the score increments, read the bottom-left controlled-player bar (it OCR'd perfectly -- '7 TOONE', '15 OUAHABI', '3 GEORGE'), and you can attribute the goal to the player he",
   "evidence": [
    "=== scoreboard crop=210x95+92+48, x6 lanczos, gray, contrast=1.4, psm6 ===",
    "t=1000:",
    "  be MUN & O",
    "  MCI     oO",
    "  \"an 620:48",
    "t=1200:",
    "  'G MUNG 1",
    "  MCI @) 1",
    "  men 6 645:44 4",
    "t=1400:",
    "  \"\"G MUNG 1",
    "  MCI (©) 1",
    "  a 70:02",
    "t=1600 (full-frame psm11 picked it up):",
    "  MUN¢ / McI / 93:38",
    "=== controlled-player bar crop=340x45+98+972, x5, gray, NEGATED, psm7 ===",
    "t=1000: 3 GEORGE",
    "t=1200: 15 BIZET | , E",
    "t=1400: 15 OUAHABI",
    "t=1600: 7 TOONE &>"
   ],
   "evidenceChars": 406,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "verdict"
   ],
   "measured": "2026-09-20 off YouTube, ~2 s frames, raw tesseract quoted in `evidence`"
  },
  {
   "id": "rainbow_six_siege",
   "name": "Rainbow Six Siege",
   "status": "reads",
   "bucket": "yellow",
   "personal": false,
   "tested": "2026-09-20",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "round_number",
     "label": "round number",
     "default": false,
     "engine": false
    },
    {
     "id": "round_timer",
     "label": "round timer",
     "default": false,
     "engine": false
    },
    {
     "id": "players_alive_per_side",
     "label": "players alive per side",
     "default": false,
     "engine": false
    },
    {
     "id": "per_operator_alive_dead_as_x_marks_over_",
     "label": "per-operator alive/dead as X marks over the portraits",
     "default": false,
     "engine": false
    },
    {
     "id": "own_health",
     "label": "own health (110/110 style)",
     "default": false,
     "engine": false
    },
    {
     "id": "own_gadget_count",
     "label": "own gadget count",
     "default": false,
     "engine": false
    },
    {
     "id": "own_ammo_mag_reserve_for_both_weapons",
     "label": "own ammo mag+reserve for both weapons",
     "default": false,
     "engine": false
    },
    {
     "id": "operator_name",
     "label": "operator name",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Top bar all in y 2-60: round number ~(522-570), blue operator icons ~(570-800), defenders alive ~(852-900), timer ~(902-1022), attackers alive ~(1018-1066), enemy operator slots ~(1070-1360). Round label centered ~(920-1000, 76-96). Bottom-left health ~(46-215",
   "tracks": "round number, round timer, players alive per side, per-operator alive/dead as X marks over the portraits, own health (110/110 style), own gadget count, own ammo mag+reserve for both weapons, operator name. NO personal K/D on the default HUD",
   "climbing": "None that is clean. The round number climbs, but it is a round counter, not a score. Players-alive counts DOWN within a round and resets every round. The X marks over operator portraits accumulate within a round and then wipe. Health does not climb. There is no match-long climbing number on this HUD",
   "verdict": "Siege reads - the timer came back 9 of 10 and the ammo string '23154' matched the screen exactly - but it is the weakest of the four for Max Clipz because there is no monotonic number to chase. Everything on this HUD either counts DOWN or resets at the round buzzer, so 'watch a number go up' has nothing to grab. Worse, I caught the trap live: on 4 of 10 frames every field came back empty, and when I pulled those frames the reason was that he was DEAD and Siege had moved the entire personal HUD from bottom-right to",
   "evidence": [
    "PER-FIELD SWEEP (6x lanczos, gray, --psm 7/10 digit whitelist), 10 frames:",
    "t=300  ROUND='3' BLUE_ALIVE='0' TIMER='1:40' RED_ALIVE='1'",
    "t=600  ROUND=''  BLUE_ALIVE='2' TIMER='2:39' RED_ALIVE='1'",
    "t=900  ROUND=''  BLUE_ALIVE=<empty-page diagnostic> TIMER='' RED_ALIVE=''",
    "t=1200 ROUND=''  BLUE_ALIVE='3' TIMER='0:09' RED_ALIVE='3'",
    "t=1500 ROUND=''  BLUE_ALIVE='3' TIMER='0:34' RED_ALIVE='4'",
    "t=1800 ROUND='3' BLUE_ALIVE='1' TIMER='0:11' RED_ALIVE=''",
    "t=2100 ROUND='2' BLUE_ALIVE='2' TIMER='1:38' RED_ALIVE='0'",
    "t=2400 ROUND=''  BLUE_ALIVE='3' TIMER='0:08' RED_ALIVE='1'",
    "t=2700 ROUND='4' BLUE_ALIVE=''  TIMER='1:25' RED_ALIVE=''",
    "t=3000 ROUND=''  BLUE_ALIVE=''  TIMER='0:26' RED_ALIVE='1'",
    "TIMER read on 9 of 10"
   ],
   "evidenceChars": 688,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "2026-09-20 off YouTube, ~2 s frames, raw tesseract quoted in `evidence`"
  },
  {
   "id": "street_fighter_6",
   "name": "Street Fighter 6",
   "status": "reads",
   "bucket": "yellow",
   "personal": false,
   "tested": "2026-09-20",
   "worker": true,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "best",
     "label": "Best — every play, heaviest first",
     "default": true,
     "engine": true
    },
    {
     "id": "combos",
     "label": "Combos — every combo (DAMAGE), chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "kos",
     "label": "Kos — every KO / COMEBACK / PERFECT, chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "perfects",
     "label": "Perfects — every PERFECT KO (his bar untouched all round), chronological",
     "default": false,
     "engine": true
    },
    {
     "id": "both_players_online_handles",
     "label": "Both players' online handles",
     "default": false,
     "engine": false
    },
    {
     "id": "both_in_game_names",
     "label": "both in-game names",
     "default": false,
     "engine": false
    },
    {
     "id": "both_characters",
     "label": "both characters",
     "default": false,
     "engine": false
    },
    {
     "id": "master_rate",
     "label": "Master Rate (ranked ELO)",
     "default": false,
     "engine": false
    },
    {
     "id": "leaderboard_placement_and_league_badge",
     "label": "leaderboard placement and league badge",
     "default": false,
     "engine": false
    },
    {
     "id": "platform_icon",
     "label": "platform icon",
     "default": false,
     "engine": false
    },
    {
     "id": "round_win_markers",
     "label": "round-win markers",
     "default": false,
     "engine": false
    },
    {
     "id": "round_timer",
     "label": "round timer",
     "default": false,
     "engine": false
    },
    {
     "id": "drive_gauge_segments_and_drive_stock_cou",
     "label": "Drive Gauge segments and Drive stock count",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Everything readable lives in a band across the top 145px. Player handle left (205,108)-(405,138), right (1590,108)-(1790,138). Master Rate left (40,108)-(170,138), right (1775,108)-(1905,138). Leaderboard rank left (40,132)-(170,166). Player name banner left (",
   "tracks": "Both players' online handles, both in-game names, both characters, Master Rate (ranked ELO), leaderboard placement and league badge, platform icon, round-win markers, round timer, Drive Gauge segments and Drive stock count, opponent's home",
   "climbing": "NONE usable during a match. Master Rate is a real personal number and OCR reads it perfectly, but it is frozen for the whole match and only updates on the results screen -- and it can go DOWN after a loss, so it is not monotonic. The round-win markers do climb 0-1-2 but tesseract returned O, TA, 2,",
   "verdict": "Max Clipz can see WHO is playing in SF6 but not WHAT he did. Identity is airtight -- '.YAS. @twitch' came back byte-perfect on all 20 preprocessing variants and on 8 of 8 frames, and '2268 MR' read on 8 of 8. But there is no stat on screen that ticks when he lands a play: no health digits, no damage numbers, no hit counter, and the only two numbers that do move -- the round-win pip and the timer -- are stylized Capcom fonts that tesseract read correctly roughly once in eight tries. So SF6 gives the engine a reliabl",
   "evidence": [
    "PLAYER HANDLE, left -- the single strongest read in this whole test, clean on ALL 20 preprocessing variants at t=480:",
    "  [sf_handleL/raw/psm7] .YAS. @twitch",
    "  [sf_handleL/raw/psm6] .YAS. @twitch",
    "  [sf_handleL/raw/psm11] .YAS. @twitch",
    "  [sf_handleL/A/psm7] YAS. @twitch",
    "  [sf_handleL/B/psm7] YAS. @twitch",
    "  [sf_handleL/C/psm7] YAS. @twitch",
    "  [sf_handleL/D/psm7] YAS. @twitch",
    "MASTER RATE (MR), left and right:",
    "  [sf_mrL/raw/psm7] 2268 MR",
    "  [sf_mrL/B/psm7] 2268MR",
    "  [sf_mrR/A/psm7] 7 2338\\MR Oe",
    "  (ground truth: 2268 MR and 2338 MR -- EXACT)",
    "LEADERBOARD RANK:",
    "  [sf_rankL/raw/psm11] Me ci 43rd",
    "  [sf_rankL/A/psm6] 43rd | Le \"com",
    "PLAYER NAMES top banner:",
    "  [sf_nameL/raw/psm8] YAS",
    "  [sf_nameR/raw/psm7]"
   ],
   "evidenceChars": 679,
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "WIRED 2026-09-25 — engine/run_healthbar.py proved on real footage (full sample): tag 'YAS', VOD 6vlu9pY4wyc 120-480: 14/14 of his plays by hand (4 KOs, 10 combos), 0 clips without a play of his. Live healthbar job 2ABjv2mZ8xlhPFh0UU6Y on max-clipz-901 (tekken_8): 45,758,542 B · 29.56 s · 3 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.8507) · queued→done 487.1 s · eye check on the HUD bars at every clip: clip 1 ends on K.O. at 16 s with KAZUYA's bar (right) emptied while his (xhk Asad, LEFT, Claudio) sits near 21% — his comeback KO; clip 2 ends on K.O. at 21.5 s with KING's bar emptied, his low — his second comeback KO; clip 3 shows KAZUYA's bar fall ~96%→~59% under his combo (his '2 Hit Combo 23 Damage' counter on the left). No clip ends on his loss. Matches the lane's hand count for tape 20-95 s: KOs at 37 and 86, combo at 60 — 3 plays, 3 clips. Not T's own footage yet — check the first real tape by eye.",
   "wired": {
    "kind": "healthbar",
    "runner": "engine/run_healthbar.py",
    "sample": "full",
    "proof": "tag 'YAS', VOD 6vlu9pY4wyc 120-480: 14/14 of his plays by hand (4 KOs, 10 combos), 0 clips without a play of his",
    "proofClip": "~/Movies/MAXCLIPZ_HEALTHBAR_PROOF_2026-09-25/v2_street_fighter_6/6vlu9pY4wyc_120_480__kos.mp4",
    "liveJob": {
     "jobId": "2ABjv2mZ8xlhPFh0UU6Y",
     "game": "tekken_8",
     "at": "2026-09-25T13:06:35.384Z",
     "measured": "45,758,542 B · 29.56 s · 3 clip(s) · Storage == doc == GET bytes · audio non-zero at 5/5 probes · clipsAlign ok=True (SSIM min 0.8507) · queued→done 487.1 s · eye check on the HUD bars at every clip: clip 1 ends on K.O. at 16 s with KAZUYA's bar (right) emptied while his (xhk Asad, LEFT, Claudio) sits near 21% — his comeback KO; clip 2 ends on K.O. at 21.5 s with KING's bar emptied, his low — his second comeback KO; clip 3 shows KAZUYA's bar fall ~96%→~59% under his combo (his '2 Hit Combo 23 Damage' counter on the left). No clip ends on his loss. Matches the lane's hand count for tape 20-95 s: KOs at 37 and 86, combo at 60 — 3 plays, 3 clips"
    }
   }
  },
  {
   "id": "gta_online",
   "name": "GTA Online",
   "status": "reads",
   "bucket": "yellow",
   "personal": false,
   "tested": "previously-measured",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [],
   "styles": [],
   "where": "",
   "tracks": "",
   "climbing": "",
   "verdict": "Previously measured: GTA Online 🟡 · Fight Night Champion 🔴",
   "evidence": [],
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [],
   "measured": "No OCR block on disk — cited only by the 9-20 report's 'Previously measured' line (grep'd ~/Desktop *.md, max_clipz *.md and OG memory 2026-09-23: none). Verdict shown as cited, not re-measured."
  },
  {
   "id": "halo_infinite",
   "name": "Halo Infinite",
   "status": "amber",
   "bucket": "orange",
   "personal": false,
   "tested": "2026-09-20",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "blue_team_score",
     "label": "Blue team score",
     "default": false,
     "engine": false
    },
    {
     "id": "red_team_score",
     "label": "red team score",
     "default": false,
     "engine": false
    },
    {
     "id": "match_clock",
     "label": "match clock",
     "default": false,
     "engine": false
    },
    {
     "id": "current_magazine_reserve_ammo",
     "label": "current magazine + reserve ammo",
     "default": false,
     "engine": false
    },
    {
     "id": "grenade_counts",
     "label": "grenade counts",
     "default": false,
     "engine": false
    },
    {
     "id": "killfeed_lines",
     "label": "killfeed lines (killer name / weapon icon / victim name)",
     "default": false,
     "engine": false
    },
    {
     "id": "transient_medal_popups",
     "label": "transient medal popups",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Score bar: bottom-center, a 500x56 box at (1680,1968) in 4K = (840,984) at 1080p. Left number = your team, center = match clock, right = enemy team. Ammo: bottom-right, 280x60 at (3260,1940) in 4K = (1630,970) at 1080p, magazine then reserve. Killfeed: left si",
   "tracks": "Blue team score, red team score, match clock, current magazine + reserve ammo, grenade counts, killfeed lines (killer name / weapon icon / victim name), and transient medal popups. No persistent personal stat line — his own K/D lives behind",
   "climbing": "Team score climbs monotonically (0 -> 50 in Strongholds and Slayer) but it is the TEAM's, not his. The match clock is the reliable monotone: I read 4:25 and 1:28 counting down cleanly. Nothing personal moves in one direction on the default HUD.",
   "verdict": "Halo is real but expensive. The numbers exist and I proved they can be read — 50 and 4 both came back exact off the 4K frame, 17 came back exact off the 1080p frame, and ammo read 36/119 — but I only got 3 clean score-bar reads out of 13 frames. The HUD numerals are 13-14px tall on a translucent plate with the map moving behind them, so a good read depends on whatever happens to be behind the text that frame. Two fixable things and one hard thing. Fixable: my first crop was 50px off and returned pure garbage, so th",
   "evidence": [
    "1080p SOURCE — score bar crop=200x26+870+933, gray, threshold >205 inverted, 8x:",
    "  t=2000 psm 7: \"17 8\"      ground truth by eye: 17 | 0:34 | 0   -> blue team score 17 CORRECT",
    "  t=1200 psm 11: \"4\"        ground truth by eye: 5 | 9:14 | 14    -> WRONG",
    "  t=2800: (empty)   t=800: (empty)",
    "  same region, no threshold, psm 7:  t=2000: \"Wwe o34 (0\"  t=2800: \"Oo) 24 Ro\"",
    "AMMO crop=200x44+1540+960, gray, 4x, psm 7:",
    "  t=1200: \"36 iis\"    ground truth by eye: 36 / 119  -> CORRECT except 119 read as iis",
    "4K SOURCE, after I found my crop was 50px too high — corrected to crop=500x56+1680+1968:",
    "  t=900  thresh psm11: \"50  Neb  | 4\"     ground truth by eye: 50 | 1:28 | 4  -> BOTH SCORES CORRECT",
    "  t=900  gra"
   ],
   "evidenceChars": 689,
   "plan": {
    "verdict": "CLOUD API SYNC",
    "how": "SPNKr / HaloDotAPI carnage-report events",
    "failure": "personal stats hidden",
    "kind": "api",
    "source": "BUILD_SPEC_game_expansion_2026-09-23.md"
   },
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "verdict"
   ],
   "measured": "2026-09-20 off YouTube, ~2 s frames, raw tesseract quoted in `evidence`"
  },
  {
   "id": "the_crew_motorfest",
   "name": "The Crew Motorfest",
   "status": "amber",
   "bucket": "orange",
   "personal": false,
   "tested": "2026-09-20",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "current_speed_in_km_h",
     "label": "Current speed in km/h (zero-padded to 3 digits, so '034' is the real display, not an artifact)",
     "default": false,
     "engine": false
    },
    {
     "id": "gear",
     "label": "gear",
     "default": false,
     "engine": false
    },
    {
     "id": "driving_assists",
     "label": "driving assists",
     "default": false,
     "engine": false
    },
    {
     "id": "distance_to_waypoint",
     "label": "distance to waypoint",
     "default": false,
     "engine": false
    },
    {
     "id": "in_game_time_of_day",
     "label": "in-game time of day",
     "default": false,
     "engine": false
    },
    {
     "id": "player_money",
     "label": "player money (Bucks)",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Speedometer dial bottom-left, digits at approximately (110,930)-(310,1026) at 1920x1080, with 'km/h' beneath and ABS/ESP+/TCS+ above. Minimap bottom-right around (1700,850)-(1920,1080). Event popups float centre-screen but MOVE: 'XP 20' appeared at (920,884)-(",
   "tracks": "Current speed in km/h (zero-padded to 3 digits, so '034' is the real display, not an artifact), gear, driving assists, distance to waypoint, in-game time of day, player money (Bucks), and transient XP/feat popups such as NEAR MISS and drift",
   "climbing": "None that is both persistent and personal. Speed oscillates constantly and is not a performance stat. Player money climbs but is spent in the shop AND the top bar auto-hides — it appeared in only 1 of 8 frames sampled. The XP popups are personal and event-driven but transient, appearing for a second",
   "verdict": "Marginal — readable text exists but nothing Max Clipz can hang a cut on the way it hangs on 2K points. The speedometer is big and high-contrast yet still only hit 3 of 4 hand-verified frames, and flipped 198 to 196 to 126 with tiny crop changes, because the digits sit on a translucent curved gauge over live video. The genuinely useful signal is the event popup: '+10 NEAR MISS' read perfectly and 'XP 20' read perfectly once the ROI was tight. Building this game would mean abandoning the stat-line model entirely and",
   "evidence": [
    "Event popups (the strongest signal), unrestricted psm11:",
    "  t=1850s -> '+10 NEAR MISS'",
    "  t=2100s -> 'XP 20'   (only after tightening to crop=95:42:920:884; the same text returned NOTHING from a looser crop)",
    "Speedometer, best config found (crop=200:96:110:930, 2x, psm8) against hand-verified truth:",
    "  t=1650s [034]  (truth 034 OK)",
    "  t=1850s []     (truth 232 MISS - digits start at x=116 and were clipped)",
    "  t=2100s [198]  (truth 198 OK)",
    "  t=2300s [031]  (truth 031 OK)",
    "  other driving frames: t=1750s[049] t=1900s[238] t=2400s[038]",
    "  Instability measured: t=2100 flipped 198 -> 196 -> 126 across small crop changes.",
    "Persistent money counter, top-right (crop=88:30:1677:60, 4x):",
    "  t=1700s [118,750]"
   ],
   "evidenceChars": 686,
   "plan": {
    "verdict": "VOICE TRIGGER ONLY",
    "how": "Whisper.cpp (Metal) + Silero VAD",
    "failure": "floating / chaotic HUD",
    "kind": "voice",
    "source": "BUILD_SPEC_game_expansion_2026-09-23.md"
   },
   "voiceTrigger": true,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "2026-09-20 off YouTube, ~2 s frames, raw tesseract quoted in `evidence`"
  },
  {
   "id": "ufc_5",
   "name": "UFC 5",
   "status": "amber",
   "bucket": "orange",
   "personal": false,
   "tested": "2026-09-20",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "both_fighters_surnames",
     "label": "Both fighters' surnames",
     "default": false,
     "engine": false
    },
    {
     "id": "a_health_bar_and_a_stamina_bar_per_fight",
     "label": "a health bar and a stamina bar per fighter (bars only -- no digits)",
     "default": false,
     "engine": false
    },
    {
     "id": "current_round_number_with_round_pips",
     "label": "current round number with round pips",
     "default": false,
     "engine": false
    },
    {
     "id": "the_round_countdown_clock",
     "label": "the round countdown clock",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Two corner clusters plus a center column. Left fighter surname (80,48)-(380,82), his STAMINA bar and label directly beneath at (85,90)-(305,114); health is the thin unlabelled bar above the name. Right fighter mirrored: surname (1540,48)-(1840,82), STAMINA (16",
   "tracks": "Both fighters' surnames, a health bar and a stamina bar per fighter (bars only -- no digits), current round number with round pips, and the round countdown clock. That is the entire in-fight HUD. No strike count, no damage number, no signif",
   "climbing": "Effectively none. The round number R1 -> R2 -> R3 does climb and never falls, but it ticks at most twice in a whole fight and OCR only recovered it on 3 of 11 frames. The round clock counts DOWN monotonically inside a round but resets every round and read correctly maybe 3 times in 11. Everything th",
   "verdict": "UFC 5 is the weakest of the four and close to unusable as an OCR target. The only text on screen is two surnames, the word STAMINA, a round number and a clock -- and of those, the surnames read on 5 of 11 frames, the round on 3 of 11, and the clock on 3 of 11 with one of those ('3:2e') visibly wrong. The full-frame OCR returned pure noise. The reason is structural, not a tuning problem: UFC 5's health and stamina are BARS with no digits, the text is thin light-grey set over a bright white canvas and a chain-link ca",
   "evidence": [
    "FIGHTER NAMES -- read on 5 of 11 gameplay frames, misread on the rest:",
    "  t=250  [u5b_nameL/raw/psm7] ASPINALL          [u5b_nameR/raw/psm7] G@AINE",
    "  t=350  [u5b_nameL/raw/psm7] ASPINALL          [u5b_nameR/A/psm7] GANE",
    "  t=450  [u5b_nameL/raw/psm7] ASPINALL          [u5b_nameR/raw/psm7] @AINE'",
    "  t=700  [u5b_nameL/raw/psm7] ASPINALL          [u5b_nameR/raw/psm7] G@AINE",
    "  t=750  [u5b_nameL/raw/psm7] QiASPINALL        [u5b_nameR/raw/psm7] GANE {",
    "  t=600  [u5_nameL/raw/psm7] > ASHINALL a      [u5_nameR/raw/psm6] __ Tutt",
    "  t=550  [u5b_nameL/raw/psm7] BacPinaALe        [u5b_nameR/raw/psm7] ss",
    "  t=500  [u5b_nameL/raw/psm7] I a               [u5b_nameR/raw/psm11] Aue AD 4! — = 5",
    "  t=150  [u5b_nameL/"
   ],
   "evidenceChars": 691,
   "plan": {
    "verdict": "SOLVABLE NOW — PIXEL",
    "how": "scene-transition parsing + transient-text OCR",
    "failure": "analog / zero numbers",
    "kind": "pixel",
    "source": "BUILD_SPEC_game_expansion_2026-09-23.md"
   },
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "tracks",
    "climbing",
    "verdict"
   ],
   "measured": "2026-09-20 off YouTube, ~2 s frames, raw tesseract quoted in `evidence` · NOT WIRED 2026-09-25 — UFC 5 has no health bar — only HEAD / BODY / LEGS / BLOCK damage meters that appear when hit and stack in any order, and a KO empties nothing. Needs: OCR of each mini-bar's label on every read plus a KO/TKO banner reader",
   "notWired": {
    "kind": "healthbar",
    "why": "UFC 5 has no health bar — only HEAD / BODY / LEGS / BLOCK damage meters that appear when hit and stack in any order, and a KO empties nothing",
    "needs": "OCR of each mini-bar's label on every read plus a KO/TKO banner reader"
   }
  },
  {
   "id": "escape_from_tarkov",
   "name": "Escape from Tarkov",
   "status": "amber",
   "bucket": "red",
   "personal": false,
   "tested": "2026-09-20",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [
    {
     "id": "stamina",
     "label": "stamina",
     "default": false,
     "engine": false
    },
    {
     "id": "limb_health_as_colors_on_a_body_wirefram",
     "label": "limb health as colors on a body wireframe",
     "default": false,
     "engine": false
    },
    {
     "id": "status_words",
     "label": "status words (HURT, EXIT LOCATED)",
     "default": false,
     "engine": false
    },
    {
     "id": "sight_zeroing_distance",
     "label": "sight zeroing distance",
     "default": false,
     "engine": false
    },
    {
     "id": "a_raid_countdown_only_when_toggled",
     "label": "a raid countdown only when toggled",
     "default": false,
     "engine": false
    }
   ],
   "styles": [],
   "where": "Effectively nothing. During live play there is a stamina bar at x 45-200, y 1030-1040 (a bar, no digits), a small wireframe body-damage figure at x 55-120, y 900-1010 (limb colors, no numbers), and a status word tag at x 215-300, y 1028-1042 that reads HURT or",
   "tracks": "stamina, limb health as colors on a body wireframe, status words (HURT, EXIT LOCATED), sight zeroing distance, and a raid countdown only when toggled. No stats of any kind.",
   "climbing": "NONE. There is no kill counter, no score, no points, no money, no XP. The raid timer counts DOWN and is not even reliably on screen. Nothing in this game increments.",
   "verdict": "Max Clipz cannot read Escape from Tarkov, and this is not a calibration problem you can fix — the numbers do not exist. Tarkov deliberately ships with no HUD; it is the same wall as Fight Night Champion. There is no kill counter, no score and no personal stat line, and the only number I found at all was a countdown that appeared on 2 of 7 frames because the player toggled it. Worth knowing: the frames that LOOK rich in text (400s, 800s, 1200s) are the inventory menu, and an engine that scored those would think it f",
   "evidence": [
    "GAMEPLAY FRAMES — full frame --psm 11, nothing preprocessed away:",
    "  t=1600 -> ee|——|as|—~=—|ss|/|F|8|fo|—|=|aS,|Y|aia.|=|=|—|ee|efasnonoe.|58|HURT|",
    "  t=2000 -> i|<.|4|wy|4|—=—|tae|= =|UN|==|i|en|eI|ach |=a|0_L ae|Wy ot|ee|ye|eS|a|=|to|Sen|eee|...|ss|HORT|Ze|...",
    "BOTTOM-LEFT STRIP, crop=700:70:0:1010, 3x, gray, contrast 1.8, --psm 11:",
    "  t=1600 -> v | @ | eareereere | HURT",
    "  t=2000 -> il | eet yere owe | Pe od | ... | HURT | ...",
    "  t=2300 -> eereatreetreereereere | v | @)",
    "  t=2600 -> v | eevee reereereerevre | @) | EXIT LOCATED",
    "That \"eareereere\" / \"eevee reereereerevre\" garbage IS the stamina bar — tesseract is reading the tick marks on a bar graphic as letters. There is no text there.",
    "RAID T"
   ],
   "evidenceChars": 688,
   "plan": {
    "verdict": "VOICE, PERMANENTLY",
    "how": "it ships with no HUD by design",
    "failure": "no HUD by design",
    "kind": "voice",
    "source": "BUILD_SPEC_game_expansion_2026-09-23.md"
   },
   "voiceTrigger": true,
   "trackGame": "OTHER",
   "truncated": [
    "where",
    "verdict"
   ],
   "measured": "2026-09-20 off YouTube, ~2 s frames, raw tesseract quoted in `evidence`"
  },
  {
   "id": "fight_night_champion",
   "name": "Fight Night Champion",
   "status": "red",
   "bucket": "red",
   "personal": false,
   "tested": "previously-measured",
   "worker": false,
   "profile": null,
   "variants": [],
   "lanes": [],
   "styles": [],
   "where": "",
   "tracks": "",
   "climbing": "",
   "verdict": "Previously measured: GTA Online 🟡 · Fight Night Champion 🔴",
   "evidence": [],
   "plan": null,
   "voiceTrigger": false,
   "trackGame": "OTHER",
   "truncated": [],
   "measured": "No OCR block on disk — cited only by the 9-20 report's 'Previously measured' line (grep'd ~/Desktop *.md, max_clipz *.md and OG memory 2026-09-23: none). Verdict shown as cited, not re-measured."
  }
 ]
}
