Construction
The machine, and what of it is actually running
The predictive machine by layer, then the spine that ships v1 underneath.
1 lane(s) DEAD: rival snapshot: did not run for its Tue 07:15 firing — last evidence 1424 min agowatchdog ran Tue 08:01 (2 min ago)
8 of 116 plan items built · 7%
The map below probes INFRASTRUCTURE -- tables with rows, jobs loaded. That is a different question from whether the design is built, and the map will read far greener than this number for a long time. This is the one to watch.
launchctl answering. Nothing here is typed green. The blue box is what the seat has open this minute, written by bin/pw-now.py; the top four bands are the machine Fable's Play-Grain plan describes, and the bottom two are what keeps the current product shipping while that is built.In flight
0 items
Queued
121 items
Filed wrong: J-06, O-03 are in this section but marked with a state that belongs to another. Move the item, or fix its state.
Lead: separate two worlds for his snap share
- Why
- The residual ledger named his snap share as a known unknown worth 0.3332. This lead proposes an observation that would tell two competing explanations apart. It is a LEAD, not a design: it passed the airlock (schema + at least one resolving citation) and nothing more.
- Detail
- { "two_worlds": [ "The player is an every-down foundational starter whose usage is immune to offensive game script.", "The player is a situational package specialist dependent on down, distance, and game flow." ], "separating_observation": "The percentage of first-quarter, first-and-ten plays the player was on the field for.", "where_to_get_it": "The free 'nflverse' public participation dataset (pbp_participation), specifically by parsing the 'offense_players' column for the player's GSIS ID.", "citations": [ "https://nflreadr.nflverse.com/reference/load_participation.html", "https://github.com/nflverse/nflverse-data/releases/tag/pbp_participation" ], "confidence": "high", "_dead_citations": [] } ID RE-PREFIXED 2026-09-22. This item was filed as C-31, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
C-04 — **The number you actually face.** Hourly from Monday 00:00 to Wednesday 23:59 MT: spreads, total
- Why
- Plan item C-04, lane sensors, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- **The number you actually face.** Hourly from Monday 00:00 to Wednesday 23:59 MT: spreads, totals, moneylines, team totals and alt lines from every book in the feed. `williamhill_us` (Caesars, the operator of the Jackpot property) is flagged as the board proxy. `odds_history` already holds 32 books and 205 instants since 2023-09. Table: `early_lines`. FILES THE PLAN NAMES: research/playgrain/sensors/early_lines_capture.py MISSING: early_lines_capture.py PRIOR EVIDENCE on the old board: C-76, C-04
E-08 — Weekly prospective issuance at the TUE lock, frozen beside v1 and the rival, graded the followin
- Why
- Plan item E-08, lane kernel, drift, decision, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Weekly prospective issuance at the TUE lock, frozen beside v1 and the rival, graded the following Tuesday. Two shadow slots, as the schematic specifies. FILES THE PLAN NAMES: research/playgrain/evalx/issue_shadow.py, evalx/grade_week.py MISSING: issue_shadow.py, grade_week.py No prior board item ever mentioned this.
F-01 — The measured fix. | MAE 4.2600 → 3.8748
- Why
- Plan item F-01, lane truth and the fantasy path, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The measured fix. | MAE 4.2600 → 3.8748 FILES THE PLAN NAMES: none all present No prior board item ever mentioned this.
J-06 — Score and fit on the unconditional population, with `E[pts] = P(play)·E[pts \| play]` and DNPs a
- Why
- Plan item J-06, lane truth and the fantasy path, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Score and fit on the unconditional population, with `E[pts] = P(play)·E[pts \| play]` and DNPs as zeros. Include weeks 1–3, which have never been scored. | Every gate states its population string; `tests/test_gate_population.py`. FILES THE PLAN NAMES: playerweek/arms.py:229 all present No prior board item ever mentioned this.
J-07 — Force `ORDER BY` on every sampled frame and hash the frame. This removes the ~0.006 pts/wk row-o
- Why
- Plan item J-07, lane truth and the fantasy path, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Force `ORDER BY` on every sampled frame and hash the frame. This removes the ~0.006 pts/wk row-order floor that blocked 20 verdicts. | The same seed twice gives an identical hash. FILES THE PLAN NAMES: research/playgrain/evalx/determinism.py all present No prior board item ever mentioned this.
J-10 — Delete the stale "irreducible" text; fail the build on `irreducible\|noise floor\|ceiling` appli
- Why
- Plan item J-10, lane truth and the fantasy path, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Delete the stale "irreducible" text; fail the build on `irreducible\|noise floor\|ceiling` applied to football. The CORE-BRIEF's two sanctioned senses are allow-listed. | Green. FILES THE PLAN NAMES: tests/test_banned_words.py MISSING: test_banned_words.py No prior board item ever mentioned this.
O-03 — The 38 duplicated 459 MB warehouses in `forecast-refresh/` become hard links to one content-addr
- Why
- Plan item O-03, lane sensors, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The 38 duplicated 459 MB warehouses in `forecast-refresh/` become hard links to one content-addressed copy, with manifests kept. 70 GB shrinks to a few. Enforce the written 21-day policy. FILES THE PLAN NAMES: bin/archive-retention.sh, research/playgrain/operate/dedupe_runs.py MISSING: dedupe_runs.py No prior board item ever mentioned this.
P-07 — Participation 2016–2025 → `participation(game_id, play_id, gsis_id, side, pos)` and `play_person
- Why
- Plan item P-07, lane ratings, lineups, policies, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Participation 2016–2025 → `participation(game_id, play_id, gsis_id, side, pos)` and `play_personnel(offense_personnel, defense_personnel, defenders_in_box, n_pass_rushers, formation, route, man_zone, coverage_type, time_to_throw, was_pressure)`. **Every charted post-snap field is tagged `POST_SNAP` in the contract** and usable only as a training target or a rating input, never as a same-play feature. This is the Gemini B-arm's own correction about `defense_coverage_type`. | Leak witness green. FILES THE PLAN NAMES: research/playgrain/load_participation.py MISSING: load_participation.py No prior board item ever mentioned this.
P-10 — One identity: GSIS canonical through `dp_ids` (35 id systems, 100% populated) in place of `xwalk
- Why
- Plan item P-10, lane ratings, lineups, policies, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- One identity: GSIS canonical through `dp_ids` (35 id systems, 100% populated) in place of `xwalk` (29% null). Kickers and DST included; all kickoffs in UTC with the Eastern source column kept. Fixes the week-1 FantasyPros-id join that "silently matches nothing". | 0 orphan ids; `SCHEDULE_IDENTITY_CONFLICT` (`player_scorecard.py:731-750`) re-keyed from exact-UTC equality to `game_id`. FILES THE PLAN NAMES: research/playgrain/players_dim.py MISSING: players_dim.py No prior board item ever mentioned this.
S-08 — Early stopping on a validation season, not an inference cap at 60 rounds. 115 integer yard bins.
- Why
- Plan item S-08, lane kernel, drift, decision, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Early stopping on a validation season, not an inference cap at 60 rounds. 115 integer yard bins. Passes split into air yards and YAC (`mag_air`, `mag_yac`). Every booster registered with its training hash. | OOS log-loss monotone in rounds. FILES THE PLAN NAMES: fit_models.py all present No prior board item ever mentioned this.
X-01 — **First thing built.** k-step rollouts from real states (k = 1, 2, 4, 8, 16, to end of drive); d
- Why
- Plan item X-01, lane kernel, drift, decision, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- **First thing built.** k-step rollouts from real states (k = 1, 2, 4, 8, 16, to end of drive); divergence curves for yards per play, completion and field position, stratified by the game's realised-minus-rated quality. It confirms or kills the §3 diagnosis. | The result decides the order of X-02/03/04. FILES THE PLAN NAMES: research/playgrain/drift/drift_decompose.py MISSING: drift_decompose.py No prior board item ever mentioned this.
A-01 — The Wed/Thu/Fri practice-status and game-status ladder, 2016–2026, as-of, from `inj_raw` and C-1
- Why
- Plan item A-01, lane ratings, lineups, policies, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The Wed/Thu/Fri practice-status and game-status ladder, 2016–2026, as-of, from `inj_raw` and C-14. | Every status row has a received-time or a reconstructed publish time. FILES THE PLAN NAMES: research/playgrain/lineup/inj_ladder.py MISSING: inj_ladder.py PRIOR EVIDENCE on the old board: C-75
B-01 — Head coach, play-caller, OC and DC per team-week, as-of. `coordinators.csv` exists; fix `games_r
- Why
- Plan item B-01, lane ratings, lineups, policies, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Head coach, play-caller, OC and DC per team-week, as-of. `coordinators.csv` exists; fix `games_raw.home_coach`. FILES THE PLAN NAMES: research/playgrain/policy/coach_dim.py MISSING: coach_dim.py No prior board item ever mentioned this.
C-06 — Fix the Eastern-into-UTC index bug. Capture the forecast ladder (lead 7→0 days, hourly) for ever
- Why
- Plan item C-06, lane sensors, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Fix the Eastern-into-UTC index bug. Capture the forecast ladder (lead 7→0 days, hourly) for every venue. Backfill historical *forecasts*, not observations, from Open-Meteo's historical-forecast archive. Remove `temp_observed`/`wind_observed` from the five feature tables that leak them. FILES THE PLAN NAMES: research/playgrain/sensors/weather_asof.py, playerweek/openmeteo.py:40-59 MISSING: weather_asof.py No prior board item ever mentioned this.
C-07 — Referee crew per game, historical from nflverse `officials` plus the weekly assignment release.
- Why
- Plan item C-07, lane sensors, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Referee crew per game, historical from nflverse `officials` plus the weekly assignment release. FILES THE PLAN NAMES: research/playgrain/sensors/officials_capture.py MISSING: officials_capture.py PRIOR EVIDENCE on the old board: C-07
C-09 — Daily roster diff: signings, IR, practice-squad elevations (the Saturday tell), waiver claims.
- Why
- Plan item C-09, lane sensors, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Daily roster diff: signings, IR, practice-squad elevations (the Saturday tell), waiver claims. FILES THE PLAN NAMES: research/playgrain/sensors/transactions_capture.py MISSING: transactions_capture.py PRIOR EVIDENCE on the old board: C-09
C-11 — One refresher for everything on the nflverse release path: pbp, participation, FTN charting, NGS
- Why
- Plan item C-11, lane sensors, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- One refresher for everything on the nflverse release path: pbp, participation, FTN charting, NGS (2026 rows are missing), PFR advanced stats (2026 missing), snaps, depth charts, rosters_weekly, injuries, officials, contracts. Records `fetched_at` and the upstream `last_modified`. FILES THE PLAN NAMES: research/playgrain/sensors/nflverse_refresh.py MISSING: nflverse_refresh.py No prior board item ever mentioned this.
C-12 — Parse the FTN payloads already sitting in `evidence.sqlite` into `ftn_charting`: play-action, sc
- Why
- Plan item C-12, lane sensors, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Parse the FTN payloads already sitting in `evidence.sqlite` into `ftn_charting`: play-action, screen, RPO, motion, blitzers, rushers, out-of-pocket, catchable, contested, drop, created reception, read thrown, QB location, hash. FILES THE PLAN NAMES: research/playgrain/sensors/ftn_parse.py MISSING: ftn_parse.py PRIOR EVIDENCE on the old board: C-77
C-13 — Fill `published_at` and `effective_at` on the 9,039 receipts, then on every table without a cloc
- Why
- Plan item C-13, lane sensors, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Fill `published_at` and `effective_at` on the 9,039 receipts, then on every table without a clock (125 of 187), in order of use. FILES THE PLAN NAMES: research/playgrain/sensors/evidence_clocks.py MISSING: evidence_clocks.py No prior board item ever mentioned this.
E-01 — Rolling origin 2004→2025: fit ≤ season s−2, calibrate on s−1, simulate every game of s from its
- Why
- Plan item E-01, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Rolling origin 2004→2025: fit ≤ season s−2, calibrate on s−1, simulate every game of s from its as-of state. Produces a distribution for every game in 22 seasons. Runs overnight; resumable. FILES THE PLAN NAMES: research/playgrain/evalx/walkforward.py MISSING: walkforward.py No prior board item ever mentioned this.
F-03 — Train on `played=0` rows too, so the model *can* emit a low number. | Re-enables `loss="absolute
- Why
- Plan item F-03, lane truth and the fantasy path, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Train on `played=0` rows too, so the model *can* emit a low number. | Re-enables `loss="absolute_error"`, which passed every gate and was silently killed FILES THE PLAN NAMES: none all present No prior board item ever mentioned this.
F-04 — Move the 0.40 FantasyPros blend, league-rate calibration, designation decay and rookie pass *ins
- Why
- Plan item F-04, lane truth and the fantasy path, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Move the 0.40 FantasyPros blend, league-rate calibration, designation decay and rookie pass *inside* `lines_for`, or score the board end to end, so the board and the measured model are one object. | Live mean error −3.42 → ~0 FILES THE PLAN NAMES: none all present No prior board item ever mentioned this.
J-01 — Remove `mkt_total`, `mkt_spread`, `mkt_team_total` from `team_volume` and refit. At serve time t
- Why
- Plan item J-01, lane truth and the fantasy path, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Remove `mkt_total`, `mkt_spread`, `mkt_team_total` from `team_volume` and refit. At serve time they are constants that collapse into the intercept, so they buy nothing and contaminate every backtest. Call `knowability.assert_clean` *inside* `lines_for`; it never runs on the model path today. | `tests/test_no_market_reachable.py` fails if any market-derived column is reachable from `ALL_FEATURES` or `team_volume`. FILES THE PLAN NAMES: playerweek/playermodel.py:95-170, playerweek/share.py all present No prior board item ever mentioned this.
J-02 — Remove the `HOME_FIELD_MARGIN/2` double count (1.748 pts/game). Home field is derived from sched
- Why
- Plan item J-02, lane truth and the fantasy path, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Remove the `HOME_FIELD_MARGIN/2` double count (1.748 pts/game). Home field is derived from schedule and venue only. | Mean home residual on the 2019–2025 holdout within ±0.2. FILES THE PLAN NAMES: playerweek/gameproj.py all present No prior board item ever mentioned this.
J-03 — Re-run every headline accuracy number on clean features and the full population; publish before/
- Why
- Plan item J-03, lane truth and the fantasy path, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Re-run every headline accuracy number on clean features and the full population; publish before/after. Expect the numbers to get worse. | Table written to the results store. FILES THE PLAN NAMES: research/playgrain/evalx/remeasure_ledger.py MISSING: remeasure_ledger.py No prior board item ever mentioned this.
J-08 — Mutation harness: inject a known defect per test and require a red result. 73 of 156 tests curre
- Why
- Plan item J-08, lane truth and the fantasy path, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Mutation harness: inject a known defect per test and require a red result. 73 of 156 tests currently cannot fail. | 0 un-failable tests; the auto-shipper's two first. FILES THE PLAN NAMES: tests/audit_gates_can_fail.py MISSING: audit_gates_can_fail.py No prior board item ever mentioned this.
J-09 — Cross-fit every calibration, isotonic and stack weight that is in-sample today (D-232: 0.9984 in
- Why
- Plan item J-09, lane truth and the fantasy path, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Cross-fit every calibration, isotonic and stack weight that is in-sample today (D-232: 0.9984 in-sample against 1.1383 held out). | Held-out `got/said` within 0.97–1.03 by position. FILES THE PLAN NAMES: none all present No prior board item ever mentioned this.
S-09 — A learned penalty model: type, yards and automatic first down, by crew (C-07) and team disciplin
- Why
- Plan item S-09, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- A learned penalty model: type, yards and automatic first down, by crew (C-07) and team discipline rating. Defensive pass interference is real yardage that box scores record as zero. | Penalty yards per game by crew within 5%. FILES THE PLAN NAMES: research/playgrain/kernel/penalties.py MISSING: penalties.py No prior board item ever mentioned this.
S-10 — Semi-Markov durations: the elapsed-time *distribution* per play type, state, tempo and coach, in
- Why
- Plan item S-10, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Semi-Markov durations: the elapsed-time *distribution* per play type, state, tempo and coach, in place of five constants. Two-minute warning, runoffs, timeouts. | Plays per game 152.3 ± 2%. FILES THE PLAN NAMES: research/playgrain/kernel/clock.py MISSING: clock.py No prior board item ever mentioned this.
S-11 — Kickoffs (with the 2024 rule era), punts, returns, blocks, and field goals by kicker rating × di
- Why
- Plan item S-11, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Kickoffs (with the 2024 rule era), punts, returns, blocks, and field goals by kicker rating × distance × wind × altitude × roof. Also extra points, two-pointers and onside kicks. | FG make curve calibrated; no possession starts at a constant 30. FILES THE PLAN NAMES: research/playgrain/kernel/special_teams.py MISSING: special_teams.py No prior board item ever mentioned this.
S-12 — Interception and fumble returns, defensive TDs, recovery. This replaces the additive 2.18 pts/te
- Why
- Plan item S-12, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Interception and fumble returns, defensive TDs, recovery. This replaces the additive 2.18 pts/team-game constant in `drives.py:865`. | Non-offensive points emerge within 0.2. FILES THE PLAN NAMES: research/playgrain/kernel/turnover_returns.py MISSING: turnover_returns.py No prior board item ever mentioned this.
S-13 — Rule-exact overtime by era. | 61% of overtime games finish on 3, as in history.
- Why
- Plan item S-13, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Rule-exact overtime by era. | 61% of overtime games finish on 3, as in history. FILES THE PLAN NAMES: research/playgrain/kernel/overtime.py MISSING: overtime.py No prior board item ever mentioned this.
T-01 — The role of every player on every play: passer, carrier, target, route runner, pass blocker, run
- Why
- Plan item T-01, lane ratings, lineups, policies, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The role of every player on every play: passer, carrier, target, route runner, pass blocker, run blocker, rusher, coverage, box. From participation and pbp ids. | Coverage ≥ 99% of 2016–2025 snaps. FILES THE PLAN NAMES: research/playgrain/talent/player_roles.py MISSING: player_roles.py No prior board item ever mentioned this.
T-02 — Regularised adjusted plus-minus at the play grain: a sparse design matrix (players on field × ro
- Why
- Plan item T-02, lane ratings, lineups, policies, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Regularised adjusted plus-minus at the play grain: a sparse design matrix (players on field × role) in `scipy.sparse`, solved by LSQR with ridge, targets EPA, success, yards, pressure, completion. Hierarchical prior by position, as-of each week, exponential decay. Output `player_latents(gsis_id, role, valid_time, mu, sd, n_eff)`. | Adds play-level log-loss to the kernel, held out, above the parsimony tax. FILES THE PLAN NAMES: research/playgrain/talent/rapm_fit.py MISSING: rapm_fit.py No prior board item ever mentioned this.
T-04 — Priors for players with little history: draft pick (the only B-hypothesis that ever paid, B13/B4
- Why
- Plan item T-04, lane ratings, lineups, policies, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Priors for players with little history: draft pick (the only B-hypothesis that ever paid, B13/B41: +0.0475, +0.0595), combine, college production (C-17), Madden ratings (`data/madden.csv`), position age curves. | Rookie first-four-games error beats the league-mean prior. FILES THE PLAN NAMES: research/playgrain/talent/priors.py, talent/age_curves.py MISSING: priors.py, age_curves.py No prior board item ever mentioned this.
X-02 — Add `form_off`, `form_def` (leave-one-play-out EPA in this game) to `LATENT`; fit the distributi
- Why
- Plan item X-02, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Add `form_off`, `form_def` (leave-one-play-out EPA in this game) to `LATENT`; fit the distribution of form given ratings; the simulator draws it once per trajectory per unit. | Simulated margin sd 14.2 ± 0.3; yards per play within 0.05 of real. FILES THE PLAN NAMES: research/playgrain/drift/game_effect.py, features.py MISSING: game_effect.py No prior board item ever mentioned this.
X-03 — Density-ratio classifier (real states against simulated); reweight the transition fits to the si
- Why
- Plan item X-03, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Density-ratio classifier (real states against simulated); reweight the transition fits to the simulator's state distribution. | Play-level log-loss on real states not worse by more than the tax. FILES THE PLAN NAMES: research/playgrain/drift/dagger_refit.py MISSING: dagger_refit.py No prior board item ever mentioned this.
X-04 — Simulation-based calibration of a small vector of logit offsets against drive and game moments f
- Why
- Plan item X-04, lane kernel, drift, decision, due Fri 25 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Simulation-based calibration of a small vector of logit offsets against drive and game moments from `drive_week`, under common random numbers. The moments are plays per drive, third-down rate, TD/FG/punt rates, totals, margin sd and key-number masses. | All moments within tolerance at once. No more cancelling errors. FILES THE PLAN NAMES: research/playgrain/drift/sbi_calibrate.py MISSING: sbi_calibrate.py No prior board item ever mentioned this.
A-02 — P(active) → P(plays \| active) → snap share \| plays. LightGBM plus isotonic, fitted at each loc
- Why
- Plan item A-02, lane ratings, lineups, policies, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- P(active) → P(plays \| active) → snap share \| plays. LightGBM plus isotonic, fitted at each lock (TUE, WED, THU, FRI, SAT, T-90); the feature list follows this table. | Log loss beats carry-forward *and* the pre-kickoff consensus (the OR-12.2 rows). FILES THE PLAN NAMES: research/playgrain/lineup/avail_hurdle.py MISSING: avail_hurdle.py No prior board item ever mentioned this.
A-05 — For each trajectory, draw who is active, the role depth chart, and the on-field set for each per
- Why
- Plan item A-05, lane ratings, lineups, policies, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- For each trajectory, draw who is active, the role depth chart, and the on-field set for each personnel grouping. Returns the `Lineup` the kernel consumes. | Simulated snap shares against realised: MAE by position, published. FILES THE PLAN NAMES: research/playgrain/lineup/lineup_sampler.py MISSING: lineup_sampler.py No prior board item ever mentioned this.
B-02 — Action model v2, replacing `train_action.py`: P(action \| state, personnel, unit ratings, QB, we
- Why
- Plan item B-02, lane ratings, lineups, policies, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Action model v2, replacing `train_action.py`: P(action \| state, personnel, unit ratings, QB, weather, play-caller effect). Multiclass LightGBM with as-of hierarchical play-caller encodings. Includes pass rate over expected, tempo, shotgun, play-action, screen, RPO and motion rates. Play-caller intent is modelled separately from QB execution: a checkdown is not a conservative call. FILES THE PLAN NAMES: research/playgrain/policy/policy_offense.py MISSING: policy_offense.py No prior board item ever mentioned this.
B-03 — Personnel grouping (11/12/21…) given state and roster. This selects the on-field set from A-05.
- Why
- Plan item B-03, lane ratings, lineups, policies, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Personnel grouping (11/12/21…) given state and roster. This selects the on-field set from A-05. FILES THE PLAN NAMES: research/playgrain/policy/policy_personnel.py MISSING: policy_personnel.py No prior board item ever mentioned this.
B-04 — Go/punt/kick by coach. The late-and-close policy is its own model: kneel-downs, playing for the
- Why
- Plan item B-04, lane ratings, lineups, policies, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Go/punt/kick by coach. The late-and-close policy is its own model: kneel-downs, playing for the field goal when tied, the two-point chart, timeout use, and the end-of-half "give up" mode both Gemini runs named as a collapse source. **This is where the missing mass on 3 comes from.** FILES THE PLAN NAMES: research/playgrain/policy/policy_fourth.py, policy/policy_endgame.py MISSING: policy_fourth.py, policy_endgame.py No prior board item ever mentioned this.
C-08 — Two to four named beat writers per team through RSS, Bluesky and team sites, via `playerweek/bro
- Why
- Plan item C-08, lane sensors, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Two to four named beat writers per team through RSS, Bluesky and team sites, via `playerweek/browser.py` (isolated headless browser, never your Chrome). Received-time stamped. FILES THE PLAN NAMES: research/playgrain/sensors/beatwire_capture.py MISSING: beatwire_capture.py PRIOR EVIDENCE on the old board: C-08
C-10 — Coach and coordinator press conferences within 24 h. Podcast priority queue over the 461,382 ind
- Why
- Plan item C-10, lane sensors, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Coach and coordinator press conferences within 24 h. Podcast priority queue over the 461,382 indexed episodes: team-beat shows first, 72 h before each game, `whisper-large-v3-turbo` at ~27× realtime. Proper nouns are resolved against the 450,604-row roster table ("George Corloftis" → Karlaftis). FILES THE PLAN NAMES: research/playgrain/sensors/pressers_capture.py, sensors/podcast_transcribe.py MISSING: pressers_capture.py PRIOR EVIDENCE on the old board: C-10
C-14 — The injury-report ladder and depth charts "cannot be walked backwards" only through one endpoint
- Why
- Plan item C-14, lane sensors, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The injury-report ladder and depth charts "cannot be walked backwards" only through one endpoint. nflverse git history and the Wayback Machine do hold them. Rebuild Wed/Thu/Fri practice status for 2016–2025. FILES THE PLAN NAMES: research/playgrain/sensors/wayback_backfill.py MISSING: wayback_backfill.py PRIOR EVIDENCE on the old board: C-14
F-05 — Add the built-and-locked but unused PRE_KICKOFF blocks: home, rest, division, travel_km, tz_shif
- Why
- Plan item F-05, lane truth and the fantasy path, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Add the built-and-locked but unused PRE_KICKOFF blocks: home, rest, division, travel_km, tz_shift, elevation, roof, surface, OL continuity, pressure allowed/made, six turnover-cause rates. | One feature family per run, recorded FILES THE PLAN NAMES: none all present No prior board item ever mentioned this.
F-09 — The shipped DST ranking is *exactly* the market's. Rebuild it from unit ratings. | DST rank corr
- Why
- Plan item F-09, lane truth and the fantasy path, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The shipped DST ranking is *exactly* the market's. Rebuild it from unit ratings. | DST rank correlation to market < 1 FILES THE PLAN NAMES: kdefmodel.py all present No prior board item ever mentioned this.
Q-01 — Claim schema v2 adds **hedge**, **time anchor**, speaker role and copy ancestry. Q-22 is registe
- Why
- Plan item Q-01, lane sensors, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Claim schema v2 adds **hedge**, **time anchor**, speaker role and copy ancestry. Q-22 is registered and untested because the fields do not exist. Re-extract all 12,139 news bodies plus pressers and transcripts with the local reader, keeping the verbatim-evidence check. About 46 h of Mac time, overnight. FILES THE PLAN NAMES: playerweek/claims_v2.py MISSING: claims_v2.py No prior board item ever mentioned this.
S-06 — Isotonic calibration on a rolling holdout. The current model says 0.606 where 0.759 happens. Unb
- Why
- Plan item S-06, lane kernel, drift, decision, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Isotonic calibration on a rolling holdout. The current model says 0.606 where 0.759 happens. Unbuilt since revision 2. | Reliability slope 0.95–1.05. FILES THE PLAN NAMES: research/playgrain/calibrate.py all present No prior board item ever mentioned this.
T-03 — Directly measured component skills with shrinkage, from NGS, PFR advanced, FTN and pbp (the comp
- Why
- Plan item T-03, lane ratings, lineups, policies, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Directly measured component skills with shrinkage, from NGS, PFR advanced, FTN and pbp (the component list follows this table). | Each component must earn its place through L-10. FILES THE PLAN NAMES: research/playgrain/talent/skill_components.py MISSING: skill_components.py No prior board item ever mentioned this.
T-05 — Weekly state-space update per player-skill: process noise by age and position, a shock term on r
- Why
- Plan item T-05, lane ratings, lineups, policies, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Weekly state-space update per player-skill: process noise by age and position, a shock term on return from injury. The posterior **mean and variance** are stored, and the simulator samples from the posterior, so rating uncertainty becomes game variance. | Calibrated: standardised one-step errors ~N(0,1). FILES THE PLAN NAMES: research/playgrain/talent/kalman_latents.py MISSING: kalman_latents.py No prior board item ever mentioned this.
T-06 — The lineup → unit function: a learned map from the on-field players' vectors to the unit quantit
- Why
- Plan item T-06, lane ratings, lineups, policies, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The lineup → unit function: a learned map from the on-field players' vectors to the unit quantities the kernel consumes (pass protection, rush, coverage, run block, run fit, QB, skill group). | Natural-experiment test: across every historical starter absence, predicted unit change against realised. Slope 0.8–1.2. FILES THE PLAN NAMES: research/playgrain/talent/unit_compose.py MISSING: unit_compose.py No prior board item ever mentioned this.
X-05 — Key numbers: the mass at 3, 6, 7, 10, 14 and 17 on margin, and at 37, 41, 44, 47 and 51 on total
- Why
- Plan item X-05, lane kernel, drift, decision, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Key numbers: the mass at 3, 6, 7, 10, 14 and 17 on margin, and at 37, 41, 44, 47 and 51 on totals, against history by rules era. | Every ratio in 0.90–1.10. FILES THE PLAN NAMES: research/playgrain/drift/shape_test.py MISSING: shape_test.py No prior board item ever mentioned this.
X-06 — The column-by-column real-against-simulated feature diff that found the 3.2-sd `games_seen` shif
- Why
- Plan item X-06, lane kernel, drift, decision, due Tue 29 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The column-by-column real-against-simulated feature diff that found the 3.2-sd `games_seen` shift, as a standing gate. | No feature beyond 0.25 sd. FILES THE PLAN NAMES: research/playgrain/drift/feature_shift_diff.py MISSING: feature_shift_diff.py No prior board item ever mentioned this.
A-03 — Bets go down early, so forecast the injury report itself: P(Friday status \| Tuesday information
- Why
- Plan item A-03, lane ratings, lineups, policies, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Bets go down early, so forecast the injury report itself: P(Friday status \| Tuesday information). | Brier against the base rate by body part. FILES THE PLAN NAMES: research/playgrain/lineup/inj_report_forecast.py MISSING: inj_report_forecast.py No prior board item ever mentioned this.
A-04 — Per-snap exit hazard by position, age, injury history, surface and workload. Inside the simulato
- Why
- Plan item A-04, lane ratings, lineups, policies, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Per-snap exit hazard by position, age, injury history, surface and workload. Inside the simulator a player can leave and his backup enters. | Simulated exits per game match history by position. FILES THE PLAN NAMES: research/playgrain/lineup/ingame_injury_hazard.py MISSING: ingame_injury_hazard.py No prior board item ever mentioned this.
A-06 — Role regime changes as a changepoint posterior on snap share (`regime.py` and `kalman_share` exi
- Why
- Plan item A-06, lane ratings, lineups, policies, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Role regime changes as a changepoint posterior on snap share (`regime.py` and `kalman_share` exist), not a raw delta. FantasyPros' entire edge sits on players whose situation is changing (+4.753 MSE at 15+ pts of snap movement). | Beats `RECENCY_FEATURES`, which was measured as noise. FILES THE PLAN NAMES: research/playgrain/lineup/depth_roles.py MISSING: depth_roles.py No prior board item ever mentioned this.
B-05 — Box count, rushers, man/zone, shell, given state, offensive personnel and DC. These are the W-00
- Why
- Plan item B-05, lane ratings, lineups, policies, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Box count, rushers, man/zone, shell, given state, offensive personnel and DC. These are the W-001…W-014 columns that are "held on disk and read by no feature". FILES THE PLAN NAMES: research/playgrain/policy/policy_defense.py MISSING: policy_defense.py No prior board item ever mentioned this.
B-06 — Who gets the ball. Run: carrier among on-field backs and QB (designed or scramble). Pass: a mult
- Why
- Plan item B-06, lane ratings, lineups, policies, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Who gets the ball. Run: carrier among on-field backs and QB (designed or scramble). Pass: a multinomial over the routes on the field, given target-earning ratings, the coverage draw, the depth-of-target distribution and QB tendencies. Identity-free, so it works for any roster. It attacks the −0.5036 usage-share oracle directly. FILES THE PLAN NAMES: research/playgrain/policy/policy_target.py MISSING: policy_target.py PRIOR EVIDENCE on the old board: C-79
B-07 — A play-caller effect has to survive a change of team and quarterback, or it is a team effect in
- Why
- Plan item B-07, lane ratings, lineups, policies, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- A play-caller effect has to survive a change of team and quarterback, or it is a team effect in disguise. FILES THE PLAN NAMES: research/playgrain/policy/policy_transport_test.py MISSING: policy_transport_test.py No prior board item ever mentioned this.
C-15 — Every public Big Data Bowl tracking release (10 Hz, all 22 players) into `data/tracking/*.parque
- Why
- Plan item C-15, lane sensors, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Every public Big Data Bowl tracking release (10 Hz, all 22 players) into `data/tracking/*.parquet`. Used to train T-07, never joined to live weeks. FILES THE PLAN NAMES: research/playgrain/sensors/bdb_ingest.py MISSING: bdb_ingest.py PRIOR EVIDENCE on the old board: C-15, C-77
C-17 — College play-by-play and player seasons from collegefootballdata.com (free key) for rookie prior
- Why
- Plan item C-17, lane sensors, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- College play-by-play and player seasons from collegefootballdata.com (free key) for rookie priors. FILES THE PLAN NAMES: research/playgrain/sensors/cfbd_ingest.py MISSING: cfbd_ingest.py PRIOR EVIDENCE on the old board: C-17
D-01 — Fair prices from the calibrated distribution for every market on the board; exact push handling
- Why
- Plan item D-01, lane kernel, drift, decision, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Fair prices from the calibrated distribution for every market on the board; exact push handling at integers; edge against the *early* number. FILES THE PLAN NAMES: research/playgrain/decide/price.py MISSING: price.py No prior board item ever mentioned this.
D-02 — One sitting, up to ~100 wagers that settle together. Portfolio Kelly over the joint trajectories
- Why
- Plan item D-02, lane kernel, drift, decision, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- One sitting, up to ~100 wagers that settle together. Portfolio Kelly over the joint trajectories, fractional, with every correlated position in the same game priced jointly. The maximum fraction at risk is read from `~/.config/playerweek/risk.json`, which no agent may write. FILES THE PLAN NAMES: research/playgrain/decide/stake_portfolio.py, playerweek/stake.py MISSING: stake_portfolio.py No prior board item ever mentioned this.
D-03 — For each wager, the worst line and price at which it is still a bet. The board will have moved b
- Why
- Plan item D-03, lane kernel, drift, decision, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- For each wager, the worst line and price at which it is still a bet. The board will have moved by the time you reach the window. FILES THE PLAN NAMES: research/playgrain/decide/walkaway.py MISSING: walkaway.py No prior board item ever mentioned this.
E-02 — CRPS (margin, total, team totals, player lines), log loss (winner), energy score (joint: both QB
- Why
- Plan item E-02, lane kernel, drift, decision, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- CRPS (margin, total, team totals, player lines), log loss (winner), energy score (joint: both QBs plus both team scores), interval coverage. Confidence intervals by **game-block bootstrap**; paired Diebold–Mariano between releases. FILES THE PLAN NAMES: research/playgrain/evalx/scores.py MISSING: scores.py No prior board item ever mentioned this.
E-03 — Evaluator-only, unreadable from the proposer's sandbox: skill against the closing line (nflverse
- Why
- Plan item E-03, lane kernel, drift, decision, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Evaluator-only, unreadable from the proposer's sandbox: skill against the closing line (nflverse `spread_line`/`total_line`, 1999+) and simulated return against the **early** ladder (the 540-snapshot backfill, T-21d to T-60m, six seasons, plus `early_lines`). Never a feature, never a training target. FILES THE PLAN NAMES: research/playgrain/evalx/market_diag.py MISSING: market_diag.py No prior board item ever mentioned this.
E-04 — One score per layer on the full issued population. The layers are availability, action, personne
- Why
- Plan item E-04, lane kernel, drift, decision, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- One score per layer on the full issued population. The layers are availability, action, personnel, target, outcome, magnitude, clock, drive, game and player line. Each faces the same frozen baselines at the same cutoff: carry-forward, pre-kickoff consensus, v1, the teamstate rival. A right total with a wrong workload story shows as two errors. FILES THE PLAN NAMES: research/playgrain/evalx/layer_scorecard.py MISSING: layer_scorecard.py No prior board item ever mentioned this.
E-10 — Re-run what the old path measured wrongly (the queue follows this table).
- Why
- Plan item E-10, lane truth and the fantasy path, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Re-run what the old path measured wrongly (the queue follows this table). FILES THE PLAN NAMES: research/playgrain/evalx/retest_queue.py MISSING: retest_queue.py No prior board item ever mentioned this.
Q-02 — Settle every claim against what happened. Only 7 are settled, so language's value is *unmeasured
- Why
- Plan item Q-02, lane sensors, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Settle every claim against what happened. Only 7 are settled, so language's value is *unmeasured*, not null. Per-speaker and per-outlet reliability as house effects (the XD-B04 house-effect test passed; `consensus.py` shows +4.51 pts/team/season at 4.23σ). Feeds A-02 and B-02. FILES THE PLAN NAMES: playerweek/claim_settle.py, playerweek/speaker_reliability.py MISSING: claim_settle.py, speaker_reliability.py No prior board item ever mentioned this.
S-14 — The rollout, vectorised across trajectories and the slate, with **player attribution**: every pl
- Why
- Plan item S-14, lane kernel, drift, decision, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- The rollout, vectorised across trajectories and the slate, with **player attribution**: every play records passer, carrier and target, so player stat lines accumulate per trajectory. It draws lineup, rating posterior, form, weather and crew per trajectory. | One ledger: on every path, QB passing equals the sum of receivers, and team points equal the sum of scores. Exactly. FILES THE PLAN NAMES: research/playgrain/sim2.py MISSING: sim2.py No prior board item ever mentioned this.
S-15 — The compiler: margin, total, moneyline, team totals, alt lines, any prop, fantasy points under a
- Why
- Plan item S-15, lane kernel, drift, decision, due Fri 2 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- The compiler: margin, total, moneyline, team totals, alt lines, any prop, fantasy points under any scoring (through `statline.score`, the single scoring function), K and DST. All read from the same trajectory parquet. | No number is published that is not a query. FILES THE PLAN NAMES: research/playgrain/queries.py MISSING: queries.py No prior board item ever mentioned this.
D-05 — The sheet: wager, line, walk-away, stake, in window order. Offline, on a phone.
- Why
- Plan item D-05, lane kernel, drift, decision, due Tue 6 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- The sheet: wager, line, walk-away, stake, in window order. Offline, on a phone. FILES THE PLAN NAMES: research/playgrain/decide/sheet.py, playerweek/pwa.py MISSING: sheet.py No prior board item ever mentioned this.
E-05 — The Residual Attribution Ledger of §1. `oracle_pairs.py` tests candidate sensors **in pairs**, b
- Why
- Plan item E-05, lane ratings, lineups, policies, due Tue 6 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- The Residual Attribution Ledger of §1. `oracle_pairs.py` tests candidate sensors **in pairs**, because `measurement_value.py` already proved greedy selection is blind: two sensors worth 4.4e-16 nats each were jointly worth 0.1766. FILES THE PLAN NAMES: research/playgrain/evalx/residual_ledger.py, evalx/oracle_pairs.py MISSING: residual_ledger.py, oracle_pairs.py No prior board item ever mentioned this.
L-08 — The second loop. The ledger's top unexplained cluster becomes a brief naming two worlds the mach
- Why
- Plan item L-08, lane sensors, due Tue 6 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- The second loop. The ledger's top unexplained cluster becomes a brief naming two worlds the machine cannot tell apart and the smallest observation that would separate them. Deep Research is driven through `browser.py`; its answer passes the airlock (schema, citations must resolve) or is dropped. `source_probe.py` fetches a sample and measures latency and rights. An admitted source becomes a capture config. FILES THE PLAN NAMES: research/playgrain/loop/sensor_loop.py, loop/intake_airlock.py, loop/source_probe.py MISSING: sensor_loop.py, intake_airlock.py, source_probe.py No prior board item ever mentioned this.
T-07 — From the tracking releases: speed, acceleration, separation at throw, get-off, closing speed. Th
- Why
- Plan item T-07, lane ratings, lineups, policies, due Tue 6 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- From the tracking releases: speed, acceleration, separation at throw, get-off, closing speed. Then a teacher-student model predicts those from public stats, so every player in every season gets an estimate. | Student R² reported per skill; enters only via L-10. FILES THE PLAN NAMES: research/playgrain/talent/tracking_latents.py MISSING: tracking_latents.py No prior board item ever mentioned this.
D-06 — Closing-line value as a read-only diagnostic. The previous release keeps issuing in shadow, and
- Why
- Plan item D-06, lane kernel, drift, decision, due Fri 9 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- Closing-line value as a read-only diagnostic. The previous release keeps issuing in shadow, and a CUSUM on paired CLV and Brier reverts the pointer. A seeded regression reverts in 3 weeks. FILES THE PLAN NAMES: research/playgrain/decide/clv_diag.py, loop/rollback.py MISSING: clv_diag.py No prior board item ever mentioned this.
L-07 — The orchestrator: worst residuals → explanation brief → sandboxed proposal → evaluator → promote
- Why
- Plan item L-07, lane kernel, drift, decision, due Fri 9 Oct. This board IS the plan now: 119 items, their files, their order.
- Detail
- The orchestrator: worst residuals → explanation brief → sandboxed proposal → evaluator → promote or anti-library. Five proposals a night, hard-limited. The proposer sees a schema and a residual summary, never a row and never the holdout. FILES THE PLAN NAMES: research/playgrain/loop/nightly.py, bin/com.seano.playerweek.playgrain-loop.plist MISSING: nightly.py, com.seano.playerweek.playgrain-loop.plist PRIOR EVIDENCE on the old board: C-177
A-07 — Audit: when a player is removed, where do the opportunities go, in the simulator and in reality.
- Why
- Plan item A-07, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Audit: when a player is removed, where do the opportunities go, in the simulator and in reality. | Reallocation error by position. FILES THE PLAN NAMES: research/playgrain/lineup/vacated_share.py MISSING: vacated_share.py No prior board item ever mentioned this.
C-16 — The missing sensor nobody runs at scale outside the league: coaches-film computer vision produci
- Why
- Plan item C-16, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- The missing sensor nobody runs at scale outside the league: coaches-film computer vision producing tracking for *every* play of *every* game. About 10M frames a season, roughly a week of M5 time per season, run overnight. Built last, and commissioned only when the ledger's UNASSIGNED row says tracking-grade state is the biggest remaining prize. `source_probe.py` checks the terms of use first. FILES THE PLAN NAMES: research/playgrain/sensors/all22/, detect.py, track.py, register_field.py, to_tracking.py MISSING: , detect.py, track.py, register_field.py, to_tracking.py PRIOR EVIDENCE on the old board: C-16
C-18 — One photo of the week's ticket stack becomes the price actually got for each bet. Local vision m
- Why
- Plan item C-18, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- One photo of the week's ticket stack becomes the price actually got for each bet. Local vision model; falls back to the sheet price. Feeds D-04 and D-07. FILES THE PLAN NAMES: research/playgrain/sensors/ticket_ocr.py MISSING: ticket_ocr.py PRIOR EVIDENCE on the old board: C-18
D-07 — Once tickets accumulate, learn how the Jackpot board sits against the wider market on a Tuesday:
- Why
- Plan item D-07, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Once tickets accumulate, learn how the Jackpot board sits against the wider market on a Tuesday: its shade, its stale numbers, which markets it hangs. FILES THE PLAN NAMES: research/playgrain/decide/book_profile.py MISSING: book_profile.py No prior board item ever mentioned this.
E-06 — Plant an effect of known size in the play data and require every gate to find it. Also the place
- Why
- Plan item E-06, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Plant an effect of known size in the play data and require every gate to find it. Also the placebo battery (the astrology columns already exist as the negative control) and permutation nulls. Every gate publishes its power. FILES THE PLAN NAMES: research/playgrain/evalx/plant_controls.py MISSING: plant_controls.py No prior board item ever mentioned this.
E-07 — The smallest detectable effect per layer, per window, game-clustered. It replaces the single 0.1
- Why
- Plan item E-07, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- The smallest detectable effect per layer, per window, game-clustered. It replaces the single 0.138 figure. FILES THE PLAN NAMES: research/playgrain/evalx/mde_table.py MISSING: mde_table.py No prior board item ever mentioned this.
E-09 — Run `world-model-compiler-v1/cross-team-response-experiment.json`, which is `DESIGNED_NOT_RUN`:
- Why
- Plan item E-09, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Run `world-model-compiler-v1/cross-team-response-experiment.json`, which is `DESIGNED_NOT_RUN`: G0 terminal Gaussian against the generator, five negative controls. FILES THE PLAN NAMES: research/playgrain/evalx/energy_experiment.py MISSING: energy_experiment.py No prior board item ever mentioned this.
F-06 — Per-key hyperparameter search. `max_depth=3, l2=5.0` already fixes WR carries from −29.86% to −5
- Why
- Plan item F-06, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Per-key hyperparameter search. `max_depth=3, l2=5.0` already fixes WR carries from −29.86% to −5.17%. | Board breaches cleared FILES THE PLAN NAMES: research/sweep_tree_params.py MISSING: sweep_tree_params.py No prior board item ever mentioned this.
F-07 — Turn on `K_PER_POSITION` and `POSR_DRIFT`; replace the covariate-free shrinkage with conditional
- Why
- Plan item F-07, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Turn on `K_PER_POSITION` and `POSR_DRIFT`; replace the covariate-free shrinkage with conditional models on the same features. | Scored unconditionally FILES THE PLAN NAMES: none all present No prior board item ever mentioned this.
F-08 — Replace `intervals.SHIPPED_CURVE` with `sim.simulate` (`sim.py:813`), which has 0.7788 coverage
- Why
- Plan item F-08, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Replace `intervals.SHIPPED_CURVE` with `sim.simulate` (`sim.py:813`), which has 0.7788 coverage and correct zero atoms. | Intervals from a generator, not a table FILES THE PLAN NAMES: none all present No prior board item ever mentioned this.
L-09 — The holdout moves under a separate macOS user that only the evaluator can read; `playgrain-holdo
- Why
- Plan item L-09, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- The holdout moves under a separate macOS user that only the evaluator can read; `playgrain-holdout.duckdb` is already mode 0400. Revision 2 named this honestly as a process boundary rather than an air gap, and this closes it. FILES THE PLAN NAMES: loop/holdout.py, loop/split.py all present No prior board item ever mentioned this.
L-10 — The evaluator today scores only the action model. Generalise it to every kernel component (play-
- Why
- Plan item L-10, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- The evaluator today scores only the action model. Generalise it to every kernel component (play-level log loss, n≈911k) and to a simulator-level paired test under common random numbers. A proposal that improves a component and worsens game CRPS is refused: the aggregation trap is how the share model died. FILES THE PLAN NAMES: research/playgrain/loop/multi_target_evaluator.py MISSING: multi_target_evaluator.py No prior board item ever mentioned this.
L-11 — It has 5 entries, all `UNRESOLVED`, while the docs call it the record of what is refuted. Popula
- Why
- Plan item L-11, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- It has 5 entries, all `UNRESOLVED`, while the docs call it the record of what is refuted. Populate it from the 48 rejected hypotheses, each with its population. Anything rejected on `played=1` is marked RETEST, not refuted. FILES THE PLAN NAMES: loop/anti-library.json all present No prior board item ever mentioned this.
L-12 — One row per packet: job, model, tokens, findings, confirmed, false positives, duplicates, downst
- Why
- Plan item L-12, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- One row per packet: job, model, tokens, findings, confirmed, false positives, duplicates, downstream layer movement. Staffing follows measured yield. FILES THE PLAN NAMES: research/playgrain/loop/yield_ledger.py MISSING: yield_ledger.py No prior board item ever mentioned this.
O-04 — Every new job beats a heartbeat, and silence raises an alarm on the board.
- Why
- Plan item O-04, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Every new job beats a heartbeat, and silence raises an alarm on the board. FILES THE PLAN NAMES: operate/watch.py all present No prior board item ever mentioned this.
O-05 — The throughput budget for S-14, measured on every release.
- Why
- Plan item O-05, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- The throughput budget for S-14, measured on every release. FILES THE PLAN NAMES: research/playgrain/operate/bench.py MISSING: bench.py No prior board item ever mentioned this.
O-06 — New launchd jobs, all catch-up style.
- Why
- Plan item O-06, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- New launchd jobs, all catch-up style. FILES THE PLAN NAMES: bin/*.plist MISSING: *.plist PRIOR EVIDENCE on the old board: C-178, C-163
O-07 — The SQL findings stay, and the fabricated citations go. Nine of them independently corroborate t
- Why
- Plan item O-07, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- The SQL findings stay, and the fabricated citations go. Nine of them independently corroborate the credit-registry conservation defects. FILES THE PLAN NAMES: research/quarantine-20260919/, research/gemini-deep/ MISSING: , No prior board item ever mentioned this.
O-08 — Remove the 60 worktrees whose branches have zero unmerged patches. The branches remain, so nothi
- Why
- Plan item O-08, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Remove the 60 worktrees whose branches have zero unmerged patches. The branches remain, so nothing is lost. FILES THE PLAN NAMES: bin/prune-worktrees.sh MISSING: prune-worktrees.sh No prior board item ever mentioned this.
P-08 — 2026 in-season participation does not publish until after the season. Impute on-field sets from
- Why
- Plan item P-08, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- 2026 in-season participation does not publish until after the season. Impute on-field sets from weekly snap counts, depth charts, personnel tendencies and the pbp role ids (passer, rusher, target, tacklers, pass defenders). Trained and validated on 2016–2025, where truth is known. | Mean Jaccard ≥ 0.85 on hidden truth; error propagated as uncertainty into T-02. FILES THE PLAN NAMES: research/playgrain/participation_impute.py MISSING: participation_impute.py No prior board item ever mentioned this.
P-09 — `game_context_asof`: roof, surface, elevation, travel_km, tz_shift, rest days, short week, offic
- Why
- Plan item P-09, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- `game_context_asof`: roof, surface, elevation, travel_km, tz_shift, rest days, short week, officials, weather ladder. All keyed by `valid_time`. | As-of tests. FILES THE PLAN NAMES: research/playgrain/load_context.py MISSING: load_context.py No prior board item ever mentioned this.
P-11 — `asof()` covers every new table. | 7/7 → n/n.
- Why
- Plan item P-11, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- `asof()` covers every new table. | 7/7 → n/n. FILES THE PLAN NAMES: warehouse.py, test_warehouse.py all present No prior board item ever mentioned this.
Q-03 — `speaker_is` is unknown on 141 of 153 pressers, and it is the one field Q-36 turns on.
- Why
- Plan item Q-03, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- `speaker_is` is unknown on 141 of 153 pressers, and it is the one field Q-36 turns on. FILES THE PLAN NAMES: playerweek/news.py all present No prior board item ever mentioned this.
Q-04 — Claims become as-of features for availability (A-02), role change (A-06) and play-caller intent
- Why
- Plan item Q-04, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Claims become as-of features for availability (A-02), role change (A-06) and play-caller intent (B-02). Never for points directly: that was measured at +0.002 RMSE, where availability was −0.0038 Brier with a clean placebo. FILES THE PLAN NAMES: research/playgrain/sensors/claims_to_features.py MISSING: claims_to_features.py No prior board item ever mentioned this.
S-16 — Trajectories are content-hashed per (game, lock, release); issuance is frozen with the existing
- Why
- Plan item S-16, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Trajectories are content-hashed per (game, lock, release); issuance is frozen with the existing row-lock discipline. | Replays bit-for-bit. FILES THE PLAN NAMES: research/playgrain/sim_store.py MISSING: sim_store.py No prior board item ever mentioned this.
S-17 — Any team-season against any team-season, retired players included. The north star's first demand
- Why
- Plan item S-17, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Any team-season against any team-season, retired players included. The north star's first demand. | A football person reads the play-by-play without flinching. FILES THE PLAN NAMES: research/playgrain/hypothetical.py MISSING: hypothetical.py No prior board item ever mentioned this.
S-18 — Whole seasons and playoffs. Ratings evolve between simulated weeks and injuries accrue through A
- Why
- Plan item S-18, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Whole seasons and playoffs. Ratings evolve between simulated weeks and injuries accrue through A-04. | Division and playoff odds calibrated on 2004–2025. FILES THE PLAN NAMES: research/playgrain/season_sim.py MISSING: season_sim.py No prior board item ever mentioned this.
S-19 — Compile the boosters (treelite or lleaves, or Numba lookup tables) if S-14 misses its budget. |
- Why
- Plan item S-19, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Compile the boosters (treelite or lleaves, or Numba lookup tables) if S-14 misses its budget. | 16 games × 10,000 trajectories in under 60 minutes on the M5. FILES THE PLAN NAMES: research/playgrain/compile_models.py MISSING: compile_models.py No prior board item ever mentioned this.
T-08 — Every rating family is scored on what it adds to the kernel and logged to the ledger. | —
- Why
- Plan item T-08, lane unassigned, due unscheduled. This board IS the plan now: 119 items, their files, their order.
- Detail
- Every rating family is scored on what it adds to the kernel and logged to the ledger. | — FILES THE PLAN NAMES: research/playgrain/talent/latent_eval.py MISSING: latent_eval.py No prior board item ever mentioned this.
Forecast did he play at all (worth +0.76 MAE as an oracle)
- Why
- Proposed by bin/residual-ledger.py, not by a person. The ledger feeds each candidate's REALISED value in as an oracle and records how much error disappears; that number is the value of measuring it perfectly, and ranking by it turns 'what should we build' from an opinion into a measurement. Sean, 2026-09-20, on being told the board was the one thing still written by hand: 'why not'.
- Detail
- MEASURED 2026-09-22, n=817: knowing this perfectly takes our MAE from 4.2357 to 3.4771, worth +0.7586. That is a CEILING on what measuring it can buy, not a promise -- a variable worth 2 points as an oracle may be worth 0.2 once forecast. Sensor: the availability hurdle (C-53) -- P(active) before kickoff. [ledger:did he play at all] ID RE-PREFIXED 2026-09-22. This item was filed as C-19, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Forecast his targets (worth +0.51 MAE as an oracle)
- Why
- Proposed by bin/residual-ledger.py, not by a person. The ledger feeds each candidate's REALISED value in as an oracle and records how much error disappears; that number is the value of measuring it perfectly, and ranking by it turns 'what should we build' from an opinion into a measurement. Sean, 2026-09-20, on being told the board was the one thing still written by hand: 'why not'.
- Detail
- MEASURED 2026-09-22, n=817: knowing this perfectly takes our MAE from 4.2357 to 3.724, worth +0.5116. That is a CEILING on what measuring it can buy, not a promise -- a variable worth 2 points as an oracle may be worth 0.2 once forecast. Sensor: the target policy: who gets the ball, given who is on the field. [ledger:his targets] ID RE-PREFIXED 2026-09-22. This item was filed as C-20, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Forecast team rush attempts (worth +0.40 MAE as an oracle)
- Why
- Proposed by bin/residual-ledger.py, not by a person. The ledger feeds each candidate's REALISED value in as an oracle and records how much error disappears; that number is the value of measuring it perfectly, and ranking by it turns 'what should we build' from an opinion into a measurement. Sean, 2026-09-20, on being told the board was the one thing still written by hand: 'why not'.
- Detail
- MEASURED 2026-09-22, n=817: knowing this perfectly takes our MAE from 4.2357 to 3.837, worth +0.3986. That is a CEILING on what measuring it can buy, not a promise -- a variable worth 2 points as an oracle may be worth 0.2 once forecast. Sensor: team volume, rushing half. [ledger:team rush attempts] ID RE-PREFIXED 2026-09-22. This item was filed as C-21, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Forecast team pass attempts (worth +0.36 MAE as an oracle)
- Why
- Proposed by bin/residual-ledger.py, not by a person. The ledger feeds each candidate's REALISED value in as an oracle and records how much error disappears; that number is the value of measuring it perfectly, and ranking by it turns 'what should we build' from an opinion into a measurement. Sean, 2026-09-20, on being told the board was the one thing still written by hand: 'why not'.
- Detail
- MEASURED 2026-09-22, n=817: knowing this perfectly takes our MAE from 4.2357 to 3.8772, worth +0.3585. That is a CEILING on what measuring it can buy, not a promise -- a variable worth 2 points as an oracle may be worth 0.2 once forecast. Sensor: team volume: plays and pass rate given script and opponent. [ledger:team pass attempts] ID RE-PREFIXED 2026-09-22. This item was filed as C-22, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Forecast his snap share (worth +0.33 MAE as an oracle)
- Why
- Proposed by bin/residual-ledger.py, not by a person. The ledger feeds each candidate's REALISED value in as an oracle and records how much error disappears; that number is the value of measuring it perfectly, and ranking by it turns 'what should we build' from an opinion into a measurement. Sean, 2026-09-20, on being told the board was the one thing still written by hand: 'why not'.
- Detail
- MEASURED 2026-09-22, n=817: knowing this perfectly takes our MAE from 4.2357 to 3.9025, worth +0.3332. That is a CEILING on what measuring it can buy, not a promise -- a variable worth 2 points as an oracle may be worth 0.2 once forecast. Sensor: role forecasting from depth, usage and the injury ladder. [ledger:his snap share] ID RE-PREFIXED 2026-09-22. This item was filed as C-23, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Forecast his carries (worth +0.32 MAE as an oracle)
- Why
- Proposed by bin/residual-ledger.py, not by a person. The ledger feeds each candidate's REALISED value in as an oracle and records how much error disappears; that number is the value of measuring it perfectly, and ranking by it turns 'what should we build' from an opinion into a measurement. Sean, 2026-09-20, on being told the board was the one thing still written by hand: 'why not'.
- Detail
- MEASURED 2026-09-22, n=817: knowing this perfectly takes our MAE from 4.2357 to 3.9192, worth +0.3164. That is a CEILING on what measuring it can buy, not a promise -- a variable worth 2 points as an oracle may be worth 0.2 once forecast. Sensor: the carry policy and the backfield committee split. [ledger:his carries] ID RE-PREFIXED 2026-09-22. This item was filed as C-24, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Probe an untested limit (cannot) in board:D-04
- Why
- bin/premise-scan.py found a sentence asserting something cannot be done, carrying no measurement. Sean, 2026-09-20: 'you assumed a limitation that doesn't exist.' An asserted limit is a claim, not a fact, and the cost of believing one is invisible -- the work is simply never attempted and nothing records that it was possible.
- Detail
- THE CLAIM, from board:D-04: "**Opened this Tuesday with paper entries.** It cannot be backfilled, and it costs nothing." PROBE IT. Either produce the measurement that makes it true -- a number, an interval, a sample size, the thing that turns an assertion into a finding -- or do the work it said could not be done. Record whichever happened. A limit that survives a probe is worth more than one that was never tested; a limit that does not was costing us the work. ID RE-PREFIXED 2026-09-22. This item was filed as C-25, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Probe an untested limit (banned-floor) in board:J-10
- Why
- bin/premise-scan.py found a sentence asserting something cannot be done, carrying no measurement. Sean, 2026-09-20: 'you assumed a limitation that doesn't exist.' An asserted limit is a claim, not a fact, and the cost of believing one is invisible -- the work is simply never attempted and nothing records that it was possible.
- Detail
- THE CLAIM, from board:J-10: "Delete the stale "irreducible" text; fail the build on `irreducible\|noise floor\|ceiling` applied to football." PROBE IT. Either produce the measurement that makes it true -- a number, an interval, a sample size, the thing that turns an assertion into a finding -- or do the work it said could not be done. Record whichever happened. A limit that survives a probe is worth more than one that was never tested; a limit that does not was costing us the work. ID RE-PREFIXED 2026-09-22. This item was filed as C-26, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Probe an untested limit (cannot) in board:C-14
- Why
- bin/premise-scan.py found a sentence asserting something cannot be done, carrying no measurement. Sean, 2026-09-20: 'you assumed a limitation that doesn't exist.' An asserted limit is a claim, not a fact, and the cost of believing one is invisible -- the work is simply never attempted and nothing records that it was possible.
- Detail
- THE CLAIM, from board:C-14: "The injury-report ladder and depth charts "cannot be walked backwards" only through one endpoint." PROBE IT. Either produce the measurement that makes it true -- a number, an interval, a sample size, the thing that turns an assertion into a finding -- or do the work it said could not be done. Record whichever happened. A limit that survives a probe is worth more than one that was never tested; a limit that does not was costing us the work. ID RE-PREFIXED 2026-09-22. This item was filed as C-27, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Probe an untested limit (out-of-scope) in commit:31c2db51
- Why
- bin/premise-scan.py found a sentence asserting something cannot be done, carrying no measurement. Sean, 2026-09-20: 'you assumed a limitation that doesn't exist.' An asserted limit is a claim, not a fact, and the cost of believing one is invisible -- the work is simply never attempted and nothing records that it was possible.
- Detail
- THE CLAIM, from commit:31c2db51: "migration is out of scope for this item, and there's no .github/workflows to" PROBE IT. Either produce the measurement that makes it true -- a number, an interval, a sample size, the thing that turns an assertion into a finding -- or do the work it said could not be done. Record whichever happened. A limit that survives a probe is worth more than one that was never tested; a limit that does not was costing us the work. ID RE-PREFIXED 2026-09-22. This item was filed as C-28, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Probe an untested limit (cannot) in commit:0611cf72
- Why
- bin/premise-scan.py found a sentence asserting something cannot be done, carrying no measurement. Sean, 2026-09-20: 'you assumed a limitation that doesn't exist.' An asserted limit is a claim, not a fact, and the cost of believing one is invisible -- the work is simply never attempted and nothing records that it was possible.
- Detail
- THE CLAIM, from commit:0611cf72: "snapshot exists for a moment and cannot be backfilled; settlement grades" PROBE IT. Either produce the measurement that makes it true -- a number, an interval, a sample size, the thing that turns an assertion into a finding -- or do the work it said could not be done. Record whichever happened. A limit that survives a probe is worth more than one that was never tested; a limit that does not was costing us the work. ID RE-PREFIXED 2026-09-22. This item was filed as C-29, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Probe an untested limit (not-worth) in commit:d81a4a26
- Why
- bin/premise-scan.py found a sentence asserting something cannot be done, carrying no measurement. Sean, 2026-09-20: 'you assumed a limitation that doesn't exist.' An asserted limit is a claim, not a fact, and the cost of believing one is invisible -- the work is simply never attempted and nothing records that it was possible.
- Detail
- THE CLAIM, from commit:d81a4a26: "Team play-calling tendency not worth carrying as a feature." PROBE IT. Either produce the measurement that makes it true -- a number, an interval, a sample size, the thing that turns an assertion into a finding -- or do the work it said could not be done. Record whichever happened. A limit that survives a probe is worth more than one that was never tested; a limit that does not was costing us the work. ID RE-PREFIXED 2026-09-22. This item was filed as C-30, which collides with the plan's own C-01..C-18 namespace. A lane reading 'C-19' could not tell a residual-ledger proposal from a plan item, and the two mean entirely different things. Locally-generated items carry PW- now; the plan owns the bare letter prefixes.
Being built right now. If this is not what you want built, this is the page to say so on.
Agreed and waiting. The order is deliberate, not arbitrary.
Finished and verified. The list is at the foot of this page.
The nine-desk operating model. Gemini's system runs as a challenger, not the spine.
This board is asserted, not measured. It says what is deliberately being built and why. Maintenance reads the machine at render time and will contradict this page whenever the two disagree — which is exactly what it is for.
Plan of record — every named component
From the v1 handbook and the nine-desk operating model, read in full rather than skimmed
93 components across 10 groups. 8 are running, 8 are partial, 77 do not exist. Codex's own status words are kept rather than flattened, because UNAVAILABLE and NOT CERTIFIED mean different things and need different work. Where a component names a launchd job, the state is measured at render time; everything else is Codex's assertion carried over.
This is the gap between the machine that is described and the machine that runs. It is meant to be uncomfortable reading.
Living checklist
v1 handbook §17 — Codex's own states, carried over verbatim
| Component | State | What it is |
|---|---|---|
| Original v1 artifact audit | ACCEPTED | Original learned bytes reproduced under the frozen capsule and are serving. |
| Write-once v1 registry and guarded loader | ACTIVE | Release v1.0-20260916, manifest dcf95ac625…; fresh issuance and unattended reuse. |
| Golden W2/W3 numerical replay | PASS | 1,326 players / 54,226 numeric values and 32 games / 256 values match. |
| All-remaining Weeks 2–18 producer | ACTIVE | 11,271 player rows, 256 games, zero player or K/DEF fits. |
| Fantasy opponent products after Week 14 | UNAVAILABLE | Needs source schedule and exact opponent roster receipts. |
| Bench-position DEF roster repair | OPERATING PASS | 162-row roster delivery; no missing bench-defense identity. |
| Phone tracker | ACTIVE | Private URL live; 60-second launchd sync installed. |
| 99.5% service level | OBSERVING, NOT CERTIFIED | Seven-day window immature; availability, freshness and correctness sampled separately. |
| R&D worker prompt audit | REPAIRS INTEGRATED, JOBS PAUSED | Canonical receipt parsing and exact baseline/change bindings integrated; the jobs are paused. |
| Whole-model S/B/Q isolation | NOT CERTIFIED | Needs complete ancestry and intervention controls across all learned and serving paths. |
| Prospective player grading | ACTIVE FRAME, OUTCOMES PENDING | Grade full issued populations only after admitted truth. |
| Autonomous shipper | NOT ACTIVE | Root remains integration and activation owner. |
| Handbook regeneration hook | ACTIVE | Scheduled regeneration; inspect the log for later writes. |
Institute jobs
v1 handbook §14 — a plist in Git does not prove a job is loaded
| Component | State | What it is |
|---|---|---|
| institute.capture | NOT LOADED | hourly · raw qualitative, article and gamebook capture |
| institute.structured | NOT LOADED | every 4h · structured public-source archive |
| institute.forecast-refresh | LOADED | every 4h + Thursday pre-kickoff · snapshot, forecast, validation, prepared site |
| institute.phone-sync | NOT LOADED | every 60s · bounded status to the private tracker |
| institute.tracker-feed | NOT LOADED | continuous · separates provider, collector and content clocks |
| institute.site-service | NOT LOADED | supervised · serves validated assets and saved health |
| institute.report-service | NOT LOADED | supervised · serves report, tracker and handbook |
| institute.service-health | NOT LOADED | every minute · availability, integrity and freshness sampled separately |
| institute.handbook | NOT LOADED | every 5 min · regenerates the canonical handbook HTML |
Six connected levels
v1 handbook §20 — the destination, each with a strong simpler challenger
| Component | State | What it is |
|---|---|---|
| Season and organization | UNAVAILABLE | Personnel continuity, coaching regime, development. Challenger: dynamic team strength + persistent roster. |
| Game and environment | UNAVAILABLE | Both teams, venue, officiating, score/time. Challenger: direct margin/total plus market benchmark. |
| Unit and task | UNAVAILABLE | Personnel combinations, protection and route obligations. Challenger: opportunity allocator with interactions. |
| Play and response | UNAVAILABLE | Observable cues, actor-limited information, action policies. Challenger: sequence/count model. |
| Physical event and credit | UNAVAILABLE | One event ledger producing coherent player/team/defense totals. Challenger: direct stat forecasts. |
| Measurement and belief | UNAVAILABLE | Source access, selection, publication and receipt. Challenger: source-aware predictor with deduplication. |
Nine desks
staffing model — one chain of evidence, none edits the model
| Component | State | What it is |
|---|---|---|
| Commission & Portfolio | UNAVAILABLE | What the machine is asked for, and what it declines. |
| World Model Lab | UNAVAILABLE | The predictive core. Recommends experiment design. |
| Football Intelligence | UNAVAILABLE | Roles, legal actions, counters, credit conventions. |
| Behavior & Qualitative | UNAVAILABLE | S / B / Q evidence classes kept separately attributable. |
| Data & Provenance | UNAVAILABLE | Origin graph, revision history, permeability trace. |
| Markets & Portfolio | UNAVAILABLE | Price, stake, exposure. Sean taps before money moves. |
| Experience Studio | UNAVAILABLE | What Sean actually sees, against the design system. |
| Operations & Learning | UNAVAILABLE | The loop that improves the machine. |
| Forecast Accuracy Directorate | UNAVAILABLE | Were we right, prospectively and per cohort. |
Resident expertise
v1 handbook §22 — each owes a required artifact before a claim advances
| Component | State | What it is |
|---|---|---|
| Data science | UNAVAILABLE | Paired prospective loss, calibration, compute accounting. |
| Statistics and causal inference | UNAVAILABLE | Estimand, causal graph, negative controls, sensitivity. |
| Physics and physiology | UNAVAILABLE | Units, conservation and support checks, uncertainty propagation. |
| Psychology and organizational behavior | UNAVAILABLE | Opportunity-normalized behavioral posterior and rival explanations. |
| Economics and game theory | UNAVAILABLE | Equilibrium and rival policy predictions, intervention tests. |
| Market microstructure | UNAVAILABLE | Executable quote lineage, depth and latency state, settlement. |
| Football tactics | UNAVAILABLE | Event-bound annotation agreement and adversarial counterexamples. |
| Information science | UNAVAILABLE | Origin graph, revision history, permeability trace. |
| Reliability engineering | OBSERVING | Availability, correctness and freshness receipts. Partly real — service-health exists but is not loaded. |
Deep Think supply chain
staffing model — keeps every desk supplied
| Component | State | What it is |
|---|---|---|
| Continuous intake | UNAVAILABLE | Everything arriving, before any screening. |
| Flash screening | UNAVAILABLE | Cheap, narrow, numerous — the first rung of the ladder. |
| Gemini 3 Pro graph | UNAVAILABLE | Cross-domain mechanism finding. |
| Parallel explanations | UNAVAILABLE | Rival accounts kept separate rather than averaged. |
| Deep Think research | UNAVAILABLE | The weekly deep synthesis. |
| Desk packets | UNAVAILABLE | What each desk receives, addressed to it. |
| Outcome feedback | UNAVAILABLE | Spend judged by learning, not by volume. |
Governance and decision rights
staffing model — who recommends, who approves, when Sean is involved
| Component | State | What it is |
|---|---|---|
| New hypothesis | UNAVAILABLE | Any research job recommends · Research Director admits · Sean never, for routine admission. |
| Experiment design | UNAVAILABLE | World Model Lab · Independent Replication Scientist · Sean when risk appetite changes. |
| Production code | OBSERVING | Claude-led operators · tests + Codex on high-risk boundaries · Sean on irreversible external consequence. |
| Forecast release | UNAVAILABLE | Forecast council · Deterministic Release Authority · Sean only on a recorded override. |
| Bet placement | UNAVAILABLE | Markets & Portfolio · Sean taps before money moves · ALWAYS. |
| New paid data | UNAVAILABLE | Acquisition & Rights Lead · Sean approves spend and terms · ALWAYS. |
| Visual direction | UNAVAILABLE | Experience Studio · Product Director against the design system. |
| Incident rollback | UNAVAILABLE | SRE · automated safe rollback · Sean on data loss or external lock. |
| Model promotion | UNAVAILABLE | Scientific council · prospective scorecard gate. |
Information gaps to capture now
v1 handbook §23 — a week not captured is gone; these cannot be backfilled
| Component | State | What it is |
|---|---|---|
| Full prospective information history | UNAVAILABLE | Every raw revision, first receipt, failure and issuance, so mutation cannot alter an earlier issuance. |
| Event participation and true zeros | UNAVAILABLE | Official gamebook coverage; stop grading only survivors. |
| Multiweek availability and role transitions | UNAVAILABLE | Dated return, designation and roster panels. |
| Unit task combinations | UNAVAILABLE | Dated personnel combinations and public practice descriptions. |
| Joint timing and geometry | UNAVAILABLE | Synchronized full-unit traces with visibility metadata. |
| Untargeted and unused options | UNAVAILABLE | Deterrence and feasible opportunity, not only realized touches. |
| Workload and recovery across tasks | UNAVAILABLE | Load proxies, rest and travel exposure. |
| Directional environment and surface | UNAVAILABLE | Venue, surface, source-time weather and direction. |
| Institution and officiating response | UNAVAILABLE | Crew, rule and context records with observed decisions. |
| Full qualitative context and origin graph | UNAVAILABLE | Complete question and answer, attribution, hedge, revision. |
| Actor exposure and public influence | UNAVAILABLE | Information about football vs information that changes preparation. |
| Executable market and settlement history | UNAVAILABLE | Immutable quoted terms, received prices, settlement revisions. |
| Pipeline observation of its own failures | UNAVAILABLE | Failed requests, skipped issuances, scheduler delays, validation rejections. |
Model ladder and pairings
staffing model — deterministic first, a frontier call matches one of four commissions
| Component | State | What it is |
|---|---|---|
| Deterministic first | ACTIVE | Where code can decide exactly, no model votes. Already true across the pipeline. |
| Cheap, narrow, numerous | UNAVAILABLE | Screening and extraction at volume. |
| Daily builders and critics | OBSERVING | Claude and Codex build daily — but not as a scheduled rung with a brief. |
| Four deliberate specialists | UNAVAILABLE | Deep Think, Opus, Sol — a frontier call must match one of four exact commissions. |
| Explore → formalize | UNAVAILABLE | Gemini 3 Pro finds mechanisms; Sol converts them to state, equations, falsifiers. |
| Specify → build | UNAVAILABLE | Sol writes the contract; Sonnet implements and instruments it. |
| Build → attack | UNAVAILABLE | Sonnet builds; Luna searches narrow failures. Many cheap attacks beat one self-review. |
| Quantify → interpret | UNAVAILABLE | Sol computes residuals; Gemini connects patterns to film, language, science. |
| Disagree → decide | UNAVAILABLE | Blind forecasts from provider families; deterministic evidence judges; Fable adjudicates. |
The constitution
staffing model — nine lessons from the METR incident, none built
| Component | State | What it is |
|---|---|---|
| Impossible tasks turn into score-gaming | UNAVAILABLE | Record a failed gate as failed. The pressure valve that keeps a bench honest. |
| An unintended cache became government | UNAVAILABLE | Shared state acquires authority nobody granted it. |
| 'The board approved it' replaced authorization | UNAVAILABLE | A root of trust, not a consensus. |
| Tool output and transcripts are not ground truth | UNAVAILABLE | Verify against the real thing, not the report of it. |
| Self-invented signatures lacked a root of trust | UNAVAILABLE | Identity must be issued, not asserted. |
| Shared artifacts produced real breakthroughs | UNAVAILABLE | The upside of the same mechanism — keep it, govern it. |
| Agents noticed danger and did not tell humans | UNAVAILABLE | An escalation path that is used, not just present. |
| AI summaries inherit the subject's frame | UNAVAILABLE | The reviewer adopts the reviewed agent's perspective. |
| Agents risked their own runs for the collective | UNAVAILABLE | Pay for negative results and shared instrumentation. |
Landed
8 items
verified
Landed
8 items
C-01 — Per-source staleness measured by the *source's own timestamp*, not the job's exit code. It write
- Why
- Plan item C-01, lane sensors, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Per-source staleness measured by the *source's own timestamp*, not the job's exit code. It writes `alarms.jsonl` for the board, the only alarm path. Catches odds on 7 of 15 days, props 5 days stale, availability 48 h dark. FILES THE PLAN NAMES: research/playgrain/sensors/capture_health.py all present PRIOR EVIDENCE on the old board: C-01
C-02 — Fix the `-3≤hours_to_kickoff≤6` window bug. Turn the eight one-shot captures into standing ones:
- Why
- Plan item C-02, lane sensors, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Fix the `-3≤hours_to_kickoff≤6` window bug. Turn the eight one-shot captures into standing ones: `inj_snapshot` Wed/Thu/Fri, `avail_snap`, `presser`, `workload_claim` (where `lock_legal_wed` is TRUE on 0 of 715 rows). FILES THE PLAN NAMES: bin/institute-capture.sh, bin/institute-structured-capture.sh all present PRIOR EVIDENCE on the old board: C-02
C-05 — Props for all markets, not 6, hourly; de-vig method unchanged.
- Why
- Plan item C-05, lane sensors, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Props for all markets, not 6, hourly; de-vig method unchanged. FILES THE PLAN NAMES: bin/odds-capture.sh, playerweek/props.py all present PRIOR EVIDENCE on the old board: C-05
P-06 — Load all 372 pbp columns into `plays_wide`; `plays` stays as a stable view. Extend the banned li
- Why
- Plan item P-06, lane ratings, lineups, policies, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Load all 372 pbp columns into `plays_wide`; `plays` stays as a stable view. Extend the banned list to `spread_line`, `total_line`, `vegas_*`, `*_vegas`, `odds*`. | `test_warehouse.py` extended: 0 market columns reachable from `plays_wide`. FILES THE PLAN NAMES: research/playgrain/load_plays_wide.py, schema.py all present PRIOR EVIDENCE on the old board: C-79, C-100
C-03 — Captures append to `data/land/*.parquet` and never touch DuckDB. One single-writer loader owns t
- Why
- Plan item C-03, lane sensors, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Captures append to `data/land/*.parquet` and never touch DuckDB. One single-writer loader owns the write lock, which ends `"status":"lost"`. FILES THE PLAN NAMES: research/playgrain/sensors/land_loader.py MISSING: land_loader.py PRIOR EVIDENCE on the old board: C-03
J-05 — The durable results store, `data/results.duckdb`. It exposes `record(script, git_sha, population
- Why
- Plan item J-05, lane truth and the fantasy path, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- The durable results store, `data/results.duckdb`. It exposes `record(script, git_sha, population_sql, metric, value, ci_lo, ci_hi, n, seed, release)`. Nothing writes findings to `/tmp` again. | `tests/test_results_store.py`: a script run without a `record()` call fails CI. FILES THE PLAN NAMES: research/playgrain/results.py all present No prior board item ever mentioned this.
D-04 — Independent settlement from play-by-play into the append-only `data/proving.jsonl`. **Opened thi
- Why
- Plan item D-04, lane kernel, drift, decision, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Independent settlement from play-by-play into the append-only `data/proving.jsonl`. **Opened this Tuesday with paper entries.** It cannot be backfilled, and it costs nothing. FILES THE PLAN NAMES: research/playgrain/decide/settle.py, decide/ledger.py MISSING: settle.py No prior board item ever mentioned this.
F-02 — Give each QB a pass-attempt *share*, not the team's whole volume. | The QB gap of +0.975 closes
- Why
- Plan item F-02, lane truth and the fantasy path, due Tue 22 Sep. This board IS the plan now: 119 items, their files, their order.
- Detail
- Give each QB a pass-attempt *share*, not the team's whole volume. | The QB gap of +0.975 closes most of the way FILES THE PLAN NAMES: playermodel.py all present No prior board item ever mentioned this.