בס״ד

MIS v2 — GAP ANALYSIS vs docs/MIS

docs/MIS_V2_GAP_ANALYSIS.md · last changed (pre-VM history) · rendered from GitHub master

MIS v2 — GAP ANALYSIS vs docs/MIS_*

Built 2026-05-28. Sam: "Go through this in detail, make sure anything related to MIS is fully acknowledged and digested and already considered. Obviously, it's not."

Method: thorough read of all 9 older docs/MIS_* files (Audit/Review/FSE Architecture/March 5 Formulas/Phase 2 Blueprint/Tab Audit/Entry Pad Reference/FSE Addendum/Email Render Requirements) cross-referenced against the 9 v2 baseline docs (Logic_Capture / Definition_of_Done / Status / Requirements_Checklist / Next_Steps / Tab_Coverage / 2-ticker Proof / Setup_and_Keys / Trade_Ingestion_and_Behavioral).

Honest bottom line: v2 has nailed the architectural core — single-classifier FSE, weighted SACS, real ATR, grade bands A≥40/B≥25/C≥10/D<10, 5 accounts loaded, 2-ticker proof clean. The gap is mostly BUILD not CAPTURE: most items below are documented somewhere in the v2 docs but never wired into the engine or render layer.


⭐ TOP-PRIORITY UNCOVERED ITEMS (the 6 worth doing first)

✅ SHIPPED 2026-05-28 NIGHT (Stage 9 — locally, deploys with clasp) — FINAL PUSH (95% done)

Net: 19 of 20 gap items closed (95%). Code.gs: 141 KB → 147 KB.

Only remaining (gap #20): Outlook iOS render polish — kicks in if MIS ever pushes a real email brief (today MIS pushes via the Telegram notify webhook, not email; portal HTML is fine). Captured as design constraint; not blocking.

✅ SHIPPED 2026-05-28 LATE EVE (Stage 8 — locally, deploys with clasp) — MARQUEE GAP CLOSURE

Net: 17 of 20 gap items closed (85%). Code.gs: 126 KB → 141 KB.

✅ SHIPPED 2026-05-28 EVE (Stage 7 — locally, deploys with clasp) — ARCHITECTURAL DEPTH

Net: 10 of 20 gap items closed (50%). Code.gs: 121 KB → 126 KB.

✅ SHIPPED 2026-05-28 PM (Stage 6 — locally, deploys with clasp)

0. Wash-sale tracking (PROMOTED 2026-05-28 after re-reading the March 2025 SmartHub origin chat)

Source: Sam's lived experience — March 2025 chat: "I'm selling things that I'm trimming positions at a loss even when I go back into it like JP Morgan I can't go back into." Re-confirmed in MIS_V2_REQUIREMENTS_CHECKLIST.md §6 and MIS_V2_LOGIC_CAPTURE.md. Recurring Sam-favorite. Lived dollar consequences (disallowed losses are real tax cost).

What needs to ship:
- Wash_Sale tab in MIS v2 keyed by Ticker → last loss-sell date → re-entry blocked until +30 days.
- New canonical reject code WASH_SALE_BLOCK added to MIS_FSE_ARCHITECTURE.md reject codes; fires from the 11-gate resolver as a hard stop on ADD/STARTER.
- Auto-detection from broker emails: when misV2ImportTrades_ parses a SELL, compute if loss vs weighted-avg basis; if loss, write to Wash_Sale with blocked_until = sell_date + 30d.
- Surface on the Test Entry: amber/red banner near verdict — "WASH SALE BLOCK until 2026-06-26 (sold at loss 2026-05-27)."
- Brief + shortlist: wash-blocked names auto-excluded + flagged.

Until built, MIS can recommend a buy that costs Sam real money. Not a nice-to-have — promote to FSE resolver core.

1. Four of the 11 FSE resolver gates are NOT wired

Source: MIS_FSE_ARCHITECTURE.md §3 (the canonical doc per CLAUDE.md). Captured in MIS_V2_DEFINITION_OF_DONE.md §M as "TODO when holdings wire" — never built.

Missing gates (out of 11 first-fires-wins):
- Gate 2 — LIVE_GUARD_BLOCK (intraday news shock / circuit-breaker block)
- Gate 3 — held-position REDUCE/EXIT (existing position at loss threshold)
- Gate 4 — PORTFOLIO_OVERLAP (already-held / concentration / total book risk ≥ 6%)
- Gate 9 — EXTENDED (>1.5× ATR extension intraday → CONDITIONAL/EXTENDED, not ADD)

Why this is #1: these are the holdings-aware gates. Without them v2's verdict for a ticker Sam ALREADY holds is the same as for one he doesn't — wrong.

2. The "6 Permission Tiers + Market Mode + BLUF" header layer is missing

Source: MIS_FSE_ARCHITECTURE.md (6 tiers) + MIS_EMAIL_RENDER_REQUIREMENTS.md R4 (BLUF) + R5 (Market Mode).

v2 emits per-ticker verdicts but never produces the day's overall posture ("Today: TIER 3 STARTER ONLY — delayed data + limit orders") + the regime/breadth/actionable BLUF sentence ("Regime NORMAL · 47 of 184 in sync · FSE shows 3 actionable. Selective tape, narrow leadership.") + the Market Mode line (Closed / Pre-market / Open / Power Hour / After-hours + a "what would be top conviction if open" hypothetical for closed times).

This is the first thing Sam should see every time he opens a brief or dashboard.

3. Three Sam-favorites that keep getting asked for and never built

4. ADD should require live-trigger confirmation; GOOGLEFINANCE = 15-min delayed

Source: MIS_FSE_ARCHITECTURE.md §3 + 15-point acceptance test #14.

v2 calls INTC=ADD using GOOGLEFINANCE (15-min delayed). Per the canonical FSE doctrine, delayed data should force STARTER, not ADD. ADD should be reserved for tickers with live quotes (Schwab API / Finnhub real-time). Today: every ADD is technically wrong by the doctrine.

5. The RiskGate definition conflicts across three docs

All three live as "the right one" in different docs. Lock one + propagate.


🟡 NEXT-PRIORITY (the next 10)

# Item Source Action
6 SURFACE_CONFLICT_CHECK persistent tab (logs every surface vs FSE disagreement) MIS_FSE_ARCHITECTURE.md §5 Build tab; surface in Data Health
7 News → holdings mapping ("Burry initiating PYPL at YOUR cost basis") not "Ticker Warning" MIS_AUDIT_2026-04-26.md Cross-ref catalyst ticker vs HOLDINGS_CLEAN
8 FLOW_CLUSTER_WARN + Data Health GREEN/YELLOW/RED single badge MIS_FSE_ARCHITECTURE.md §7 If >35% of tickers share Flow Strength → WARN; single visible Health badge per run
9 Earnings depth — Last Earnings + Dividend (/stock/dividend2) + Insider Activity (/stock/insider-transactions) + Earnings Surprise (/stock/earnings) MIS_REVIEW_2026-04-27.md C4 + Definition-of-Done §N 4 more Finnhub calls; show on ticket + universe
10 SACS component breakdown shown on ticketSACS 64 = Comp×0.3 + Flow×0.3 + RR×0.2 + Grade×0.2 = 19.2 + 20.7 + 12 + 12 MIS_REVIEW_2026-04-27.md C6 Add "SACS components" line to entry ticket
11 R3 Mandatory Risk Display — every Trade Action / Holdings row shows Stop $X / Target $Y / R:R / Held N days inline MIS_EMAIL_RENDER_REQUIREMENTS.md R3 Enforce in brief + dashboard render layer
12 R2 Smart Earnings Tiering + IsMacroMover boolean on Tickers — T1 Held+Watch, T2 Mkt Cap >$150B or Mag-7 or sector leader, T3 hide MIS_EMAIL_RENDER_REQUIREMENTS.md R2 Add IsMacroMover column; tier the earnings list
13 Integrity_Check tab — Include=Y count · blank sectors · valid prices · errors · Weight_* ≥12 (locked dials) MIS_TAB_AUDIT_2026-04-28.md + MIS_V2_TAB_COVERAGE.md Build tab; tie to Data Health
14 Signal_View (3-panel Breakout/Contrarian/Oversold) + Momentum_Digest (7-bucket emoji grouping by Regime+SACS) + Sector_Rotation curated MIS_FSE_ADDENDUM_2026-05-01.md §7 Portal sections, READ from FSE only
15 VSM, IPQ, Beta Dynamic Risk, Sector Avg_RS columns on entry ticket + universe table MIS_ENTRY_PAD_REFERENCE.md View 1 (16 cols) Add chips on ticket; columns on table

✅ ALREADY WELL-COVERED (the 9 older docs are not ignored — these items ARE built)


SO WHAT'S THE TAKEAWAY

Sam's instinct was right that stuff hasn't been fully built, but the underlying capture is actually solid — every item above is documented in either the older docs or the v2 baseline docs (often both). What's missing is mostly the wire-it-up + render-it work, not the decide-what-to-do work.

The next build session (after clasp reauth) should target the TOP 5 before adding more features. Specifically:
1. The 4 missing FSE gates (Live Guard + held-position REDUCE/EXIT + portfolio overlap + EXTENDED)
2. Posture / BLUF / Market Mode header
3. VIX history + Volume + Bracket-order block (the 3 Sam-favorites)
4. ADD-requires-live-quote rule (force STARTER on GOOGLEFINANCE)
5. RiskGate definition lock

Gap analysis · 2026-05-28 · all 18 docs read in full · companion: MIS_V2_REQUIREMENTS_CHECKLIST.md, MIS_V2_NEXT_STEPS.md, MIS_V2_STATUS.md.

Source trail · docs/MIS_V2_GAP_ANALYSIS.md @ master · rendered 2026-07-02 7:23 PM EDT by scripts/build-docs.py · the .md in the repo is the truth; this page is the phone-readable view