Living register: The deduplicated backlog binds priority, provenance, blockers, owners, and next actions without hiding today’s completed work.
Date: 29 August 2026 Status: LIVING Source status: 198 raw records reconciled into 186 original canonical entries, then extended by 21 ranked/DIAG omissions, 2 critic-round owner decisions, and 3 Round-3 P0 packets.
STATUS: LIVING · DATE: 29 August 2026. This is the single “agreed but not done” register. DONE rows stay visible for provenance and are excluded from the open-work count.
Executive summary
- STATUS: COUNTED · DATE: 29 August 2026. 212 canonical entries: P0 34 · P1 47 · P2 82 · P3 49. Open work: 203; done: 9.
- STATUS: SOURCE RECONCILED · DATE: 29 August 2026. Raw inventory: memory 83 + documentation 96 + GitHub 19 = 198. Fourteen cross-source duplicates were merged; two packet-status rows, three ranked Tier-B work items, eighteen DIAG queue items, two critic-round owner decisions, and three Round-3 P0 packets complete the current register.
- STATUS: BOUNDARY · DATE: 29 August 2026. A DONE row is evidence, not implied remaining work. “Root-caused” closes diagnosis but may create a separately named implementation packet.
All P0s
- .vercelignore deployment-root exclusion — STATUS: DONE · DATE: 2026-08-29 · next: implementation packet.
- Append the account-specific owner approval + paper
arm, runrefresh, verify manifests and calendar attestation — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet. - Complete the CREDENTIAL-P0 rotation of the 62 exposed production credentials — STATUS: BLOCKED · DATE: 2026-08-23 · next: implementation packet.
- Copy the LL-4a review artefacts to .handoff-durable before any further restart — STATUS: NOT STARTED · DATE: 2026-08-29 · next: implementation packet.
- Create the dedicated empty paper account and sealed local state — STATUS: NOT STARTED · DATE: 2026-08-27 · next: owner.
- Custody the trial ledger and durable research artefacts — STATUS: NOT STARTED · DATE: 2026-08-28 · next: implementation packet.
- Daemon supervision plan for the kill-switch daemon — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
- Decide the fate of candidate #2 (gross profitability): no StrategySpec and no risk-policy binding exists in the live lane — STATUS: NOT STARTED · DATE: 2026-08-28 · next: owner.
- Enforce live-lane broker guardrails — STATUS: NOT STARTED · DATE: 2026-08-25 · next: implementation packet.
- Exercise and resolve the seven required rehearsal failure-evidence scenarios — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
- Install and pin the external DuckDB CLI for live-lane refresh — STATUS: NOT STARTED · DATE: 2026-08-27 · next: owner.
- Live-lane e2e flake family #3: "trial ledger is locked by an invalid lock record" — STATUS: DONE · DATE: 2026-08-29 · next: implementation packet.
- LL-4/LL-5 residue from LL-2: NYSE early-close session semantics + move remaining date helpers into calendar/ — STATUS: PARTIALLY DONE · DATE: 2026-08-27 · next: implementation packet.
- LL-4a corporate-action-aware live-lane reconciliation (round 2) — finish, re-review, merge — STATUS: DONE · DATE: 2026-08-29 · next: implementation packet.
- LL-4b whole-share implementability gate — STATUS: #348 MERGED PENDING MAIN CI / OWNER AUTHORITY PENDING · DATE: 2026-08-29 · next: owner.
- Nominate and document the single host running the live-lane daemon + scheduler — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
- Open the lockbox once and seal the owner event — STATUS: NOT STARTED · DATE: 2026-08-26 · next: owner.
- Operator prerequisites for the 8-12 Sep paper rehearsal are not provisioned — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
- Provision and verify live Alpaca credentials close to arm — STATUS: NOT STARTED · DATE: 2026-08-27 · next: owner.
- Publish off-machine custody URLs and prove restore — STATUS: BLOCKED · DATE: 2026-08-26 · next: owner.
- Resolve the Q12 amendment ratification conflict (overlay incubation via simulate-window) — STATUS: DONE · DATE: 2026-08-27 · next: none.
- Run
simulate-window --asof <arm-date>and verify exactly 60 finite hash-boundsimulated_daily_returnreceipts — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet. - Run and seal the hard-kill drill — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
- Run the five paper rehearsal sessions — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
- Run the lockbox verdicts for registered candidates — STATUS: NOT STARTED · DATE: 2026-08-28 · next: implementation packet.
- Seal live graduation, post-graduation arm, and first $10 order — STATUS: NOT STARTED · DATE: 2026-08-26 · next: implementation packet.
- Seal the
rehearsal_receiptafter the 11 Sep reconciliation (≥95% heartbeat coverage, zero unresolved incidents) — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet. - Seal the Q11 live-risk-policy choice — STATUS: DONE · DATE: 2026-08-27 · next: none.
- Stand up a supervised daemon runner with external alerting (no alerting exists today) — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
- Choose the 15-September first-order construction: A/B/C/D — STATUS: OWNER DECISION · DEADLINE: 2026-09-03 · next: owner.
- Authorize or reject live-risk-policy/v2 implementability semantics — STATUS: OWNER DECISION · DEADLINE: 2026-09-03 · next: owner.
- LL-4c: close the registry-lock and post-disarm reconciliation races — STATUS: MUST-FIX · DATE: 2026-08-29 · next: implementation packet.
- LL-4d: rank-proof receipt, canary lifecycle, and prefix-N construction — STATUS: FIX-FIRST BEFORE OWNER RATIFICATION · DATE: 2026-08-29 · next: implementation packet.
- Policy-v2 event integrity: fix thresholds hash and seal placeholders — STATUS: MUST-FIX · DATE: 2026-08-29 · next: owner.
What owner owes, with dates
- STATUS: DUE · DATE: no later than 3 September 2026. Seal the one-shot lockbox opening; install and pin DUCKDB_BIN; create the empty paper account and mode-0700 state; pin the already-sealed Q11 policy; decide the distinct prospective policy-v2 authority.
- STATUS: DUE · DATE: 4, 8, 9, 10, 11 September 2026. Run the five pre-open checks and paper commands; orchestrator audits each post-open chain.
- STATUS: DUE · DATE: 11–12 September 2026. Approve or refuse the rehearsal/graduation evidence after five matched chains, ≥95% heartbeat coverage, and zero unresolved incidents.
- STATUS: DUE · DATE: 15 September 2026. Seal the live account/origin/size authority, arm only after graduation, and alone authorize the first $10 order.
- STATUS: OWNER DECISION · DEADLINE: 3 September 2026. Choose the first-order path A/B/C/D and the policy-v2 A/B/C authority below. Recommendation: prospective one-share canary C, followed only by a viable sealed fixed-N B; otherwise delay. Also settle custody URL, live credentials, alert recipient, host-loss posture, and daemon paths.
- STATUS: OPEN · DATE: before any optional spend. Decide whether the already-subscribed Alpaca Plus lane remains needed, whether any vendor entitlement can be used, and whether COP stays shelved.
Live lane & 15-Sep critical path
STATUS: 27 OPEN / 1 DONE · DATE: 29 August 2026.
- Append the account-specific owner approval + paper
arm, runrefresh, verify manifests and calendar attestation STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[6]. Agreed: 2026-08-27. Blocked on: DuckDB; state dir; policy pin. Next action: implementation packet — Append owner approval and paperarm; runlive-lane refresh; check all three Sharadar manifest hashes (SEP/ACTIONS/TICKERS) plus Alpaca↔SEP exchange-calendar attestation; start the daemon before any paper submit.
- Daemon supervision plan for the kill-switch daemon STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: memory.items[4]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Write the supervision plan (what restarts the kill daemon, how a stale heartbeat is detected and paged, who owns the lease/PID/token) and land it before the 4 Sep rehearsals — submit already refuses on a stale daemon, so an unsupervised daemon is a hard stop mid-session. Evidence note: LL-3 shipped the daemon + heartbeat + liveness (file/lease/PID/token + sealed event); the OPERATIONAL supervision story was never written.
- Decide the fate of candidate #2 (gross profitability): no StrategySpec and no risk-policy binding exists in the live lane STATUS: NOT STARTED · DATE: 2026-08-28 · PRIORITY: P0. Sources: docs.items[15]. Agreed: 2026-08-28. Blocked on: Owner decision. Next action: owner — Either build and freeze a GP/A
StrategySpec+ its own sealed risk-policy binding and sizing approval before 15 Sep, or record an explicit owner decision that GP/A is deferred past the first live date. Evidence note: lab-overview says GP/A 'enters the same paper-promotion and live-graduation ladder' and shares the £10k sleeve, but the LL-3 lane only admits momentum, live-risk-policy-v1 binds only the momentum rule hash, and GP/A's overlay is specified at PORTFOLIO level with annual staggered cohorts — a different kernel from the month-end momentum kernel.
- Enforce live-lane broker guardrails STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P0. Sources: memory.items[20], docs.items[49]. Agreed: 2026-08-25. Blocked on: Paper mirror FROZEN at paper-only duties by the simplification review. Next action: implementation packet — Before ANY arming, verify whether LL-2/LL-3's sealed policy path already enforces notional/daily-loss/per-symbol caps on the order path; if the Alpaca mirror path is still uncapped, ship the guardrails packet. Enforce deployment, order, symbol, fleet and daily-loss limits for EVERY quantity; stop dropping the forward layer's maxnotionalminor at the mirror boundary. Evidence note: Recorded verbatim: 'NO notional cap / NO daily-loss cap anywhere on the broker path' on the first-hour/mirror route, with the mirror armed by ONE roster row. The thin live lane has H1–H4 kills, but the mirror is a second door to the same broker.
- Exercise and resolve the seven required rehearsal failure-evidence scenarios STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[10]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Exercise cancel-unproven restart, generation-CAS recovery,
.prevquarantine, ambiguous POST outcomes, calendar disagreement, stale heartbeat refusal, and account/origin mismatch — and resolve every incident. Evidence note: Ahard_action_pendingwithout its matchingflatten_completemakes the rehearsal receipt impossible.
- LL-4/LL-5 residue from LL-2: NYSE early-close session semantics + move remaining date helpers into calendar/ STATUS: PARTIALLY DONE · DATE: 2026-08-27 · PRIORITY: P0. Sources: github.items[0]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Confirm which of the four LL-2 'Not in this PR' items LL-3 (#333) actually delivered (graduation gate + kill-switch daemon + monitoring appear done) and open a packet for the two that are not named in #333: NYSE early-close session semantics in the executor/lane clock, and consolidating remaining date helpers into calendar/. Evidence note: #329 body: 'Not in this PR (LL-3, before live): sealed live_graduation gate bound to policy + rehearsal receipt + 15-Sep boundary; NYSE early-close session semantics; move remaining date helpers into calendar/; kill-switch daemon + monitoring.' #333 claims gate + daemon + monitoring; early-close and calendar/ helpers not mentioned.
- LL-4a corporate-action-aware live-lane reconciliation (round 2) — finish, re-review, merge STATUS: DONE · DATE: 2026-08-29 · PRIORITY: P0. Sources: memory.items[0]. Agreed: 2026-08-29. Blocked on: none. Next action: implementation packet — No action in this backlog; preserve follow-up defects separately. Evidence note: DONE 2026-08-29 in PR #345; raw source snapshot predated completion.
- LL-4b whole-share implementability gate STATUS: #348 MERGED PENDING MAIN CI / OWNER AUTHORITY PENDING · DATE: 2026-08-29 · PRIORITY: P0. Sources: packet-status, ll4b-r4-final, policy-v2. Agreed: 2026-08-29. Blocked on: Owner-sealed policy-v2 and preregistration authority; first-order construction decision. Next action: owner — Choose policy-v2 A/B/C and the ladder A/B/C/D path by 3 September; do not arm on code-only behavior. Evidence note: Round 4 delivered flat-plan exemption, canonical
live-lane-execution-plan/v3receipts, v2/unknown refusal, and one planner kernel shared by execution and the diagnostic. At $12,700 ×0.428, 0/277 months pass; worst names 18.0488%, deployment 13.9534%, latest 45/217 and 16.0794% with 0.007789× headroom. $881,948.56 is the pre-headroom name/deployment-only minimum. All-name headroom yields $2,521,437,128,668,714.50 because of a June-2013 raw-price outlier. Per-name/fractional headroom is a proposed owner choice, never a silent filter or an already-authorized correction.
- LL-4c: close the registry-lock and post-disarm reconciliation races STATUS: MUST-FIX BEFORE 4 SEPTEMBER 2026 · DATE: 2026-08-29 · PRIORITY: P0. Sources: flake3-report.md. Agreed: 2026-08-29. Blocked on: bounded implementation packet; adversarial tests. Next action: implementation packet — Replace the
existsSync→read lock sequence with one read where ENOENT is ordinary contention and malformed bytes fail closed; authorize historical reconciliation only through sealed plan+submit+arm/account/origin lineage after disarm. Add deterministic promise-gated race tests with no sleeps. Evidence note: Two production races are root-caused. A lock can disappear between the preliminary existence check and read. Separately, a durable POST can outlive current arm state, after which reconciliation wrongly refuses. Historical authority may reconcile but never submit; tampered lineage refuses. The brief is ready.
- LL-4d: rank-proof receipt, canary lifecycle, and prefix-N construction STATUS: FIX-FIRST BEFORE OWNER RATIFICATION · DATE: 2026-08-29 · PRIORITY: P0. Sources: prereg-amend-v1.2-r2.md, review-amend.md, review-amend-r2.md. Agreed: 2026-08-29. Blocked on: exact ranks 1..D; fixed canary go/no-go; approval-event hashes/cutoffs and retry cadence; canonical pseudocode bytes; v3 rehearsal compatibility; current ledger digest; complete PBO definitions; split authority/runtime events and hash domains; loader-valid policy v2; then owner Q13–Q16. Next action: implementation packet — Close every review-amend-r2 fix before presenting Q13–Q16. Bind the current 66-line ledger (reviewed digest
fe5a1ce0…939c, full digest rederived at seal), exact PBO block/remainder/IS-OOS/purge/Sharpe rules, rank/canary/construction event domains, and the bounded v3 consumer packet while keepingstrategy/**and daemon frozen. Then the owner may decide Q13–Q16 against final hashes. Evidence note: N=0 must sealconstructionRefused:"prefix_n_zero"andsubmitEligible:false; it is not a flat-plan exemption. The prospective amendment cannot repair or replace the original full-decile verdict, and the stale 65-line ledger pin cannot authorize trial 53.
- Run
simulate-window --asof <arm-date>and verify exactly 60 finite hash-boundsimulated_daily_returnreceipts STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[7]. Agreed: 2026-08-27. Blocked on:lockbox_openedevent; DuckDB. Next action: implementation packet — Afterlockbox_opened, run simulate-window for the 60 sessions preceding arm and confirm volatilityWindowComplete:true; an incomplete window forces submitEligible:false and submit refuses. Evidence note: There is NO screening-window seed and NO floor fallback: without the complete sealed window the lane refuses to trade.
- Run and seal the hard-kill drill STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: memory.items[6], docs.items[9]. Agreed: 2026-08-27. Blocked on: Rehearsal sessions running; Paper arm. Next action: implementation packet — Run a deliberate hard-kill drill (H1 daily loss, H2 HWM drawdown, H3 reconciliation failure, H4 buying power) against the paper account and record the receipt. Run
live-lane drillagainst the paper account; accept only when the sealedflatten_completeproves cancellation plus two consecutive zero position/order/activity snapshots at least two seconds apart. Evidence note: Thresholds come from the sealed live-risk-policy/v1 event JSON, never hardcoded.
- Run the five paper rehearsal sessions STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: memory.items[5], docs.items[8]. Agreed: 2026-08-27. Blocked on: LL-4a merged; LL-4c; LL-4d if authorized; DUCKDB_BIN; dedicated paper account; lockbox opened; all earlier rehearsal prerequisites. Next action: implementation packet — Schedule and run the five rehearsal executions (7 Sep is Labor Day), capturing a verified rehearsal receipt per session with zero incidents and same-signal shortfall measured. Seal a plan+paper submit after each immediately prior close (3→4, 4→8, 8→9, 9→10, 10→11 Sep) and reconcile after each open; every chain cross-bound by event and receipt hashes on the same account/origin/policy at stage 10 bp. Evidence note: Rehearsal execution dates are pinned in LL-3's sealer (4/8/9/10/11 Sep).
- Seal live graduation, post-graduation arm, and first $10 order STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P0. Sources: memory.items[7], docs.items[12]. Agreed: 2026-08-26. Blocked on: All rehearsal items above; live Alpaca keys; v3-only fresh rehearsal chains; sealed livegraduation gate inputs; owner policy-v2 and ladder choices; live credentials. Next action: implementation packet — After the fifth v3-only rehearsal, seal graduation only under the owner-selected prospective construction/policy authority. Append the live `sizingapproval
,approve_live`, graduation, and arm events in order; never place a nominal "$10 first order" that whole-share flooring turns into an empty or distorted book. Evidence note: At £100k NAV, 10 bp ×0.428 ÷143 gives $0.3801/name; under the stated ≥$10 price condition 0/143 names receive a share. The first order is conditionally blocked if policy v2 is adopted; exact counts wait for 14-Sep closes. The A/B/C/D decision below is due 3 September.
- Seal the
rehearsal_receiptafter the 11 Sep reconciliation (≥95% heartbeat coverage, zero unresolved incidents) STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[11]. Agreed: 2026-08-27. Blocked on: All five sessions + drill + failure evidence. Next action: implementation packet — Runrehearsal-receipt --from 2026-09-04 --to 2026-09-11; record its event and receipt hashes; the sealer must re-derive all five chains, compute heartbeat coverage only from monotonic lease-bound per-tick ledger heartbeats, and verify the drill against the actual hard-action state file. Evidence note: Requires ≥95% coverage of all attested execution-session minutes.
- Add the 50% backtest-Sharpe haircut and a zero-incident / cost-consistency gate to the graduation evidence STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[42]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Add the guide's §16 haircut and incubation checks to the graduation gate. Effort S. Evidence note: The 126-session floor is strong but does not substitute for these.
- Alpaca paper mirror: autonomous through arming (qty ×1) + qty===1 bypass and account_slot cap fixes STATUS: NOT STARTED · DATE: 2026-08-24 · PRIORITY: P1. Sources: memory.items[21]. Agreed: 2026-08-24. Blocked on: A clean dry-run day on the mirror. Next action: owner — Decide whether the mirror is still in scope for 15 Sep at all (the thin live lane superseded it); if kept, ship the qty===1 bypass fix and the account_slot cap, then run the clean dry-run day owner made a precondition of autonomy through arming. Evidence note: owner approved the mirror running autonomously THROUGH arming at qty ×1 reusing the existing paper keypair. Mirror migration 20260824030000 is applied. Risk: two independent order paths to one broker account during rehearsals.
- Build the DB-backed cross-host lease/fence to replace the host-local file lease STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P1. Sources: docs.items[19]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Implement the interface-compatible DB-backed fence so the lane can survive host loss and multi-host scheduling. Evidence note: Explicitly named as future work in the runbook.
- Build the sealed
stage_reviewreceipt path required for 10→25→50 bp progression STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P1. Sources: docs.items[20]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Implement and test the owner-approvedstage_reviewevent for the immediately prior sizing approval so a 25 bp approval can reference it; progression is exactly 10→25→50, never lateral, backward, repeated, or skipped. Evidence note: Without it the lane is permanently pinned at 10 bp — this is literally the first-scale-up blocker.
- Create the isolated private live schema/gateway (do not turn the paper mirror into a live service) STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P1. Sources: docs.items[28]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Create the separate live gateway/schema and retain Alpaca as broker truth; do not copy bars into a new authority. Evidence note: Defensible thin-live floor is 11–12 relations. The LL-3 lane is currently file/ledger-based with no live schema, which is fine for one sleeve and a documented gap for more.
- LL-4 design note: multi-strategy shadow-equity ledgers + capital priority STATUS: NOT STARTED · DATE: 2026-08-29 · PRIORITY: P1. Sources: memory.items[22]. Agreed: 2026-08-29. Blocked on: Needed when candidate #2 (GP/A) graduates. Next action: implementation packet — Write the LL-4 design note covering per-strategy shadow-equity ledgers and the capital-priority rule when momentum 12-1 and GP/A both hold positions against one £10k sleeve. Evidence note: Adopted from the 28 Aug research review meeting. Portfolio fundable correlation between the two candidates is 0.20; they share the same sleeve cap and stage-10bp ladder.
- Persist preregistration, run, validation, unlock, live-approval and kill events in one append-only hash-chained trial authority ledger STATUS: PARTIALLY DONE · DATE: 2026-08-27 · PRIORITY: P1. Sources: docs.items[27]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Promote the JSONL scratch ledger and the three docs/research/ledger/*.event.json files into one durable append-only hash-chained registry with write-ahead attempt receipts and immutable success/failure/void terminals. Evidence note: Named as a missing authority in the simplification verdict ('durable trial authority and the sleeve-wide live contract were missing'). The authoritative durable digest has 61 rows: 52 programme-numbered trials plus 9 pre-ledger/non-trial rows.
- Persist same-signal broker-vs-simulator implementation shortfall by liquidity bucket and gate cost recalibration on it STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[24]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Record broker fill vs simulator fill on the identical signal, bucketed by liquidity, and version cost-model recalibration behind it. Evidence note: Today the mirror compares fills with an IEX submit quote during next-day replay — not same-signal shortfall — and has no calibration gate. The 08-27 rehearsal is supposed to produce 'measured same-signal shortfall' (edge-discovery north star, 8–12 Sep) but no mechanism is named.
- Preregister a portfolio sizing/capacity authority with risk, correlation, ADV, concentration and stressed-impact caps STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P1. Sources: docs.items[26]. Agreed: 2026-08-27. Blocked on: A second admitted strategy. Next action: implementation packet — Deterministically net survivor targets into one broker target while retaining virtual per-strategy subledgers; preregister the sizing family with its caps. Evidence note: Today each sleeve is sized separately inside a £10k combined cap with per-name 1% ADV; there is no netting layer, so admitting candidate #2 or the L4 'up to 5 strategies' target has no home.
- Seal a Monte Carlo portfolio risk envelope and the monitoring drift layers (3 and 4) STATUS: PARTIALLY DONE · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[25]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Extend the single-strategy p05 envelope in live-risk-policy-v1 to 10,000 date-clustered joint portfolio paths with daily max-drawdown, correlation and feature/outcome drift receipts. Evidence note: live-risk-policy-v1 §5 supplies 2,000 stationary-bootstrap 252-session paths for ONE sleeve, which partially discharges this; joint equity paths, fleet correlation and drift layers are still absent.
- Version a real-money cost model calibrated from actual paper fills and bind it into capability identity STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[23]. Agreed: 2026-08-26. Blocked on: Live/paper fill history. Next action: implementation packet — Replace the frozen 10/25 bp-per-side and 6 bp intraday constants with symbol/liquidity/time-bucket costs calibrated from Alpaca fills; rotate the capability identity on every change. Evidence note: Current costs are uncalibrated and ignore liquidity, time-of-day spread, impact, halts and shorts.
- Re-calibrate and seal live-risk-policy v2 at or before session 252 STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P2. Sources: docs.items[43]. Agreed: 2026-08-27. Blocked on: 252 live sessions. Next action: implementation packet — Conduct the final v1 review at session 252 and bind a re-calibrated sealed v2; without it the controller disarms before session 253. Evidence note: Policy v1's p95 max drawdown is a 252-session from-arm statistic while the live high-water mark is uncapped since arm, so lifetime breach probability exceeds 5%.
- Advisory defects flagged during the Codex 48h review and never actioned STATUS: PARTIALLY DONE · DATE: 2026-08-21 · PRIORITY: P3. Sources: memory.items[80]. Agreed: 2026-08-21. Blocked on: Flagged advisory-only at owner's instruction ('no code changes'). Next action: implementation packet — Re-triage the list now that some are fixed: paused-ingestor invisibility to Fly is FIXED (#305 pause-exit); the wedge scenarios are FIXED (v3 lineage-origin, #300). Still open: gap-lifecycle 5xx treated as unambiguous (skips reconciliation), hardcoded price bands, balanced-validation k=5/150 cannot satisfy the 8×20 regime rule (module doc says k=6/180), and the series-genesis registry is still documented-only. Evidence note: Keeping resolved items on this list makes the unresolved ones invisible — the same failure mode as the stale owner-decision list.
Discovery machine
STATUS: 60 OPEN / 1 DONE · DATE: 29 August 2026.
- Run the lockbox verdicts for registered candidates STATUS: NOT STARTED · DATE: 2026-08-28 · PRIORITY: P0. Sources: docs.items[2], github.items[3]. Agreed: 2026-08-28. Blocked on:
lockbox_openedevent; DuckDB; Lockbox opening date (<=3 Sep). Next action: implementation packet — Run the two frozen rules once on 2022→2026-08-21; evaluate net excess ≥50% of screening estimate, NW t≥2, ≥3/5 positive years, positive at 2× costs, DSR ≥0.95, negative control, plus momentum's ±1-session jitter and best-5%-removal floors. Any miss = REFUSED, no repair. Hold both pre-registrations (momentum 12-1 #325, gross profitability #336) sealed until the <=3 Sep lockbox opening, then run the opening as a single ceremony and record which candidate(s) graduate to the 15-Sep sleeve. Evidence note: Planned 3–5 Sep. Conjunctive gates, one opening only. Momentum DSR uses raw N=21 with no correlation discount; GP/A DSR uses the full 41-trial ledger hash db97b21b…
- Acquire a short-capable venue to unlock the shelved net-share-issuance edge STATUS: PARKED · DATE: 2026-08-28 · PRIORITY: P1. Sources: docs.items[35]. Agreed: 2026-08-28. Blocked on: Broker/venue decision; historical borrow data. Next action: implementation packet — If/when a short venue with borrow evidence exists, revive net share issuance (L/S +6.18%/yr net, t 3.58) — long-only capture is only +0.45%/yr t 0.34. Evidence note: field-guide-gap-review must-fix #13 keeps promotion long-only until historical borrow evidence exists (FINRA SLATE ~$3k/mo, 2026-onward only).
- Add deterministic fragility suites: reshuffle, skip-trade, entry jitter, random twins, 2×–3× cost stress with bad-tail gates STATUS: PARTIALLY DONE · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[40]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Turn the ad-hoc confirm-card stresses into sealed reusable receipts gated on bad-tail drawdown and cost survival. Evidence note: Momentum's confirm-card did run 100 random twins, ±1-session jitter and 2×/3× costs; GP/A ran 2×/3× costs and best-14-month removal. Neither is a sealed, reusable contract.
- Add plateau/cliff veto, true per-fold refit, stitched fold table and resilience η STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[39]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Seal a sealed economic-neighbour map with a contiguous ≥90%-of-best region, cliff veto and centre selection; seal fold-level IS/OOS metrics, η/trend and profitable-fold share; refit only when live operation will refit. Evidence note: Momentum's parameters were frozen from confirm-card settings with 'no post-lockbox plateau selection permitted' — the plateau map itself was never produced.
- codex/canary-sweep-proof + codex/sweep-worker-adapter + codex/ipv6-release-runner-contract — first-hour ops work stranded on 2026-08-24 STATUS: PARKED · DATE: 2026-08-24 · PRIORITY: P1. Sources: github.items[16]. Agreed: 2026-08-24. Blocked on: none. Next action: implementation packet — Triage the three: 'test: prove immutable first-hour canary recovery' and 'ops(first-hour): add canary recovery operator' are a matched pair (proof + operator) for canary recovery; 'fix(release): support hosted gateway and custody setup' + 'Add direct Supabase admin release proof' overlap the release provisioner that landed as #315. Rebase the canary pair onto main and land or delete; check the ipv6 pair for anything #315 did not absorb. Evidence note: These are the newest unmerged branches after the maintenance ones.
- Confirm-card template: add a narrated "worst 10 drawdown episodes" section STATUS: DONE · DATE: 2026-08-29 · PRIORITY: P1. Sources: memory.items[23]. Agreed: 2026-08-29. Blocked on: none. Next action: implementation packet — No open template action. Preserve the report-only worst-10 table and require the same fields in future confirm cards. Evidence note: DONE in the Round-3 deep dive: ten distinct peak-to-trough episodes now carry peak, trough, depth, session count, recovery, and bounded narration; unavailable exposure/component attribution is explicitly labeled.
- Implement PSR/DSR (and CPCV/PBO where applicable) in the repository — currently none exist in code STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[38]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Add PSR/DSR receipt fields using net returns, T, skew, kurtosis and raw/clustered N; add CPCV/PBO only for candidates sharing comparable splits. Evidence note: Both lockbox falsifiers gate on 'Deflated Sharpe Ratio ≥ 0.95' — the gate has no implementation in the repo, so the 3–5 Sep opening must either use the scratchpad Python or ship this first.
- Pre-registration amendment v1.1 (overlay incubation, owner Q12=A) — downstream wiring STATUS: PARTIALLY DONE · DATE: 2026-08-27 · PRIORITY: P1. Sources: github.items[4]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Verify the overlay-incubation amendment is reflected in the graduation gate's policy hash inputs and in the lab-docs registry entry, not only in the amendment document.
- Replace 'three eras' with fixed per-year × trend/volatility/liquidity regime tables plus forward drift/retirement gates STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[41]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Add the fixed regime tables and forward drift/retirement gates. Effort S. Evidence note: Related: docs/regime-classifier-defects-2026-08-18.md shows the existing intraday regime classifier collapses to one cell.
- Rerun FX carry on executable IBKR spot-FX financing or matched one-month forward bid/ask data STATUS: BLOCKED · DATE: 2026-08-28 · PRIORITY: P1. Sources: docs.items[34]. Agreed: 2026-08-28. Blocked on: IBKR account/data; Alpaca has no executable FX venue. Next action: implementation packet — Acquire IBKR-quality executable FX data, then rerun the confirm-card before any preregistration. Evidence note: Proxy carry returned +2.18%/yr NW t 2.40 but matched-tenor forwards and executable venue costs were absent; flagged 'decayed' on the modern-window lens.
- Sealed buy-and-hold benchmark definition never got its adversarial review STATUS: PARTIALLY DONE · DATE: 2026-08-25 · PRIORITY: P1. Sources: github.items[8]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Run an independent read-only reviewer over the sealed buy-and-hold benchmark definition and the numeric VM fields; the PR merged marked 'Draft pending adversarial review of the benchmark definition'. Same for #288 ('Draft pending design review'). Evidence note: Benchmark feeds every published strategy comparison, so an error is a public-honesty issue.
- Shelf-then-incubate cash operating profitability (COP) as the first post-live incubation candidate STATUS: PARKED · DATE: 2026-08-28 · PRIORITY: P1. Sources: docs.items[33]. Agreed: 2026-08-28. Blocked on: Live start; a second lockbox opening. Next action: implementation packet — After live, run COP through the same ledger → screening → confirm-card → lockbox pipeline as a complement (correlation 0.36 to GP/A). Evidence note: COP passed the recency gate (+5.00%/yr, t 3.11 on 2017–2021) but lost the identical-rule head-to-head to GP/A (+2.77%/yr t 2.92 vs +2.06%/yr t 1.74).
- Standing duty: every status must propose better payers, datasets and market structures STATUS: IN PROGRESS · DATE: 2026-08-27 · PRIORITY: P1. Sources: docs.items[95]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Keep each status report carrying new edge-finding ideas — new payers, owned or obtainable data, new market structures — rather than waiting for the current idea family to improve. Evidence note: field-guide-gap-review already banks five candidate families with named payers: compression→next-open breakout, industry momentum rotation, preselected stable-industry pairs, post-reverse-split distress drift, and the Amihud liquidity premium. Honest target shape is a portfolio at ~1–3%/month net, not 20%/month from one strategy.
- Bind every floor and gate constant (126 / 60 / 30 and the paper-stage floor) into the evidence hash STATUS: PARTIALLY DONE · DATE: 2026-08-26 · PRIORITY: P2. Sources: docs.items[48]. Agreed: 2026-08-26. Blocked on: Owner decision on the paper-stage floor. Next action: orchestrator — Introduce a separate 60-session paper constant (never mutate the shared 126) and hash it into the series contract; ensure the orchestrator lane gets a preregistered budget too. Evidence note: Series contract v3 now hashes {sessionFloor:126, fillFloor:40, roundTripFloor:30, validationPanelSessionFloor:20, scorableSymbolFloor:4, correctedSurvivorSymbolFloor:2} — which discharges the first-hour half. 'The hashing part is non-negotiable.'
- Close the nine verified high-severity historical-tournament hardening findings STATUS: BLOCKED · DATE: 2026-08-17 · PRIORITY: P2. Sources: docs.items[46]. Agreed: 2026-08-17. Blocked on: Estate FROZEN; convergence was never demonstrated (each repair round produced a fresh variant). Next action: implementation packet — Resume the deliberately stopped hardening loop: three scientific-gating findings (seed / partition / companion-p-value shopping), four capability-guard detection gaps, plus the v3 validation/hash Proxy TOCTOU and validation-suite outcome pruning. Evidence note: Shipped as library code with no runtime caller (M5 deferred; no API, UI, CLI or scheduled caller), which is why it was allowed to ship open.
- Close tournament defect C — the session suite is an uncharged degree of freedom (adopt option C bound by B) STATUS: NOT STARTED · DATE: 2026-08-18 · PRIORITY: P2. Sources: docs.items[45]. Agreed: 2026-08-18. Blocked on: Estate FROZEN by the 2026-08-27 simplification review. Next action: implementation packet — Add corpusRevisionId, classifierArtifactHash and a closed-set populationRule ('all-classifiable/v1') inside waveHash; recompute-then-compare the population in bindWorkDomain; raise DEFAULTWORKLOADLIMITS.maxSessions from 200 to ≥320; record the rule identity in the artifact; write the one-rule budget constraint into the ledger. Evidence note: Consequence stated plainly: the live artifact's +$33,969.69 becomes −$354,738.54 over the full pool, and every sealed suite/wave/domain/plan/run digest moves. Defects A, B, D, E, F remain separately open.
- Research-collaborator intake: register the validated mean-reversion spec as a trial STATUS: NOT STARTED · DATE: 2026-08-29 · PRIORITY: P2. Sources: memory.items[24]. Agreed: 2026-08-29. Blocked on: Research collaborator sharing the spec. Next action: implementation packet — When the collaborator shares the validated mean-reversion spec, pre-register it in the trial ledger as a single variant with the recency gate (2017–21 must hold on its own) and run it through the 24-year machine. Evidence note: This was the agreed collaboration play from the meeting; the declines were HL weekend tokenized-stock MR, CoT futures, and pre-lockbox exit-overlay tuning.
- Complete first-hour phases P4–P6 STATUS: BLOCKED · DATE: 2026-08-25 · PRIORITY: P2. Sources: memory.items[33], docs.items[52]. Agreed: 2026-08-25. Blocked on: Wave 1 was a NULL result under the pre-registered rule (0/16 attempts qualify); the estate is frozen and first-hour is on the post-live deletion list; First-hour lane FROZEN; FH-SCIENCE blocked on causal ACTIONS availability. Next action: implementation packet — Do not resume before 15 Sep. Then make an explicit keep-or-delete call: first-hour is −61k LOC gross on the post-live deletion list, and wave 1's null result plus the ~9-years-per-symbol alpha-budget arithmetic argue for deletion over P5/P6. Extend the ACTIONS vocabulary for acquirer-side events (4
acquisitionofrows currently throw UNSUPPORTED_ACTION), acquire/seal the three validation corpora (~900 MB, 1,536 sessions × 5 symbols), define/run the panels, then write family transitions and the G0→G3 dry-run. Evidence note:validationPanelsReadyis false and only Discovery D is registered. Split handling is untested (Discovery-D has zero splits; the five real splits land in the promotion panels).
- Deploy services/orchestrator-runtime on Fly (P12) — merged but never deployed STATUS: PARTIALLY DONE · DATE: 2026-08-25 · PRIORITY: P2. Sources: memory.items[30]. Agreed: 2026-08-25. Blocked on: Estate frozen for 15-Sep; needs ORCHESTRATORDATABASEURL + GEMINIAPIKEY secrets. Next action: orchestrator — After 15 Sep: promote the daily-genome-v2 registry row idea→quick_check and discharge its data gates, set the two Fly secrets,
fly deploy --config services/orchestrator-runtime/fly.toml .,fly scale count supervisor=1; pause by setting the registry row toparked. Evidence note: Answers owner's repeated question "when are we going to start running all the tests and strategies on backtesting?" — nothing backtests continuously yet. Runbook: docs/runbooks/orchestrator-runtime.md; lane is 'discovery' so promotable stays false until P14b.
- Finish the 2026-08-15 Alpaca lab execplan work graph (A0, A3/A9/A11, A4–A12) STATUS: BLOCKED · DATE: 2026-08-15 · PRIORITY: P2. Sources: docs.items[62]. Agreed: 2026-08-15. Blocked on: Search factory / tournament / first-hour lanes FROZEN 2026-08-27. Next action: implementation packet — If unfrozen: pause/relabel the statistically invalid legacy schedule (A0), install the paper-only data key and prove one regular session from SIP event → modeled paper fill → operator projection (A3/A9/A11), then A4–A12 in dependency order. Evidence note: The NUL-byte item in A0 is discharged — verified no NUL bytes remain under lib/paper/intraday/contracts/. Every row of the plan's 14-row verification matrix is still 'pending'.
- Finish the lab-refit plan's P2–P4, E2–E4, D1 and T1 packets STATUS: BLOCKED · DATE: 2026-08-21 · PRIORITY: P2. Sources: docs.items[63]. Agreed: 2026-08-21. Blocked on: Estate FROZEN. Next action: implementation packet — If unfrozen: version the search measurement epoch and remove test-derived proposer feedback (P2), the narrow manual legacy runner + genome v1.1 (P3), one-use legacy holdout lineage (P4), exact-40 graduation performance floor (E2), forward expectation bands/terminal statistic/ITT receipts (E3), owner start (E4), one owner program dashboard (D1), and refuse caller-selected free-N (T1). Evidence note: The proposer currently learns test-derived trades, drawdown, gate reasons, rank order and the test-selected champion — the documented train-only boundary is not presently true. Promotion is fail-closed until a calibrated boundary artifact exists.
- Fix the regime classifier — two of three axes are pinned by defects, not by the market STATUS: NOT STARTED · DATE: 2026-08-18 · PRIORITY: P2. Sources: docs.items[44]. Agreed: 2026-08-18. Blocked on: A deliberate calibration decision — the change rotates sealed suite hashes. Next action: implementation packet — Drop the Math.round, compare P80 to P80 (not median to a P80-calibrated threshold), use a trailing rather than growing window, compute spread stress from the session range not the last minute's bar, make warmupSessions honoured or removed, and consider a faster direction pair (20/50). Evidence note: Every classifiable session in every corpus labels
up_low_normal. Volatility threshold 0.30 is unreachable (labelled-window max 0.2044); spread-stress threshold 0.05 exceeds the largest observed value 0.0231. 'Regime breadth should not be trusted as a scoring component until this is fixed.'
- Fix the search-factory multiplicity gate: P14 option C bundled with the survivor-definition change, plus P14b confirmation lane STATUS: BLOCKED · DATE: 2026-08-25 · PRIORITY: P2. Sources: docs.items[47]. Agreed: 2026-08-25. Blocked on: Search factory FROZEN by the simplification review; owner re-consent on option C. Next action: implementation packet — Ship P14 + P14b as one packet including the null-rate/survivor-definition reconciliation (admission must require lower-95 > 0, not a point estimate) before turning the factory on. Evidence note: Option C was approved on the premise that 0.025 is P(lower-95 > 0); the code admits on a point estimate (~0.5 null rate), so the relaxation is far larger than the 41× shown. Deploying P9+P12 before P14 grows the pooled denominator ~62,500/day against ≤2.4 survivors/round.
- Forward-v3 supervisor publishes no durable worker heartbeat STATUS: NOT STARTED · DATE: none · PRIORITY: P2. Sources: docs.items[88]. Agreed: none. Blocked on: Estate FROZEN; the 2026-08-19 activation packet added the lease/poll-receipt plane but was never deployed. Next action: implementation packet — Publish a durable worker heartbeat so owner status can report proven worker liveness instead of the hard-coded
unprovenreason. Evidence note: The string is asserted in three places including a validity check, so any fix must move all three together.
- Free-N session hole ($643,737 swing) in run-tournament-wave.mjs STATUS: NOT STARTED · DATE: 2026-08-21 · PRIORITY: P2. Sources: memory.items[34]. Agreed: 2026-08-21. Blocked on: none. Next action: implementation packet — Close the free-N session hole at run-tournament-wave.mjs:64 and :462 (or delete the runner with the post-live tournament deletion packet, whichever the estate decision lands on). Evidence note: Adversarially verified during the 2026-08-21 refit audit and never fixed.
- holdoutView has ZERO production callers — the 120-session sealed holdout has never been read STATUS: NOT STARTED · DATE: 2026-08-21 · PRIORITY: P2. Sources: memory.items[35]. Agreed: 2026-08-21. Blocked on: none. Next action: implementation packet — Either wire holdoutView (corpus/index.ts:154) into the confirmation lane as the one-shot claim it was designed to be, or retire it explicitly so the estate stops implying a holdout discipline it does not run. Evidence note: Adversarially verified. Note the #222 rebuild rotated 19 formerly-sealed holdout sessions (2026-02-02..02-27) into the searchable window — plan-sanctioned, no realized leak, but it must be disclosed at any future holdout use.
- Make the Exact-40 owner-guard denial typed across SQL, adapter, API and UI (ACCESS-SQLSTATE) STATUS: NOT STARTED · DATE: 2026-08-23 · PRIORITY: P2. Sources: docs.items[60]. Agreed: 2026-08-23. Blocked on: Estate FROZEN. Next action: implementation packet — Ship the additive typed-SQLSTATE migration plus all-six-RPC, adapter, API and Lab-state tests. Evidence note: The guard raises default P0001 while the adapter maps only 42501 to ACCESS_DENIED — access denials currently surface as generic failures. Packet was marked 'ready' and never landed.
- Next sourcing wave: PIT earnings dates (PEAD), industry momentum, price-based event proxies STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P2. Sources: memory.items[25]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Queue the next free-look wave against the agreed conclusion that daily US-equity price sorts are exhausted — next alpha needs different information (events, fundamentals, positioning, other assets). Every look pre-registered, one variant, recency gate mandatory. Evidence note: Standing duty recorded in the north star: orchestrator must keep proposing better edge-finding ideas at every status. 52 trials / 2 candidates so far.
- Owner's ranked strategy library ranks 2–10 remain unscreened behind data gates STATUS: PARTIALLY DONE · DATE: 2026-08-23 · PRIORITY: P2. Sources: docs.items[93]. Agreed: 2026-08-23. Blocked on: G-DATA-2 and G-DATA-3. Next action: implementation packet — Follow the recorded build order: momentum baseline (done — candidate #1) → value–momentum + quality (GP/A partially covers rank 3) → PEAD + earnings momentum → low-beta + industry/residual → dual-momentum overlay + pairs. Store expected-turnover class per entry and precommit only 2–3 variants per family. Evidence note: The 50-trial campaign has since screened several of these long-only: low-beta DEAD, residual momentum WEAK, industry mean reversion DEAD, seasonal momentum DEAD, dividend yield WEAK. Ranks 2, 4 and 5 remain unscreened on proper PIT data.
- P14 gate loosening (option C) + P14b two-lane discovery/confirmation split — ship together or not at all STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: memory.items[28]. Agreed: 2026-08-25. Blocked on: Estate frozen until after the 15-Sep live date (S1 decision). Next action: implementation packet — After 15 Sep, ship P14 (denominator = lifetime SCORED candidates; assessMultiplicity byte-identical; RoundState gains totalScored/totalSurvivors) and P14b (lane discipline) as ONE packet with its own adversarial panel; promotable = champion && globalMultiplicity && familyModule.promotionCapable && lane==='confirmation'. Evidence note: owner explicitly approved: "we need to loosen the promotional gate in order to make things easier to actually test". Until shipped,
promotableis arithmetically impossible (ceiling 1/(tuneIterations+1) < 0.025 at ≥40 iterations) — cap tuneIterations at 38 meanwhile.
- Remaining search-factory packets P10, P11, P13, P15 STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: memory.items[31]. Agreed: 2026-08-25. Blocked on: Estate frozen until after 15 Sep. Next action: implementation packet — Queue post-live: P10 intraday cost + Tier B modules (promotionCapable:false), P11 registry evidence writer, P13 Sharadar holdout + DB presence, P15 variable-size forward package (generalising the 40-member shape lock). Adversarial panel before P13 and P15. Evidence note: Forward machinery is shape-locked to 40 members — a multi-family or multi-strategy winner cannot be packaged without P15.
- Repair the daily research lane's sign-conditioned gate defect and its three SQL functions STATUS: BLOCKED · DATE: 2026-08-25 · PRIORITY: P2. Sources: docs.items[50]. Agreed: 2026-08-25. Blocked on: Estate FROZEN; prod DB apply authorization. Next action: implementation packet — Fix the gate function that reads verifiedoutcomeshash from a 4-key tool output (always NULL → unconditional P0001), fix the latent second defect (pass path selects a receipt nothing inserts → P0002), make fixtures contract-faithful, add bounded assertion identifiers and a sign-symmetry test, raise catch-up cadence. Evidence note: The defect is sign-conditioned: excess ≤ 0 completes and records, excess > 0 raises and burns permanently — an evidence ledger that selects against positive-return days. Forward evidence stands at 0 of 126.
- Require the champion's own lower-95 > 0 for promotion (round.ts) STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P2. Sources: memory.items[29]. Agreed: 2026-08-26. Blocked on: Was gated on #307 merging (merged 2026-08-26); now gated only on the estate freeze. Next action: implementation packet — Change
promotable(round.ts:815) from a survivor-COUNT test on a point estimate to also requiring the champion's own lower-95 > 0; ship with P14/P14b so the gate is tightened in the same breath it is loosened. Evidence note: Today lower-95 is only a rankKey. The audit's blunt finding: graduation gates are completeness-only — 40 losing bots are equally graduatable, and the champion's lower-95 > 0 is never required.
- Resolve FH-SCIENCE: a current Sharadar snapshot cannot prove historically empty corporate actions STATUS: BLOCKED · DATE: 2026-08-24 · PRIORITY: P2. Sources: docs.items[53]. Agreed: 2026-08-24. Blocked on: Alpaca's mutation SSE retention starts 2026-07-09, far short of the 2024-07-24 Discovery-D floor. Next action: implementation packet — Either bind an immutable first-seen sidecar / authenticated observation history, or leave the adapter failing closed with UNPROVABLEACTIONAVAILABILITY. Evidence note: A credentialed probe proved entitlement but disproved sufficient retention: a historical request silently begins at retained history, so HTTP 200 and a clean close are not completeness. Alpaca remains viable for prospective action custody only.
- Set-&-Forget structure-retest EQUITIES family + explicit timeframe search axis STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: memory.items[32]. Agreed: 2026-08-25. Blocked on: Estate frozen; forex parked so only the equities cousin is in scope. Next action: implementation packet — Build slug
set-forget-structure-retest-equitiesas a new family with zone/reaction/retest/hold variables as genome leaves and TIMEFRAME as an explicit axis (D1 now; M15/H1 by causal resampling of the Discovery-D M1 panel, promotable:false until validation panels exist). Evidence note: owner asked for it after a YouTube transcript. Negative prior is pre-recorded: the rule set is FOREX-NATIVE and the author's own ablation failed it on indices/mega-caps. Value = first price-structure/R-multiple/risk-sized family, forcing the shared execution core out of evaluateGenome. 'H4 does not exist' on a 6.5h RTH session.
- Tournament entrypoint sandbox hardening is an explicitly recorded open follow-up STATUS: NOT STARTED · DATE: none · PRIORITY: P2. Sources: docs.items[87]. Agreed: none. Blocked on: Tournament FROZEN. Next action: implementation packet — Before ANY tournament executable is run (CLI, worker or API route): a credential-free allowlisted process environment with no .env inheritance and no cloud-metadata reachability, sandbox-level default-deny egress (not lint), a read-only filesystem apart from an explicit fixture/output dir, behavioural tripwires on socket/subprocess/dynamic-import/wall-clock, and a byte-identical rerun check. Evidence note: The static manifest audit does not and cannot provide these; they are the runtime half of the boundary.
- acquireSeriesLock has no stale-PID reclaim STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P3. Sources: memory.items[36]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Add stale-PID reclaim to acquireSeriesLock so a killed wave run does not permanently wedge its series lock (hardening was requested when wave 1 ran detached on the laptop). Evidence note: Same failure class as the live-lane 'trial ledger is locked by an invalid lock record' flake — worth fixing both with one lock-hygiene review.
- Benchmark is price-return not total-return, and the search corpus is 5 hindsight-selected mega-caps STATUS: PARTIALLY DONE · DATE: 2026-07-28 · PRIORITY: P3. Sources: memory.items[82]. Agreed: 2026-07-28. Blocked on: Deliberately not fixed — fixing it makes an already-brutal bar harder. Next action: orchestrator — Confirm the corpus/v2 total-return rebuild (#222, merged) discharged the dividend-blind benchmark for the daily corpus, and record whether the orchestrator's own SPY/QQQ/AAPL/MSFT/NVDA corpus (no delisted names, real survivorship bias) is retired with the orchestrator or replaced by the survivorship-free Sharadar universe. Evidence note: Yahoo raw OHLC excludes dividends, so buy-and-hold forfeits them and cash-holding strategies get phantom alpha. The Sharadar SEP census (45.3M rows, 20,941 tickers, survivorship-free) is the obvious replacement and arguably discharges G-DATA-1 — but it has no holdout and no DB presence (P13).
- Genome v2 extension gaps: independent StochRSI band, RSI-rollover, volume/candle leaves, live divergence STATUS: PARTIALLY DONE · DATE: 2026-08-15 · PRIORITY: P3. Sources: memory.items[78]. Agreed: 2026-08-15. Blocked on: Estate frozen until after 15 Sep. Next action: implementation packet — Audit what genome/v2 (#298: 13 new bounded fields, 33 tunables, L1–L9 leaves) actually closed against the original five-check gap list, and schedule any remaining leaves post-live. The hardcoded
rsi>=50regime pivot was adversarial to the RSI-turn check and must stay removed. Evidence note: Genome v1 expressed only 2.5 of the 5 masterclass exit checks. The proposer schema at orchestrator/proposer.ts ~line 228 must match the genome or every proposal rejects. The v1 catalog stableId is FROZEN as 'genome/v1' so v1's refutation can never be relabelled.
- Historical tournament open items after #197: v4 wave binding, consistency score, regime classifier, merged corpus STATUS: NOT STARTED · DATE: 2026-08-18 · PRIORITY: P3. Sources: memory.items[79]. Agreed: 2026-08-18. Blocked on: Estate frozen; the tournament is on the post-live deletion list. Next action: implementation packet — Decide keep-or-delete with the deletion packets rather than fixing in place. If kept: no run is bound to a v4 wave (sharding.ts pins V3EXPERIMENTALROSTER, v4.ts was never wired into the plan path); no consistency score is produced (RunnerUnitOutcome carries only hashes and counts, no return series); the regime classifier is broken (docs/regime-classifier-defects-2026-08-18.md); and deriveCausalRegimeSamples REQUIRES the SPY benchmark while every sealed corpus carries exactly one symbol, so multi-instrument work needs a merged corpus re-sealed from real rows under MAXHISTORICALCORPUSROWS = 250,000. Evidence note: Also structural: ~50% of every plan is offgrid_member rejections by design, so a plan is always 2× its real work.
- Tier-B: profitability trend / dGP-A primary STATUS: BLOCKED · DATE: 2026-08-29 · PRIORITY: P1. Sources: rank.json ranked[0], CRITIC round 1. Agreed: 2026-08-29. Blocked on: Numeric MDE, required sample, PIT SF1/SEC vintage spine, and sealed preregistration. Next action: implementation packet — Publish the power card and complete the six-gate conjunctive verdict map before any ledger row or run.
- Tier-B: overnight-component momentum STATUS: BLOCKED · DATE: 2026-08-29 · PRIORITY: P1. Sources: rank.json ranked[1], CRITIC round 1. Agreed: 2026-08-29. Blocked on: Frozen forward-return timing, numeric threshold/MDE, separately costed benchmark, and open/split audit. Next action: implementation packet — Finish the endpoint contract; keep the long-only book diagnostic and register no return look before all six verdict gates are sealed.
- Tier-B: intangible-adjusted value / iHML STATUS: BLOCKED · DATE: 2026-08-29 · PRIORITY: P1. Sources: rank.json ranked[2], CRITIC round 1. Agreed: 2026-08-29. Blocked on: As-first-reported PIT ingest, acceptance-session mapping, exact plain-B/M comparator, and named negative control. Next action: implementation packet — Freeze the missing timing/control contract and six-gate verdict map; do not run returns on revised SF1 snapshots.
- DIAG: cash-yield sleeve terms and reconciliation STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[0]. Agreed: 2026-08-29. Blocked on: Broker terms and owner's cash-sweep choice. Next action: owner / implementation packet — Reconcile cash interest, historical rates, BIL/SGOV OPG, and distributions; make no return claim.
- DIAG: implementable-N whole-share replay STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[1], ll4b-r4-final. Agreed: 2026-08-29. Blocked on: Owner capital basis and fixed-N preregistration choice. Next action: implementation packet — Use the shared Round-4 planner kernel to report deployment, zero-share drops, tracking error, price/size tilt, fixed N, and per-name headroom.
- DIAG: two-sleeve netting and attribution STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[2]. Agreed: 2026-08-29. Blocked on: GP/A production path and LL-4 multi-strategy design. Next action: implementation packet — Report correlations, nettable trades, and per-strategy HWM/return attribution without making a new portfolio decision.
- DIAG: risk-budget policy-envelope consistency STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[3]. Agreed: 2026-08-29. Blocked on: Sealed policy comparison convention. Next action: implementation packet — Compare screening and policy envelopes without recalibrating H1/H2.
- DIAG: OPG-versus-MOC execution audit STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[4]. Agreed: 2026-08-29. Blocked on: Post-lockbox observed fills. Next action: implementation packet — Measure same-signal simulated-open versus broker-fill shortfall by liquidity bucket; do not adopt MOC.
- DIAG: formation-date timing dispersion STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[5]. Agreed: 2026-08-29. Blocked on: Registered sleeve series. Next action: implementation packet — Produce one zero-variant date-stagger dispersion report.
- DIAG: opening-auction participation profile STATUS: BLOCKED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[6]. Agreed: 2026-08-29. Blocked on: Lockbox opening, owner approval, and lawful auction data. Next action: owner / implementation packet — Run only the frozen execution-cost schedule; no alpha claim or executor change.
- DIAG: GP/A gross-margin × asset-turnover decomposition STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[7]. Agreed: 2026-08-29. Blocked on: Reproduced GP/A panel. Next action: implementation packet — Decompose the existing survivor with no adoption path.
- DIAG: Frog-in-the-Pan momentum decomposition STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[8]. Agreed: 2026-08-29. Blocked on: Frozen exposure panel and MDE. Next action: implementation packet — Produce volatility/momentum-matched exposure and power tables only.
- DIAG: overnight-versus-intraday momentum audit STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[9]. Agreed: 2026-08-29. Blocked on: Dividend-symmetric open/close construction and powered MDE. Next action: implementation packet — Audit construction and conditional coefficient; abort when the MDE fails.
- DIAG: total-payout component controls STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[10]. Agreed: 2026-08-29. Blocked on: PIT fundamentals panel. Next action: implementation packet — Add buyback/dividend/net-debt controls with NULL, sign, and denominator-vintage checks.
- DIAG: prospective process reset and shadow-book templates STATUS: BLOCKED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[11]. Agreed: 2026-08-29. Blocked on: Lockbox opening for any shadow book. Next action: implementation packet — Produce prospective power/benchmark templates and never retroactively re-power sealed gates.
- DIAG: cost-aware banded-rebalance non-inferiority STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[12]. Agreed: 2026-08-29. Blocked on: One frozen band and turnover ceiling. Next action: implementation packet — Record one trial:null non-inferiority calculation; no rule amendment.
- DIAG: as-filed XBRL matched-window audit STATUS: BLOCKED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[13]. Agreed: 2026-08-29. Blocked on: SEC earliest-accepted vintage spine. Next action: implementation packet — Compare earliest-accepted and latest-revised GP/A windows; no ridge or sleeve.
- DIAG: corporate-action and disposition hygiene STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[14]. Agreed: 2026-08-29. Blocked on: Delisting-proceeds map and LL-4a acceptance fixtures. Next action: implementation packet — Reconcile last-close counts, dividends, splits, and dispositions without an alpha claim.
- DIAG: cross-asset TSMOM roster and risk lens STATUS: BLOCKED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[15]. Agreed: 2026-08-29. Blocked on: SFP integrity. Next action: implementation packet — Produce PIT roster/correlation and book-risk evidence only.
- DIAG: SFP ETF-universe integrity and whole-share feasibility STATUS: BLOCKED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[16]. Agreed: 2026-08-29. Blocked on: SFP ingest and distribution-total-return audit. Next action: implementation packet — Report PIT eligibility counts and whole-share feasibility; compute no performance statistic.
- DIAG: EDGAR acceptance-time provenance for insider clusters STATUS: QUEUED · DATE: 2026-08-29 · PRIORITY: P2. Sources: rank.json diag_items[17]. Agreed: 2026-08-29. Blocked on: ACCEPTANCE-DATETIME sample and permaticker-CIK join coverage. Next action: implementation packet — Audit provenance only and keep the return family closed.
Data
STATUS: 19 OPEN / 0 DONE · DATE: 29 August 2026.
- Copy the LL-4a review artefacts to .handoff-durable before any further restart STATUS: NOT STARTED · DATE: 2026-08-29 · PRIORITY: P0. Sources: memory.items[38]. Agreed: 2026-08-29. Blocked on: none. Next action: implementation packet — Copy review-brief.md (the 7 adversarial questions), review-r1-verdict.md + the 5 lens verdicts, writer-briefs.md and patches.jsonl (43 writer patches) from the session scratchpad into <lab checkout>/.handoff-durable/ll4a/. Evidence note: Explicitly flagged with a ⚠ in the handoff: these were themselves recovered from Codex rollouts after the reboot and are sitting in tmp again.
- Custody the trial ledger and durable research artefacts STATUS: NOT STARTED · DATE: 2026-08-28 · PRIORITY: P0. Sources: memory.items[37], docs.items[17]. Agreed: 2026-08-28. Blocked on: Custody credential (Q10) if using the Supabase path. Next action: implementation packet — Copy the 61-row durable ledger digest (52 programme-numbered trials plus 9 pre-ledger/non-trial rows), audits/, killcards, modern-window evidence, and the momentum + GP/A confirm-cards into durable custody; verify the actual source hashes after copying. Discard every superseded row-count claim. Evidence note: The trial ledger is the pre-registration record the whole lockbox discipline rests on; losing it invalidates the one-shot opening. The authoritative digest has 61 rows.
- Acquire a minute-bar feed (~$99/month) to unlock the preregistered intraday battery and execution-quality work STATUS: NOT STARTED · DATE: 2026-08-28 · PRIORITY: P1. Sources: docs.items[36]. Agreed: 2026-08-28. Blocked on: owner (spend). Next action: implementation packet — Owner decides whether to fund the minute-bar feed; it also gates the Discovery-E 500-symbol follow-on.
- Build a PIT corporate-action / disposition ledger with delisting proceeds and dividend pay dates STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[22]. Agreed: 2026-08-26. Blocked on: Vendor data. Next action: implementation packet — Build a knowable-time action/disposition ledger with full merger/spinoff terms, dividend pay dates and delisting proceeds plus conservative fallbacks. Evidence note: Momentum currently exits a delisted holding at last observed close and omits consideration; risk policy §7 names corporate-action mis-mapping as an owned data-owner mitigation requiring a corrected sealed mapping before owner re-arm.
- Dispatcher cron collapse was 'NOT free' — existing/sourcenotready path needs a re-read STATUS: PARTIALLY DONE · DATE: 2026-08-26 · PRIORITY: P1. Sources: github.items[9]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Re-read the truncated 'NOT free: the existing/sourcenotready ...' clause in #304 against the shipped dispatcher route and confirm the 10-minute tick does not amplify the existing/sourcenotready branch; add a counter if it can. Evidence note: PR body sentence is cut off in the GitHub description; the full statement is in the PR/packet log.
- Get 10.6 GB of single-site data off this Mac (Sharadar 8.7 GB, admitted corpora 1.9 GB, exact-40 251 MB) STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P1. Sources: docs.items[31]. Agreed: 2026-08-25. Blocked on: Backup destination decision (owner). Next action: implementation packet — Copy to an encrypted external disk tonight (audit's recommendation); answer the Sharadar cloud-copy licence question later against a copy that already exists. Evidence note: Time Machine destination will not mount; last stable snapshot 2026-07-09 predates the Sharadar store entirely. The live lane reads the sealed Sharadar DuckDB read model on every refresh and simulate-window.
- Give the Sharadar bundle DuckDB a durable home and a DB presence STATUS: PARTIALLY DONE · DATE: 2026-08-27 · PRIORITY: P1. Sources: memory.items[39]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Move sharadar-bundle.duckdb (SF1/SF2/SF3/EVENTS/SFP/DAILY, 2.74 GB, hashes in DATA_DICTIONARY.md) out of the tmp scratchpad onto <operator data dir>/, and schedule P13 to give Sharadar a sealed holdout and a DB presence. Evidence note: The raw JSONL tables already live durably under <operator data dir>/sharadar/tables/. It is the ETL'd DuckDB — the thing every free look actually queries — that is in tmp.
- Seal a causal daily risk-free (T-bill) series — Sharpe currently assumes zero risk-free and no idle-cash yield STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[37]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Ingest and seal FRED DTB3 as a causal daily series; apply to Sharpe and idle-cash accounting. Evidence note: Effort S and free — the cheapest open item in the gap review.
- Seal an effective-dated point-in-time security master keyed by permanent ID STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: docs.items[21]. Agreed: 2026-08-26. Blocked on: Vendor data purchase decision. Next action: implementation packet — Acquire/seal historical size, category and industry history so cost buckets and diagnostics stop using current
scalemarketcap. Evidence note: Both live candidates use current metadata for the 10/25 bp cost bucket. Effort M + vendor data. Named as a research-owner mitigation, not a silent gap.
- Build a sanctioned evidence-update RPC (registry briefs were backfilled by guarded admin UPDATE) STATUS: NOT STARTED · DATE: 2026-08-24 · PRIORITY: P2. Sources: memory.items[41]. Agreed: 2026-08-24. Blocked on: none. Next action: implementation packet — Build the evidence-update RPC so registry brief edits go through a receipted, append-only path; 11 authored-brief plain-English backfills were applied via a raw guarded admin UPDATE because no sanctioned RPC exists. Evidence note: Recorded verbatim as '(no sanctioned evidence-update RPC exists yet — build one)'. Every other research write is receipted; this one is not.
- Build the research-custody downloader and a least-privilege chunk-read role STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P2. Sources: docs.items[54]. Agreed: 2026-08-26. Blocked on: Q10 custody gateway credential. Next action: implementation packet — Add a downloader plus a narrow chunk-read role so the production custody copy is a real recovery path, not a write-only sink. Evidence note: 'The prod copy is write-only today. Grants are postgres-only; no downloader exists, so it is not a recovery path.' Also: index.json bytes ≠ sealed raw bytes for SPY (60,386,759 vs 60,376,866).
- Confirm the Sharadar/Alpaca entitlement, retention and two-person sharing rights (A1 corpus gate) STATUS: BLOCKED · DATE: 2026-08-15 · PRIORITY: P2. Sources: docs.items[90]. Agreed: 2026-08-15. Blocked on: owner / provider. Next action: implementation packet — Confirm non-professional/private-research use, retained research corpus, raw sharing between the two private collaborators, and rights after cancellation — in writing, before any cloud copy or partner sharing. Evidence note: Now more pressing: lab-overview-2026-08-28 explicitly invites a partner and offers replication from the source artifacts.
- Every DuckDB job must set tempdirectory + maxtempdirectorysize and check df first STATUS: PARTIALLY DONE · DATE: 2026-08-27 · PRIORITY: P2. Sources: memory.items[40]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Make the tempdirectory + maxtempdirectorysize (≤3 GB) +
dfprecheck a hard clause in every DuckDB brief template rather than a per-packet reminder, and prefer window functions partitioned by ticker over full-table self-joins. Evidence note: A single volume-shock confirm-card spilled 15 GB and took the disk to 1.3 GB free. A second incident on 2026-08-26 23:00Z filled the disk to 97% via parquet intermediates plus 15 concurrent Codex runs.
- Register Sharadar as sealed production evidence (G-DATA-1) — it has no prod binding STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: docs.items[91]. Agreed: 2026-08-25. Blocked on: Licence question; CLOUD-CUSTODY. Next action: implementation packet — Register the Sharadar corpus as sealed production evidence so ranks 1, 7, 8 and 9 of the owner's strategy ranking are unblocked; today there is no %sharadar% table, 0 Storage buckets and 0 objects in prod. Evidence note: G-DATA-2 (PIT fundamentals) is partially discharged — the fundamentals estate now holds SF1/SF2/SF3/EVENTS/DAILY locally per lab-overview-2026-08-28 — but SHARADAR_TABLES in lib/data-sharadar/types.ts was a closed three-table union at audit time and G-DATA-3 (PIT earnings timestamps/estimates) still names no vendor anywhere in the repo.
- COVID circuit-breaker halt days cannot seal under the exact-minute rule — policy question parked STATUS: PARKED · DATE: 2026-08-22 · PRIORITY: P3. Sources: memory.items[43]. Agreed: 2026-08-22. Blocked on: Needs a policy decision, not code. Next action: implementation packet — Decide how halt days (2020-03-09/12/16/18 at 376/390 minutes) are represented — a declared halt-day exception with its own receipt, or permanent exclusion — before any study that claims 2020 coverage. Evidence note: INCOMPLETE_SESSION requires exactly 390 (or 210) minutes per symbol, so a halt day can never seal or dispatch.
- Crypto-momentum: full-history PIT catalogue re-ETL before any retest STATUS: PARKED · DATE: 2026-08-27 · PRIORITY: P3. Sources: memory.items[26]. Agreed: 2026-08-27. Blocked on: No point-in-time crypto catalogue exists; current store is 2021-hindsight. Next action: implementation packet — If crypto is revisited, first build a point-in-time universe catalogue (the current store's constituents are chosen with hindsight, and skip-best-5% collapses it to Sharpe 0.05) — do not trade the current result. Evidence note: Verdict was INCONCLUSIVE, explicitly 'do not trade'. Alpaca crypto bars are fetchable with the existing key.
- FX carry: needs executable data (IBKR/forwards) — not tradeable at Alpaca STATUS: PARKED · DATE: 2026-08-27 · PRIORITY: P3. Sources: memory.items[27]. Agreed: 2026-08-27. Blocked on: Forex is parked by owner's standing instruction (2026-08-25: "forex is parked until i say anything else") and there is no venue. Next action: owner — Leave parked; do not raise forex unprompted. If owner un-parks it, the first step is an executable data source (IBKR or forwards) plus a sealed FX corpus with custody. Evidence note: Result was CONDITIONALPREREGISTER with stable halves 0.61/~0.3 — the blocker is venue and data, not evidence.
- restoreCheckpoint cannot round-trip a declared expectedPriceBand STATUS: NOT STARTED · DATE: 2026-08-18 · PRIORITY: P3. Sources: memory.items[44]. Agreed: 2026-08-18. Blocked on: none. Next action: implementation packet — Fix corpus-import.ts so restoreCheckpoint persists the DECLARED minPrice/maxPrice alongside the resolved *Micros, making "always declare a band" compatible with "always resume from checkpoint"; the current workaround lives only in the import script. Evidence note: Also from the same file, still open: never derive expectedPriceBand from daily OHLC (daily bars carry bad prints minute bars do not).
- SNDK corpus: 150 clean sessions vs the 160-session gate STATUS: PARKED · DATE: 2026-08-18 · PRIORITY: P3. Sources: memory.items[42]. Agreed: 2026-08-18. Blocked on: Ten more sessions — qualifies around early Sept 2026. Next action: implementation packet — Leave pending. Do NOT relax finalizeImport's exact-minute rule to admit it early — that rule is what stops a holed corpus sealing as complete. Evidence note: 134 of its 360 sessions are short of their exact M1 count (2,085 missing minutes, all pre-2026-01-02) because Alpaca emits no bar for a minute with no trade and Sandisk was thin right after the Western Digital spin-off.
Product/UI
STATUS: 29 OPEN / 0 DONE · DATE: 29 August 2026.
- Ask the Lab v2 (guarded create_idea write) and the nightly AI strategy scout STATUS: NOT STARTED · DATE: 2026-08-23 · PRIORITY: P2. Sources: memory.items[68]. Agreed: 2026-08-23. Blocked on: none. Next action: orchestrator — Build the approved architecture's second half: the nightly scout/orchestrator with guarded writes limited to creating an Idea and screening proposals, and Ask-the-Lab v2's single guarded write (create_idea). Budget, promotion and verdicts stay FOREVER human-click, never chat. Evidence note: Ask the Lab v1 shipped as #241 (owner-only, Gemini 3.6 Flash, 5 read-only record tools, citations must be data-bearing or the reply fails closed). The board's "nightly strategy scout" copy currently describes something that does not run.
- Assistant chat has ZERO thinkingConfig — the "dumber month" fix was only half-applied STATUS: PARTIALLY DONE · DATE: 2026-07-02 · PRIORITY: P2. Sources: memory.items[59]. Agreed: 2026-07-02. Blocked on: none. Next action: implementation packet — Add
thinkingLevel:'low'and raise the caps (2048→4096, 1024→2048) at the three generationConfig sites in app/api/assistant/route.ts (~:868, :998 retry, ~:1156). PR #174 restored the research brief but never touched assistant chat. Evidence note: Also from the same review and still open: the research-warm cron (0 */2 UTC) plus a 6h TTL phase-locks briefs so the US session reads ~8h-old pre-market builds — fix by forcing refresh when ageHours ≥ 4 inside the cron; cache hits hardcode sources as "loaded"; "Run: now" shows session start not build time; successful spend is never persisted (only failures are).
- Build the member/partner tier and a trader-facing shell (no per-trader anything exists) STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: docs.items[59]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Spike a member tier with returns, risk and kill state per trader; five nav pills currently describe a single-operator instrument. Evidence note: Access is binary today; 4 approved readers see a disabled Ask card. Directly relevant to lab-overview's 'Doing this together' partner framing.
- Crypto symbol key mismatch — live crypto prices and alerts can never bind STATUS: NOT STARTED · DATE: 2026-07-02 · PRIORITY: P2. Sources: memory.items[53]. Agreed: 2026-07-02. Blocked on: none. Next action: implementation packet — Fix at the single choke point
livePriceStore.applyTickwith an exact-match table in a client-safe module — the worker publishes BTCUSD/SOLUSD/HYPEUSD/SUIUSD while all UI subscribes Yahoo-form BTC-USD/SOL-USD/HYPE32196-USD/SUI20947-USD. Evidence note: Do NOT import app/api/symbols/route.ts into the client store, and do not fix it in the SSE route only — that misses the Realtime and snapshot transports.
- dnd-kit context churn defeats the whole render-path memoisation (deep-dive REFUTED the shipped claim) STATUS: NOT STARTED · DATE: 2026-06-11 · PRIORITY: P2. Sources: memory.items[57]. Agreed: 2026-06-11. Blocked on: none. Next action: implementation packet — Fix the two independent DndProviderLazy context leaks so the row memos actually bail — today every price flush still re-renders ALL WatchlistGroups and SortableStockRows despite the #101 work. Hoist the sensor options and memo the SortableContext items (harness-proven → 0 re-renders per flush). Evidence note: The campaign's headline claim was refuted by its own deep dive, and the 1,107-line campaign added ZERO new tests.
- Finish the Lab UI honesty and plain-English tail STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: memory.items[66], github.items[7]. Agreed: 2026-08-25. Blocked on: none. Next action: owner — Close the three residual design items left after P1–P4 + P2.5 shipped: settle the list row-link model, number the PlainEnglishBriefPending cards, and implement the Ask-the-Lab member tier (owner approved "approved members, metered per user" on 2026-08-24; v1 is owner-only and needs a reader principal before wider access). Open one small packet covering the three items #292 left as reported: chart selector wiring (explicitly deferred to a separate packet), the row link model on the strategies list, and numbering PlainEnglishBriefPending in the registry-thesis spine. Evidence note: Design track v2 is otherwise complete and live: record v2 #290, P1 #288, P4 #287, P2 #291, P3 #292, P2.5 #294.
- Fix the Lab UI honesty defects: survivorship-selected hero, stale board copy, contradicting screens, ungated /docs/record STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: docs.items[58]. Agreed: 2026-08-25. Blocked on: Owner decision on whether /docs/record is intentionally public. Next action: implementation packet — Demote the best-of-40 hero and lead with the family verdict; derive board copy from the program ledger with evidence-age stamps; reconcile Forward's 1,283 verified batches against strategies' 0/80 attempts; refresh changelog/docs with a staleness gate; extend the copy gate to all 14 screens; decide and test-pin the gate on /docs/record. Evidence note: /docs/record serves 313,698 bytes of realised broker results (£132,124 realised on £171,870, per position) ungated and edge-cached. 'Silence is currently doing the deciding.' Now more urgent because lab-overview-2026-08-28 is being circulated as a partner reading room.
- Staleness-honesty holes in the price UI STATUS: NOT STARTED · DATE: 2026-07-02 · PRIORITY: P2. Sources: memory.items[54]. Agreed: 2026-07-02. Blocked on: none. Next action: implementation packet — Close the four holes: the status pill cannot go red while /api/stocks polls OK; any crypto tick keeps the whole app "Live"; the snapshot route silently DROPS stale entries instead of returning them flagged; internationals are permanently exempt from dimming. Also decide what to show for ^GSPC/^IXIC, which have no live source at all on Alpaca. Evidence note: These are honesty defects, not cosmetics — they are what let a 9-day outage look healthy. Honesty is load-bearing per the north star.
- Supabase Realtime v2 follow-ups: lock the
priceschannel + build the live spike/alert detector STATUS: NOT STARTED · DATE: 2026-06-01 · PRIORITY: P2. Sources: memory.items[55]. Agreed: 2026-06-01. Blocked on: none. Next action: implementation packet — (1) Lock the currently PUBLICpricesbroadcast channel to approved users (private channel + RLS on realtime.messages + client setAuth). (2) Build the live spike/signal detector that pushes a "buy now" alert via Realtime — signals verdicts still only land in Redissignals:latestevery 30s, and the alert tables/sound/NotificationDrawer already exist. Evidence note: v1 shipped LIVE on 2026-06-01 with NEXTPUBLICREALTIME_PRICES=1 on a deliberately public channel. The missing live detector is the gap between "we have realtime prices" and the product owner actually asked for.
- Twelve confirmed majors from the 2026-06-11 deep dive (watchlist undo, SWR flap, timezone, /coach overflow, /api/prices maxDuration) STATUS: NOT STARTED · DATE: 2026-06-11 · PRIORITY: P2. Sources: memory.items[58]. Agreed: 2026-06-11. Blocked on: none. Next action: implementation packet — Work the confirmed list: the remove/undo stale-closure family in Dashboard (removeStockCbCache never invalidates, so a 2nd removal inside the 4s undo window un-removes the 1st); watchlist-fetch-failure dashboard flap (unbounded SWR retries re-flip isLoading); heal-on-GET merging user-created same-named groups; StatsBand 'Next ER' timezone-dependence (NY clients hydration-fail with a wrong date); /coach overflowing every phone width; AskBox ?q silently dropped by /research/[symbol]; and the top risk — /api/prices has no maxDuration, so a Vercel stream recycle may fire the disconnect toast on every recycle in prod. Evidence note: 83 confirmed / 9 refuted across 123 agents; the full report is in-repo at docs/deepdive-2026-06-11.md (uncommitted at the time of writing). Also open: /stock/<garbage> triggers and permanently caches PAID AI research.
- UI must print the sealed-benchmark basis label;
graded.eligibleat the register; exposure-matched benchmark needs fill-ledger access STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: memory.items[65]. Agreed: 2026-08-25. Blocked on: The exposure-matched benchmark needs fill-ledger access — its own packet. Next action: implementation packet — Render SEALEDBENCHMARKBASISLABEL/NOTE at the render site (P2/P3 follow-up), surfacegraded.eligibleat the register, and scope the separate packet for a fill-ledger-backed exposure-matched benchmark. Evidence note: Bots are intraday long/flat with mandatory liquidation at bar 77, so any "vs buy-and-hold" claim must be labelled as an exposure-matched intraday hold. Excess is combined per-session ARITHMETICALLY, never geometrically — cite the canonical benchmark conventions before any such claim.
- WP-17: universal plain-English trio on every strategy page + typed mechanismSketch STATUS: NOT STARTED · DATE: 2026-08-24 · PRIORITY: P2. Sources: memory.items[67]. Agreed: 2026-08-24. Blocked on: none. Next action: implementation packet — Build the WP-17 packet: every strategy page — authored OR registry-born — renders (1) "HOW IT WOULD TRADE" mechanism diagram, (2) "WHEN IT WINS / WHEN IT LOSES" boxes, (3) "WHAT WE'RE LOOKING FOR" numbered criteria, via a shared SVG renderer with variants holdWindows/zoneRetest/eventReaction/spreadCarry. Scout proposals must carry all three plus a typed mechanismSketch spec. Evidence note: owner's directive is explicit that this is UNIVERSAL, not per-page. Never fabricate — missing content renders an honest "brief pending" card.
- a11y-mobile-2026-05-08 top-5 out-of-scope follow-ups STATUS: NOT STARTED · DATE: 2026-05-08 · PRIORITY: P3. Sources: docs.items[81]. Agreed: 2026-05-08. Blocked on: none. Next action: implementation packet — Convert the <980px sessions rail to a drawer/accordion; render sources as real <a target=_blank rel=noopener>; wire or remove the dead SessionRail filter button; give PositionCard's cost-bar role=img with an aria-label; lift the provider-chip empty/failed contrast above AA.
- codex-review-2026-06-10: 57 confirmed findings on the leverage-discovery and research surfaces STATUS: NOT STARTED · DATE: 2026-06-10 · PRIORITY: P3. Sources: docs.items[78]. Agreed: 2026-06-10. Blocked on: none. Next action: implementation packet — Start with the eight MAJOR/high items: bare-ticker catalog matching stamping 'Verified in the trd.fun catalog' onto colliding/different securities (findings 1, 3, 4, 5), substring alias expansion (2), unbounded queryUsageStats blinding provider error rates (6), forced refresh never bypassing adapter caches with expireEntries dead (7), and maxDuration=60 vs a >60s pipeline leaving sessions stuck 'running' with no janitor (8). Evidence note: Also open: unbounded module-level caches keyed on raw queries, per-instance rate limits ineffective at scale, anonymous writes with the service-role key, a nightly cron deleting researchartifacts on short TTLs, researchsessions growing unbounded with expires_at never enforced, and raw upstream error text returned to clients.
- deep-dive-fidelity-2026-05-08 three fixes (5Q label spacing, space-y decision, extract duplicated cell helpers) STATUS: NOT STARTED · DATE: 2026-05-08 · PRIORITY: P3. Sources: docs.items[82]. Agreed: 2026-05-08. Blocked on: none. Next action: implementation packet — Inline the 5Q label or add an mbNone prop to Eyebrow; lock in space-y-2.5 vs space-y-3 with a comment; extract the ~11 duplicated cell helpers into app/components/shared/expanded-cells.tsx (~250 LOC reduction, removes the StockRow→StockDeepDive drift risk).
- Deep-dive-of-today v1 (PR1 prompt v2 / PR2 TodaySnapshot / PR3 session-aware TTL) STATUS: NOT STARTED · DATE: 2026-07-02 · PRIORITY: P3. Sources: memory.items[62]. Agreed: 2026-07-02. Blocked on: Coordinate with the feat/deepdive-fix-wave parallel session, which owns majors 1-4, 6-9, 11, 13. Next action: implementation packet — If still wanted, build the three PRs with the verified constraints attached: update BOTH heading parsers (components/adapters.ts AND AssistantPanel.tsx:111-215); run TodaySnapshot per-session in runner.ts, NOT only in PUBLICADAPTERS (adapters skip on the cache-hit path); and fix recordrefresh's prune, which deletes refresh_log across ALL symbols, before passing the 1h cooldown. Evidence note: Written before the lab pivot; check with owner whether the main trd.fun research product is still in scope at all given the 15-Sep live focus.
- deepdive-2026-06-11: 96 confirmed findings plus 8 coverage gaps on the shipped perf/mobile campaign STATUS: NOT STARTED · DATE: 2026-06-11 · PRIORITY: P3. Sources: docs.items[77]. Agreed: 2026-06-11. Blocked on: none. Next action: implementation packet — Triage the MAJORs first: the watchlist-fetch-failure skeleton/stale-data flapping loop (unbounded SWR retries flip layoutPending), useWatchlist.dispatch building optimistic state from a stale render closure (lost-update family), and Dashboard's removeStockCbCache never invalidating so remove buttons roll the watchlist back to the mount-time layout. Evidence note: Coverage gaps worth their own work: no prod authed-browser verification; loadLayoutCached cross-instance staleness on a multi-instance fleet; no watchlist WRITE flow ever executed live; feed edges (mid-stream flips, tab throttling, sleep/wake, offline) unexercised; Yahoo cold-path rate limits at 8-parallel/75ms never hit; zero real-device mobile evidence; no long-session soak for leaks.
- Four code TODOs outside the frozen estate STATUS: NOT STARTED · DATE: none · PRIORITY: P3. Sources: docs.items[86]. Agreed: none. Blocked on: none. Next action: implementation packet — Resolve the ambiguous TradingView '12' ticker; collapse lib/research/store.ts's per-row counting to a grouped count query when the Supabase JS client allows; source float from quoteSummary defaultKeyStatistics with the current fallback; expose the global command-palette event. Evidence note: Full-repo scan of lib/ app/ scripts/ supabase/ (excluding node_modules, .next, .git): TODO 4, FIXME 0, XXX 0, HACK 0, 'residual risk' 0. 'not yet' 66 and 'follow-up' 62 hits are almost entirely UI copy or prose; the load-bearing ones are lib/paper/research/server/forward-v3-status-postgres.ts (v3 supervisor publishes no durable worker heartbeat, 3 sites), lib/paper/strategies/first-hour-continuation-status.ts:121/136 ('Selection not yet written · validation panels not built'), and lib/paper/intraday/tournament/entrypoint-manifest.ts:130.
- Magic-watchlist / themes tail: gridded theme header, per-card add, /stock research auto-refresh STATUS: NOT STARTED · DATE: 2026-06-03 · PRIORITY: P3. Sources: memory.items[63]. Agreed: 2026-06-03. Blocked on: none. Next action: implementation packet — Three agreed-but-unbuilt items: (1) gridded theme header redesign folding the stat strip + thesis into a stock-page-style info grid (median P/E, 1D/30D/90D, next catalyst, bull/catch/outlook); (2) per-card "add to watchlist" separate from "add the basket as a theme group", plus auto-add-all; (3) /stock research auto-refresh by polling instead of "reload the page", plus guest-triggered generation for SEO. Evidence note: Also deferred from the same era: make the AI research prompt respect a theme's maxMarketCapUsd; migrate AssistantPanel and /research/[symbol] onto the shared ResearchView; add-theme stores AI-roster asset_class always 'equity'.
- Per-symbol price store Phase 3 — PR #67 open, never merged STATUS: PARTIALLY DONE · DATE: 2026-05-29 · PRIORITY: P3. Sources: memory.items[56]. Agreed: 2026-05-29. Blocked on: Needs validation against a running authed dashboard (sort order, alert firing, stale-dimming). Next action: implementation packet — Check whether PR #67 is still the tip and not superseded, then do the deep migration: StockRow reads useLivePrice(symbol) + React.memo; move Dashboard's alert-engine effect, sort, TopBar and AccountSummary off the threaded livePrices object onto store snapshots. Evidence note: Phases 1 and 2 are committed on the branch. Touches the hooks-ordering gotcha. Overlaps heavily with the dnd-kit context-churn finding below — fix them together or not at all.
- perf-deepdive-stock-nav structural changes SC1–SC7 STATUS: PARTIALLY DONE · DATE: 2026-06 · PRIORITY: P3. Sources: docs.items[80]. Agreed: 2026-06. Blocked on: none. Next action: implementation packet — Parallelize the stock-page server waterfall (SC1); move readSimilar off the critical path (SC2); add Next 16 'use cache' to cacheable reads (SC3); convert /theme/[slug] from force-dynamic to ISR + Suspense streaming (SC4); reuse the StockChart instance (SC5); useSWR with keepPreviousData for client chart data (SC6); optional PPR for /stock/[symbol] (SC7). Evidence note: Quick wins QW1 (loading.tsx skeletons) verified shipped across 10 routes.
- Register second-wave UI/auth audit backlog items surfaced but never packetized STATUS: NOT STARTED · DATE: 2026-08-23 · PRIORITY: P3. Sources: docs.items[94]. Agreed: 2026-08-23. Blocked on: none. Next action: implementation packet — Split into non-overlapping packets: swallowed access/outage errors, an invented schedule, unconditional activity copy, inert Ask controls, hard-coded Five-check drill identity, owner-only raw corpus navigation, false momentum statistics, matcher/canonical split-brain, and retired cron/tracing debris. Evidence note: Some were later closed (ROUTING integrated acbce25 fixed matcher/canonical split-brain and the 410 cron tombstone; momentum statistics were removed in cba83fa+5287ffc+5f6b0bb); the rest were never packetized.
- Remaining measured perf wins on trd.fun (stocks serialization, cold fundamentals, historical-pe) STATUS: NOT STARTED · DATE: 2026-07-02 · PRIORITY: P3. Sources: memory.items[61]. Agreed: 2026-07-02. Blocked on: none. Next action: implementation packet — Work the measured list: /api/stocks serialised behind /api/watchlist for a dead
?extra=param (~450–700 ms); cold fundamentals 9.2 s → stale-while-revalidate in lib/stocks-cache.ts:57 plus a FORCE-refresh cron; /api/historical-pe 17 s cold → Supabasepe:cache; batch readResearch (4 Supabase queries → 1); run auth() concurrently with fetches on the stock page; take Yahoo out of generateMetadata; add a stocks_cache warm cron for the owner's watchlist. Evidence note: Do not add app-level batching around yahoo-finance2 v3 — it caps HTTP concurrency at 4 internally.
- Roadmap-2026-05-29 remaining engineering follow-ups (IBKR fetch lock, research-cache TOCTOU, god-component splits, per-symbol store migration) STATUS: NOT STARTED · DATE: 2026-05-29 · PRIORITY: P3. Sources: docs.items[74]. Agreed: 2026-05-29. Blocked on: none. Next action: implementation packet — Add a cross-container IBKR fetch lock; fix the research-cache TOCTOU and orphaned-inflight cleanup; split the god components; finish the per-symbol store migration so StockRow reads useLivePrice + React.memo and Dashboard stops re-rendering entirely. Evidence note: React.memo on WatchlistGroup/SortableStockRow/StockRow and the React Compiler have since landed, so the store migration is the remaining half.
- Signals bot Phases B, C and D (live route, transition state machine, backtest + portfolio awareness) STATUS: PARTIALLY DONE · DATE: 2026-05-29 · PRIORITY: P3. Sources: docs.items[75]. Agreed: 2026-05-29. Blocked on: none. Next action: implementation packet — Phase B: /api/signals/live reading
signals:latest(needs a middleware-tiers entry). Phase C: debounced transition state machine with market-hours gating and per-symbol cooldown feeding the existing alert/notification infra. Phase D: backtest the pure engine before relying on it; make it portfolio-aware via IBKR positions. Evidence note: Phase A (worker-side rolling bars + verdicts to Redis) shipped in #68.
- Smart-notifications plan (KV-backed alerts, spike detection, tiered sounds) — entirely unexecuted STATUS: NOT STARTED · DATE: 2026-04-01 · PRIORITY: P3. Sources: docs.items[83]. Agreed: 2026-04-01. Blocked on: none. Next action: implementation packet — Decide whether to execute or retire the plan: it adds @vercel/kv, server-side alert config/settings/spike/notification routes, tiered sounds, a spike detector, and belowSince/minBelowDuration tracking. Evidence note: The simpler notification-system-design.md is largely SHIPPED — StockAlertMenu.tsx and NotificationDrawer.tsx exist and canvas-confetti is installed. The KV-backed plan is a separate, unstarted layer.
- Theses as a first-class object: core / overlay / benchmark, with a thesis detail page STATUS: PARTIALLY DONE · DATE: 2026-08-22 · PRIORITY: P3. Sources: memory.items[69]. Agreed: 2026-08-22. Blocked on: none. Next action: owner — Verify what shipped beyond the three registry rows (GLP-1 category leaders, Google model catalyst, Memory upcycle) and finish the design owner approved: "Your theses" section atop /strategies plus a thesis detail page composing CORE (hold the basket) / OVERLAY (a gate-passed mechanism trading swings around it) / BENCHMARK (always scored vs buy-and-hold of the same basket after costs — if the overlay does not beat holding, the answer is "just hold"). Evidence note: A thesis is owner's macro view and is never graded by the lab. Overlays are validated on regime-matched corpus slices (NVDA'23/TSLA'20/AMD'21) before forward paper on the thesis names. Registry idea
thesis-drawdown-entryalready exists as the overlay.
- Unified cmdk overlay plan and stock-research-assistant expansion plan — status unrecorded STATUS: NOT STARTED · DATE: 2026-04-17 · PRIORITY: P3. Sources: docs.items[85]. Agreed: 2026-04-17. Blocked on: none. Next action: implementation packet — Reconcile both plans against shipped code and either mark them done or record what remains; the SignalsBoard TODO is direct evidence the cmdk global-open event was never wired.
- visual-review-2026-06 prioritized backlog (30+ items) — purple accent, WCAG contrast, mobile dashboard, data-viz palette STATUS: NOT STARTED · DATE: 2026-06 · PRIORITY: P3. Sources: docs.items[79]. Agreed: 2026-06. Blocked on: none. Next action: implementation packet — #1 repoint --og-accent from #7c5cff to brand blue (verified still #7c5cff at app/globals.css:505 and #6d4ad0 at :531); #2 fix light-theme WCAG token failures; #3 repair the mobile dashboard ticker/price columns; #4 define the undefined --purple/--pink/--teal/--cyan treemap palette; #5 raise the near-invisible dark row border; #6 de-duplicate the two adjacent 'Coach' nav items; #8 fix the colgroup hydration error. Evidence note: perf-ux-audit items #1 (React Compiler), #2 (React.memo on the row tree) and #3 (ThemeProvider blank-flash guard) are verified DONE. Items #4 onward are still open.
Docs
STATUS: 3 OPEN / 0 DONE · DATE: 29 August 2026.
- Docs counts still hand-dated rather than derived from owner-only readers STATUS: PARKED · DATE: 2026-08-26 · PRIORITY: P2. Sources: github.items[5]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Derive the lab-docs counts from the owner-only readers instead of the 'as of 26 Aug 2026' literals; the staleness test currently only warns that they are old. Explicitly listed as a follow-up in the PR. Evidence note: Docs are public/static, which is why it was deferred.
- Update stale AGENTS.md (and finish CLAUDE.md) — both still describe a single-user Finnhub app STATUS: NOT STARTED · DATE: 2026-05-29 · PRIORITY: P2. Sources: docs.items[68]. Agreed: 2026-05-29. Blocked on: none. Next action: implementation packet — Rewrite AGENTS.md for the current estate: multi-user approval tiers, the lab subdomain, the live lane, Alpaca/Sharadar data sources — and drop the Finnhub-as-price-source claim (live prices come from FMP via the Fly worker → Upstash → SSE). Evidence note: CLAUDE.md has been updated for the multi-user model but still lists Finnhub as the price source and says nothing about lib/live-lane, the lab subdomain, or the research estate. AGENTS.md has had no update at all.
- README on main still lists the superseded 08-25 sandbox snapshots as current STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P3. Sources: memory.items[73]. Agreed: 2026-08-26. Blocked on: Was riding with #315. Next action: implementation packet — Update the service README's snapshot table to the post-rotation values (producer snapbtGPjNuHH8yXvxyKOpObnvRmYovC, verifier snap2NdsYg55X6fCsM22FsARmbLci2po, reviewer snapFHYKASRoMSLLJIGuX8CLzFOXJbMm, executor 9d515915…, runtime manifest b52f886b…). Evidence note: A stale snapshot table in the release-authority runbook is exactly the kind of doc drift that caused the original SANDBOXEXECUTE outage — the pinned executor sha and the README disagreed for days.
Ops/infra/CI
STATUS: 31 OPEN / 3 DONE · DATE: 29 August 2026.
- .vercelignore deployment-root exclusion STATUS: DONE · DATE: 2026-08-29 · PRIORITY: P0. Sources: packet-status. Agreed: 2026-08-29. Blocked on: none. Next action: implementation packet — No action; retain the exclusion and its provenance. Evidence note: Completed in PR #346.
- Complete the CREDENTIAL-P0 rotation of the 62 exposed production credentials STATUS: BLOCKED · DATE: 2026-08-23 · PRIORITY: P0. Sources: docs.items[16]. Agreed: 2026-08-23. Blocked on: owner authorization; runbook gaps (all 62 names not reconciled, AUTH_SECRET placed too late, Redis/KV and Fly consumers omitted, no hard-cutover/irreversibility detail). Next action: implementation packet — Owner authorizes the named rotation wave; complete the runbook's rotation order and append the completion receipt (rotation timestamps, issuer receipts, consuming deployment, bounded readback, old-value refusal, names-only scan, zero-financial-effects confirmation). Evidence note: A world-readable mode-0644 production Vercel env dump existed for ~3 hours plus four more world-readable exports in scratch dirs. Deletion does not revoke a disclosed value. No completion receipt is appended to the runbook, so the incident is still open — with real money about to move through the same account estate.
- Live-lane e2e flake family #3: "trial ledger is locked by an invalid lock record" STATUS: DONE · DATE: 2026-08-29 · PRIORITY: P0. Sources: memory.items[19]. Agreed: 2026-08-29. Blocked on: none. Next action: implementation packet — Implement LL-4c single-read lock handling and historical reconciliation authority with deterministic no-sleep tests. Evidence note: DONE 2026-08-29 as diagnosis: flake #3 was root-caused to the lock-record TOCTOU and current-arm reconciliation invariant; implementation is LL-4c.
- Nominate and document the single host running the live-lane daemon + scheduler STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[18]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Pick the host (Mac vs a durable VM), document it in a runbook, and prove one daemon + one scheduler share one mode-0700 state directory on that host with a supervised restart policy. Evidence note: Lease and account mutation fence are host-local file authorities; running the 15-Sep session from a laptop is an availability and lease-integrity risk that no doc has yet resolved.
- Operator prerequisites for the 8-12 Sep paper rehearsal are not provisioned STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: github.items[1]. Agreed: 2026-08-27. Blocked on: Owner (credentials ritual) + owner ratification of the risk policy (see live-risk-policy item). Next action: implementation packet — Provision, in the runbook order: Alpaca paper keys in env, DUCKDB_BIN on the runner, the sealed Q11 policy file + SHA pin, and the lockbox-opening event that must land before simulate/live. Rehearsal execution window is 4/8/9/10/11 Sep (calendar-validated; 5 Sep Sat, 7 Sep Labor Day) so the window is ~6 days out. Evidence note: Credentials are a hard stop requiring owner.
- Stand up a supervised daemon runner with external alerting (no alerting exists today) STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[14]. Agreed: 2026-08-27. Blocked on: Alert channel decision (owner). Next action: implementation packet — Build/choose a supervisor for
scripts/live-lane-daemon.mjsthat pages on non-zero exit, missing process, heartbeat age > 2× interval, daemon.fresh:false, pending hard actions, policy/pin drift, calendar failure, or flatten_incomplete — and never auto-arms or auto-restarts into strategy submission. Evidence note: The runbook makes the supervisor mandatory, but the estate has no notification channel: the 2026-08-25 audit recorded a 6h51m unnoticed SIP outage and 2,213 unread degraded receipts.
- Alpaca stock WebSocket watchdog — root cause of the 9-day silent price outage, still unfixed STATUS: NOT STARTED · DATE: 2026-07-02 · PRIORITY: P1. Sources: memory.items[52]. Agreed: 2026-07-02. Blocked on: none. Next action: implementation packet — Add a lastTickAt watchdog + ws.terminate() + ping/pong +
prices:heartbeat:{stocks,crypto}keys to worker/src/providers/alpaca.ts, thencd worker && fly deploy(app tradegg-price-worker) and verify at the next 9:30 ET open. Evidence note: The Fly worker's Alpaca STOCK socket died half-open on 2026-06-23 and ran silently dead for ~9 days: crypto kept ticking so the UI stayed "Live", the SSE 5-min filter dropped frozen ticks, users saw stale Yahoo prices presented as live, and stock alerts could not fire. Today the provider still reconnects only oncloseand logserrorevents without acting.
- Bump the Vercel project Node.js version from 20.x to 24.x STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P1. Sources: memory.items[46]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Bump the Vercel project setting and the CI matrix to Node 24.x well before the hard deadline — deployments created on or after 2026-10-01 will FAIL to build on 20.x. Evidence note: Doing this after 15 Sep but before 1 Oct is fine; doing it during the rehearsal window is not. Related: yahoo-finance2 already warns on the current runtime.
- Derive the CI migration list from disk and stop skipping two migrations containing 70 DDL statements STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P1. Sources: docs.items[65]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Derive the list from disk with explicit exclusions; exercise the two skipped migrations so 70 DDL statements that live in prod stop being untested. Evidence note: The 2026-08-27 alpaca-ingest runbook still extracts the CI paper_migrations array verbatim and skips 20260823292000 and 20260824010000 by hand.
- Diagnose and repair the Vercel git-integration deploy lapse STATUS: DONE · DATE: 2026-08-28 · PRIORITY: P1. Sources: memory.items[45]. Agreed: 2026-08-28. Blocked on: none. Next action: implementation packet — Monitor the repaired path; open a new item only on recurrence. Evidence note: DONE 2026-08-29: deployment root cause identified; no PR number supplied.
- E2E Playwright flake family on main CI STATUS: PARTIALLY DONE · DATE: 2026-08-28 · PRIORITY: P1. Sources: github.items[10]. Agreed: 2026-08-28. Blocked on: none. Next action: implementation packet — Watch the next ~10 main runs. Two flake families were fixed in the last 3 days (child-CLI e2e slow-runner flake, #335, and the graduation.test.ts 5s-default-timeout family, #337) but the only outright CI failure on main in the window was the 'E2E Tests (Playwright)' job on the #328 merge, which neither fix names. If it recurs, that is a third family. Evidence note: Last 60 main runs: CI 15 success / 1 failure / 2 cancelled.
- ESLint 9 is past end-of-life — migrate to ESLint 10 STATUS: NOT STARTED · DATE: none · PRIORITY: P1. Sources: github.items[14]. Agreed: none. Blocked on: none. Next action: implementation packet — Schedule the ESLint 9->10 migration as its own bounded implementation packet; it has been deferred in three consecutive maintenance PRs and v9 EOL passed on 2026-08-06.
- Make the SIP ingestor's terminal pause exit the process so Fly's restart policy can fire STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P1. Sources: docs.items[30]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Change the pause path to exit non-zero so the always-restart policy recovers automatically. Evidence note: Root cause of the 2026-08-25 6h51m mid-market outage: the run loop returns instead of exiting, so restart can never fire and the shipped stream watchdog only covers stalls, not the terminal paused state.
- Move the SIP ingestor to lhr (or harden the durable sink) — transatlantic write path STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P1. Sources: memory.items[50]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Write the packet: the ingestor runs in iad and writes to the London (eu-west-2) DB, and 'socket durable sink error' storms at market open are the same transatlantic failure class as the Vercel→Supavisor incident. Either set fly.toml primary_region to lhr and migrate, or add retry/backoff to the durable sink. Evidence note: Explicitly recorded as 'a packet, not a hot fix'. The lab page functions were already moved to lhr1 for exactly this reason (#299), giving −33% on /lab-overview. The ingestor is the last iad writer to a London DB.
- Second CI runner before the 8–12 Sep rehearsal window STATUS: BLOCKED · DATE: 2026-08-24 · PRIORITY: P1. Sources: memory.items[48]. Agreed: 2026-08-24. Blocked on: owner asked what a second runner means and never got a plain answer. Next action: owner — Answer owner's question plainly (one self-hosted Fly runner serialises every science job, ~1h+ per PR head; a second runner halves the merge latency during the rehearsal window at ~one more shared-cpu-4x/8GB machine of cost) and get a yes/no. Evidence note: A previous attempt to
fly machine clonethe runner failed: the cloned machine 404s on POST /actions/runner-registration because the stale app-level RUNNER_TOKEN secret wins over machine env at boot. Clone 8ed9d17f309238 is STOPPED and should be destroyed or fixed by rotating the app secret while the primary is idle.
- Set a caller-side hard 60-second statement timeout for the Alpaca gap-cost RPC STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P1. Sources: docs.items[32]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — Add the adapter/connection-level statementtimeout before issuing `paper.recordalpacasourcegapv2`; the SQL-only migration can only bound per-wait locktimeout (≤25s × 2 contention points = 50s), not whole-call wall time. Evidence note: Explicitly declared out of scope for the SQL migration: 'that adapter change is outside this SQL-only migration.'
- Wire one notification channel to the dead-man's-switch receipts that already fire STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P1. Sources: docs.items[29]. Agreed: 2026-08-25. Blocked on: Alert channel + threshold decision (owner). Next action: owner — Pick a channel (owner decision) and wire the three existing dead-man's-switch receipt surfaces plus the live-lane daemon alerts to it. Evidence note: 2,213 degraded receipts against 175 healthy went unread; the next outage lasts until owner looks.
- Cap vitest by RAM (not cores), add .nvmrc/engines, and plan the Node 20→24 migration STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: docs.items[66]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Size vitest forks by available RAM; add .nvmrc and an engines field; converge the six jobs on Node 20 and three on 22 before the 37-day EOL window closes. Evidence note: 8 forks on a 24 GB box is the direct mechanism behind the recorded RAM incidents. Also open: idleintransactionsessiontimeout = 0 against 60 connections; one self-hosted CI runner is a throughput ceiling and single point of failure (main queued 35m47s behind a PR during the audit).
- Complete the forward-v3 activation residual production handoff STATUS: BLOCKED · DATE: 2026-08-19 · PRIORITY: P2. Sources: docs.items[61]. Agreed: 2026-08-19. Blocked on: Estate FROZEN by the simplification review; none of the external actions performed. Next action: implementation packet — If ever activated: approved release/image registration, production web/runtime/attestor secrets, migration + private service deployment, real Docker build and immutable Fly Machine attestation, read-only identity/readiness audit, explicit owner start. Evidence note: Local work is complete with a clean adversarial review. The plan's note that GitHub-hosted checks cannot start due to billing is stale — the 08-25 audit corrected that Actions billing works (58 runs completed that day).
- Delete the plaintext credential files left in the old session scratchpad STATUS: PARTIALLY DONE · DATE: 2026-08-24 · PRIORITY: P2. Sources: memory.items[74]. Agreed: 2026-08-24. Blocked on: none. Next action: implementation packet — Verify
new-url.txtandplg-pw.txtin session 34a5c91d's scratchpad are gone (the 2026-08-29 13:48 BST reboot wiped /private/tmp, so they probably are) and confirm no copy survives anywhere else. Evidence note: Recorded as 'delete when convenient' — they hold the rotated paperlabgateway plaintext. Related and NOT resolved by the reboot: the pooler password that leaked into a .jsonl transcript, which needs an actual rotation.
- Finish the RELEASE-WIRING packet: CI cannot execute the two first-hour operational SQL contracts STATUS: BLOCKED · DATE: 2026-08-24 · PRIORITY: P2. Sources: docs.items[64]. Agreed: 2026-08-24. Blocked on: CLOUD-CUSTODY; estate FROZEN. Next action: implementation packet — Build a self-contained custody fixture so CI can stage the five sealed custody objects; the bare service database does not contain them.
- First-hour operational images: registry tag propagation race STATUS: PARTIALLY DONE · DATE: 2026-08-28 · PRIORITY: P2. Sources: github.items[11]. Agreed: 2026-08-28. Blocked on: none. Next action: implementation packet — Confirm the bounded retry from #339 (12 x 10s around the imagetools inspect digest read) has held — no 'First-hour operational images' failure since 2026-08-27T18:41. Close the item after a week clean. Evidence note: Root cause: Fly registry tag reads are eventually consistent; the verifier won its race and the producer/scheduler 404'd.
- Latent weekday-evening CI failure hidden by a time-gated test STATUS: NOT STARTED · DATE: 2026-08-18 · PRIORITY: P2. Sources: memory.items[70]. Agreed: 2026-08-18. Blocked on: none. Next action: implementation packet — Fix or delete integration-tests/alpaca-paper-vertical/vertical.test.ts:452 — it is
it.runIf(session.isWeekday && afterSessionCorrectionGrace()), so daytime CI SKIPS it and any run after 16:06 ET on a weekday executes it and it times out at 30 s. Proven pre-existing on unmodified origin/main. Evidence note: Recorded verbatim: 'a test that skips in most runs and fails when it runs is false confidence — main has a latent failure ordinary scheduling hides.' This matters more during the 4–11 Sep rehearsals, which all run in the evening.
- preferredRegion = 'lhr1' literals are deprecated in Next 16.3 — move to vercel.json function regions STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: github.items[6]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Move the 21 lab page-segment region pins from the deprecated
preferredRegionexport to vercel.json function regions before Next drops the export; keep app/lab-region.test.ts as the guard and keep IBKR/US-bound routes unpinned. Evidence note: Named as a follow-up in the PR body. Build manifest still carries the region today, so this is not yet breaking.
- Re-colocate the ingestor with its sink and decide its region STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P2. Sources: docs.items[67]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Decide the ingestor region and re-colocate with the sink; lhr1 moved the ingest sink across the Atlantic. Evidence note: Not the cause of the 08-25 pause (which preceded lhr1 by four hours) but a forward re-pause risk. Related: all ten Fly apps share one personal org — one billing failure takes down the feed and the ability to fix it.
- Reduce gateway RPC latency (~12 s per call) — the next ingestor hardening target STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P2. Sources: memory.items[51]. Agreed: 2026-08-26. Blocked on: none. Next action: implementation packet — Profile and cut the ~12 s per gateway RPC (detect/sync via trd.fun → Supavisor). Recovery after boot took ~9 min purely because of this, and it is what made minute boundaries always get crossed in the original frontier bug. Evidence note: Recorded verbatim: 'the next hardening target is gateway latency, not the ingestor'. Likely shares a root cause with the item above.
- Two main CI runs cancelled by runner contention (#341, #342) STATUS: PARTIALLY DONE · DATE: 2026-08-28 · PRIORITY: P2. Sources: github.items[12]. Agreed: 2026-08-28. Blocked on: none. Next action: implementation packet — Verify the S1=B' path-gating in #338 actually stops docs/live-lane PRs from monopolising the single self-hosted runner — both cancellations were back-to-back docs merges. If contention recurs, the real fix is a second runner. Evidence note: #338 gates tournament science x4, first-hour images and paper SQL to their own paths; full matrix still runs on migrations and tournament sources.
- Activate the approval email: RESENDAPIKEY and a verified @trd.fun sender are unset STATUS: PARTIALLY DONE · DATE: 2026-06-05 · PRIORITY: P3. Sources: docs.items[84]. Agreed: 2026-06-05. Blocked on: owner (provider account). Next action: implementation packet — Add RESENDAPIKEY and EMAILFROM (verified @trd.fun sender) to the Vercel env; the code path is fully wired and activates on the key. Evidence note: The rest of the plan shipped: /api/me/status, /api/me/onboarded, /onboarding/welcome, canvas-confetti, migration 20260605000000addonboardedat.sql.
- Confirm the lab.trd.fun operator Google OAuth callback is registered in production STATUS: NOT STARTED · DATE: 2026-08-16 · PRIORITY: P3. Sources: docs.items[89]. Agreed: 2026-08-16. Blocked on: none. Next action: implementation packet — Verify https://lab.trd.fun/api/auth/callback/google is registered in the Google OAuth client, or confirm the doc is stale; the authoritative procedure is docs/runbooks/lab-subdomain-auth.md. Evidence note: Until registered, production redirects /operator and /api/auth/* to the apex. next.config.ts contains the full host-split rewrite logic, so the code side is done.
- Destroy or repair the stopped CI runner clone 8ed9d17f309238 STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P3. Sources: memory.items[49]. Agreed: 2026-08-26. Blocked on: A secret rotation restarts all machines, so it must be done while the primary runner is idle. Next action: implementation packet — Either
fly machine destroy 8ed9d17f309238or rotate the app-level RUNNER_TOKEN secret while the primary runner is idle and re-register the clone. Evidence note: Costs money and confuses the runner labels while it sits there stopped.
- Fix the source-progress-monitor 503 noise and the dispatcher's existing-branch insert STATUS: PARTIALLY DONE · DATE: 2026-08-25 · PRIORITY: P3. Sources: memory.items[72]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Confirm #303 (migration 20260825170000, widened closed branch) actually stopped the ~1,440 error rows/day from
source-progress-monitorrunning every minute, and take the noted follow-up on the dispatcher: skip the insert on the idempotentexistingbranch (currently ~+47k append-only dailydispatchattempts rows/yr, accepted at the time). Evidence note: The monitor was structurally blind outside RTH — the closed-calendar branch only accepted authoritymode='closedstandby', which the ingestor never emits (2,464 authority rows, 0 closedstandby ever). First closedstandby receipt landed 2026-08-26 10:28:34Z, so the fix works; the row-volume follow-up remains.
- Migrate off the deprecated Next 16.3
middlewarefile convention toproxySTATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P3. Sources: memory.items[47]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Plan the middleware→proxy migration post-live; middleware currently carries the lab-host allowlist, the auth tier gates and the registry-backed 308 docs redirect map, so it needs its own packet and review. Evidence note: Same Next 16.3 deprecation family already bit once:preferredRegionwas silently ignored and had to be replaced by "regions": ["lhr1"] in vercel.json (#299).
- Scaling architecture: native Redis pub/sub fan-out, then Polygon WS / Supabase Realtime — plus verify redistribution licensing before buying STATUS: NOT STARTED · DATE: 2026-05-29 · PRIORITY: P3. Sources: docs.items[76]. Agreed: 2026-05-29. Blocked on: owner (spend); licensing quote. Next action: implementation packet — Replace the Redis-HGETALL poll fan-out with native pub/sub (staleness ~3–6s → ~1–1.5s), validate a long-lived SUBSCRIBE survives Vercel recycling on a preview, and get a written quote for exchange/SIP redistribution licensing for a public multi-user feed (~$2,000/mo risk) before any spend. Evidence note: Also unresolved: which key is live in Fly (FMP REST vs Finnhub WS), FMP WebSocket tier, Upstash connection caps, Supabase Realtime message allotment, Vercel Pro egress for SSE.
- Vercel cron disable is PROJECT-WIDE — the runbook step is wrong STATUS: NOT STARTED · DATE: 2026-08-25 · PRIORITY: P3. Sources: memory.items[71]. Agreed: 2026-08-25. Blocked on: none. Next action: implementation packet — Rewrite the runbook step "disable the two crons" as either a project-wide toggle (
crons.disabledAton the project object) or a vercel.json deploy — there is no per-cron flag and/v1/projects/{id}/cronsis 404. Evidence note: During a past migration ritual the two tradegg crons were never actually disabled because of this. A wrong quiescence step in a runbook that gates prod DB surgery is a real hazard.
Cleanup post-live
STATUS: 11 OPEN / 1 DONE · DATE: 29 August 2026.
- codex/paper-trading-lab-spec — 89 unmerged commits, abandoned since 2026-07-27 STATUS: PARKED · DATE: none · PRIORITY: P2. Sources: github.items[15]. Agreed: none. Blocked on: none. Next action: implementation packet — Decide explicitly: the paper-lab work here (lab API identifier grammar, durable pause, paper-only scans, /lab redesign, paper-worker boundary fixture, package-lock resync) has been overtaken by the LL-1/LL-2/LL-3 live lane. Confirm nothing in it is still wanted, then delete the branch. 89 commits is the largest unmerged surface in the repo and it is a standing merge hazard. Evidence note: Last commit 2026-07-27.
- Delete gate — physical deletion of the frozen estate waits on five preconditions STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P2. Sources: docs.items[70]. Agreed: 2026-08-27. Blocked on: Live cutover. Next action: implementation packet — Before deleting anything: reach live/cutover, produce a production catalog, produce a row-count census/export, and pass import, route, deployment and artifact/build-consumer audits. Evidence note: 'The safest simplification is dependency subtraction now and physical deletion later.' Nothing frozen (tournament, first-hour, Touch-and-Turn, search factory, Supabase research plane, paper mirror) is declared dead or physically deleted.
- Post-live consolidation: merge duplicated statistics, registries, signal mechanics and cost primitives under golden-vector parity STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P2. Sources: docs.items[69]. Agreed: 2026-08-27. Blocked on: Live cutover. Next action: implementation packet — AFTER live: converge family metadata, execution descriptors, statistical kernels, cost primitives and durable trial authority — only with golden-vector parity and legacy verifiers retained. Evidence note: Measured surface: 6 apparent statistics surfaces (~355–370 LOC reducible), 48 receipt/registry tables in 8 concepts, 8 executable strategy schemas with overlapping v3/v4/forward-lite contracts adding 4.9k LOC, one cost profile in 11 production files, >15k LOC of forward/control-plane consolidation surface. Explicit ordering: 'Finish the thin lane before cleaning the museum.'
- Three stale weekly-maintenance PRs are all CONFLICTING — close or re-cut STATUS: BLOCKED · DATE: none · PRIORITY: P2. Sources: github.items[13]. Agreed: none. Blocked on: none. Next action: implementation packet — Re-cut only evidenced work against current main. For #261, rebase-as-packet and carry only the targeted Vitest ≥4.1.11 fix after fresh audit; never splice its stale lockfile. Close #176. From #175, cherry-pick or recreate only the 373-line dead
lib/ibkr.tsdeletion; reject the stale passive-effect ref-write and use a freshness-preserving React 19 design with race tests if that problem is still real. Evidence note:ws8.21.0 already contains the cited fix, and fast-xml-parser 5.7.2 is outside the cited vulnerable range.salvage.mdleaves ws/XML hardening and broad dependency upgrades post-live.
- <primary checkout> primary checkout is still dirty on the dead feat/intraday-contracts branch STATUS: BLOCKED · DATE: 2026-08-21 · PRIORITY: P3. Sources: memory.items[77]. Agreed: 2026-08-21. Blocked on: owner's decision — PR #186 was CLOSED unmerged and ~1,155 lines of round-7 hardening sit uncommitted. Next action: owner — Ask owner whether to salvage or discard the uncommitted round-7 intraday-contracts hardening in <primary checkout> (mtime 2026-07-29), then clean the checkout. All lab work runs from <lab checkout>. Evidence note: PR #186 was closed after six adversarial review rounds, each finding defects introduced by the previous round's fix; the remaining need was a human read of the STATISTICAL contract semantics, where a defect is invisible to any type system. Worst defect found: validateCandidateScore validated a score with mean −10%/day, a lower bound above that mean, p=0 and Sharpe +5.0.
- Delete the dead lib/ibkr.ts duplicate STATUS: DONE · DATE: 2026-08-29 · PRIORITY: P3. Sources: docs.items[73]. Agreed: 2026-05-29. Blocked on: none. Next action: implementation packet — No action; retain merge provenance. Evidence note: DONE in PR #347; the obsolete duplicate was deleted from main.
- Dormant pre-lab branches (Jun) safe to delete STATUS: PARKED · DATE: none · PRIORITY: P3. Sources: github.items[18]. Agreed: none. Blocked on: none. Next action: implementation packet — Bulk-delete after a one-line check each; all are 1-4 commits from 2026-06, pre-date the lab/research estate entirely, and several are explicitly not-for-merge (mockup/theme-header). Note chore/rls-lockdown says 'applied to prod' — confirm the migration is recorded in the migration history on main before deleting that one.
- Old PR disposition: #261 rebase-as-packet; close #176; salvage only #175's dead-file deletion STATUS: NOT STARTED · DATE: 2026-08-28 · PRIORITY: P3. Sources: memory.items[76]. Agreed: 2026-08-28. Blocked on: none. Next action: implementation packet — Rebase #261 as a fresh bounded Vitest packet; close #176 because its useful deletion duplicates #175; from #175 take only the 373-line
lib/ibkr.tsdeletion. Do not take the passive-effect ref-write. Evidence note: Any remaining React freshness issue requires a React-19-safe implementation and explicit race tests, not salvage of stale code.
- Older stranded feature branches with real unmerged work (Jul-Aug) STATUS: PARKED · DATE: none · PRIORITY: P3. Sources: github.items[17]. Agreed: none. Blocked on: none. Next action: orchestrator — One read-only sweep to classify each as superseded-by-main or carrying-unique-fix, then delete the superseded ones. Highest-value to check first: feat/strategy-orchestrator ('fix(paper): repair three P0 lookahead/leakage defects found by adversarial review') and fix/orchestrator-audit-followups — if those P0 leakage fixes were never ported into the current lane code that is a correctness hole, not cleanup. Also fix/migration-portability ('make the role migrations portable to managed Postgres') and agent/playwright-ci-container ('Pin Playwright image digest', which would harden the flaky E2E job). Evidence note: ~45 origin branches carry unmerged commits; 216 remote refs total. fix/lab-tournament-routing tip is explicitly a 'wip(tournament)' commit.
- Post-live delete candidates: dead leases/heartbeats, draft first-hour cost objects, abandoned runtime state, unreachable mockups/specimens, superseded versions STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P3. Sources: docs.items[71]. Agreed: 2026-08-27. Blocked on: Delete gate. Next action: implementation packet — Only after the delete gate passes, assess each class for removal. Do not delete first-hour objects by version suffix — later recovery/status functions still join earlier evidence. Evidence note: Estate: 92 migrations, 259 persistent table declarations, 618 function declarations collapsing to 506 distinct names, 574 SECURITY DEFINER mentions, ~598–613 copied LOC and ~3.8k source-level dormant/orphaned LOC. Touch-and-Turn is frozen with 0 database objects, so freezing it saves attention rather than schema.
- Post-live deletion packets: T&T, exact-40, orchestrator, first-hour, /mockup STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P3. Sources: memory.items[75]. Agreed: 2026-08-27. Blocked on: The estate is FROZEN until after the 15-Sep live date; physical deletes only after live + an import/route audit. Next action: orchestrator — After 15 Sep, run the deletion packets in census order: Touch-and-Turn −10.5k LOC, exact-40 −3.7k, orchestrator −0.5k+, first-hour −61k gross; /mockup (2.6k) is the only near-term one. DB relations are never dropped before cutover. Evidence note: The census found DELETE-NOW = 0 LOC — everything is reachable from a prod/CI/Fly/Vercel entry point. Streamlining before 15 Sep is honestly just freeze + hygiene + CI trimming.
- Remove the ~2,300 lines of merge-era mockup pages shipping publicly (/mockup, /mockup/research-page, /mockup/research-panel) STATUS: NOT STARTED · DATE: 2026-06-10 · PRIORITY: P3. Sources: docs.items[72]. Agreed: 2026-06-10. Blocked on: none. Next action: implementation packet — Delete or gate the /mockup route tree. Evidence note: Still shipping 2.5 months after the review.
Owner decisions
STATUS: 23 OPEN / 3 DONE · DATE: 29 August 2026.
- Create the dedicated empty paper account and sealed local state STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: memory.items[3], docs.items[5]. Agreed: 2026-08-27. Blocked on: owner (account creation is a credential/ownership action); policy file/SHA provisioning. Q11=A is already sealed. Next action: owner — Ask owner to create a dedicated empty paper account and drop its key/secret into <operator config dir>/ following the existing alpacapapertradingkey\|secret convention; then point live-lane-env.sh at it. By 3 Sep: create the shared absolute mode-0700 LIVELANESTATEDIR, verify the dedicated paper account is empty, export LIVELANERISKPOLICYPATH + independently derived LIVELANERISKPOLICYSHA256 for the owner-ratified event JSON, and set the paper origin. Evidence note: Required so rehearsal reconciliation is not contaminated by the existing mirror account's positions.
- Install and pin the external DuckDB CLI for live-lane refresh STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: memory.items[2], docs.items[0]. Agreed: 2026-08-27. Blocked on: owner — verified NOT installed as of 2026-08-29 14:50 BST. Next action: owner — Ask owner to run
brew install duckdb, then confirm DUCKDBBIN resolves for the live-lane Sharadar EOD refresh operator prereqs. Install a pinned DuckDB CLI, record its digest, export DUCKDBBIN, and provelive-lane refreshdrains SEP/ACTIONS/TICKERS manifests. Evidence note: Listed as an LL-3 operator prerequisite alongside paper keys, the risk-policy file + SHA pin, and the lockbox_opened event.
- Open the lockbox once and seal the owner event STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P0. Sources: memory.items[1], docs.items[1]. Agreed: 2026-08-26. Blocked on: owner's explicit lockbox-opening approval and deadline ≤3 Sep. Q12=A is already sealed. Next action: owner — Put the sealed-opening decision to owner as a multiple-choice question with the falsifier restated (DSR vs trial ledger, walk-forward η, plateau, 2× costs; recency-weighted ≥50% / t≥2 / 3-of-5 years), then seal on his go. Owner seals
lockbox_openedin the live-lane ledger by 3 Sep so the 4 Sep plan can be sealed after the 3 Sep close. Evidence note: Opens the 2022+ rows ONCE and tests exactly two pre-registered candidates: momentum 12-1 vol-scaled and GP/A. Until sealed, every statistic on rows dated ≥2022-01-01 is forbidden.
- Provision and verify live Alpaca credentials close to arm STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: memory.items[8], docs.items[13]. Agreed: 2026-08-27. Blocked on: owner — live keys have never been provided (only paper + data/SIP keys exist); owner. Next action: owner — Ask owner once, close to the arming date, to generate LIVE Alpaca trading keys and drop them as 0600 files in <operator config dir>/; never re-ask for paper keys (they are already on disk). Owner supplies ALPACAKEYID/ALPACASECRET for the live trading account, sets ALPACABASEURL=https://api.alpaca.markets, LIVELANEOWNERID and LIVELANESIZINGAPPROVALEVENTID — never printed, never in the repo or ledger payloads. Evidence note: live-lane-env.sh deliberately never sets LIVELANE_ARMED. Also outstanding: an AK-prefix LIVE Alpaca key was pasted in plaintext in chat historically and should be rotated.
- Publish off-machine custody URLs and prove restore STATUS: BLOCKED · DATE: 2026-08-26 · PRIORITY: P0. Sources: memory.items[9], docs.items[55]. Agreed: 2026-08-26. Blocked on: owner — Q10 was answered "you drop the URL" but the file has never appeared; owner. Next action: owner — Ask owner to write <operator config dir>/custody.env with FIRSTHOURCORPUSCUSTODIANDATABASEURL (0600), then run custody-upload-run.sh --dry-run followed by the real run; the research-custody Storage bucket is created by scripts/custody-upload.mjs on first run. Privately provide the custodian gateway URL/credential, or authorize rotation — never in chat or the repo. Evidence note: Schema side is done: #317 merged and migration 20260826190000 applied 2026-08-26 20:23Z (research.custodyobjects_v1, RLS forced, custodian-only recorder). Off-machine custody of wave-1 artifacts is still filesystem-only.
- Resolve the Q12 amendment ratification conflict (overlay incubation via simulate-window) STATUS: DONE · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[4]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — No owner re-decision. Treat Q12=A / amendment v1.1 via PR #334 as sealed; correct any stale runbook wording only. Evidence note: Q12=A is closed. The prereg ledger event carries amendment v1.1 and the rotated document hash.
- Seal the Q11 live-risk-policy choice STATUS: DONE · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[3], github.items[2]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — No owner re-decision. Q11=A and policy v1 are sealed via PR #326; preserve the 252-session expiry and bounded reconciliation semantics. Keep the new policy-v2 implementability choice separate. Evidence note: Q11=A is closed; policy-v2 is prospective authority and does not reopen it.
- Alpha budget / D3 minute-bar acquisition decision ($99/mo Alpaca Algo Trader Plus) STATUS: NOT STARTED · DATE: 2026-08-26 · PRIORITY: P1. Sources: memory.items[12]. Agreed: 2026-08-26. Blocked on: owner's spend decision. Next action: owner — Put the $99/mo Alpaca Algo Trader Plus minute-bar spend to owner as a multiple-choice question, noting that both the grid study and the intraday battery point at it and that D3 (Discovery-E at 100 symbols, 500 follow-on) cannot start without it. Evidence note: Sharadar full bundle is already owned at $0 (W1 resolved), so this is the only outstanding data spend. Alpaca Algo Trader Plus is already active on owner's account for the SIP price worker — confirm whether that subscription already covers the historical minute-bar pulls before charging again.
- Executor rotation go-ahead (OIDC minting is a credential ritual) STATUS: BLOCKED · DATE: 2026-08-26 · PRIORITY: P1. Sources: memory.items[11]. Agreed: 2026-08-26. Blocked on: owner's go (minting per-lane VERCELOIDCTOKENs is a credential action). Next action: owner — Ask owner for the go, then run the ~2h40m three-lane ritual: rebuild snapshots from merged main, re-run the executor-drift test on the merge commit, mint per-lane OIDC, register + activate releases under a global lease drain, patch the three hard-coded digests CI cannot see, redeploy all three lanes. Evidence note: A rotation 6d4f4795→9d515915 WAS executed 2026-08-26 16:35Z, but the handoff still carries 'executor rotation go' as an open decision — the pending one is the next rotation triggered by any byte change to executor-bundled historical-corpus.ts. HAZARD: never run
lane-deploy.sh <lane> enablebetween a pin merge and the rotation.
- Rotate the Supabase pooler password (credential exposed in a session transcript) STATUS: PARKED · DATE: 2026-08-25 · PRIORITY: P1. Sources: memory.items[10]. Agreed: 2026-08-25. Blocked on: owner explicitly parked it ("not now"); it remains exposed. Next action: owner — Re-raise before the sleeve is scaled past the £10k cap: rotate the pooler password and update <operator config dir>/prod-db.env plus the Fly and Vercel copies. Evidence note: The plaintext landed in <session archive> via a zsh variable-as-command idiom. Lesson already adopted: use a
q(){ psql -X -tA "$PRODUCTION_DATABASE_URL" -c "$1"; }function, never a URL in a word-split variable.
- Behaviour-partition decision: raw (16 singletons) vs executable (12 classes) before wave 2 STATUS: BLOCKED · DATE: 2026-08-26 · PRIORITY: P2. Sources: memory.items[15]. Agreed: 2026-08-26. Blocked on: owner — chosen partition binds selection. Next action: owner — Re-confirm the 2026-08-26 answer (EXECUTABLE partition binds selection) is still owner's decision and close the item, or re-ask before any first-hour wave 2 is planned. Evidence note: Recorded as decided on 2026-08-26 ('EXECUTABLE partition binds selection') but still carried as open in the 2026-08-29 handoff — needs reconciling, not re-deciding from scratch.
- COP (cash operating profitability): shelve vs pre-register — owner has never been asked STATUS: NOT STARTED · DATE: 2026-08-28 · PRIORITY: P2. Sources: memory.items[17]. Agreed: 2026-08-28. Blocked on: owner has not been asked. Next action: owner — Put the choice to owner with orchestrator's recommendation: SHELVE cash-operating-profitability as the first post-live incubation candidate (it lost head-to-head to GP/A and correlates 0.36 with it), vs pre-registering it as a third candidate now. Evidence note: COP was the only Wave 5 survivor: +2.06%/yr net t 1.74 full period, +5.00%/yr t 3.11 in 2017–21 (screening window ends 2021-12-31). GP/A beat it at 2.77% t 2.92.
- Five data-vendor entitlement questions answered in writing before storing minute data STATUS: NOT STARTED · DATE: 2026-07-29 · PRIORITY: P2. Sources: memory.items[13]. Agreed: 2026-07-29. Blocked on: owner — needs written vendor answers. Next action: owner — Get written answers on: non-display entitlement, retention after subscription lapse, SIP vs single-venue, the correction window, and whether rendering bars in /lab counts as display use — before any new minute-bar store is created. Evidence note: Pairs with the D3 minute-bar decision; the redistribution wall (~$2k/mo) applies only to a multi-user public feed, not individual use.
- Owner decision: whether to buy data for G-DATA-2 and G-DATA-3 STATUS: BLOCKED · DATE: 2026-08-25 · PRIORITY: P2. Sources: docs.items[92]. Agreed: 2026-08-25. Blocked on: owner. Next action: owner — Do not buy yet (audit recommendation). Confirm the Sharadar tier first — SF1 may already be licensed — then decide on a PIT earnings timestamps/estimates feed. Evidence note: Unlocks four registry ranks (value+momentum composite, quality/profitability, PEAD, earnings momentum). PEAD was already screened as WEAK_POSITIVE on a filing-date proxy (trial 39) that 'could look ahead to after-close filings'.
- Q11 / Q12 / S1 / W1 — resolved, but three follow-ups are still owed STATUS: DONE (DECISIONS) / RESIDUE TRACKED ELSEWHERE · DATE: 2026-08-27 · PRIORITY: P2. Sources: memory.items[18]. Agreed: 2026-08-27. Blocked on: none. Next action: implementation packet — No owner action. Q11=A, Q12=A, S1=B′, and W1=$0 are closed. Residue lives only in the cleanup rows: re-cut #261 as a targeted Vitest packet, close #176, and take only #175's dead
lib/ibkr.tsdeletion; reject the passive-effect ref-write. Evidence note: These four decisions are retained only as DONE provenance and no longer inflate owner's open list.
- Rule whether backfilled sessions count as forward evidence, and decide the fate of session 2026-08-21 STATUS: BLOCKED · DATE: none · PRIORITY: P2. Sources: docs.items[51]. Agreed: none. Blocked on: owner; estate FROZEN. Next action: owner — Record an explicit ruling in the lane contract; accept the permanent one-session hole for 2026-08-21 rather than forking program lineage. Evidence note: The runbook forbids backdating while the daily lane's catch-up design is explicitly a backfill.
- Series-v2 pin decision (firsthourgraduationcandidatesv1 CHECK pins series v1) STATUS: BLOCKED · DATE: 2026-08-26 · PRIORITY: P2. Sources: memory.items[14]. Agreed: 2026-08-26. Blocked on: owner — a migration admitting v2 is required; never loosen the CHECK silently. Next action: owner — Confirm with owner whether the admitted-series table (#318, applied) plus contract v3 (#320, hash 888ae3aa admitted on prod) fully supersedes this, and either close the decision or ship the admitting migration for P5b. Evidence note: Schema CHECK at 20260823180000:180-183 pins series_hash v1 fe939b6b… while wave 1 ran under v2 cf16f78f…. The admitted-series TABLE replacing the v1 CHECK was owner's chosen option on 2026-08-26; prod now carries three admitted rows (v1/v2/v3).
- Paper-lab worker is human-gated by design: external ed25519 attestor decision + 11-step unblock STATUS: BLOCKED · DATE: 2026-08-15 · PRIORITY: P3. Sources: memory.items[81]. Agreed: 2026-08-15. Blocked on: An external ed25519 attestor decision — self-signing collapses the trust boundary and was refused. Next action: owner — Decide whether the paper-lab worker is still wanted at all given the thin live lane superseded it; if yes, owner must choose an external attestor, and the shadow-only entrypoint plus hash-bound network:false egress become new reviewed code. Evidence note: Schema-only /lab is useful without it, and the orchestrator panel reads public.orchestrator_rounds independently — so this has never actually blocked anything.
- Pooler password (Q8) remains parked and must stay on the open list STATUS: PARKED · DATE: 2026-08-26 · PRIORITY: P3. Sources: docs.items[56]. Agreed: 2026-08-26. Blocked on: owner. Next action: owner — Keep on the open decision list until owner chooses; no engineering action. Evidence note: Recorded as 'Not now'.
- Q9 is an unrecorded decision slot — evidence gap in the owner register STATUS: BLOCKED · DATE: none · PRIORITY: P3. Sources: docs.items[57]. Agreed: none. Blocked on: owner. Next action: owner — Either record what Q9 was or formally retire the identifier so the register has no silent hole. Evidence note: Explicitly left as an open evidence gap with no invented choice.
- RDDT decision — pre-register tier D and run STATUS: PARTIALLY DONE · DATE: 2026-08-26 · PRIORITY: P3. Sources: memory.items[16]. Agreed: 2026-08-26. Blocked on: Nothing technical — the decision appears already discharged. Next action: owner — Close this decision explicitly: RDDT tier D was pre-registered and run, and REFUTED on 2026-08-26 (PR #319, 299 trades, 31.10% win, net −13.78 bps); the Touch-and-Turn family is closed on every tier A–D. Evidence note: Still listed as an open owner decision in the handoff — a stale carry-over. Remove it from the standing list to stop consuming owner's attention.
- Three product calls held for owner: public theme pages, optimistic price-seed, dep-bot PR cleanup STATUS: BLOCKED · DATE: 2026-06-02 · PRIORITY: P3. Sources: memory.items[64]. Agreed: 2026-06-02. Blocked on: owner — deliberately not auto-done. Next action: owner — When trd.fun main-site work resumes, put all three to owner at once: (1) make /theme and /themes public/shareable (tier change + unauth price snapshot) — a product/security call; (2) optimistic price-seed on add (skipped as not-low-risk); (3) dep-bot PR cleanup — #71/#62/#58/#49/#48 weekly deps+CVEs, #55 (now implemented, can close), #52/#51 stale Cursor PRs. Evidence note: Explicitly flagged 'do NOT auto-do'. The dep-PR backlog partially overlaps the #261 dep-sweep keep from the S1-B′ hygiene pass.
- xAI/Grok credits exhausted — 403 on every X call since 2026-06-22 STATUS: BLOCKED · DATE: 2026-07-02 · PRIORITY: P3. Sources: memory.items[60]. Agreed: 2026-07-02. Blocked on: owner — billing top-up at console.x.ai, plus a cost decision. Next action: owner — Ask owner whether to top up the xAI team billing account or drop the X/Grok source; the cost decision must land BEFORE session-aware TTL multiplies X calls. Evidence note: The local .env.local key is a different, also-dead key. Reddit content is actually sourced by Gemini's reddit.com grounding, not official Reddit creds — so X is the only genuinely dead source.
- Choose the 15-September first-order construction: A/B/C/D STATUS: OWNER DECISION · DEADLINE: 3 September 2026 · PRIORITY: P0. Sources: ladder-check.md, ll4b-r4-final.md. Agreed: 2026-08-29. Blocked on: owner; prospective preregistration and policy authority for B/C. Next action: owner — Choose A: larger genuine NAV (≥£2.631m merely clears 143 names at the $10 floor; a cap increase amends preregistration and policy); B: exact prefix-N construction (may return zero; £10k permits no positive N and £25k permits only N=1 in the stated price interval); C: the bounded one-share canary lifecycle; or D: delay. Recommendation: prospective C canary plus only a viable, sealed B; if construction returns zero, D. Evidence note: 143 names × stage-1 10 bp ×0.428 at GBPUSD 1.27 gives, at £100k NAV, £100 → £42.80 → $54.356 total / $0.3801 per name. £5k gives $0.0190/name; £10k $0.0380; £25k $0.0950. Assuming 14-Sep closes stay ≥$10, all stated bases give 0/143 shares; stages 1/2/3 at £100k give $0.380/$0.950/$1.901 per name. Exact 15-Sep counts wait for the 14-Sep close. This is conditionally blocked if v2 is adopted, not a claim that current unenforced policy already blocks it.
- Authorize or reject live-risk-policy/v2 implementability semantics STATUS: OWNER DECISION · DEADLINE: 3 September 2026 · PRIORITY: P0. Sources: policy-v2.md, ll4b-r4-final.md. Agreed: 2026-08-29. Blocked on: owner; sibling v2 document/event and preregistration amendment. Next action: owner — Choose A: 0.90/0.90; B: 0.80/0.80 or 0.95/0.95; or C: reject the gate. Separately choose all-name versus fractional/per-name headroom, prefix/canary authority, outlier treatment, and ratification. Recommendation: policy-read thresholds; do not create a second
codeConstantsSha256authority. Evidence note: This is new prospective authority, never retrospective ratification. Per-name/no-headroom-as-zero is defensible against the $2.5e15 outlier pathology but not yet authorized. Preregistration owns construction; policy v2 owns submission thresholds and the construction hash. Flat plans are exempt; N=0 prefix construction is not.
- Policy-v2 event integrity: fix thresholds hash and seal placeholders STATUS: MUST-FIX BEFORE OWNER RATIFICATION · DATE: 2026-08-29 · PRIORITY: P0. Sources: review-policy.md, policy-v2.md. Agreed: 2026-08-29. Blocked on: owner identity/UTC; final document hashes; canonical-v2 parser and replay evidence. Next action: owner — Do not ratify the current draft. Seal owner/date/document hashes only after engineering fixes the declared thresholds hash, encodes inherited arm age/HWM, and proves one canonical parser plus policy-bound recomputation. Then decide Q13–Q16 with the final policy/executor hashes. Evidence note: The declared
4ae7357c…65dcafdoes not match actualcbbe1cca…c2ad5a; the loader correctly refuses the missingthresholds.variantsshape. Policy-read thresholds pass and remain the sole runtime authority. LL-4b replay must recompute metrics, not trust stored values.
Duplicates merged
STATUS: COMPLETE · DATE: 29 August 2026. These fourteen merges are the auditable bridge from 198 raw rows to 184 source-derived canonical rows.
- Install and pin the external DuckDB CLI for live-lane refresh — memory.items[2] + docs.items[0].
- Create the dedicated empty paper account and sealed local state — memory.items[3] + docs.items[5].
- Run the five paper rehearsal sessions — memory.items[5] + docs.items[8].
- Run and seal the hard-kill drill — memory.items[6] + docs.items[9].
- Seal live graduation, post-graduation arm, and first $10 order — memory.items[7] + docs.items[12].
- Publish off-machine custody URLs and prove restore — memory.items[9] + docs.items[55].
- Enforce live-lane broker guardrails — memory.items[20] + docs.items[49].
- Complete first-hour phases P4–P6 — memory.items[33] + docs.items[52].
- Custody the trial ledger and durable research artefacts — memory.items[37] + docs.items[17].
- Finish the Lab UI honesty and plain-English tail — memory.items[66] + github.items[7].
- Seal the Q11 live-risk-policy choice — docs.items[3] + github.items[2].
- Open the lockbox once and seal the owner event — memory.items[1] + docs.items[1].
- Run the lockbox verdicts for registered candidates — docs.items[2] + github.items[3].
- Provision and verify live Alpaca credentials close to arm — memory.items[8] + docs.items[13].
Excluded because already shipped
- STATUS: DONE · DATE: 29 August 2026. LL-4a corporate-action reconciliation — PR #345; retained above only as today’s provenance.
- STATUS: DONE · DATE: 29 August 2026. The vercelignore deployment-root exclusion — PR #346; retained above only as today’s provenance.
- STATUS: SHIPPED · DATE: 27–29 August 2026. Q11/Q12/S1/W1 resolutions, RDDT tier D, the #222 corpus benchmark portion, preregistration amendment PR #334, tag retry PR #339, and CI path-gating PR #338. Only explicit residue remains in the backlog.
- STATUS: SHIPPED WITH RESIDUE · DATE: 27 August 2026. LL-2 graduation/daemon/monitoring components are excluded; NYSE early-close semantics and remaining calendar helpers stay open.
- STATUS: #348 MERGED PENDING MAIN CI WITH OWNER RESIDUE · DATE: 29 August 2026. LL-4b implementation is merged pending main CI; policy-v2/preregistration authority and the ladder construction remain open as separate P0 decisions.
- STATUS: DONE · DATE: 29 August 2026. Dead
lib/ibkr.tsduplicate deletion — PR #347; retained above only as merge provenance.
Counting note
- STATUS: VERIFIED · DATE: 29 August 2026. The 212 total comprises 184 source-derived canonical rows, 2 original packet-status rows, 21 critic-restored rank/DIAG rows, 2 critic-round owner decisions, and 3 Round-3 P0 packets.
- STATUS: VERIFIED · DATE: 29 August 2026. Every raw reference is represented: memory.items[0–82], docs.items[0–95], and github.items[0–18]. Merged references appear once in their canonical item and again in the audit bridge above.
- STATUS: FALSIFIER · DATE: 29 August 2026. A later source may supersede an entry only with a dated receipt, PR, owner decision, or deterministic check; silence is not completion.
Critic round 1 — applied
- STATUS: APPLIED · DATE: 29 August 2026. Restored all three Tier-B candidates and all eighteen DIAG rows; corrected the canonical counts and added item-level ownership.
- STATUS: APPLIED · DATE: 29 August 2026. Reconciled the ledger to 61 rows, replaced stale #261/#176/#175 salvage guidance, and updated LL-4b to Round-4 receipt/kernel/headroom facts.
- STATUS: APPLIED · DATE: 29 August 2026. Added the conditional first-order ladder block, A/B/C/D construction choice, policy-v2 A/B/C authority, and 3-September owner deadline.
Round 3 — applied
- STATUS: APPLIED · DATE: 29 August 2026. Recorded #347 DONE, #348 merged pending main CI, LL-4c’s two production-race fixes, and LL-4d’s fix-first rank-proof/canary/prefix-N packet before Q13–Q16.
- STATUS: APPLIED · DATE: 29 August 2026. Added the policy-v2 threshold-hash/placeholders blocker, made headroom an explicit owner choice, and closed the confirm-card worst-10 template item with the reproduced diagnostic table.