| Fix | What changed | Engine |
|---|---|---|
| Dashboard CSS | HtmlService was rejecting the <style> block ("Malformed HTML content") since Stage 12 deploy @26. Visual layer was broken; backend healthy. Rewrote @media query with standard spacing + removed !important + comma-selectors that the sandbox parser disliked. | FMT HOT |
| Wash-sale 30 → 31 days | IRS rule is "within 30 days after the sale" — sell day doesn't count. Original code lifted the gate on day 30 (off-by-one). Now blocks day 1 through day 30; first safe re-buy = day 31. Real tax dollars. | PROD HOT |
| Substantially-identical map | Sell SPY at a loss → my gate now also blocks IVV, VOO, SPLG for the same 31-day window (IRS treats them as substantially identical). Covers 13 cluster families: S&P 500 ETFs, QQQ/QQQM, IWM/VTWO, GOOG/GOOGL share classes, sector-ETF aliases, semis (SOXX/SMH), Berkshire share classes. | PROD |
| Stage | What ships | Why now | Engines |
|---|---|---|---|
| 13 Cash-first |
Plaid sandbox-fallback wired to MIS · CASH_RUNWAY tab · Obligations join from BOS v1 canonical · capital allocation engine ("$X cash after May obligations; engine recommends $Y deployed, $Z reserve") · BookConfig pattern adopted (every function takes a book param) · PsychLayer scaffold (added-to-loser detector, override-quality logger) | The single biggest jump. MIS stops being a trade gate and becomes the "one place" — the morning execution spine you keep describing. BookConfig pattern from day one means stage 17/19 don't need a refactor. | PROD PSY FMT |
| 14 Self-learn |
Forward-return job (+1d/+5d/+20d/+60d per FSE row) · per-Setup × per-Sector hit-rate scorecard · weight-drift mechanism · override-quality scorecard ("when you vetoed the engine, did you beat it?") · weekly "what I learned this week" briefing · Brain_Feed-style memory tab | Closes the diagnosis "where is the self-learning loop?" Builds the loop. Outputs strengthen as FSE history accumulates 30+ runs. | PROD PSY |
| 15 Multi-book Sam+Chanie |
Second BookConfig live (Chanie's book) · household roll-up (combined VaR, sector concentration, wash-sale spouse-coupling per MFJ tax rule) · book-switcher in dashboard · privacy guardrails (Mildred can't see either; cross-account but inside the household) | First proof the BookConfig pattern actually works on a second book before pitching it to anyone external. Spouse-coupling closes the wash-sale gap I called out earlier today. | PROD FMT |
| 16 Schwab live + options scaffold |
Schwab live quotes ON (lifts the ADD-downgrade rule) · 7-day refresh-token discipline runbook · option-chain ingest scaffold (data ingested, gates default off) · interactive options-teaching module (the Rosetta Stone you asked for — IV/HV ratio, premium calc, P&L visualization, the "click why this CC sold at $X is +$Y over Z days" walkthrough) | You said options never clicked because you never saw the spreadsheet math. So we build the spreadsheet math FIRST — teaching artifact, not a gate. Gate-on happens at stage 17+ when you've trained on it. | PROD PSY FMT |
| 17 Macro overlay + regime |
10Y / DXY / HYG-LQD spread / WTI / VIX daily snapshot · 4-quadrant regime classifier (growth × inflation z-scores) · regime tag on FSE history · correlation heatmap · effective-N (replaces raw HHI) · conviction-weighted shortlist · position-trim queue (Druckenmiller "take it off") · regime-conditional backtest | The Dalio + Druckenmiller polish I'd originally called "stage 13." Per Option C aggressive, this comes later — after cash + self-learning + multi-book are live. By now the regime data has accumulated enough that the conditional backtest is meaningful. | PROD |
| 18 First external pilot |
1-hour install runbook · parameterized install script (creates the Sheet, wires the bot, scoped Telegram chat, broker-email pattern hint, ANTHROPIC_API_KEY per tenant) · first external install on a friendly target (brother-in-law / Eli Steinhardt / Mendy / Ari per the underwriting deal-snapshot loop) | Validates the BookConfig pattern survives someone who isn't Sam. Real install in real conditions = product-readiness signal nothing else gives. | PROD PSY FMT |
| 19 Multi-tenant infra |
Tenant registry (Sheet ID + bot ID + Anthropic key + Stripe customer) · scoped Sheet provisioning · per-tenant CF Access policies · audit log · separate dashboards under ops.hookstreetservices.com/<tenant>/ |
The plumbing that makes selling possible. Until there's tenant isolation, you can't take money. | PROD |
| 20 Launch SmartHub-as-Service |
Stripe billing live (3 tiers) · landing page on hookstreetservices.com · onboarding flow · SmartHub branding · soft-launch to existing network · first paying tenant outside Sam's household |
The vision built. Pricing in market. The thing March 2025 ChatGPT-SmartHub described as already-existing finally exists. | PROD FMT |
CHECK 1 → fetch live artifact (dashboard, briefing, portal) → assess visuallyUPDATE → minimal targeted change (one engine at a time when possible)CHECK 2 → re-fetch → verify the change landed AND nothing else brokeAPPROVE → green if all three engines pass (Prod / Psy / Fmt)IMPROVE → next iteration; never call "done" without a visual checkmisV2PlaidBridge_.gs. Reads PLAID_MODE Script Property (sandbox / production / off). Hits the existing ops-api Cloudflare Worker. Caches balances 15 min.Monthly Obligations.xlsx) via OBLIGATIONS_SHEET_ID property. Compute "$ owed in next 14 days" + "$ owed end-of-month."misV2CapitalAllocation_(book). Returns {cashAvailable, reserveRequired, deployableToShortlist, perTickerSuggestion[]}. Surfaces on dashboard above the universe table.misV2BookConfig_(bookId) returns {sheetId, displayName, riskTolerance, sizeMax, brokerEmailPatterns, telegramChatId}. Every existing function takes book as first param; default = Sam's book if omitted (backward compatible).