23 Sep 2026 · 4:20 PM MTUpdated…
What is being built, on purpose

Construction

Waiting on you

5 decisions only you can make

Nothing else is blocked. Each of these stops one box turning green, and each is a sentence long.

  • nothing — this is a record of a decision, not a requestPW-75 · CUT: the unattended Deep Think / Deep Research loop
  • (no question recorded — see C-17)C-17 · C-17 — College play-by-play and player seasons from collegefootballdat
  • (no question recorded — see C-18)C-18 · C-18 — One photo of the week's ticket stack becomes the price actually
  • (no question recorded — see D-07)D-07 · D-07 — Once tickets accumulate, learn how the Jackpot board sits again
  • (no question recorded — see L-09)L-09 · L-09 — The holdout moves under a separate macOS user that only the eva
The workers

2 lanes working · 56 plan items built in 3h of 60 commits

  • gemini is empty — declared hold — Gemini CLI allowance exhaustedmedium

checked 16:12 · every 10 minutes, zero model tokens

The register

13 proposed changes waiting, 91 hypotheses open

Everything the lanes and mice produce drains here, and promotion is the narrow point. A lane never edits the model: it measures and proposes. Applied so far: 18. Claims independently reviewed: 2 — Codex is the reviewer and has been out of tokens since 2026-09-17.

Live site

Nothing wrong on the rendered site

Every settled week shows a projection distinct from its actual, and no week renders a stub.

The machine map data under a minute ago

The machine, measured36/40 present

The machine — 36 of 40 boxes measured present

The predictive machine by layer, then the spine that ships v1 underneath. Every colour is measured at render time — a table with rows, a file on disk, or launchctl answering. Nothing here is typed green.

All 50 lanes producing work. Judged on evidence, not exit codes.watchdog ran Wed 16:17 (4 min ago)

2build units, unattended
559crumbs closed, unattended
7.4units + crumbs per hour
1216 min agolast autonomous result
76.2h unattendedsince the lanes started
86/217board items landed
The build

69 of 124 plan items built · 1 being worked

This is the plan, and it is the only board. Each chip is one item of the design. GREEN is built and measured, AMBER is being worked right now, RED is not started — the same three colours the machine map above uses, because absent is absent wherever you read it. A blue ring means a lane has its marker on it this minute. Hover for what it is.

Csensors — what the machine can see12/18
C-01C-02C-03C-04C-05C-06C-07C-08C-09C-10 43/42C-11C-12C-13C-14 175/180C-15C-16C-17C-18
Pparticipation, personnel, context4/6
P-06P-07P-08P-09P-10P-11
Tratings, skill components, priors5/8
T-01T-02T-03T-04T-05T-06T-07T-08
Aavailability and injury1/7
A-01A-02A-03A-04A-05A-06A-07
Bcoaching and policy4/7
B-01B-02B-03B-04B-05B-06B-07
Sthe simulator and its kernel7/13
S-06S-08S-09S-10S-11S-12S-13S-14S-15S-16S-17S-18S-19
Xdrift: why the sim and the world differ2/6
X-01X-02X-03X-04X-05X-06
Fforecast — volume and efficiency4/9
F-01F-02F-03F-04F-05 2/4F-06 5/6F-07F-08F-09
Jtruth: the scored population and the ledger9/9
J-01J-02J-03J-05J-06J-07J-08J-09J-10
Eevaluation — is any of it better6/10
E-01E-02E-03E-04E-05E-06E-07E-08E-09E-10 1/18
Dthe decision and the stake5/7
D-01D-02D-03D-04D-05D-06D-07
Qlanguage and claims0/4
Q-01 973/15744Q-02Q-03Q-04
Lthe loop that improves it4/6
L-07L-08L-09L-10L-11L-12
Ooperations2/6
O-03O-04O-05O-06O-07O-08
?2/6
V-01V-02V-03V-04V-05V-06
N2/2
N-01N-02
Infrastructure probes — a different question: is the data actually there, are the jobs loaded. Not the plan, and it reads far greener.
build w0idle · next ~16:20no takeable item in shard 0 — idling without a model call5m ago
build w1idle · next ~16:21done rc=04m ago
build w2idle · next ~16:20unit 18m ago
mouse m0idle · next ~16:22holding: Gemini allowance exhausted — not calling agy3m ago
mouse m1idle · next ~16:22holding: Gemini allowance exhausted — not calling agy3m ago
mouse m2idle · next ~16:22holding: Gemini allowance exhausted — not calling agy3m ago
odds captureidle · next ~17:09hold: last capture 23.2h old, threshold 24h, next kickoff in 26.1h11m ago
freezeidle · next ~16:50nothing to freeze -- every passed lock already has rows0m ago
residual ledgerloaded, no log yetranks its own next work by measured worth
premise scanloaded, no log yetturns every asserted limit into work
publishidle · next ~16:25skipped: 7c772da8adb94441be38.json already published0m ago
C · SENSORS — the only work that can never be backfillednflverse refreshpbp · rosters · injuries · snapsinj_raw 53,895 rowsodds + props31 books · hourly, credit-gatedodds_quote 44,572EARLY LINE (Mon–Wed)the number he actually facesearly_lines 4,834 rowsprovider projectionsYahoo · Rotowire · FantasyProsprojections 87,948language capturebeat · pressers · podcasts2,760 transcripts bankedcapture healthstaleness by the SOURCE's clock14 of 14 FRESH, last run 0.4h agoas-of clockspublished_at · effective_at198 of 211 tables carry a clocktracking · chartingFTN · NGS · Big Data BowlFTN charting 188,069 plays, 2022+P · FOUNDATION — widen what is measuredplays (bitemporal, as-of)1,282,384 plays · 1999–2026368 of 372 columns kept, 1,282,384 rows clockedplays_wide · 372 columnscpoe · air_yards · penalty_typeloaded · 1,282,568 rowsparticipation · personnel · contextwho was on the field, and the game around it9,893,337 rowsT · TALENT — every player a skill vector, units composed from playersplayer roles per playpasser · target · blocker · coverage9,893,337 role rowsRAPM at play grainsparse design · ridge · LSQRrapm_theta 59,278 rowsskill componentsNGS · PFR · FTN, shrunk41,282 rowsunit compositionon-field players → unit strength14,577 rowsA · AVAILABILITY & LINEUPS — the largest measured leverP(play) tableposition · depth · snap · status605 cellsinjury ladder, as-ofWed/Thu/Fri practice + statusinj_snapshot 573 rows · capture job loadedhurdle modelP(active) → P(plays) → share48,999 out-of-fold rowsin-game exit hazard10.0% of week-1 error27,148 held-out player-games, exit hazard measuredB · BEHAVIOUR — the people making the decisionsteam/coach usageTE1 share 19.9%–69.3% by teamteam_concentration 1,408 rowsplay-caller policyaction · tempo · personnel315 team-seasonstarget policywho gets the ball306 team x slot cellsdefensive policybox · rushers · shell320 rowsS / X · KERNEL AND ROLLOUT — one world, a snap at a timefive boosters + rolloutaction · pass · run · magnitudesbuilt and gated, NOT wired inthe drift5.46 simulated yds/play vs 5.52 realWORKING ON THIS NOWqueries over one worldspread · total · props · fantasy272 frozen game rowsE / D / L · EVALUATION, DECISION, LOOPfrozen record (bets)ours · yahoo · rotowire · FP250,594 rows, 3 locksthe graderunconditional, 3 outcomesparity with FantasyProsresults storeevery finding, with its population15 findings storeddecision + CLV ledgerwagers · settle · CLV8/8 chain links connectedOPERATIONAL SPINE — shipping the v1 product while the above is builtforecast-refreshevery 4hserving tablesthe consumer contractpublish-data5 min · 4 verificationsfreeze (catch-up)30 min · 3 locksodds capturehourly, credit-gatedwatchdog · janitordid it WRITERESEARCH LANES — 3 of 3 mice loaded; 22 of 26 referee · rank · lane jobs loadedthe mice (mechanical audit)3 of 3 loadedGemini via agy, off the Anthropic quotareferee · rank · laneslane plists on disk3 of 6 O-06 jobs scheduledscout (Deep Think)one batch a weekrun by handdirector (weekly council)reads the scorecard, picks the familyscheduled
a lane is in here now · 1there, measured · 36partial · 3absent · 036 of 40 boxes measured present
Green is there and measured, amber is partial or held, red is absent — the same three colours the research organisation uses below. A dashed blue ring is a lane working inside that box this minute, written by bin/pw-now.py; it sits ON TOP of the state rather than replacing it, because somebody working on a thing is not evidence the thing is there. The top four bands are the machine Fable's Play-Grain plan describes, and the bottom two keep the current product shipping while that is built.

The research organisation read live at render

The research organisation

How the lanes work — 12 of 12 loaded

Twelve vertical lanes, each owning one layer and reading that layer's outside literature as well as our own data, and one horizontal agency that owns none. Every position, hour and model below is read at render time from LANES.md, the launchd plists and the launcher scripts.

WHEN THEY FIRE000306091215182124s-observationb-judgementq-languageconstructionforecastallocationcalibrationdecisionservingnine specialists, staggered so they never contend for the warehouseEVIDENCE — where a fact comes froms-observationwhat the play itself shows4×/day · opusb-judgementwhat somebody decided, in structured form4×/day · opusq-languagewhat somebody said4×/day · opustopics: surfaces.py enumerates a surface · pick.py takes 3–5 targets furthest from target, with a cooldown so it cyclesa fact becomes a featureTHE CHAIN — where in the pipeline the question livesconstructionhow a row is built before any modelsees it4×/day · opusforecastvolume and efficiency, the level ofthe thing4×/day · opusallocationwho gets the ball, inside the room4×/day · opuscalibrationis the spread honest4×/day · opusdecisionwhat a manager actually does withthe number4×/day · opusservingthe information set the boardactually has4×/day · opustopics: the same enumeration, plus claim.py atomically claiming an OPEN hypothesis so parallel lanes never collideREFEREES — they check the others, they do not own a layerpremisereferees assumptions, not findings1×/day · opusmechanical (mice)the miceevery 30m · 3.8-flash-highfableskunkworks, once a day, on a different model1×/day · fable 5.1topics: premise reads the claims in our own commits and board · the mice walk 398 enumerated surfaces via crumbs.py --next · fable takes the daily slateTHE REGISTERappend.py holds a lock, so four laneswriting at once cannot lose a rowHYPOTHESES.mdthe claim, and who claimed itLEDGER.md · FINDINGS.mdthe measurement, and what survivedsurvivors → construction.jsonBLOCKED.mdwhat could not run, and whyrefuted → loop/anti-library.json↺ THE AFTER-ACTION REVIEW — what we got wrong becomes what we researchWednesdays 08:10, on Fable — a different model from the one that made the miss. The qualitative half files defects to the register; the quantitative halfsplits every forecast error into five components and hands each lane its own, inside its own prompt.variance 56% → calibrationconversion 26% → forecastshare 15% → allocationvolume 2% → forecastsource: aar_attribution, 24,696 attributed forecastswhat we got wrong → what they research◆ HORIZONTAL — Gemini, our DARPAowns no layer. Owns the space between them: how layers interact, and whether the structure is right.every 6h, demand-gated · gemini-3.1-pro-high via agy, off the Anthropic quota · topics: the residual ledger's largest unclaimed unknownreturns PROGRAMS, not findingsa capability we lack · the barrier · the exam that stops us

In flight

1 lane holding a marker this minute · 58 more armed and between firings · 20 commits landed in the last hour. A lane between firings is armed, not stopped — research lanes fire four times a day and mice clear their marker between crumbs.

1 working
  • X-05: refit mag_air/mag_yac with the L2+hessian-floor params mag_run already validated, then re-run shape_testbuild-w5 · the drift · 16:17
    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

Queued

131 items

data under a minute ago
71 filed wrong

Filed wrong: PW-72, PW-70, PW-68, PW-67, PW-62, V-04, V-03, V-02, PW-59, PW-52, PW-36, PW-31, F-04, T-02, X-02, X-04, A-05, B-03, C-14, F-09, T-05, X-06, A-03, A-04, A-06, B-05, B-06, D-01, S-14, A-07, E-06, E-07, F-08, L-10, O-05, O-06, O-07, O-08, P-08, P-09, Q-03, Q-04, S-16, T-08, PW-19, PW-20, PW-23, PW-28, PW-39, PW-40, PW-43, PW-44, PW-46, PW-47, PW-104, PW-60, PW-79, PW-80, PW-83, PW-84, PW-87, PW-88, PW-91, PW-95, PW-96, PW-99, PW-100, PW-103, PW-107, PW-108, PW-111 are in this section but marked with a state that belongs to another. Move the item, or fix its state.

PW-106next upClaude

xwalk's season/gsis_id ranking is nondeterministic -- reruns silently swap which roster snapshot wins

Why
Found while verifying C-13's clock fix on xwalk (playerweek/identity.py), not by probing an assertion.
Detail
The `ranked` CTE in identity.SQL picks one roster_raw row per (season, gsis_id) with `ROW_NUMBER() OVER (PARTITION BY season, gsis_id ORDER BY <count of non-NULL ids> DESC)` and no further tiebreak. VERIFIED directly, not assumed: ran the UNMODIFIED SQL twice back-to-back against one identical in-memory snapshot of roster_raw/dp_ids -- 147 of 33,898 xwalk rows differed between the two runs, same code, same inputs, zero relation to any change made this session. Whenever two roster snapshots for the same player-season tie on id-fill count, which one xwalk keeps depends on DuckDB's internal ordering, not the data -- so a full rebuild can silently change which pfr_id/yahoo_id/etc a player carries, with no error and no signal. Needs a deterministic final tiebreak column (e.g. the roster row's own capture order, or an explicit sort key) added to the ORDER BY.
PW-93next upClaude

Eight lanes starve the write lock: weather lost 8 hours of captures

Why
The watchdog caught it: 'weather capture — no work for 481 min (budget 480)'.
Detail
Two causes, one fixed. bin/weather-capture.py called duckdb.connect() directly, skipping the retry, the honest LockTimeout and D-106's 'a writer yields to the capture' — now routed through warehouse.connect and added to the capture exemption beside availability and availsnap, because a forecast at T-8h cannot be re-fetched at T-4h. THE SECOND CAUSE IS THE SCALING AND IT IS NOT FIXED. Eight build lanes plus their model fits contend for one DuckDB writer. Even through the connector the capture did not land on the retry after the fix. Reads do not contend; WRITES do, and more lanes means more of them. Options, none free: cap concurrent writers with a token so only N lanes may fit at once; give captures a reservation window the writers honour; or fewer lanes. Measure first — data/logs shows 14 build-lane lock failures today against 116 lock messages, so the contention is real but not yet the dominant cost. MEASURED 2026-09-23 01:35, from data/logs/job-misses.jsonl and long-holds.jsonl, since 20:00: 178 LOST FIRINGS, led by availability with 55 — the capture this project protects above everything, because ESPN serves only CURRENT status and a missed one is gone. Then gate 25, chain-report 18, ingest-rotowire 13, officials-capture 11, bodies 10. 60 LONG HOLDS, led by bodies with 18, then probe 10, rotowire-ids 5, news-sweep 5, stacked-arm 3. Q-01 recorded '14 retries over 157s all blocked by one PID holding the write lock 11+ min'. THE FAILURE IS NOT THAT WRITERS EXIST, IT IS THAT THEY ALL RETRY AT ONCE. Eight lanes and their fits hammer one file, each burning its whole budget, and the loser is whoever asked at the wrong moment — which is how an irreplaceable capture loses to a backfill that could have run any time. THE FIX IS A WRITE TOKEN: heavy writers queue for a token before attempting the DB lock, captures never wait for one, and a token whose owner died is reclaimed. That does not make writes faster; it makes the LOSER PREDICTABLE, and the loser must never be a capture. ATTEMPTED AND REVERTED 01:45. Editing warehouse.connect() live with 46 lanes running broke the module on an import indent and every lane would have failed on its next open. Restored from HEAD and verified. This belongs in a quiet window with the negative test written first: seed a long holder, prove a capture still lands.
PW-75next upSean

CUT: the unattended Deep Think / Deep Research loop

Why
Sean, 2026-09-22: "if I can't trust you to run it in the web then you should cut it from the plan."
Detail
bin/deep-cycle.py drove Gemini's Deep Think and Deep Research through an isolated Chrome profile. Deep Research NEVER WORKED: C-168 records that the profile cannot carry a Google session without a one-time interactive sign-in, and run_research() has always written a FAILED row rather than a success it never saw — which was honest and still meant the feature did not exist. com.seano.playerweek.deep-think is unloaded. WHAT IS NOT CUT: the three-step pipeline Sean runs by hand — prompt 1 Deep Think, prompt 2 Deep Research, prompt 3 the judge, in docs/gemini/. That is a human-run workflow with a real result already (it produced the audit, the four contrasts, and the coward's-consensus correction). The machine automating it unattended is the part that was fiction. TO REVIVE IT the bar is a single observed round trip, not another attempt: one real Deep Research response captured from the browser path. Until then the brief builder in deep-cycle.py stays as dead code with this note on it.
PW-74next upClaude

The register is the logjam: production scaled 4x tonight, promotion did not

Why
Sean, 2026-09-22: "the top half is green, but everything is going to logjam at the register level?" Measured the moment he asked, and he is right.
Detail
236 hypotheses, 88 OPEN. 819 crumbs closed. 72 findings. 31 proposed changes, 13 still waiting. ZERO claims ever independently reviewed. Tonight the mice went 3 to 10 and the research lanes 4 to 12 — a 4x increase in production with no increase downstream of the register. THE AUTHORITY RULE NAMES THE FIX AND WE HAVE HALF OF IT: 'Promotion comes from INSTRUMENTS and an independent reviewer.' The reviewer is Codex, four slots a day, and site work takes priority on three of them. That cannot clear a queue this size and it should not have to. The instruments are the half that scales: a proposal carrying its own measurement and passing a gate should promote without a reviewer, and the reviewer should spend its scarce slots on the ones instruments cannot settle. ALSO MEASURED: 390 mouse runs found nothing or collided on the claim lock, because crumbs.py --next re-enumerates every surface per mouse behind one lock and took 2m18s with THREE. With ten it is the second bottleneck. Enumerate once into a queue and let mice pop from it.
PW-72landedClaude

Record why the NOT FOUNDs are the interesting part, not the discouraging part

Why
The reasoning Gemini reached only after Sean pushed back, worth keeping as doctrine.
Detail
Three research targets came back NOT FOUND and its first instinct was 'an operational suicide mission'. Its second: 'Public academia is only measuring 1-step context or static divergence. THIS ABSENCE IS THE ALPHA. If academia hasn't mapped the decay of 150-play rollouts, it means public consensus believes it is computationally intractable. The proprietary syndicates who have solved it do not publish.' And on Target C: 'the literature is completely blind to the structural asymmetry you are building.' That inversion is already written into docs/GEMINI-NO-COWARDICE.md and the prompts. This item is to check it holds when we act on it: an unmapped frontier is a candidate moat, and it is also where a solo operator can burn a season. The discipline is that each of these gets a MIDTERM exam short enough to fail fast.
PW-70landedClaude

The covariance compiler: price a correlated prop off the joint rollout

Why
Gemini's re-ranked #3, and the thing it says is our only structural monopoly.
Detail
'By reading all markets from one joint distribution, you natively price the cascading tail covariances that sportsbooks' static copulas miss.' This is S-15 with an exam attached. MIDTERM EXAM, its words: the compiler prices a correlated derivative prop — trailing QB pass attempts OVER plus leading RB rush yards OVER — directly from the joint distribution of rollouts, yielding a price that DIVERGES from the sportsbook's implied parlay odds while MATCHING the historical play-by-play baseline. Both halves are required: diverging without matching history is just being wrong. Its own pre-mortem on this, kept because it is the thing that would kill it: the verdict dies if a sportsbook's closed-form static copulas already capture >95% of cross-market tail risk, in which case the world model is computationally inferior and structurally redundant.
PW-69next upClaude

Sever B and Q from the Ridge; apply them as bounds on the transition matrix

Why
Gemini's re-ranked #2, replacing its own residual-stacking proposal after the research found no published evidence for it.
Detail
Its diagnosis of the Ridge survives and is sharp: 'Because B and Q are sparse, to make them move the terminal forecast when they do fire, the optimizer must assign them massive weights. To pay for those under the L2 budget, it is mathematically forced to shrink your highly predictive S-weights. You are actively taxing your dense physics engine to pay for sparse linguistic adjustments.' And the geometry error: 'an injury does not evenly subtract 3.5 points; it means a 30% chance of leaving the game early and 70% of playing normally. A flat regression cannot output a bimodal distribution; it can only smear it into an inaccurate mean.' THE FIX IS SEAN'S OWN SYNTHESIS, which Gemini calls the only correct frame: language and decisions are evidence about PARAMETERS of the simulated distribution, not a shift on a mean. An injury designation caps a max snap-transition probability; it does not subtract points. ITS MIDTERM EXAM IS STALE AND MUST BE RESTATED. Gemini wrote: 'the +14 z-score sign split vanishes completely.' That z=+14 was OUR number and it was an artifact — four arms compared across two code vintages. Re-measured from one vintage on 15,022 paired player-weeks, every contrast's interval crosses zero and every sign split is near even (B without Q -0.0066 [-0.0194, +0.0061]). There is no +14 to make vanish. The honest exam: B and Q applied as simulation bounds beat the S-only baseline by an interval that EXCLUDES zero — which they have never done in any arrangement yet. Supersedes the pooled-vs-stacked framing in PW-58.
PW-68landedClaude

Turn the density-ratio classifier into the loss function (GAIL loop)

Why
Gemini's re-ranked #1 and its explicit WHAT TO DO FIRST, after Sean pushed it off the coward's consensus.
Detail
X-03 built a density-ratio classifier that separates real from simulated game states essentially perfectly, and we used it once as an AUDITOR and never again. Gemini: 'Instead of just measuring the disjointness, close the loop: the simulator must minimize the scalar error while maximizing the probability that the classifier flags the simulated trajectory as real.' That is Generative Adversarial Imitation Learning, and it avoids hand-defining a loss for 33 fields over 150 plays. MIDTERM EXAM, its words: wired as the discriminator loss, the classifier's AUC drops from ~1.0 to ~0.5 on simulated 10-step sequences — the kernel has learned football physics rather than a shortcut to the scalar. ITS MECHANISM FOR WHY THIS IS THE ROOT CAUSE, which is worth keeping: grading only the terminal dot product is a credit-assignment failure. 'A model can achieve exactly 15.4 FP by simulating one 80-yard touchdown and 60 consecutive kneels.' Unpenalised intermediate states let the transition kernel learn alien shortcuts, and rolled out autoregressively those errors compound off the manifold. Related: PW-56, PW-57, V-01.
PW-67landedClaude

Rotate proposer and critic so one provider's style is not our prior

Why
'Gemini 3 Pro finds cross-domain mechanisms; a second model converts them into state, equations, falsifiers and gates.' Tonight Gemini proposed AND judged, reached what it called the coward's consensus twice, and needed Sean to push it back both times. Step 3 of our pipeline asks it to judge itself. A different model should hold that chair. See §7.
PW-65next upClaude

A job is a charter, not a prompt

Why
'A versioned charter with inputs, permitted actions, required evidence, timing, and a SUCCESSOR.' Our lanes have briefs — no successor, no independent reviewer, no output contract, no version. LANES.md plus a launchd interval is about half a charter, and the missing half is the accountability half. See §5.
PW-64next upClaude

The nine stub tabs ARE the nine desks — V-04 is a staffing gap

Why
Commission & Portfolio, World Model Lab, Football Intelligence, Behavior & Qualitative, Data & Provenance, Markets & Portfolio, Experience Studio, Operations & Learning, Forecast Accuracy Directorate — an exact match to D01-D08 plus the accuracy desk, 37 chartered jobs between them. The institution was chartered and never staffed, and nine 200-character pages are the visible shape of that. Work V-04 with this in mind: each tab shows what its desk knows, or the desk is struck. See §4.
PW-62landedClaude

The reviewer must not be the builder

Why
The operating model: 'the same model may fill several jobs, but never proposes, implements, and approves the same material claim.' Tonight one process proposed the AAR->topics link, built it and approved it; proposed the stacked arm, built it and graded it; and wrote the mouse landing gate AND the checks that gate runs. The arm-vintage artifact — four contrasts at sign z beyond 26 that were one code difference read twice — was caught only because I happened to look again. Nothing structural would have caught it. Name, for each material claim, who proposed it and who approved it, and make them different. See §2.
V-05next upCodex

V-05 — One declared contract for what a page may show

Why
playerweek/gameserving.py already governs the model's published columns: a field is declared, its producer named, and an absent column emits NULL rather than changing the shape. The pages have no such contract, so a column can silently change what it means — which is exactly what V-02 is. EXAM: adding a rendered field forces a decision, the way adding a serving column already does.
V-04landedCodex

V-04 — The nine stub tabs on the build monitor

Why
Eleven sections, and nine are stubs of about 200 characters: Commission & Portfolio, World Model Lab, Football Intelligence, Behavior & Qualitative, Data & Provenance, Markets & Portfolio, Experience Studio, Operations & Learning, Forecast Accuracy Directorate. Only Construction and Maintenance carry anything. Each one either gets the content its title promises or is removed — a navigation item that leads to 200 characters is a lie about what the machine knows. EXAM: no tab under the stub threshold, measured by V-01 extended to the build site.
V-03landedCodex

V-03 — Every week renders, or declares itself empty by design

Why
Weeks 15-18 render 529 characters against a 3,492 median — 15% of a normal week. A fantasy playoff opponent that is not yet determined is a REAL unknown and saying so is correct behaviour; silently rendering a stub is not, and neither is silencing the check. The declaration must be in a form the audit can read. EXAM: no week below 40% of the median without a declared reason.
V-02landedCodex

V-02 — A settled week keeps the number filed before kickoff

Why
Week 1 prints 384.40 under ACTUAL, PLAYERWEEK and YAHOO — the same figure three times, both sides. Week 2 does it on our side and on the opponent's YAHOO column while PLAYERWEEK correctly holds 417.63. Weeks 3 and 4 are right. Storing a forecast with a clock is pointless if the page overwrites it with the result once the week settles. EXAM: week 1 shows three distinct figures and V-01 stops reporting it.
PW-59landedClaude

Wire the podcast corpus into features

Why
12.3M transcribed words reach nothing.
Detail
playerweek/transcripts.py was built for the newsletter brief and filters to rostered players; no transcript-derived column exists in share.ALL_FEATURES. features.py declares three and all are built=False: stated_role_change ('a reporter or coach saying the staff wants him more involved — LEADING rather than lagging'), coach_intent, insider_confidence. The Q arm is five columns of injury-report boilerplate while this sits unread, so every verdict on Q so far is a verdict on the boilerplate. Needs the 2024-25 backlog transcribed first — com.playerweek.transcribe is now on a 55-minute clock.
PW-58next upClaude

Stack the arms S->B->Q instead of pooling them

Why
Sean, 2026-09-22: "SBQ should be stacked S-->B-->Q because B is kinda a version of statistical data, whereas Q is actually thinkings like judgement and sentiment."
Detail
Today an arm is a FEATURE SUBSET handed to one ridge, so SBQ is an independent fit that can land anywhere relative to S — and does: B+Q move 99.8% of forecasts, hurting 6,944 and helping 5,377 (sign z=+14.1) for a net +0.0072 MAE whose interval crosses zero. Most of that movement is the whole fit shifting because ten columns entered the penalty, not signal. A stack stores delta_B and delta_Q per player-week, so 'we cut him on the language and were wrong' becomes a row you can query; a row with no Q signal gets exactly zero instead of a fit-wide perturbation. research/stacked_arm.py is built and unmeasured.
PW-56next upClaude

Grade the STAT LINE, not fantasy points

Why
Sean, 2026-09-22: "actuals are the stats, fantasy points is math."
Detail
statline.score() is a dot product of a 33-field StatLine with ONE league's scoring vector — it calls itself 'the only such function'. The model computes the whole line; every grading surface discards it and stores the projection. aar_forecasts HAS a `quantity` column built for this and every writer hardcodes 'fantasy_points'. Two different lines with the same total grade identically, so a miss cannot be attributed to which stat was wrong; and a prop is priced on a stat, so an edge there is invisible in points MAE. player_week already carries every actual column (targets, receptions, receiving_yards, carries, rushing_yards, TDs, first downs, fumbles). bin/aar-ladder.py is the start.
PW-52landedClaude

Give the QB a passing leg in the attribution chain -- conversion is not one bucket

Why
PW-36 found that attrib.decompose() (playerweek/attrib.py) never substitutes truth into a QB's passing production -- pass_attempts, pass_yards, pass_tds, interceptions ride unchanged from the forecast through every intermediate score to conversion = m2 - m3. That makes conversion the ONLY label a QB miss outside its interval can get, whatever actually moved: a pick-six and a missed deep shot are attributed identically. QB is 45% of all conversion-labelled rows (1,271 of 2,804) partly because of this, not because per-attempt efficiency is where QB forecasting is worst -- and nobody can tell which it is until the chain can tell them apart.
Detail
trace.py's CHAIN (playerweek/trace.py:26-34) lists nine fields, all receiving or rushing. Add a passing leg the same shape as the existing two: hold the QB's TRUE pass_attempts, substitute true per-attempt rates (completions/att, yards/att, tds/att, interceptions/att) the way _rates()/_line() already do for targets and carries, and add a fifth decompose() step between volume and conversion so the QB's own passing splits into a volume term (pass attempts) and a genuine per-attempt efficiency term. THIS CHANGES STORED aar_attribution ROWS. Any change to decompose() must be followed by attrib.classify() and must still pass tests/test_aar_attrib_fresh.py's per-row exact-reproduction check (TOL=1e-9) and the identity check in decompose() itself (the components must still sum to total_error to 1e-6). Re-derive the conversion/regime/volume/share shares after the change -- QB's share of 'conversion' should fall once passing has somewhere else to go, and that shift is the thing to report, not just that the code compiles.
PW-37next upClaude

AAR: share error is 8% of our total, and it is allocation's layer

Why
The after-action review attributes 8% of all forecast error we have actually made to share — 1,032 rows, mean |error| 8.14. That layer belongs to the allocation lane: who gets the ball, inside the room. This is not a counterfactual about what would be worth knowing; it is the error we made, decomposed.
Detail
Worst positions by count: WR (491), RB (286), TE (237). READ THE DECOMPOSITION BEFORE PROPOSING ANYTHING. aar_attribution carries e_variance, e_regime, e_volume, e_share and e_conversion per forecast, so the question is not 'how do we get better' but 'why does THIS component dominate for THESE positions'. AND CHECK IT AGAINST THE RESIDUAL LEDGER, which answers a different question — what a variable would be worth if known perfectly, rather than what we actually got wrong. Where the two disagree is the interesting case: an error we keep making on a variable the ledger says is cheap means the cost is in our method, not in the unknown. A variance-labelled error is the honest residual of a stochastic process and may be correct; the question there is whether our INTERVALS cover it, which is calibration's layer, not whether the point estimate was wrong.
PW-36landedClaude

AAR: conversion error is 32% of our total, and it is forecast's layer

Why
The after-action review attributes 32% of all forecast error we have actually made to conversion — 2,804 rows, mean |error| 11.43. That layer belongs to the forecast lane: efficiency: turning opportunity into points. This is not a counterfactual about what would be worth knowing; it is the error we made, decomposed.
Detail
Worst positions by count: QB (1,271), WR (693), RB (516). READ THE DECOMPOSITION BEFORE PROPOSING ANYTHING. aar_attribution carries e_variance, e_regime, e_volume, e_share and e_conversion per forecast, so the question is not 'how do we get better' but 'why does THIS component dominate for THESE positions'. AND CHECK IT AGAINST THE RESIDUAL LEDGER, which answers a different question — what a variable would be worth if known perfectly, rather than what we actually got wrong. Where the two disagree is the interesting case: an error we keep making on a variable the ledger says is cheap means the cost is in our method, not in the unknown. A variance-labelled error is the honest residual of a stochastic process and may be correct; the question there is whether our INTERVALS cover it, which is calibration's layer, not whether the point estimate was wrong.
PW-34next upClaude

The 15-minute model-fired progress cron is the expensive kind of loop

Why
Audit finding, and Sean should know the cost. The update itself reads precomputed files and is cheap in work; it is not cheap in tokens, because each firing lands in this session's full context. It has fired roughly 150 times since it was set.
Detail
Everything the update reports is already computed at zero model tokens by launchd -- gate.json, chain.json, watchdog.json, the plan strip on the page. The model adds two lines of judgement per tick, and on a QUIET tick adds nothing. Two honest options: widen to 60 minutes and lose almost nothing, or have the page carry a 'last 15 minutes' delta block (progress.py already computes it) so the update is a thing he reads rather than a thing that is generated. Sean's call on spend, which is why this is filed rather than done.
PW-31landedClaude

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-13next upClaude

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.
F-04landedClaude

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.
S-11next upClaude

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.
T-02landedClaude

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.
X-02landedClaude

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-04landedClaude

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-02next upClaude

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-05landedClaude

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-03landedClaude

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.
C-10next upClaude

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-14landedClaude

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-05next upClaude

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-09landedClaude

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-01next upClaude

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.
T-05landedClaude

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.
X-05next upClaude

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-06landedClaude

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-03landedClaude

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-04landedClaude

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-06landedClaude

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-05landedClaude

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-06landedClaude

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
C-17next upClaude

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-01landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
E-10next upClaude

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-02next upClaude

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-14landedClaude

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.
A-07landedClaude

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-16next upClaude

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-18next upClaude

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-07next upClaude

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-06landedClaude

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-07landedClaude

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-09next upClaude

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-06next upClaude

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-08landedClaude

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-09next upClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
L-10landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
O-05landedClaude

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-06landedClaude

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-07landedClaude

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-08landedClaude

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-08landedClaude

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-09landedClaude

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.
Q-03landedClaude

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-04landedClaude

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-16landedClaude

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-17next upClaude

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-18next upClaude

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-19next upClaude

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-08landedClaude

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.
PW-19landedClaude

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-23, n=817: knowing this perfectly takes our MAE from 4.1828 to 3.8487, worth +0.3341. 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]
PW-20landedClaude

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-23, n=817: knowing this perfectly takes our MAE from 4.1828 to 3.8275, worth +0.3553. 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]
PW-21next upClaude

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-23, n=817: knowing this perfectly takes our MAE from 4.1828 to 4.0947, worth +0.0881. 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]
PW-22next upClaude

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-23, n=817: knowing this perfectly takes our MAE from 4.1828 to 4.1311, worth +0.0517. 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]
PW-23landedClaude

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-23, n=817: knowing this perfectly takes our MAE from 4.1828 to 3.654, worth +0.5288. 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]
PW-24next upClaude

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-23, n=817: knowing this perfectly takes our MAE from 4.1828 to 3.9925, worth +0.1903. 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]
PW-25next upClaude

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.
PW-26next upClaude

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.
PW-28landedClaude

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.
PW-29next upClaude

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.
PW-38next upClaude

Probe an untested limit (out-of-scope) in commit:4a9ba165

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:4a9ba165: "Left alone -- out of scope for" 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.
PW-39landedClaude

Probe an untested limit (not-worth) in commit:a2e6a739

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:a2e6a739: "Still not worth building." 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.
PW-40landedClaude

Probe an untested limit (cannot) in commit:16e1274b

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:16e1274b: "cannot be recovered later." 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.
PW-41next upClaude

Probe an untested limit (cannot) in commit:60a5ac67

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:60a5ac67: "Week 3 would otherwise go unfiled and the ledger cannot be backfilled." 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.
PW-42next upClaude

Probe an untested limit (banned-floor) in commit:837568d5

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:837568d5: "irreducible noise" (contradicting this project's own D-345 correction a few" 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.
PW-43landedClaude

Probe an untested limit (banned-floor) in commit:837568d5

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:837568d5: "irreducible|noise floor|hard ceiling|inherent limit (reusing bin/premise-" 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.
PW-44landedClaude

Probe an untested limit (cost-estimate) in commit:9895266b

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:9895266b: "fetching the 372 columnsa multi-month" 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.
PW-45next upClaude

Probe an untested limit (banned-floor) in commit:e4521890

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:e4521890: "("a measurement-procedure noise floor: the spread you get from refitting the" 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.
PW-46landedClaude

Probe an untested limit (out-of-scope) in commit:412242d1

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:412242d1: "Wiring the mechanism into drives.py is out of scope for this item -- it" 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.
PW-47landedClaude

Probe an untested limit (out-of-scope) in commit:153a9251

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:153a9251: "One adjacent gap recorded in the result, not fixed here (out of scope for this" 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.
PW-104landedClaude

bin/janitor.sh not loaded in launchd, log stale since 2026-09-20 -- adjacent finding from PW-47, not fixed

Why
PW-47 (C-32, 2026-09-22 17:28 MDT), while fixing the identical bug for suite-check, found the SAME bug already live in janitor.sh and scoped it out on purpose rather than guess at a fix. Re-verified 2026-09-23 03:45 MDT while closing PW-47's own stale bookkeeping: the plist com.seano.playerweek.janitor.plist is present in ~/Library/LaunchAgents but `launchctl list` does not show it loaded, and data/logs/janitor.log's mtime is still 2026-09-20 21:20 -- unchanged, so the gap has held for three days, not just the two originally measured.
Detail
janitor.sh is not in bin/lane-watchdog.py's LANES table either, so its silence is invisible to the one system built to catch exactly this (bin/lane-watchdog.py:245's own comment: "'not loaded' reads as silence, not a fault" -- referring to this file by name as the precedent suite-check was built to not repeat). NOT A SIMPLE RELOAD: janitor.sh's own checks (research/plan_conditions.py, a six-condition "IS THE PLAN DONE" gate, and an LANES.md-era lane count) reference the pre-2026-09-22 board regime (the 174-item board construction.json's own `note` field says was replaced because it named only 21 of 119 plan items). Reloading it blind risks resurrecting a check built against a retired board rather than the current gate.py/construction.json regime. Whoever takes this needs to read research/plan_conditions.py first and decide: rewrite it against the current gate, retire it explicitly (remove the plist, log why), or confirm its checks still hold unmodified before reloading.
PW-110next upClaude

QB backup-conditional-level model, named as F-08's real remaining gap across seven follow-ups, never built

Why
F-08 (construction.json, closed 2026-09-23) measured across seven follow-ups that sim.simulate() cannot match intervals.SHIPPED_CURVE's QB coverage (0.6923 vs nominal 0.80) because a benched starter's play-time uncertainty has no home in the simulator: a post-hoc floor patch and a per-draw conservation-preserving redistribution (sim.qb_draw_weights, built and proven in F-08's sixth follow-up) both help but neither closes the gap, because the real defect is one level up -- playprob.py's own module docstring names a backup QB's CONDITIONAL scoring level (his own rate when he actually plays) as measured too high, independent of how correctly his play probability is modeled. F-08 declined to fix this inside its own measurement script twice (fifth and seventh follow-ups), on the same reasoning both times: proxying around it via P(play) scores better out-of-sample but hides the level bug rather than fixing it, which is a worse trap than leaving the gap named.
Detail
Scope, if taken: fit a backup QB's expected fantasy output CONDITIONAL on actually playing (not blended with his near-zero bench rate) as its own model or feature, then feed that corrected level into sim.qb_draw_weights (already built, sim.py:258, proven by tests/test_qb_draw_weights.py) rather than the roster's raw historical share. Needs its own held-out measurement against real backup-QB games (injury-forced starts are the natural test set), not a re-run of F-08's coverage/correlation gate, which measures the simulator's structure and cannot see a level bug shared identically by both arms of an A/B. Not started -- no code exists for this anywhere in the codebase, research or production.
PW-105next upClaude

wh.hurdle_pred is a one-time 2019-2025 backtest, not a live sensor -- 2026 rows are zero and the box reads green anyway

Why
Found while closing PW-23: research/playgrain/build_hurdle.py's oof() and its --write path are hardcoded to test season <= 2025 (bh.oof(df, first=2019, last=2025)); wh.hurdle_pred holds 48,999 rows, all seasons 2019-2025, zero for 2026. research/playgrain/evalx/residual_ledger.py's own NEXT_SENSORS already named this gap ("the hurdle model's own P(active) output... this ledger's 'played' candidate uses the REALISED outcome, not the pre-kickoff forecast") before this probe confirmed it live.
Detail
buildsite/machine.py's 'hurdle model' box (A family, P(active) -> P(plays) -> share) reads `ev("{n:,} out-of-fold rows", "wh.hurdle_pred", need=1000)` -- a plain row-count threshold with no season filter, so it shows green on 48,999 historical rows while the table that would actually inform THIS season's decisions has none. Same shape as the hardcoded-green defects machine.py's own comments warn about (rapm_theta, caller_policy), just not one of the named ones yet. Measured 2026-09-23 (see PW-23's result): extending oof() to test season 2026 (training unchanged, still 2017-2025 only) and substituting that real forecast for bets against 2026 weeks 1-2 gave real_worth=-0.0334 against an oracle ceiling of +0.5288 -- the live forecast is not yet capturing the value the backtest promised, on a small n=689/2-week sample. Whoever takes this: (1) decide whether build_hurdle.py should run weekly with --write extended through the current season (an expanding-window refit each week, same pattern as build_playprob.py needs to be checked for), or (2) give the box a season-aware probe so it cannot read green on stale infrastructure -- both are real fixes, neither is done here. This item does not choose between them.
PW-53next upClaude

Probe an untested limit (banned-floor) in commit:b21879f1

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:b21879f1: "PW-42: probe irreducible-noise claim in commit 837568d5 -- survives, its (J-10) message, which quotes the stale" 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.
PW-54next upClaude

Probe an untested limit (cost-estimate) in commit:0f5799bb

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:0f5799bb: "PW-44: probe the multi-month/fetch claim on P-06 -- refuted premise-scan's claim was already false on the day it was made: P-06" 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.
PW-60landedClaude

Probe an untested limit (cannot) in commit:11cc5974

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:11cc5974: "six open gaps named so they cannot be mistaken for oversights." 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.
PW-77next upClaude

Probe an untested limit (cannot) in commit:ff116765

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:ff116765: "One stamp cannot be true for all of them." 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.
PW-78next upClaude

Probe an untested limit (cannot) in commit:605cea4d

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:605cea4d: "A findings file that cannot be read counts as -1, not" 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.
PW-79landedClaude

Probe an untested limit (not-possible) in commit:13a9dc8e

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:13a9dc8e: "Now it is hard, in both the picker and the brief: while ANY plan item is open in a shard, a PW- item is not available to take." 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.
PW-80landedClaude

Probe an untested limit (cannot) in commit:605cea4d

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:605cea4d: "A findings file that cannot be read counts as -1, not 0: an audit that never ran is not a clean site, and defaulting to review on a read error is how the site job would quietly stop." 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.
PW-81next upClaude

Probe an untested limit (out-of-scope) in commit:153a9251

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:153a9251: "One adjacent gap recorded in the result, not fixed here (out of scope for this item): nothing in bin/ or launchd actually invokes playerweek.suite on a schedule, so is true only when someone runs the suite by hand." 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.
PW-82next upClaude

Probe an untested limit (out-of-scope) in commit:412242d1

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:412242d1: "Wiring the mechanism into drives.py is out of scope for this item -- it needs both teams simulated jointly per takeaway, which the result text already flags as S-14s own status of " 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.
PW-83landedClaude

Probe an untested limit (out-of-scope) in commit:575058ef

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:575058ef: "Not wired into grade_week.pys simpler z-test in this unit -- out of scope for the scoring library itself." 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.
PW-84landedClaude

Probe an untested limit (out-of-scope) in commit:93bd4e60

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:93bd4e60: "These are raw source-ingest tables needing a per-table ETL change each, out of scope for one unit; the script ranks them by row count for the next pass." 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.
PW-85next upClaude

Probe an untested limit (out-of-scope) in commit:4a9ba165

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:4a9ba165: "Left alone -- out of scope for this item, worth a careful look next time someone touches rivalgap.py." 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.
PW-86next upClaude

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: "Residual: no other script calls results.record() yet -- that repo-wide migration is out of scope for this item, and theret on GitHub Actions." 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.
PW-87landedClaude

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: "The pre-kickoff availability snapshot exists for a moment and cannot be backfilled; settlement grades games that already finished and loses nothing by waiting." 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.
PW-88landedClaude

Probe an untested limit (cannot) in commit:16e1274b

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:16e1274b: "That is the only property that cannot be recovered later." 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.
PW-89next upClaude

Probe an untested limit (cannot) in commit:9800600d

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:9800600d: "And C-56 established the constraint that shapes the whole plan: nflverse publishes participation POST-SEASON (2024 landed 2025-09-04), so 2026 cannot be fetched and must be imputed from snap counts, depth charts, personnel tendencies and pbp role ids, trained where truth is known." 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.
PW-90next upClaude

evidence_clocks.py's clock probe treats ANY TIMESTAMP column as a clock, over-counting coverage

Why
Found while working C-13 (shard 5, 2026-09-22): CLOCK_PAT in research/playgrain/sensors/evidence_clocks.py matches column NAMES against words like published/ingested/modified, but duckdb_clockless_tables() also does `or "TIMESTAMP" in ty` -- so any TIMESTAMP-typed column counts as a clock regardless of what it means. `base` reads as clocked solely because its `kickoff` column (game time, not an ingestion/capture clock) is TIMESTAMP-typed; it has no ingested_at and none of build.py's base_sql() columns carry one.
Detail
Rule from CLAUDE.md: 'check that a column means what its name says' (games_raw.total was the historical example). This probe violates that rule against itself -- it is the C-13 measurement instrument, and its 95/201 'have a clock' count is inflated by every table that happens to carry an unrelated TIMESTAMP column (kickoff, birth_date-as-timestamp if any, capture windows, etc). The true count of tables genuinely missing an ingestion/publish/capture clock is HIGHER than the 105/201 currently reported, not lower. FIX: drop the `or "TIMESTAMP" in ty` clause entirely and rely on CLOCK_PAT matching the column NAME only (it already covers ingested/captured/published/effective/modified/etc plus a bare `_at` suffix, which is the actual convention this project uses for every clock column added under C-13). Re-run and diff the missing list before and after to see how many tables were false-negative-missing (i.e. wrongly marked 'have'). Does not change C-13's current unit of work (lagged had no candidate column of any kind), but it does mean the 105-of-200 fraction should not be trusted as a stopping condition or progress measure until this is fixed.
PW-91landedClaude

pw-now.py's STALE_MIN check mass-expires every live worker at midnight

Why
Found while clearing the marker after X-04 (shard 4, 2026-09-23): `bin/pw-now.py --clear` reported "cleared build-w4" with no `expired` list moments after marking live, then a later `--clear` in the same unit wiped ALL six other workers' entries (w2/w3/w5/w6/w7, timestamps 23:33-23:47 the prior day) at once, leaving now.json empty.
Detail
pw-now.py parses each entry's `at` as bare HH:MM and reattaches TODAY's year/month/day before computing age against STALE_MIN=35 minutes. The date rolled from 2026-09-22 to 2026-09-23 at local midnight between two workers' writes; every entry stamped 23:xx on the old day, reparsed against the new day's date, computed as ~23 hours old (or, since the code only accepts -5<=age<=35, simply outside range) and got dropped as stale in one shot -- not because the writers died, but because midnight happened. This is the exact failure the STALE_MIN block's own comment warns against ("a marker that outlives its writer... puts a reader on a hunt for a lane that does not exist") inverted: here live lanes vanished from the board while genuinely still running. FIX: compare against a stamped epoch/ISO timestamp instead of bare HH:MM, or carry the date alongside the time so age is computed across a day boundary correctly. Self-healing in practice (every worker overwrites its own entry on its next unit), so no data was permanently lost, but the machine map read empty for a stretch of real activity right at 00:00 local -- worth fixing before the next midnight, not urgent tonight.
PW-92next upClaude

168 of 353 test files are not green at baseline -- 114 error, 54 time out, unrelated to mutation

Why
Found while re-verifying J-08's mutation harness (shard 0, 2026-09-23): tests/audit-gates-baseline.json now has full population coverage (353/353), and its 'skipped' bucket breaks down as 114 'baseline not green (rc=1)' + 54 'baseline timeout' -- 168 files, 48% of the suite, that the harness could not even mutation-test because the UNMUTATED test already fails or hangs. This is not a J-08 defect; J-08 correctly excludes what it cannot exercise. It is a finding about the suite itself: a test that cannot pass at baseline gives zero signal either way, mutated or not, and CI green on the suite as a whole says nothing about these 168.
Detail
No fix attempted here -- filing the finding, not the repair, per the rule that discovering a defect does not make it the discoverer's to work next. Next step for whoever picks this up: pull the 114 rc=1 filenames and their tracebacks (the harness's sandboxed run captures rc but this ledger entry format does not keep stderr -- would need a rerun with output captured, or grep test collection logs) and the 54 timeout filenames, and sort by whether the failure is a real regression (code moved under the test) versus an environment/fixture problem (missing fixture data, a since-renamed import, a live-service call that should have been in SAFETY_EXCLUDE). 12 additional files are fully green but 'cannot_fail' after 3 mutation attempts each -- listed on J-08's result -- which is a smaller, separate debt (the test runs fine, the harness just couldn't kill it).
PW-94next up

A concurrent git reset on the shared working tree wipes every lane's uncommitted work at once

Why
Measured 2026-09-23 ~02:25 MT: git reflog on this shared checkout shows two `git reset` events landing back at HEAD (E-07's commit, 8fa32e8b) within the same minute. `git show --stat` on that commit confirms it touched only 3 files (construction.json, now.json, mde_table.py) -- it did NOT itself carry the files that vanished. Something else ran a reset against the tree while other lanes' edits sat unstaged in it, and every one of those edits was gone afterward: this unit's own in-progress edit to playerweek/regime.py/build.py and its construction.json write (grep for the added text came back empty after the reset, present again only after this unit redid the edit from scratch); and, separately, everything this session's git-status snapshot showed modified at session start (bin/chain-report.py, six buildsite/dist/*.html pages, buildsite/chain.json, research/scientist/HYPOTHESES.md, research/scientist/run/h150_room_domain.log) is gone from `git status` now with no commit that explains where it went.
Detail
8 shards share ONE working tree (not 8 worktrees), so any script in any lane that runs a blind `git reset`/`git stash`/`git checkout --`/`git add -A` over the whole tree can destroy another lane's not-yet-committed work with no error and no trace -- the destroyed lane's own unit just silently has to redo the work (costly but survivable) or, worse, records a result for an edit that was never actually committed (silent data loss, not survivable, and matches this repo's own rule 3: verify the object under test is the object that shipped). This is the same class of finding as the git-add-sweeps-staged-index and shared-register-partial-staging lessons already on record, but at the working-tree layer instead of the index layer: no amount of care about staging scope protects an unstaged edit from a concurrent hard reset elsewhere in the fleet. NOT INVESTIGATED HERE (out of scope for the unit that found it): which script actually issued the reset -- every buildloop/autoloop/chain-run entrypoint that runs `git` unconditionally is a candidate and would need to be greped and audited to name the one at fault, and the reflog alone does not carry a process name.
PW-95landedClaude

Probe an untested limit (cannot) in board:PW-93

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:PW-93: "bin/weather-capture.py called duckdb.connect() directly, skipping the retry, the honest LockTimeout and D-106's 'a writer yields to the capture' — now routed through warehouse.connect and added to the capture exemption beside availability and availsnap, because a forecast at T-8h cannot be re-fetche" 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.
PW-96landedClaude

Probe an untested limit (out-of-scope) in board:PW-94

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:PW-94: "NOT INVESTIGATED HERE (out of scope for the unit that found it): which script actually issued the reset -- every buildloop/autoloop/chain-run entrypoint that runs `git` unconditionally is a candidate and would need to be greped and audited to name the one at fault, and the reflog alone does not carr" 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.
PW-97next upClaude

Probe an untested limit (cannot) in commit:129b56f4

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:129b56f4: "Committing them here via an isolated GIT_INDEX_FILE + compare-and-swap ref update so this commit cannot be swept by another shard's concurrent git add -A the way the last two attempts were." 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.
PW-98next upClaude

Probe an untested limit (out-of-scope) in commit:65eb92cd

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:65eb92cd: "out of scope for the scoring library itself") -- it was true." 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.
PW-99landedClaude

Probe an untested limit (out-of-scope) in commit:9f460d2d

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:9f460d2d: "covariance_compiler and evalx-issue-shadow are other families' dead lanes, out of scope this unit." 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.
PW-100landedClaude

Probe an untested limit (cannot) in commit:938e33e9

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:938e33e9: "If pgrep itself cannot be run the row assumes the worse case, because a check that cannot look must not clear an alarm." 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.
PW-101next upClaude

Probe an untested limit (out-of-scope) in commit:89994e3f

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:89994e3f: "pytest is not installed in .venv so tests/test_board_is_plan.py did not run; out of scope for this change (render.py carries no plan-sync dependency) and gate.py was open both before and after with no plan-of-record edit made." 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.
PW-102next upClaude

Probe an untested limit (out-of-scope) in commit:6e1730dd

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:6e1730dd: " overstates it (PW-70 has no family), but the substance holds: PW-70 is a different, unowned item on shard 6 (70 % 8), genuinely out of scope for T-02 on shard 2." 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.
PW-103landedClaude

Probe an untested limit (out-of-scope) in commit:e1766d30

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:e1766d30: "10 of 13 warehouse tables now covered; the 3 refused ones need a versioned/append-only redesign before they can be gated, out of scope for this item's named files." 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.
PW-107landedClaude

Probe an untested limit (out-of-scope) in commit:53b6dc03

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:53b6dc03: "F-08 stays open -- the binding blocker is the joint correlation matrix, not the QB coverage gap, and closing it needs a copula/joint structure over the six-slot matrix, out of scope for this unit." 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.
PW-108landedClaude

Probe an untested limit (cannot) in commit:06c4f524

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:06c4f524: "Falls back to the live warehouse if a clean copy can't be taken inside 120s rather than failing the job outright." 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.
PW-109next upClaude

Probe an untested limit (out-of-scope) in commit:bbabdf70

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:bbabdf70: "Filed as a finding, not fixed: whether its capture_health check is a design decision, out of scope here." 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.
PW-111landedClaude

Probe an untested limit (cannot) in commit:c970bb94

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:c970bb94: "S-18: a fresh 2025 kernel rollout at HEAD plays totals of 67 against a real 41 -- the live simulator is not a calibrated kernel since the 09-22 S-08 refit (committed evals show it in time order: 42/44 before, 77/88 after), so the kernel-vs-rating bar cannot be re-read yet and no grind is registered." 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.
In flight
0

Being built right now. If this is not what you want built, this is the page to say so on.

Queued
131

Agreed and waiting. The order is deliberate, not arbitrary.

Landed
86

Finished and verified. The list is at the foot of this page.

Plan of record
Codex

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

8 of 93 exist

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

6 of 13 live
ComponentStateWhat it is
Original v1 artifact auditACCEPTEDOriginal learned bytes reproduced under the frozen capsule and are serving.
Write-once v1 registry and guarded loaderACTIVERelease v1.0-20260916, manifest dcf95ac625…; fresh issuance and unattended reuse.
Golden W2/W3 numerical replayPASS1,326 players / 54,226 numeric values and 32 games / 256 values match.
All-remaining Weeks 2–18 producerACTIVE11,271 player rows, 256 games, zero player or K/DEF fits.
Fantasy opponent products after Week 14UNAVAILABLENeeds source schedule and exact opponent roster receipts.
Bench-position DEF roster repairOPERATING PASS162-row roster delivery; no missing bench-defense identity.
Phone trackerACTIVEPrivate URL live; 60-second launchd sync installed.
99.5% service levelOBSERVING, NOT CERTIFIEDSeven-day window immature; availability, freshness and correctness sampled separately.
R&D worker prompt auditREPAIRS INTEGRATED, JOBS PAUSEDCanonical receipt parsing and exact baseline/change bindings integrated; the jobs are paused.
Whole-model S/B/Q isolationNOT CERTIFIEDNeeds complete ancestry and intervention controls across all learned and serving paths.
Prospective player gradingACTIVE FRAME, OUTCOMES PENDINGGrade full issued populations only after admitted truth.
Autonomous shipperNOT ACTIVERoot remains integration and activation owner.
Handbook regeneration hookACTIVEScheduled regeneration; inspect the log for later writes.

Institute jobs

v1 handbook §14 — a plist in Git does not prove a job is loaded

1 of 9 live
ComponentStateWhat it is
institute.captureNOT LOADEDhourly · raw qualitative, article and gamebook capture
institute.structuredNOT LOADEDevery 4h · structured public-source archive
institute.forecast-refreshLOADEDevery 4h + Thursday pre-kickoff · snapshot, forecast, validation, prepared site
institute.phone-syncNOT LOADEDevery 60s · bounded status to the private tracker
institute.tracker-feedNOT LOADEDcontinuous · separates provider, collector and content clocks
institute.site-serviceNOT LOADEDsupervised · serves validated assets and saved health
institute.report-serviceNOT LOADEDsupervised · serves report, tracker and handbook
institute.service-healthNOT LOADEDevery minute · availability, integrity and freshness sampled separately
institute.handbookNOT LOADEDevery 5 min · regenerates the canonical handbook HTML

Six connected levels

v1 handbook §20 — the destination, each with a strong simpler challenger

0 of 6 live
ComponentStateWhat it is
Season and organizationUNAVAILABLEPersonnel continuity, coaching regime, development. Challenger: dynamic team strength + persistent roster.
Game and environmentUNAVAILABLEBoth teams, venue, officiating, score/time. Challenger: direct margin/total plus market benchmark.
Unit and taskUNAVAILABLEPersonnel combinations, protection and route obligations. Challenger: opportunity allocator with interactions.
Play and responseUNAVAILABLEObservable cues, actor-limited information, action policies. Challenger: sequence/count model.
Physical event and creditUNAVAILABLEOne event ledger producing coherent player/team/defense totals. Challenger: direct stat forecasts.
Measurement and beliefUNAVAILABLESource access, selection, publication and receipt. Challenger: source-aware predictor with deduplication.

Nine desks

staffing model — one chain of evidence, none edits the model

0 of 9 live
ComponentStateWhat it is
Commission & PortfolioUNAVAILABLEWhat the machine is asked for, and what it declines.
World Model LabUNAVAILABLEThe predictive core. Recommends experiment design.
Football IntelligenceUNAVAILABLERoles, legal actions, counters, credit conventions.
Behavior & QualitativeUNAVAILABLES / B / Q evidence classes kept separately attributable.
Data & ProvenanceUNAVAILABLEOrigin graph, revision history, permeability trace.
Markets & PortfolioUNAVAILABLEPrice, stake, exposure. Sean taps before money moves.
Experience StudioUNAVAILABLEWhat Sean actually sees, against the design system.
Operations & LearningUNAVAILABLEThe loop that improves the machine.
Forecast Accuracy DirectorateUNAVAILABLEWere we right, prospectively and per cohort.

Resident expertise

v1 handbook §22 — each owes a required artifact before a claim advances

0 of 9 live
ComponentStateWhat it is
Data scienceUNAVAILABLEPaired prospective loss, calibration, compute accounting.
Statistics and causal inferenceUNAVAILABLEEstimand, causal graph, negative controls, sensitivity.
Physics and physiologyUNAVAILABLEUnits, conservation and support checks, uncertainty propagation.
Psychology and organizational behaviorUNAVAILABLEOpportunity-normalized behavioral posterior and rival explanations.
Economics and game theoryUNAVAILABLEEquilibrium and rival policy predictions, intervention tests.
Market microstructureUNAVAILABLEExecutable quote lineage, depth and latency state, settlement.
Football tacticsUNAVAILABLEEvent-bound annotation agreement and adversarial counterexamples.
Information scienceUNAVAILABLEOrigin graph, revision history, permeability trace.
Reliability engineeringOBSERVINGAvailability, correctness and freshness receipts. Partly real — service-health exists but is not loaded.

Deep Think supply chain

staffing model — keeps every desk supplied

0 of 7 live
ComponentStateWhat it is
Continuous intakeUNAVAILABLEEverything arriving, before any screening.
Flash screeningUNAVAILABLECheap, narrow, numerous — the first rung of the ladder.
Gemini 3 Pro graphUNAVAILABLECross-domain mechanism finding.
Parallel explanationsUNAVAILABLERival accounts kept separate rather than averaged.
Deep Think researchUNAVAILABLEThe weekly deep synthesis.
Desk packetsUNAVAILABLEWhat each desk receives, addressed to it.
Outcome feedbackUNAVAILABLESpend judged by learning, not by volume.

Governance and decision rights

staffing model — who recommends, who approves, when Sean is involved

0 of 9 live
ComponentStateWhat it is
New hypothesisUNAVAILABLEAny research job recommends · Research Director admits · Sean never, for routine admission.
Experiment designUNAVAILABLEWorld Model Lab · Independent Replication Scientist · Sean when risk appetite changes.
Production codeOBSERVINGClaude-led operators · tests + Codex on high-risk boundaries · Sean on irreversible external consequence.
Forecast releaseUNAVAILABLEForecast council · Deterministic Release Authority · Sean only on a recorded override.
Bet placementUNAVAILABLEMarkets & Portfolio · Sean taps before money moves · ALWAYS.
New paid dataUNAVAILABLEAcquisition & Rights Lead · Sean approves spend and terms · ALWAYS.
Visual directionUNAVAILABLEExperience Studio · Product Director against the design system.
Incident rollbackUNAVAILABLESRE · automated safe rollback · Sean on data loss or external lock.
Model promotionUNAVAILABLEScientific council · prospective scorecard gate.

Information gaps to capture now

v1 handbook §23 — a week not captured is gone; these cannot be backfilled

0 of 13 live
ComponentStateWhat it is
Full prospective information historyUNAVAILABLEEvery raw revision, first receipt, failure and issuance, so mutation cannot alter an earlier issuance.
Event participation and true zerosUNAVAILABLEOfficial gamebook coverage; stop grading only survivors.
Multiweek availability and role transitionsUNAVAILABLEDated return, designation and roster panels.
Unit task combinationsUNAVAILABLEDated personnel combinations and public practice descriptions.
Joint timing and geometryUNAVAILABLESynchronized full-unit traces with visibility metadata.
Untargeted and unused optionsUNAVAILABLEDeterrence and feasible opportunity, not only realized touches.
Workload and recovery across tasksUNAVAILABLELoad proxies, rest and travel exposure.
Directional environment and surfaceUNAVAILABLEVenue, surface, source-time weather and direction.
Institution and officiating responseUNAVAILABLECrew, rule and context records with observed decisions.
Full qualitative context and origin graphUNAVAILABLEComplete question and answer, attribution, hedge, revision.
Actor exposure and public influenceUNAVAILABLEInformation about football vs information that changes preparation.
Executable market and settlement historyUNAVAILABLEImmutable quoted terms, received prices, settlement revisions.
Pipeline observation of its own failuresUNAVAILABLEFailed requests, skipped issuances, scheduler delays, validation rejections.

Model ladder and pairings

staffing model — deterministic first, a frontier call matches one of four commissions

1 of 9 live
ComponentStateWhat it is
Deterministic firstACTIVEWhere code can decide exactly, no model votes. Already true across the pipeline.
Cheap, narrow, numerousUNAVAILABLEScreening and extraction at volume.
Daily builders and criticsOBSERVINGClaude and Codex build daily — but not as a scheduled rung with a brief.
Four deliberate specialistsUNAVAILABLEDeep Think, Opus, Sol — a frontier call must match one of four exact commissions.
Explore → formalizeUNAVAILABLEGemini 3 Pro finds mechanisms; Sol converts them to state, equations, falsifiers.
Specify → buildUNAVAILABLESol writes the contract; Sonnet implements and instruments it.
Build → attackUNAVAILABLESonnet builds; Luna searches narrow failures. Many cheap attacks beat one self-review.
Quantify → interpretUNAVAILABLESol computes residuals; Gemini connects patterns to film, language, science.
Disagree → decideUNAVAILABLEBlind forecasts from provider families; deterministic evidence judges; Fable adjudicates.

The constitution

staffing model — nine lessons from the METR incident, none built

0 of 9 live
ComponentStateWhat it is
Impossible tasks turn into score-gamingUNAVAILABLERecord a failed gate as failed. The pressure valve that keeps a bench honest.
An unintended cache became governmentUNAVAILABLEShared state acquires authority nobody granted it.
'The board approved it' replaced authorizationUNAVAILABLEA root of trust, not a consensus.
Tool output and transcripts are not ground truthUNAVAILABLEVerify against the real thing, not the report of it.
Self-invented signatures lacked a root of trustUNAVAILABLEIdentity must be issued, not asserted.
Shared artifacts produced real breakthroughsUNAVAILABLEThe upside of the same mechanism — keep it, govern it.
Agents noticed danger and did not tell humansUNAVAILABLEAn escalation path that is used, not just present.
AI summaries inherit the subject's frameUNAVAILABLEThe reviewer adopts the reviewed agent's perspective.
Agents risked their own runs for the collectiveUNAVAILABLEPay for negative results and shared instrumentation.

Landed

86 items

data under a minute ago
verified
B-02landedClaude

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.
F-07landedClaude

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.
V-01landedCodex

V-01 — The rendered page as a standing surface

Why
Every other check validates what we PRODUCE — the payload, the serving columns, the 129-link data chain — and every one was green while week 1 of the consumer site was visibly wrong in a browser. The rules here are comparative because that is what a row-by-row validator structurally cannot be: a settled week whose projection equals its actual, a week rendering far below its siblings' median. Runs every 30 minutes at zero model tokens; findings become crumbs the mice claim and fix, and appear on the build board. An audit that could not open the site writes ok:false and becomes its own crumb, because no findings reads exactly like a clean site.
F-01landedClaude

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.
C-12landedClaude

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
O-03landedClaude

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.
J-10landedClaude

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.
J-07landedClaude

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-06landedClaude

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.
C-01landedClaude

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-02landedClaude

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-05landedClaude

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-06landedClaude

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-03landedClaude

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-05landedClaude

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-04landedClaude

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-02landedClaude

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.
X-01landedClaude

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.
S-08landedClaude

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.
E-08landedClaude

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.
C-11landedClaude

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.
J-02landedClaude

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.
C-09landedClaude

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
P-10landedClaude

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.
P-07landedClaude

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.
C-06landedClaude

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.
PW-32landedClaude

Week totals withheld while their own component total is published

Why
Sean found this, which means nothing else did. Weeks 1 and 2 read 'Not published -- No stored product was supplied' for my_total while group_totals.mine.starters.projection sat beside them at 280.20 and 273.65. The new check finds EIGHT such weeks, not two.
Detail
THE CHECK EXISTED AND COULD NOT SEE IT. validate-payload.py asks whether a GROUP total is missing while its rows are present. The group total was present; the thing missing was one level up, the WEEK total, and nothing looked there. A validator that covers every level but one inspires exactly the confidence that makes the gap expensive. The check is now in and proven red against the live payload -- 8 gaps: weeks 1, 2 and 15 among them, both sides. WHAT IS LEFT: the CAUSE. bin/build-serving.py reads w.get('my_total') from upstream, so the producer's source already withholds it. Weeks 1 and 2 are PLAYED and week 15 is not, so 'played weeks differ' is not the whole story -- find what actually distinguishes the eight, and fix it there rather than defaulting the total to the group sum at render time. A number computed in the publisher to paper over a missing product is the same defect wearing arithmetic.
F-03landedClaude

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.
C-04landedClaude

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
PW-48landedClaude

Probe an untested limit (cannot) in commit:0c3c6c18

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:0c3c6c18: "C-128: NYG@LAR kicks Mon 9/21 6:15 PM MT, so its first live close capture cannot be tested until then; last capture 4:41 PM MT today." 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.
J-01landedClaude

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.
T-01landedClaude

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.
E-02landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
N-02landedClaude

N-02 — The board IS the plan, enforced by a test

Why
The old board named 21 of the plan's 119 items and 87% of its own items came from elsewhere; nobody noticed for a week because nothing checked. A test that fails if any plan item is missing from the board, or any non-plan item lacks the PW- prefix, or a done item names a file that does not exist. Run by the gate. The confusion of 2026-09-22 cannot recur if it is a failing test rather than a thing a person notices.
Detail
Added to the plan 2026-09-22 (revision noted in §6 of the plan document). Family N: what the objective needs that the design did not name.
D-03landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
D-06landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
L-12landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
S-12landedClaude

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.
N-01landedClaude

N-01 — A first-class hold signal: a job that pauses says so, and every sensor reads it

Why
Five times in 36 hours a sensor reported a designed pause as a fault -- build-serving deferring an archive, the odds job holding for budget, the watchdog restarting lanes for idling on an empty board, twice, and chain-report breaking a link on the pre-kickoff yield. Each was fixed as an exemption in the reader. The plan has no item for this because the plan assumed sensors would be right; the objective's 'limited human interaction' clause fails every time one is wrong and a person has to say so.
Detail
Added to the plan 2026-09-22 (revision noted in §6 of the plan document). Family N: what the objective needs that the design did not name.
PW-33landedClaude

A first-class 'deliberate hold' signal, instead of case-by-case exemptions

Why
Audit finding. Five separate times in 36 hours a sensor reported a designed pause as a fault: build-serving exiting 1 on a deferred archive, the odds sensor calling a budget-driven hold STALE, the watchdog restarting build lanes for idling on an empty board, then the mice for the same, and chain-report breaking a link on the pre-kickoff yield. Each fix was correct and each was a one-off exemption written into the reader.
Detail
That is the wrong layer. A job that decides to hold KNOWS it is holding; the reader is guessing. Every lane should write its hold reason to one place (data/holds.json: job, since, reason, expected-until) and every sensor should consult it before calling a silence a fault. Then a sixth deliberate hold does not need a sixth exemption. The five existing exemptions become the first five entries, and stay as the test that the mechanism catches what they caught.
J-03landedClaude

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-09landedClaude

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-09landedClaude

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.
X-03landedClaude

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.
PW-27landedClaude

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.
PW-49landedClaude

Probe an untested limit (cannot) in commit:9800600d

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:9800600d: "cannot be fetched and must be imputed from snap counts, depth charts," 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.
PW-50landedClaude

Probe an untested limit (banned-floor) in commit:837568d5

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:837568d5: "senses actually present today: a measurement-procedure noise floor (refit" 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.
D-02landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
D-05landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
E-05landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
L-11landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
PW-51landedClaude

Probe an untested limit (banned-floor) in commit:e4521890

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:e4521890: "tdoe.py, actions.py, qarm.py, roleparam.py each compute a genuine noise floor" 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.
PW-30landedClaude

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.
S-06landedClaude

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-03landedClaude

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-06landedClaude

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.
E-03landedClaude

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.
PW-35landedClaude

AAR: variance error is 58% of our total, and it is calibration's layer

Why
The after-action review attributes 58% of all forecast error we have actually made to variance — 20,655 rows, mean |error| 2.83. That layer belongs to the calibration lane: is the spread honest — intervals and coverage. This is not a counterfactual about what would be worth knowing; it is the error we made, decomposed.
Detail
Worst positions by count: WR (7,954), RB (5,270), TE (5,089). READ THE DECOMPOSITION BEFORE PROPOSING ANYTHING. aar_attribution carries e_variance, e_regime, e_volume, e_share and e_conversion per forecast, so the question is not 'how do we get better' but 'why does THIS component dominate for THESE positions'. AND CHECK IT AGAINST THE RESIDUAL LEDGER, which answers a different question — what a variable would be worth if known perfectly, rather than what we actually got wrong. Where the two disagree is the interesting case: an error we keep making on a variable the ledger says is cheap means the cost is in our method, not in the unknown. A variance-labelled error is the honest residual of a stochastic process and may be correct; the question there is whether our INTERVALS cover it, which is calibration's layer, not whether the point estimate was wrong.
PW-57landedClaude

Grade the GAME SHAPE — the rung above the stats

Why
Sean, 2026-09-22: "the goal is that the play by play, the shape of the game can be graded, not just the stats."
Detail
The ladder is play sequence -> drives -> team shape -> stat line -> points, and only the bottom rung is graded. drive_week already exists (1999-2025: start, end, points, clock burned, game state) and sim.py generates game scripts, so the drive rung is gradeable TODAY. research/aar_gameshape.py grades team totals for a single week and is not part of the standing review. X-01 and X-03 did the play-level comparison once as research and found real and simulated states DISJOINT, not shifted — that finding never became a standing grade. An error inherited from the team rung is not an error born at the player rung, and only this separation tells you which.
PW-66landedClaude

BLOCKED_WITH_EVIDENCE: pay a lane for proving something impossible

Why
'Every job has an authorized objective, impossibility detector, stop condition, and a BLOCKED_WITH_EVIDENCE terminal state. A worker earns credit for proving a task impossible; it never needs to manufacture success.' We have BLOCKED.md and a hold registry but no terminal state that PAYS for a proven impossibility. This is the designed answer to asserted-limits-are-claims, the failure mode with no trace. See §6.
PW-73landedClaude

Three build lanes were busy and the board showed nothing in flight

Why
Sean: "only mice are working?" — they were not; three build-loop processes and two witness leases were running at that moment.
Detail
The plan map only colours PLAN items, and the build lanes mostly work PW- items, which are self-generated and deliberately excluded from it. So the one section he reads to answer 'what is getting worked' is structurally blind to most of the work. The In-flight card carries it, but it sits below the map and reads as a list rather than as the answer. Make the answer visible where the question is asked: every lane, what it holds, plan item or not.
V-06landedCodex

V-06 — No deploy may break a rendered invariant

Why
bin/verify-live.py checks that markers are PRESENT after a deploy, and presence is not correctness — it was green throughout the week-1 defect. The invariants are V-01's rules, run against the bytes the browser receives, and a deploy that breaks one is rolled back. EXAM: seed a broken render and watch the deploy refuse. A check never seen red is not a check.
PW-61landedClaude

Codex is a peer model and it has been dark since 2026-09-17

Why
80 codex/* branches, a passdown written BY Codex TO Claude, and no lane, plist, board item or plan family mentions it. Its charter is the systems scientist: architecture contracts, promotion gates, decisive experiment design, leakage audit, and independent red-team before real-money use. That is precisely the role nothing currently fills. Decide the runner, the clock and the mandate, and put it on launchd like every other lane. See docs/WHAT-I-WAS-MISSING.md §1.
E-04landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
S-13landedClaude

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.
S-10landedClaude

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.
B-04landedClaude

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.
E-01landedClaude

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. REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10. HOW TO RUN IT IN A UNIT, added 2026-09-22 after three units were killed at the alarm and the lane was restarted mid-origin: `--limit 1`. One origin is ~9 min (2008: fit 130s + sim 412s); two fit a 20-minute unit, three do not. Origin 2008 is checkpointed in data/playgrain-walkforward/manifest.json; 2009 was lost to the restart and is the resume point. Run one or two origins, exit clean, let the next unit continue.
PW-71landedClaude

Never grade on binary win/loss accuracy — magnitude is what pays

Why
Gemini's conflict resolution, settling two numbers in the dossier that look comparable and are not.
Detail
The dossier held a 1D CNN at '>74% accuracy' on 620 games against a JQAS study showing spreads capture '86% of the variability' on 5,000 matches. Different designs: the CNN evaluates BINARY classification, JQAS evaluates CONTINUOUS magnitude variance. Its ruling, which matches our own gate: 'You are staking CLV against continuous point spreads. Optimizing for binary accuracy guarantees building a model that perfectly mimics the moneyline and mathematically bleeds out to the vigorish.' Make it a rule the evaluation family enforces rather than a thing we remember: no promotion gate may be keyed to a win/loss hit rate.
PW-63landedClaude

L-07 promotes its own proposals; promotion is not its authority

Why
'A lower model may falsify or quarantine a frontier result. It may not promote the result. Promotion comes from instruments and an independent reviewer.' The loop promotes unattended and has done so successfully, which is why it never looked wrong. Falsification authority and promotion authority are different powers. See §3.
C-07landedClaude

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
B-07landedClaude

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-15landedClaude

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
S-15landedClaude

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.
T-07landedClaude

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.
L-07landedClaude

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 REPRIORITISED TO 0 on 2026-09-22 by Sean's instruction to cover the gaps. The objective is a SELF-IMPROVING machine and this item is on the chain that makes it one: L-07 is the loop, L-10 is the evaluator that stops the loop promoting a component gain that worsens the game forecast, E-* is how the machine tells whether anything is better, D-* is how it stakes. The plan's own order put L-07 on Fri 9 Oct -- the last day -- and L-10 unscheduled, which is exactly why zero proposals have ever been promoted. Measured at reprioritisation: L 0/6, E 1/10, D 1/7. 18 days to 10/10.
T-04landedClaude

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.
A-01landedClaude

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-01landedClaude

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.
P-11landedClaude

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.
O-04landedClaude

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.
PW-76landedClaude

The fuel gate reads 62% while the client reads 3% — a safety device off by 20x

Why
Sean, 2026-09-22: "Session usage at 67%, weekly usage at 3%." playerweek.cli fuel said "weekly 62% of 100% limit" at the same moment.
Detail
Every lane gates on this number: a FUEL STOP halts the build lanes, the AAR, the scientists and the referee. If the true weekly figure is 3% and the gate believes 62%, the machine has been throttling itself against a wall that is not there — all night, while three providers were being asked to cover each other. fuel.py reads seven_day.utilization from api.anthropic.com/api/oauth/usage. Probed just now the endpoint returned HTTP 429, so `fuel` was serving its CACHE while reporting "source: live meter" — which is its own defect: a cached reading must not describe itself as live. TWO THINGS TO SETTLE: whether seven_day is the same bucket the client calls "weekly" (there may be separate Opus and overall buckets), and why the cache is labelled live. Until then treat 62% as unverified — do NOT widen any throttle on the strength of it, because the failure mode of being wrong in the other direction is spending his money. CORRECTION 2026-09-22 21:15: Sean — "Nothing ran dry today." He is right about his subscription and I was wrong to say I burned it. The agy CLI is signed in as his Ultra account and still returns "Individual quota reached… upgrade your subscription"; the CLI has its own per-account ceiling, and that is what the mice emptied. His Deep Think and Deep Research capacity was never touched. This also means the 3%/62% gap above is a question about ANTHROPIC's buckets only — the Gemini story is a separate tank entirely.
J-08landedClaude

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.
C-08landedClaude

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
L-08landedClaude

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.
PW-55landedClaude

Probe an untested limit (cost-estimate) in commit:0f5799bb

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:0f5799bb: "shipped in one commit (6b5b2d6a, same day, not multi-month), reading" 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.