← All findingssource · memory/project_window_provenance.md
The gap: every DH methodology flag asks whether the BET is sound (is she playing, has it tipped, is the price fair). Nothing asked whether the EVIDENCE is sound. A stale window produces confident, well-formed, completely wrong numbers and nothing downstream can tell them from good ones.
UPDATE 2026-08-26 (retro audit): SHIPPED AND LIVE. DH commits a0810a2/4b183c5 and grading 79347a4/c59fba8 merged+pushed; prod WNBA snapshot carries the fields live (game 1022600287: stale_window ×76, layoff_days ×16, baseline_shift ×28). Open remainder: the money formulas still consume NONE of these flags — they're advisory only (promote-to-gating is the open item).
Built 2026-08-25 (original note below; "NOT committed/deployed" is stale)
data-hydrator — branch layoff-and-season-shift-flags
MethodologyFlags.LayoffDays— days since her last game, set only when the absence spans >= 3x her OWN median rest gap (layoffMinGamesGap). Cadence- relative, so 12 days off flags on a 2-day rhythm and not on a 7-day one.PriorSeasonGames+BaselineShiftFlag("grew"/"shrank") +HistoricalStatAvg— FIX 1's role-anchor test applied to the STAT instead of MINUTES.DiagnosticGameContext.GameDatethreaded fromsnap.GameDate.isStaleWindow()in projections.go overridesline_edgesquality to"stale_window", mirroringinactive_player. Gate order: inactive wins.
grading-service — branch window-provenance-rungs
BoardPlayer.{LayoffDays, PriorSeasonGames, BaselineShift map[stat]string}EnrichWindowProvenance()ininternal/verdict/window_provenance.go, mirroringBuildRoleWatch's per-game snapshot load. Best-effort: missing snapshot leaves the board untouched.- Two rungs in
CheckLeg(R1b):stale_windowandcross_season_window, both LevelAmber — she IS playing, the evidence is what's missing. - Wired into
/verdict/boardand the slip-check path. - 15 tests across both repos; both full suites green.
Two measurements that changed the design — do not skip these
A games-missed count is NOT shippable. absence / median-gap measured 7 for Kelsey Plum (who missed 3) and 21 for Maddy Westbeld (half a season). A player's median gap is pulled down by back-to-backs and is not her team's cadence. Ship exact DAYS; it answers the same question and is correct.
BaselineShiftFlag alone must NOT suppress. Blast radius on the 2026-08-25
WNBA board (84 players): layoff 14 (17%, every one genuine — Christyn Williams
348 days, Diggins 53, Plum 16); baseline-shift 15 (18%) but almost all healthy
regulars 30+ games in whose recent form merely sits off their season average —
that is RecentVsBaselineFlag's job. Suppress only when
PriorSeasonGames > 0 AND BaselineShiftFlag != "" (~3/84 = 4%, the Carleton mode).
Always measure blast radius before flipping a suppressor.
Already existed — do not rebuild
min_conditionalin DHprop_diagnostic(10/15/20-min floors, per stat, withhits_overper line). The conditional-on-minutes idea shipped long ago. Starved becausebuildLineEdgesruns on an L10 window.CheckPrice/BetterBookin verdict R5 — line shopping is ALREADY built.- DH windows are a fixed COUNT not a date range, so they silently cross season boundaries (Westbeld's 10 games spanned 2025-08-13 .. 2026-07-12) and go stale (Nogic's ended 2026-06-17).
Related: feedback_verify_before_extend, project_decision_layer_audit, feedback_active_tonight_gate, project_conditional_minutes_refuted