diff --git a/specs/restamp-a.md b/specs/restamp-a.md new file mode 100644 index 0000000..f37c27e --- /dev/null +++ b/specs/restamp-a.md @@ -0,0 +1,119 @@ +# RE-STAMP A โ€” 862 ROWS RECOVERED BY HONEST JOIN + +**Date:** 2026-08-02 ยท served path, champion and reference ruler **byte-identical** +(no application code changed) ยท database only. + +--- + +## RESULT + +| | rows | books | settled | pending | +|---|---:|---|---:|---:| +| **RE-STAMPED** (`price_source='archive_restamp'`) | **862** | **862/862 takeable, 0 non-takeable** | 47 | **812** | +| still quarantined | **144** | 0 takeable | 0 | 143 | + +**Holdout verification, exactly as the committed scripts select:** + +``` +holdout rows total ................................. 2,792 + re-stamped rows INCLUDED ......................... 862 + re-stamped but non-takeable (must be 0) .......... 0 +still excluded ..................................... 144 +quarantined rows leaked into holdout (must be 0) ... 0 +NON-TAKEABLE rows in the holdout since 2026-08-01 .. 0 +``` + +**812 pending clean rows recovered** into the accruing verdicts, and the +contamination is fully out of the measurement population. + +--- + +## ๐Ÿ”ด 862, NOT 936 โ€” a deviation worth stating plainly + +The order authorised **936**, from the earlier finding that a takeable book posted +the **same LINE**. Requiring what a re-stamp actually needs โ€” **that takeable +book's price for the GRADED SIDE, at LOCK TIME** โ€” resolves **862**. + +**Why the other 74 were left out:** + +| reason | rows | +|---|---:| +| takeable side-price exists **only OUTSIDE the lock window** | **73** | +| genuinely **one-sided** takeable market | 5 | + +*(overlapping; 74 distinct)* + +**I did not widen the window to reach 936.** A takeable price captured hours after +the grade is **a later market moment, not a lock price**. Substituting it would be +exactly the reconstruct-vs-join line this order was fenced against โ€” and it would +have been invisible in the totals, showing only as a cleaner-looking 936. + +Those 74 were also **re-tagged**, because their old label had become a lie: +`recoverable_same_line` โ†’ **`no_takeable_lock_price_for_side`**. A future attempt +reading the old tag would have been invited to widen the window and call it +recovery. + +--- + +## THE JOIN + +Same `player_key + stat + game_date + LINE`, **takeable books only**, from +**`lock_lines`** (lock time โ€” *not* `closing_captures`, which is the wrong moment +for a lock price). Where several takeable books locked the same prop, the **latest +lock at or before the grade**, deterministically. + +**`takeable` was RECOMPUTED, not carried over** โ€” the old flag was computed *from* +the contaminated price and was wrong on its own terms. **101 rows had their flag +change**, which is the direct measure of how wrong it was. + +Four distinct takeable books supplied the recovered prices. + +## PROVENANCE + +`price_source` โ€” `native_takeable` vs **`archive_restamp`** โ€” travels with the +data, on the same principle as `is_proxy` on the opportunity axis. + +**A value recovered by a later join is not identical in kind to one captured +natively at grade time, even when it is the same number.** Any future bias check +can segment on it; `NULL` predates the distinction and claims nothing. + +## WHAT STAYS OUT โ€” 144 rows + +| tag | rows | +|---|---:| +| `no_takeable_lock_price_for_side` | 74 | +| `no_takeable_quote` | 49 | +| `takeable_line_differs` | 21 | + +**Re-stamping any of these would invent a lock price, or a line, we never +captured.** None has settled, so nothing is lost from the record โ€” only 143 +pending rows stay out of the holdouts, honestly. + +--- + +## NEXT + +**(b) Combined structural-hardening order** โ€” shared, tested guards for: +- **`Number(null) === 0` โ†’ unknown โ‰  zero** (6ร— recurring, most recently in my own + new module). +- **Takeable by BOOK IDENTITY, never by price extremity or one-sidedness.** This + audit produced direct evidence for that invariant: **5 of the excluded rows are + one-sided takeable markets, and `betrivers`/`hardrockbet` legitimately quote + one side only.** A thin, juiced or one-sided takeable market is **REAL**, not + contamination โ€” and a guard that inferred takeability from price shape would + throw away real markets while still admitting a DFS book at โˆ’119. + +**(c) `hits`** โ€” inherits both guards, and must model thin/one-sided takeable +markets as a **normal state**, not a clean two-sided assumption. + +**Carry-forward:** tb-v1 verdict ยท third pre-registered branch ยท **524 โ‰  failure** +(100s Cloudflare origin timeout vs a ~115s snapshot; the work completes). + +## TAGS + +**VERIFIED:** 862 re-stamped, 862/862 takeable ยท 0 non-takeable in the holdout +since 2026-08-01 ยท 0 quarantined rows leaked ยท 144 still excluded ยท 101 takeable +flags corrected ยท 812 pending rows recovered. + +**DEVIATION:** 862 not 936 โ€” the 74 lack a takeable LOCK-TIME price for the graded +side; the window was not widened to reach the authorised number.