◆ CHANGELOG · SHIP LOG ◆
Every change to the model, the scanners, and the live execution stack — published as it lands. No marketing edits. The dev log is the changelog.
owner sweep + /owner/finances simplification
- 10-11 (Mac): Holdings Deep Dive —
OwnerHoldingsDeepDive model (pushed), src/lib/owner/holdings-deepdive.ts, cron owner-holdings-deepdive (Sun 06:00 PT), DeepDiveCard in the Holdings section; Tradier getDailyHistory export; /portfolio-outlook drops the scanner read. Weekend Lab #8 Mac addendum; T2c/T5/T6 pre-registered, T2c/T6 parked (owner declined ORATS); paper bar ≥2wk/≥10 trades; sampler extended to 25 single names for T4/T5.
- 10-09 (Mac, 02:30–03:30 PT): Thu sweep addendum (343cfb57) → #1954 (PC context.md lines never reach main), #1955 (nfl-settle Tue-only → stale-pick false alarms); Massive 10-08 ran on wake not 18:00 (#1947 comment). Tier A applied on the Mac: #1905 (
executionExitMethod column + engine deploy, #1909) and #1918 (gexNeg_shadow, #1922). apply-task.sh --yes flag for non-tty shells. Finances: year-tracker TAXES cell no longer wraps (−$16,574 nowrap, text-sm on phone).
Sweep (data/sweeps/2026-10-07.md, Mac addendum under the PC nightly): Alpaca $1,987.71 flat/paused confirmed from the live API; VPS env matches CLAUDE.md; 8 scans / 17 picks / 0 tradeable; headline paper settles 7W/3L +$967.5. Massive snapshot had holes 10-05/10-06 (runs only inside Mac sweeps) → #1947 pc-task; weekly bankroll-review bot posting while paused → #1948 pc-task; 10-07 DB backup hung silently (launchd killed mid-dump), re-run OK. Third T2b spread-sampler session (698 quotes) committed → #1944 unblocked.
/owner/finances follow-up (10-08 midday): summary block gross→taxes→net→fixed→invest→variable→left, nowrap numbers, see-all toggle, hours→expected-gross hint.
/owner/finances (owner-directed): planner pins are checkable (Pin.done, unfinished never fold); Cash Flow + Where It Goes merged into one card with the budget/bills/DCA editors as drawers (CashFlowCard, TaxCornerCard, nextQuarterlyDue deleted — 2448 → 2196 lines); Income gets a yearly tracker (logged checks + hardcoded Brainstorm 2026 W2) and a hardcoded salary block ($47/$70.50, 45h/50h annualized); "Set-aside" → "Taxes"; Tax Corner retired to a planner pin; Daily Pulse → Weekly (cron-job.org 8236032 wdays=[1], page freshness 8d); Watch Items collapsed. First TCW W2 pay logged (10/8, $2,497.50 / $696.35 / $1,801.15, 52h incl. 5h onboarding). Docs: docs/owner/CHANGELOG.md.
task #1936: T2b index put spreads at measured costs — NO VERDICT (provisional)
scripts/research/put-spread-backtest.ts --t2b implements the T2b pre-registration. Costs: mid ∓ max($0.01, 1%) per leg per side for SPY and max($0.02, 2%) for QQQ, plus $0.05 per contract per side. Exit rules are judged on mid marks, costs apply to fills only. It also reports a stress row, the April 2025 window, and 2×/3× costs. Before running, it checks spread-samples.jsonl with the pre-registered replacement rule (intraday 09:30–16:00 ET rows only). The spread-selection and metrics code was factored out and is shared with T2. A T2 re-run reproduced all 410 overlapping trades exactly; the committed T2 output is untouched (Massive's rolling window now starts 2024-10-07).- Result (1×): SPY-45-20d +$327 pooled (build +$480 / held-out −$153), max DD 68% of base, Sharpe 0.25 vs SPY 1.06. QQQ-45-20d −$1,582. Both are negative at 2× costs. NO VERDICT, provisional: 0 of the ≥ 3 intraday sample sessions existed at run time (the Mac sampler started today). PASS is already out of reach, because the replacement rule can only raise costs. The final verdict comes from the re-run once 3 sessions are in. Output:
data/research/results/T2b-index-put-spreads.{md,json}.
task #1929: PC reports → main, weekend doctor false alarm, lab scope under the Strategy Reset
- Reports never reached main: main last merged
pc/autonomy-artifacts on 2026-07-06, so 41 report files (data/sweeps 07-07 → 10-03, INDEX, bars.json) were missing from the Mac. New scripts/autonomy/publish-reports.sh runs at the end of each git-sync tick (non-blocking, never changes git-sync's exit code). It opens one pc/reports-* PR with allowlisted report paths only (data/sweeps/*.md, bars.json, data/research/results/*), and only for files main hasn't changed since the merge-base. It squash-merges on a later tick once every check is green and alerts #autonomy-ops (24 h dedupe) on a red check, a stray path, or 6 h without green. The first run backfills everything, including 2026-10-01.md and weekend-lab-2026-10-03.md. - Doctor "no daily sweep 25h/26h" on 10-04: a false alarm by design, not a failure.
nightly-loop sits in the weekday evening slot group, and on weekends the loop runs only the weekend group. Friday's 21:53 PT sweep is therefore the newest until Monday night. autonomy-doctor.sh now adds a Sat +24 h / Sun and Mon +48 h allowance. - Lab scope: and now say the lab reads pre-registered verdicts in first. Long-option lane bars stay measured, with no Tier A asks and no gate proposals ("frozen — measured, no ask"). The runner prompt (Tier A, not touched) still asks for per-row proposals, and the skill text overrides it for that lane.
task #1917: Kalshi NFL one-rung-per-team replay + game-counted promotion bar
- New
scripts/analysis/nfl-one-rung-replay.mjs → data/analysis/nfl-one-rung-replay-2026-10-03.md. Reproduces Lab #6 (49 spreads / 34 games, cal +16.3, real +$7.73). Best-gap rung per team per game: n=40, cal +14.6, game-clustered cal−1SE +7.7, flat ROI after fee +34.3%, real P&L +$5.05 (65% retained) → scanner-change bar (cal ≥ +10 AND ≥ 80% P&L) NOT MET; multi-rung scanner stays. - NFL promotion bar now counts games (SPORTS_SCANNER §5b, CLAUDE.md, bars.json
kalshi-nfl-promotion): games ≥ 100, cal ≥ +4, cal−1SE > 0, flat ROI after fee > 0. Spreads at 34/100.
task #1915: exit-ladder replay made tradeable-aware
scripts/analysis/exit-ladder-replay.ts: --tradeable (OI≥1000, no LOTTO, scan hour 9-14 ET, mid≤$10 — every row), RUNAWAY_LOCK modelled for every policy (same-ET-day mid≥T3, suppressed in the open buffer; --no-runaway reproduces old output), a one-call Massive quote probe (HTTP 403 on Starter → bars stay last-print, caveat in header), drop-top-3/bottom-3 net+P on every pairwise row, and a re-arm-bar verdict (n≥40, P≥0.80, drop-top-3 net>0).- Reruns:
data/analysis/exit-ladder-replay-2026-10-03-tradeable-since{0714,0920}.md. Since 07-14 tradeable n=38 (bar UNREACHED); every policy's edge over LADDER flips negative after dropping the top-3 trades (PEAK35 +$7,188 → −$838). Since 09-20 n=5. LADDER stays.
Tuesday sweep (PC nightly verified) + /owner/finances "Where It Goes"
- Sweep: PC nightly
data/sweeps/2026-10-06.md verified from the Mac (Alpaca $1,987.71 flat/paused, VPS active 0 errors, 8 scans, Kalshi wk5 19 settled 5W −$1.67, 12 wk6 open). Kalshi scale-in on HOLD by its own losing-week rule (#1939, re-read 10-13). DAY_TRADE paper bar met at a loss → frozen (#1717 closed). Spread sampler: 6 intraday sessions committed → #1944 T2b final run (pc-task). - Owner finances: "Where It Goes" card (weekly/monthly, % of net by group and line;
buildBreakdown) + paycheck entry records real withholding when gross and net are both given. docs/owner/CHANGELOG.md. tsc + build green; numbers cross-checked against data/owner/finances.md (fixed $1,975 = 28.4% of net, DCA $1,213 = 17.4%, variable 31.1%, unallocated 23.1%).
T1b KILL, T3 PASS, T2b pre-registered with measured costs
- T1b (#1923) KILL:
scripts/research/uoa-history-study.ts (PC-written; run on the Mac with Tradier closes + a 403-skip for the rolling data window + fetch timeouts). 1.17M burst contracts → 146,239 events on 478 market days: mean excess −0.05%, hit 48.3%, t = −0.65; calls-only, puts-only, DTE ≤ 14, top-decile bursts all fail. Public option-volume flow is retired as a directional signal. - T3 (#1925) PASS: 10-month-average ETF rule, held-out 2017-07 → 2026-10: Sharpe 0.79 vs 0.72 (EW buy-and-hold), max DD 9.8% vs 23.8%, CAGR 9.0% vs 11.4% (SPY 15.0%). Owner proposal
docs/owner/2026-10-05-etf-trend-proposal.md — portfolio lane, not the trading lane. - T2b (#1936):
scripts/research/spread-sampler.ts measured SPY/QQQ put half-spreads at 0.4–1.9% of mid (T2 assumed 5%); new pre-registration with 2× measured costs, mid-mark exits, stress row. Mac LaunchAgent com.elevan-vzn.spread-sampler samples 07:30 / 10:30 / 12:45 PT weekdays this week (remove after T2b runs). - State for the week: Alpaca entries paused (VPS healthy, auto-trade DISABLED); Kalshi NFL live; PC loop alive (infra-deepdive Sun, reports → main fixed in #1934).
LIVE ALPACA ENTRIES PAUSED (owner) + T2 read + T1b run on the Mac
- Pause (Tier A, owner: "if it's pause it's pausing"): VPS
ALPACA_AUTO_TRADE=false (backup .env.bak-2026-10-04), restart → journal Alpaca auto-trade: DISABLED. Account verified flat first (equity $1,987.71, 0 positions, 0 open orders). Scans, paper picks and Kalshi are unaffected. Re-arm bar written into GOAL.md + CLAUDE.md. - T2 (PC, #1924) = KILL at the pre-registered cost model — but the cost model (5% per leg per side) was my design error: it puts the haircutted mark above the 2×-credit stop on day one. Zero-cost rows are positive in both halves. Formal verdict stands; a retest needs a NEW pre-registration with costs measured from real SPY/QQQ quotes (T2b).
- T1b (#1923): PC wrote the script but has no flat-file keys; run started on the Mac.
- PC findings: nightly/lab reports sit on
pc/autonomy-artifacts and never reach main (2026-10-01.md, weekend-lab-2026-10-03.md); doctor's "no daily sweep in 26h" alert fires on weekends; PC Lab #7 still proposes long-option gate tuning (pre-reset).
Want the full historical log? It lives in DEVLOG.md on the repo. Older entries roll off this page after the most recent 8.