trd.fun / lab
North star & decisions

Feature backlog — agreed but not done

Updated 2026-08-29
Living register: The deduplicated backlog binds priority, provenance, blockers, owners, and next actions without hiding today’s completed work.
LIVING
docs/research/feature-backlog-2026-08-29.md

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

  1. .vercelignore deployment-root exclusion — STATUS: DONE · DATE: 2026-08-29 · next: implementation packet.
  2. Append the account-specific owner approval + paper arm, run refresh, verify manifests and calendar attestation — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  3. Complete the CREDENTIAL-P0 rotation of the 62 exposed production credentials — STATUS: BLOCKED · DATE: 2026-08-23 · next: implementation packet.
  4. Copy the LL-4a review artefacts to .handoff-durable before any further restart — STATUS: NOT STARTED · DATE: 2026-08-29 · next: implementation packet.
  5. Create the dedicated empty paper account and sealed local state — STATUS: NOT STARTED · DATE: 2026-08-27 · next: owner.
  6. Custody the trial ledger and durable research artefacts — STATUS: NOT STARTED · DATE: 2026-08-28 · next: implementation packet.
  7. Daemon supervision plan for the kill-switch daemon — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  8. 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.
  9. Enforce live-lane broker guardrails — STATUS: NOT STARTED · DATE: 2026-08-25 · next: implementation packet.
  10. Exercise and resolve the seven required rehearsal failure-evidence scenarios — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  11. Install and pin the external DuckDB CLI for live-lane refresh — STATUS: NOT STARTED · DATE: 2026-08-27 · next: owner.
  12. Live-lane e2e flake family #3: "trial ledger is locked by an invalid lock record" — STATUS: DONE · DATE: 2026-08-29 · next: implementation packet.
  13. 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.
  14. LL-4a corporate-action-aware live-lane reconciliation (round 2) — finish, re-review, merge — STATUS: DONE · DATE: 2026-08-29 · next: implementation packet.
  15. LL-4b whole-share implementability gate — STATUS: #348 MERGED PENDING MAIN CI / OWNER AUTHORITY PENDING · DATE: 2026-08-29 · next: owner.
  16. Nominate and document the single host running the live-lane daemon + scheduler — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  17. Open the lockbox once and seal the owner event — STATUS: NOT STARTED · DATE: 2026-08-26 · next: owner.
  18. Operator prerequisites for the 8-12 Sep paper rehearsal are not provisioned — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  19. Provision and verify live Alpaca credentials close to arm — STATUS: NOT STARTED · DATE: 2026-08-27 · next: owner.
  20. Publish off-machine custody URLs and prove restore — STATUS: BLOCKED · DATE: 2026-08-26 · next: owner.
  21. Resolve the Q12 amendment ratification conflict (overlay incubation via simulate-window) — STATUS: DONE · DATE: 2026-08-27 · next: none.
  22. Run simulate-window --asof <arm-date> and verify exactly 60 finite hash-bound simulated_daily_return receipts — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  23. Run and seal the hard-kill drill — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  24. Run the five paper rehearsal sessions — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  25. Run the lockbox verdicts for registered candidates — STATUS: NOT STARTED · DATE: 2026-08-28 · next: implementation packet.
  26. Seal live graduation, post-graduation arm, and first $10 order — STATUS: NOT STARTED · DATE: 2026-08-26 · next: implementation packet.
  27. Seal the rehearsal_receipt after the 11 Sep reconciliation (≥95% heartbeat coverage, zero unresolved incidents) — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  28. Seal the Q11 live-risk-policy choice — STATUS: DONE · DATE: 2026-08-27 · next: none.
  29. Stand up a supervised daemon runner with external alerting (no alerting exists today) — STATUS: NOT STARTED · DATE: 2026-08-27 · next: implementation packet.
  30. Choose the 15-September first-order construction: A/B/C/D — STATUS: OWNER DECISION · DEADLINE: 2026-09-03 · next: owner.
  31. Authorize or reject live-risk-policy/v2 implementability semantics — STATUS: OWNER DECISION · DEADLINE: 2026-09-03 · next: owner.
  32. LL-4c: close the registry-lock and post-disarm reconciliation races — STATUS: MUST-FIX · DATE: 2026-08-29 · next: implementation packet.
  33. LL-4d: rank-proof receipt, canary lifecycle, and prefix-N construction — STATUS: FIX-FIRST BEFORE OWNER RATIFICATION · DATE: 2026-08-29 · next: implementation packet.
  34. Policy-v2 event integrity: fix thresholds hash and seal placeholders — STATUS: MUST-FIX · DATE: 2026-08-29 · next: owner.

What owner owes, with dates

  1. 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.
  2. 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.
  3. 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.
  4. STATUS: DUE · DATE: 15 September 2026. Seal the live account/origin/size authority, arm only after graduation, and alone authorize the first $10 order.
  5. 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.
  6. 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.

  1. Append the account-specific owner approval + paper arm, run refresh, 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 paper arm; run live-lane refresh; check all three Sharadar manifest hashes (SEP/ACTIONS/TICKERS) plus Alpaca↔SEP exchange-calendar attestation; start the daemon before any paper submit.
  1. 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.
  1. 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.
  1. 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.
  1. 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, .prev quarantine, ambiguous POST outcomes, calendar disagreement, stale heartbeat refusal, and account/origin mismatch — and resolve every incident. Evidence note: A hard_action_pending without its matching flatten_complete makes the rehearsal receipt impossible.
  1. 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.
  1. 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.
  1. 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/v3 receipts, 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.
  1. 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.
  1. 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 keeping strategy/** and daemon frozen. Then the owner may decide Q13–Q16 against final hashes. Evidence note: N=0 must seal constructionRefused:"prefix_n_zero" and submitEligible: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.
  1. Run simulate-window --asof <arm-date> and verify exactly 60 finite hash-bound simulated_daily_return receipts STATUS: NOT STARTED · DATE: 2026-08-27 · PRIORITY: P0. Sources: docs.items[7]. Agreed: 2026-08-27. Blocked on: lockbox_opened event; DuckDB. Next action: implementation packet — After lockbox_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.
  1. 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 drill against the paper account; accept only when the sealed flatten_complete proves 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.
  1. 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).
  1. 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.
  1. Seal the rehearsal_receipt after 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 — Run rehearsal-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.
  1. 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.
  1. 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.
  1. 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.
  1. Build the sealed stage_review receipt 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-approved stage_review event 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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%.
  1. 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.

  1. 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_opened event; 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…
  1. 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).
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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).
  1. 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.
  1. 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.'
  1. 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.
  1. 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.
  1. 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.
  1. 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 acquisitionof rows 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: validationPanelsReady is 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).
  1. 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 to parked. 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.
  1. 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'.
  1. 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.
  1. 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.'
  1. 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.
  1. 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 unproven reason. Evidence note: The string is asserted in three places including a validity check, so any fix must move all three together.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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, promotable is arithmetically impossible (ceiling 1/(tuneIterations+1) < 0.025 at ≥40 iterations) — cap tuneIterations at 38 meanwhile.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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-equities as 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.
  1. 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.
  1. 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.
  1. 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).
  1. 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>=50 regime 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.

  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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).
  1. 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.
  1. 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) + df precheck 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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).
  1. 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.

  1. 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.
  1. 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).
  1. 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.
  1. 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.applyTick with 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. Supabase Realtime v2 follow-ups: lock the prices channel + 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 PUBLIC prices broadcast 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 Redis signals:latest every 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.
  1. 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.
  1. UI must print the sealed-benchmark basis label; graded.eligible at 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), surface graded.eligible at 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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).
  1. 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.
  1. 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.
  1. 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.
  1. 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'.
  1. 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.
  1. 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.
  1. 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.
  1. 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 → Supabase pe: 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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-entry already exists as the overlay.
  1. 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.
  1. 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.

  1. 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.
  1. 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.
  1. 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.

  1. .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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.mjs that 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.
  1. 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, then cd 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 on close and logs error events without acting.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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 clone the 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.
  1. 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.'
  1. 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.
  1. 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).
  1. 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).
  1. 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.txt and plg-pw.txt in 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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 preferredRegion export 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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 8ed9d17f309238 or 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.
  1. 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-monitor running every minute, and take the noted follow-up on the dispatcher: skip the insert on the idempotent existing branch (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.
  1. Migrate off the deprecated Next 16.3 middleware file convention to proxy STATUS: 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: preferredRegion was silently ignored and had to be replaced by "regions": ["lhr1"] in vercel.json (#299).
  1. 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.
  1. 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.disabledAt on the project object) or a vercel.json deploy — there is no per-cron flag and /v1/projects/{id}/crons is 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.

  1. 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.
  1. 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.
  1. 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.'
  1. 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.ts deletion; 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: ws 8.21.0 already contains the cited fix, and fast-xml-parser 5.7.2 is outside the cited vulnerable range. salvage.md leaves ws/XML hardening and broad dependency upgrades post-live.
  1. <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.
  1. 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.
  1. 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.
  1. 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.ts deletion. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.

  1. 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.
  1. 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 prove live-lane refresh drains 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.
  1. 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_opened in 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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> enable between a pin merge and the rotation.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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'.
  1. 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.ts deletion; 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.
  1. 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.
  1. 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).
  1. 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.
  1. 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'.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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 codeConstantsSha256 authority. 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.
  1. 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…65dcaf does not match actual cbbe1cca…c2ad5a; the loader correctly refuses the missing thresholds.variants shape. 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.

  1. Install and pin the external DuckDB CLI for live-lane refresh — memory.items[2] + docs.items[0].
  2. Create the dedicated empty paper account and sealed local state — memory.items[3] + docs.items[5].
  3. Run the five paper rehearsal sessions — memory.items[5] + docs.items[8].
  4. Run and seal the hard-kill drill — memory.items[6] + docs.items[9].
  5. Seal live graduation, post-graduation arm, and first $10 order — memory.items[7] + docs.items[12].
  6. Publish off-machine custody URLs and prove restore — memory.items[9] + docs.items[55].
  7. Enforce live-lane broker guardrails — memory.items[20] + docs.items[49].
  8. Complete first-hour phases P4–P6 — memory.items[33] + docs.items[52].
  9. Custody the trial ledger and durable research artefacts — memory.items[37] + docs.items[17].
  10. Finish the Lab UI honesty and plain-English tail — memory.items[66] + github.items[7].
  11. Seal the Q11 live-risk-policy choice — docs.items[3] + github.items[2].
  12. Open the lockbox once and seal the owner event — memory.items[1] + docs.items[1].
  13. Run the lockbox verdicts for registered candidates — docs.items[2] + github.items[3].
  14. Provision and verify live Alpaca credentials close to arm — memory.items[8] + docs.items[13].

Excluded because already shipped

  1. STATUS: DONE · DATE: 29 August 2026. LL-4a corporate-action reconciliation — PR #345; retained above only as today’s provenance.
  2. STATUS: DONE · DATE: 29 August 2026. The vercelignore deployment-root exclusion — PR #346; retained above only as today’s provenance.
  3. 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.
  4. 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.
  5. 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.
  6. STATUS: DONE · DATE: 29 August 2026. Dead lib/ibkr.ts duplicate 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.
On this page 16 sections
LAB documentation describes design intent and research safeguards. It does not provide trading instructions or operational access.