From ecf78b911c96618e3ffb10943a7bbc872fa1d6d8 Mon Sep 17 00:00:00 2001 From: Kev Date: Fri, 7 Aug 2026 03:50:53 -0400 Subject: [PATCH] Accrual watch + pre-registered resumption; the program is idle on modeling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PHASE 1 — the existence risk is resolved. Nineteen commits were local-only with no push credentials. Three artifacts now exist off the working tree: ~/vyndr-full-history-2026-08-07.bundle 6.8M SELF-CONTAINED, clone it ~/vyndr-session-2026-08-07.bundle 244K needs existing history ~/vyndr-session-patches/ (20 patches) 1.5M Use the full-history bundle -- `git bundle verify` shows the session bundle requires ref 6452926, so it only applies onto a repo that already has this history. The full one clones standalone. Copying one off the machine is the top non-accrual action item. PHASE 2 — the watch, today's starting line: 0 eligible rows, 0 eligible dates, everything WAITING. Zero is correct, since the repair ships in this session's commits and no settled row can carry the marker yet. THRESHOLDS ARE ATTEMPT FLOORS, NOT TRUST FLOORS, and this is written into the ledger so a future session cannot misread it. Reaching 10 dates means the calibration re-fit CAN BE MEASURED, not that it is trustworthy -- we lived that distinction tonight with 2-4 cluster CIs, a LODO gate at 1.4-9.3% power, and a >=40 bar that was right for promotion and wrong for deploy. A 10-date map is thin, deploys PROVISIONAL with auto-demotion, and its interval will still be wide. Real-time estimates stated so the wait reads as designed: ~2 weeks for calibration and hits lift, 3+ weeks for the verdict re-audit and the rbi gate, since rbi accrues slowest and a date only counts once its props settle. PHASE 3 — resumption order fixed, triggered purely by date thresholds: calibration re-fit @10, hits composed-lift re-measure @10 (the 1.39% figure is VOID, direction unknown), prior verdict re-audit @14 (not pre-priced), rbi lineup-slot two-part gate @14. FIRST TRIGGER: when reAuditEligibility reports 10 eligible calibration dates. Until then the program is honestly IDLE on modeling. That is the correct state, not a gap to fill -- the alternative is measuring on reconstructions of a retired forecast, which this program has now refused by name three times. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9 --- specs/accrual-watch-and-resumption.md | 120 ++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 specs/accrual-watch-and-resumption.md diff --git a/specs/accrual-watch-and-resumption.md b/specs/accrual-watch-and-resumption.md new file mode 100644 index 0000000..671f51f --- /dev/null +++ b/specs/accrual-watch-and-resumption.md @@ -0,0 +1,120 @@ +# The accrual watch — the program is idle on modeling, and that is correct + +## PHASE 0 — live-surface integrity + +| check | result | +|---|---| +| Grade bands not derived from the retired champion | **PASS** — `gradeBands` is required by *no* serving code. Built across several orders, never wired. No stale band can reach a user because none reaches a user at all. | +| No withdrawn-map leak | **PASS** — `CALIBRATION_DEPLOYED` is `[]` and the calibrate loop iterates it, so `calibrate()` is never called. The only `p_win_calibrated` assignment sits inside that empty loop. Served `p_win` is repaired-champion raw. | +| Refusals on the repaired reference | **PASS** — `projectionFor` reads `l20_avg`, which `mlbGameLogFeatures` now builds from `fullLog`. | +| Factors still fire post-repair | **PASS** — the repair moved the base they adjust, so sign was re-verified across it: at base 0.35/0.50/0.65/0.80, defence lowers, pitcher-contact raises, platoon raises at every point. Firing check only; **not** a lift re-measurement. | + +### One defect found, and it was mine + +The grade card rendered **"Last 20 games average: X"** from `l20_avg` — a field +that, after the repair, holds a **full-season** average. The number moved and the +label did not, so the surface asserted a window that no longer existed. Fixed to +"Season average"; `trapDetection`'s L20 explanations likewise. + +Same class as everything else tonight, one layer out: **a correct-looking string +describing data that moved underneath it.** + +--- + +## PHASE 1 — the existence risk, resolved + +Nineteen commits (`7b85934` → `2391574`) were local-only with no push +credentials. Three retrievable artifacts now exist: + +| artifact | path | size | +|---|---|---| +| session bundle | `~/vyndr-session-2026-08-07.bundle` | 244K | +| **full-history bundle (self-contained)** | `~/vyndr-full-history-2026-08-07.bundle` | 6.8M | +| patch series (20 files) | `~/vyndr-session-patches/` | 1.5M | + +**Use the full-history bundle** — the session bundle verifies as requiring ref +`6452926…`, so it only applies onto a repo that already has this history. The +full-history one clones standalone: + +``` +git clone ~/vyndr-full-history-2026-08-07.bundle vyndr-recovered +``` + +**This is the top non-accrual action item.** Copy one of these off the machine. + +--- + +## PHASE 2 — the accrual watch + +``` +repaired champion marker: engine1@2026-08-07-fullwindow +eligible rows: 0 | eligible dates: 0 +blocked: no settled rows yet carry the repaired champion marker +``` + +| item | need | have | status | +|---|---|---|---| +| calibration re-fit | 10 dates | 0 | WAITING | +| hits factor lift | 10 dates | 0 | WAITING | +| prior verdict re-audit | 14 dates | 0 | WAITING | +| rbi lineup-slot gate | 14 dates | 0 | WAITING | + +Zero is the correct starting line: the repair ships in *this* session's commits, +so no settled row can carry the marker yet. + +### These are ATTEMPT floors, not TRUST floors + +**Reaching 10 dates means "the calibration re-fit can now be measured." It does +NOT mean the re-fit is trustworthy.** We lived this distinction the hard way +tonight: date-block CIs on 2–4 clusters, a LODO gate with 1.4–9.3% power, and a +≥40 date-cluster bar that was correct as a promotion bar and wrong as a deploy +bar. A 10-date map is thin. It deploys **PROVISIONAL with auto-demotion**, like +everything else, and its interval will still be wide. + +**No future session may read "threshold met" as "answer certified."** + +### Real-time estimates + +Roughly one MLB slate per day, but per-stat settled volume differs — hits props +are far more numerous than rbi, and a "date" only counts once its props settle. + +| item | dates | realistic wall-clock | +|---|---|---| +| calibration re-fit, hits lift | 10 | **~2 weeks** | +| verdict re-audit, rbi gate | 14 | **3+ weeks** (rbi accrues slowest) | + +The wait is **designed, not a stall.** The alternative — measuring on +reconstructions of a retired forecast — is the trap this program has now refused +by name three times. + +--- + +## PHASE 3 — the pre-registered resumption order + +Triggered purely by eligible-date thresholds. No re-litigation, no re-deciding: + +1. **@10 dates — calibration re-fit on the repaired champion.** Low-parameter, + LODO where powered, PROVISIONAL, auto-demotion armed, shadow duel restarts on + the repaired forecast. The favourite-longshot bias must be **re-measured**, + not assumed to have survived the repair. +2. **@10 dates — hits factor composed-lift re-measure.** The 1.39% figure is + **void** — measured on the broken baseline. Direction unknown. +3. **@14 dates — prior factor verdict re-audit.** Every null and every THEATER + was scored against a champion worse than a frequency table. Not pre-priced; + some may pass, some may still fail. +4. **@14 dates — rbi lineup-slot / RISP through the two-part gate.** World A + ~90%, within-role residual 0.01908 real, `lineup_context` prod-verified (S89). + +**FIRST TRIGGER:** when `reAuditEligibility.assess()` reports **10 eligible +calibration dates**, the next order is the calibration re-fit. + +**Until then the program is honestly IDLE on modeling.** That is the correct +state, not a gap to fill. + +--- + +## Invariants + +No measurement on reconstructions — held. Phase 0 verified live integrity and +factor *firing*; it did not re-measure lift or re-fit calibration. Serving change +for the label fix, fingerprinted. `p_win` never mutated. No Bonferroni slot.