diff --git a/specs/STATE.md b/specs/STATE.md index 2f2bc74..2e692af 100644 --- a/specs/STATE.md +++ b/specs/STATE.md @@ -133,6 +133,56 @@ exist locally; harmless, the data restores completely. --- +## ๐ŸŸข HEAL EXECUTED (Order 2, 2026-07-20 ~10:00 UTC) โ€” record is clean +Rollback point first: `vyndr-20260720-093821.dump` (856,890 B) **verified ON the +Storage Box**, not just exit 0. + +**โš ๏ธ THE DRY-RUN OVERTURNED MY OWN DIAGNOSIS โ€” read this before trusting the +Order 1.5 notes above.** Across every bindable row the stored `game_date` +matched a real game (**MIS-DATED: 0**). The players I cited as proof of +mis-dating were **genuine DNPs** on their true dates (Freeman 07-18; +Kwan/Hedges/Davis 07-17 โ€” their teams played, they did not). **The original 64 +`player_dnp` voids were CORRECT and my Order 1.5 revert undid correct work.** + +| Axis | Result | +|---|---| +| Settlement scorer | **578/578 re-computed identical, 0 differ** โ€” confirmed, no heal needed | +| Dates | 527 correct ยท **0 mis-dated** ยท 170 unbindable (my dry-run's parser, NOT proven damage) | +| Grade damage | **51 rows, not 303** โ€” the rest hit the same opponent anyway (baseball SERIES effect) | + +**Writes executed (each verified against the dry-run prediction):** +- **64 re-voided** (60 mlb + 4 wnba) โ€” by the settle pass's positive-evidence + guard, not hand-picked ids. DNP voiding re-enabled deliberately because its + disable rested on a false premise. +- **25 ledger rows quarantined** `wrong_opponent_grade` (wnba 2026-07-18, + 10 hit / 15 miss). They REMAIN real public settled results; only train/validate + excludes them. +- **200 `model_snapshots` rows quarantined** โ€” the 4 pre-fix MLB cycles for + game_date 07-20 (06:00/06:02/06:03/07:25 UTC). Superseded by the correct + 07:50/07:51 captures of the same props, so nothing is lost. +- **70 rows flagged** `doubleheader_game_identified`. + +**TWO EXCLUSION SCOPES (migration 027) โ€” deliberately separate:** +- `quarantine_reason` โ†’ grade untrustworthy. Row stays a real public result but + is **excluded from the model-record denominator** (`getModelAggregate`), like + void/unrecoverable. +- `analysis_flags` โ†’ valid for settlement AND the record; excluded only from + per-game/opponent analysis. **Never filtered from aggregates** (a test asserts + this, so a future edit can't silently collapse the two). + +**Corrections to my own Phase 0 numbers, found while executing:** +- The 50 WNBA "poisoned moat rows" were **NOT poisoned** โ€” captured 03:02 UTC + (23:02 ET 07-19) for game_date 07-19, so ESPN's "today" was the right day. +- The 166 doubleheader rows came from **loose team matching** and could not be + reconciled (a strict predicate found 121). I flagged only the **70** rows the + FEED itself marks (`G2โ€ฆ`/`(Game1)`) โ€” and those are attributable, not + unattributed. The wider unattributed set needs a stricter pass; it is advisory + metadata that affects no number today. + +**Final state:** 360 hit ยท 218 miss ยท 64 void ยท 55 pending ยท 25 quarantined +(697 public rows). 26 pending mlb 07-20 rows left untouched to self-heal on the +next cycle, as ordered. + ## ๐ŸŸข GRADING DATE BINDING FIXED โ€” wrong-opponent bug closed (2026-07-20 07:50 UTC) `computeFeatures.lookupTodayGame` โ†’ **`lookupGameOnDate`**: it now sends `?dates=YYYYMMDD` from the prop's BOUND game instead of taking ESPN's dateless