#1704 FIXED before it could bite: PC's security-audit review caught that my V2 adapter passed
average_fill_price through in YES-book terms — NO-side fills would book at the complement
(54.5¢ instead of 45.5¢ paid), corrupting stake/filledPrice → the ROI/CLV sizing gate. Converted
to ordered-side terms (KXRAINNYC DB precedent). 0 live V2 orders had run = 0 corrupted rows.
#1701 fixed:.env*.bak* gitignore patterns — rotation backups can't be auto-committed into
permanent history.
Docs deep-dive (healthiest yet): fixed CLAUDE.md:29 auto-trade "PAUSED" contradiction,
OPTIONS_SCANNER 25%-cap + 320-divisor strays, WEATHER_SCANNER dead V1 order path. Remaining:
Tier-2 affordable-universe screen re-run at the $450 cap (next session).
PC wedge-spam: identical git-sync WEDGE alert ~every 17 min all day (~22 posts) on the daily
sweep-file collision — evidence + dedup ask on #1678. PC hands also needed: #1691 (CRON_SECRET,
breakeven-tracker blind day 4), #1693/#1703 (dup processors).
PC filed 8 issues overnight (#1696-#1703) incl. #1696 (component lift sign-flips in 6 days —
#1281 gate would thrash as specced) and #1700 (kalshiGap signal inverted). #1514 LEAP_SCORE
reversal: +$8k→−$16.9k in 4 days; weekend design queue.
◆ 2026-08-27SHIPPED
Fantasy draft helper offshoot, Phase A shipped (Mac/Fable)
Personal-first lane. Owner is in 3 fantasy leagues (2 Sleeper + 1 ESPN), drafts this week —
built the anti-hallucination draft-guide pipeline and shipped both Sleeper league guides as
private Artifacts. Spine: Sleeper players DB (12,225 entries, disk-cached 24h) is the sole
truth for player existence/team/injury; LLM + Reddit output only annotates resolved player_ids
(unresolved = dropped + logged). Verified: 266/266 ADP names resolved, 10/10 spot-check vs raw
DB, 0 LLM names dropped.
New: src/lib/sports/sleeper.ts (public API client: user/leagues/draft/picks/trending/players-db),
src/lib/sports/nfl-injuries.ts (copied from FIXED NBA injuries.ts, not bugged MLB #1651),
src/lib/sports/ffc-adp.ts (FantasyFootballCalculator JSON ADP — real-draft, format+size
specific; replaced planned FantasyPros scrape, more robust), scripts/fantasy/generate-draft-guide.ts
(snake math, ADP-gap tiers, round-by-round targets, sleepers via trending+LLM, avoid list from
injury truth, Perplexity sonar-pro annotations constrained to the provided player list),
data/fantasy/leagues.json (+ README row; players cache + guides gitignored).
fetchSubreddit exported from reddit.ts for r/fantasyfootball buzz (403s from Mac IP — degrades
gracefully; works from Vercel if Phase B wants it server-side).
Leagues verified live: "1600" 12t PPR slot 10 drafts Sun 8/30 1:15pm PT; "Viet Cong" 14t PPR
slot 2 (1RB/2FLEX/3BN — structurally different) drafts Sat 9/5 5pm PT. ESPN league config
pending owner input (espn.configured=false).
Post-close sweep data/sweeps/2026-08-26.md. NFLX $82 PUT exited T05_TRAIL at open +$18
(limit-at-mid beat the bid). Equity $1,384.60 (+$29). Cohort 13/20, 7W/6L, 54% WR, +$200 —
both bars passing. #1680 fix verified live day-one: zero 18:00Z FATALs after 3 straight false-alarm days.
#1501 Kalshi V2 order migration SHIPPED (pending live verification). Kalshi 410'd a real
staked order (edge 55.2, 3 contracts — deprecated_v1_order_endpoint); auto-trade was dead.
placeOrder → new placeOrderV2(): POST /portfolio/events/orders, YES-book bid/ask side map,
fixed-point dollar strings, GTC/IOC TIF, flat-response adapter preserving KalshiOrderResponse —
zero caller churn, safety rails untouched. Read-side (cancel/getOrders/fills/positions/balance)
still legacy, tracked in re-scoped #1501. Live proof = next MLB auto-trade window.
#1694 shipped + VPS deployed:ALPACA_MIN_EDGE_SCORE code default 50 → 28 (silent-block
trap on env loss). Full bar: tsc 0, 284/284 tests, deploy verified ALL CHECKS PASSED, env intact.
Backend deep-dive (cursor → docs): cron auth/after hygiene + schema CLEAN across all 60
routes. Filed #1695 (env-kill hardcode + vanna flag + CSP host cleanup). Kalshi client blast-radius
map posted to #1501.
Cross-instance: #1691 (PC stale CRON_SECRET — unblock path posted, no secret in comms), #1692
(PC deploy-drift reads bogus SHA; prod verified current via /api/health ).
Evening sweep data/sweeps/2026-08-25.md. 2 live fills: PLTR $175 PUT cut same-day by
DEAD_THESIS (−$74, 19.9% round-trip spread tax per #1068 telemetry); NFLX $82 PUT ($105) held into
8/28. Equity $1,355.68 (−$85). Cohort → 12/20, 6W/6L, 50% WR, +$182 — both bars passing.
#1687 (filed + closed): funnel widening ratified. Drift radar caught prod running
TRADEABLE_MAX_COST=450 / TRADEABLE_DTE_MIN=3 / VPS ALPACA_PER_CONTRACT_PCT=0.36 (~since
08-18) vs documented $325 / DTE 4 / 25%. Owner decision: keep the wider funnel. Aligned
CLAUDE.md, OPTIONS_SCANNER.md, route.ts/scanner.ts comments, memory. Cohort caveat recorded:
fills from 08-20 on came through the wider gate.
#1680 (closed): 18:00Z FATAL was a FALSE ALARM, not a Vercel kill. The #996 stale-run
cleanup reaped ANY RUNNING row for the day — including the concurrently-executing sibling
afternoon scan at the double-registered 18:00Z slot (proof: the "killed" run ended COMPLETED
with picks=1). Fix: cleanup now only reaps rows older than maxDuration+30s.
#1689 (filed + closed): help-page accuracy from frontend deep-dive — markets/help weather
pick-gen contradiction fixed, options/help edge-tier FAQ now carves out the [42,46) dead zone +
date-stamps the pre-#1398 n=285 stats.
#1477 (closed): CRON_SECRET rotated — new 64-hex in Vercel, old value scrubbed from
DEVLOG-2026-Q1.md + dev-ops mirror at HEAD, all cron-job.org URLs updated post-deploy.
(not an account credential —
nothing to rotate); moved to env + literal deleted from 4 files.
◆ 2026-08-24SHIPPED
Quiet session sweep + #1677 regression test caught a 2nd bug (Mac/Fable)
Evening sweep data/sweeps/2026-08-24-evening.md. No fills (11 picks / 0 tradeable), equity flat
$1,440.84, VIX 15.7–16.0 — the Mag-5/5 macro open was a non-event. Cohort holds 11/20, 6W/5L, +$256.
#1677 shipped (43c35974): extracted pulseDedupWindow()/todayUtcMidnight() into
portfolio-helpers.ts + 5-assertion regression test. Writing the test exposed a second
defect: the wall-clock gte: now-4d bound dropped the 4-days-ago midnight-keyed row on every
run ("prior 4 days" really covered 3). Both bounds now midnight-anchored. Suite 1377/1377.
#1680 filed: 18:00Z options-scan FATAL (prior run left RUNNING) repeated on 08-21 AND 08-24.
Issue hygiene: closed #1674/#1675/#1676 (dups → #1678/#1618/#1577), #1679 (VPS neon dep verified
present from Mac). #1618 updated: PC drift 51 commits + new dirty-tree failure mode.
Pre-Monday-open sweep after an unswept Friday/weekend (data/sweeps/2026-08-24.md).
Friday = 2 live fills, 2 wins (Alpaca-verified): GDX 08/28 $100C +$132.00 (2.78→4.10, the
Thursday carry) and PLTR 08/28 $177.5C +$54.00 (2.68→3.22, 32-min same-day round trip). Equity
$1,440.84, all cash into Monday. Cohort 11/20, 6W/5L, 55% WR, cum +$256 — both validation
bars passing.
Merged PR #1655 (adc90642) — scripts/archive out of tsconfig; tsc gate clean; closed #1648.
Merged PR #1611 (74a366ab) — owner-pulse category-gated filter + push cap 3 + health-brief
week label. Applied the #1667 fix on-branch pre-merge (4f2aa035): dedup lookback bounded
lt: todayUtcMidnight() so a same-day retry can't classify everything RECYCLED and wipe the row.
Merged PR #1660 — Lee-Ready aggressor proxy, verified observe-only (researchJson + telemetry
only, zero scoring weight); cohort accrues before any scoring change is argued (#1659).
#1669 CLOSED (b0e896aa) — VRTX magnitude root-caused: bucket=null rows are 181-DTE
WATCHLIST/LEAP candidates ($6k notional, T1=+50% → +$3k model P&L), not a multiplier bug.
wrapup-data.mjs now headlines for today-paper and emits an
field (|pnl|≥$500 AND >25% of quoted net) on both windows — verified firing on AMD −$6,448 (52%).
Source path stays open as #1642/#1652.
◆ 2026-08-15SHIPPED
TRACK A: the exit leak, fixed end-to-end + deployed (Mac/Opus)
Friday's forensics found that 7 of 48 live plays lost money after peaking ≥+20% above entry —
−$747 of the −$1,239 lifetime live P&L. Six commits, each independently verified and CI-green,
now live on the VPS.
A0 `3ea568e3` — price-stream tests were NEVER run by CI (root vitest collects only
src/**). execution.test.ts + the #1284 orphan lock were unenforced. Wiring them up also
revealed CI had been red 13 days (last green 08-01): #1325's peak-trail made two root-suite
fixtures into genuine peak-trail scenarios. Fixed fixtures, not assertions.
A1 `45748db9` — the 30-min opening buffer was dead Nov–Mar: (utcHour - 13) hardcoded
EDT, so under EST it read 60 at the open and the buffer was false all session. Four copies → one
Intl helper + generalized drift guard. My own 08-10 FORCED_CLOSE gate inherited the bug.
A4 `3c039101` — executionExitReason persisted (COALESCE, first reason wins); settle resolves
engine-first with paper byte-identical; Discord no longer mislabels every force-close "EOD_SWEEP".
A2 `79f11b9c` — entryFilledAt from Alpaca's order.filled_at; accepts old timestamps
(post-restart reconcile), rejects future ones. Required on PendingPlay to force-surface all
construction sites.
Thu sweep (data/sweeps/2026-08-13.md): 5th zero-fill day but paper +$1,138 (bullish flip — Cicero's
read won the divergence watch); AAPL PUT e38 blocked on OI alone (best #1528 shadow evidence);
cross-agent deep-dive verdict "conversation layer excellent, action layer converts nothing" →
#1305/#1286 reopened, #1606 filed. Correction to 08-12 sweep: Cicero HAD answered the vanna
debate 08-10 with receipts (Arena slot's state-blind 9× repost masked it).
Owner decisions shipped same night:
- VANNA ZEROED (scanner.ts): contribution forced 0 (OPTIONS_VANNA_OFF, default OFF = zeroed);
computed value preserved as vanna_shadow in signalContributions so lift telemetry keeps
measuring. Re-entry is mechanical via #1286 gate (shadow lift > +3, n≥30, 7d). Evidence: 9
consecutive inverted Arena audits + traced +20 raw pts in the 08-08 live SPY $772C loss.
- Scorecard pilot RETIRED (joint UNMEASURABLE verdict; owner: save usage) — relay to Cicero
queued via #1606 (PC owns Discord voice).
- Docs-truth batch (Wed docs deep-dive): divisor 320→308 refs (OPTIONS_SCANNER.md ×2,
SCANNER_ARCHITECTURE.md floors line), CLAUDE.md Key Rules bankroll $500→$2,500/$1,337 + edge-gate
conflation fixed (TRADEABLE_EDGE_MIN vs ALPACA_MIN_EDGE_SCORE are separate floors), malcom.md
dead doc paths + malcom/mescudi report dirs → data/agents/{name}/, docs/README + data/README
owner/ rows added, TRADEABLE_MAX_COST fallback 300→325 (matches documented window; env governs).
MEMORY.md pause-line hazard was fixed in-sweep Wed.
- Verification: tsc + full build clean. Wed+Thu sweep artifacts committed with this entry.
Want the full historical log? It lives in DEVLOG.md on the repo. Older entries roll off this page after the most recent 8.
Phase B (if runway): /owner/draft page w/ live Sleeper pick-polling — plan in place.
dbdd7b4
Honest leak of the week: both live round trips paid ~19-20% spread tax (vs ~5% sim) — #1068
telemetry now has two fresh live points; weekend design item.
#1643: Pinnacle "key" is pinnacle.com's public guest-API key
PINNACLE_API_KEY
Also filed: #1688 (agent-comms DTE=-1 on same-day expiries, converted from PC's unfiled flag).
Frontend deep-dive otherwise clean (no render breaks, no sports-UI leaks); hygiene items → #1663.
MEMORY.md index consolidated 206 → ~120 lines (was over the 200-line read limit).
Earlier same session: owner finance advisory — rent $1k starts Oct, DCA holds at ~$1,072/mo
until Jan 2027 or W2 terms land; logged in data/owner/finances.md.
paperAggExecutable
outliers
Issue-hygiene deep-dive: 7 autonomy-doctor dup WARNs closed (#1613/#1614/#1623/#1626/#1647/
#1668/#1670), canonicals #1671/#1672/#1673/#1577. Severity comment on #1673: main's
macro-events-latest.json is May 3 — scanner macro-blind into a Mag-5/5 Monday (Canada tariffs
+ Iran sanctions); root cause chain #1408/#1387/#1618. #1587 drift now 24% ($1,090 env vs $1,441).
Verified: tsc clean + full npm run build pass on final main; CI green on all three merges.
A3 `20886b57` — THE FIX: open-buffer gate + same-day keyed to the FILL + 30-min min-hold on
the cut (lock keeps buffer only). Fail-closed on null anchor + ops alert. 9 tests written
first; 5 failed on old code, including a replay of the SPY 778P incident.
A5 `ca5c0701` — PEAK_TRAIL to live, shipped dark. Found that PEAK_TRAIL was terminal in
db.ts but missing from index.ts's auto-exit list — removing the paper guard alone would have
recreated #1284. Fixed structurally via one exit-states.ts vocabulary + an invariant test.
Stale-midHigh handled by arm-on-observation.
Deployed 08:48 UTC, boot log verified: minHold=30min · deadThesisCut=20% · sameDayExits=on ·
peakTrailLive=false · carryGuardLive=true. Schema pushed to Neon BEFORE the VPS deploy
(loadPendingPlays uses an explicit column list). .env preserved.
Side effect: #1583 looks resolved — trading state now loads cleanly (streak=3, v=4) where it
previously threw "relation TradingState does not exist". The VPS had been running a dist/
predating the model.
Owner call outstanding: flip PEAK_TRAIL_LIVE=true to enable give-back protection on live money.