Foundation Audit · MIS v2 Sheet
Every tab / row / column / cell — the "foundation must be amazing" gate
Generated: Wednesday, June 3 2026 · 7:47 PM EDT (NY) · 18 Sivan 5786 · Parashas Beha'alotcha
Master Build · Step 1 (report-first; NO fixes applied) · Read-only minion fleet (4 slices) · Sheet 1N2v-MDDi…nEFJGIM · workspace 038ab7c · MIS repo cedb275
Gate discipline: this is the report. No fixes have been applied. Per the approved plan, mechanical no-regression fixes run only after Sam approves the fix-list; verdict-moving items are held for the separate Step-4d SACS/scoring decision. Audit was 100% read-only (no building/writing fn called).
Headline — the foundation has a real core problem

The plumbing is sound (no crashes, no blank equity cost-basis, performance is live-not-frozen, Schwab token valid, no wash blocks). But the engine's scoring is poisoned at the source, the P&L covers only half the book, and the active Schwab book is absent from the data. These explain why the dashboard "felt off." None are fixed yet — they're classified below.

3 issues = healthy/confirmed-clean · 7 = mechanical (need your OK) · 5 = verdict-movers (Step 4d) · 4 = need a direct sheet range-read to confirm.
🔴 The three that matter most
1 · The engine's SACS score is mis-calibrated low — GRADE_FAIL is the default

75% of names score SACS < 40; the highest in the whole universe is SOXX at 55.32 — nothing breaks 60. Megacaps with positive P&L are graded D: AMZN 0.02 (held, +18%), META 3.56 (your largest position, +6.7%), COST 10.65, GOOG 13.33. Because the grade gate sits ~50, depressed SACS makes GRADE_FAIL the modal verdict (8 of 20).

Likely root cause found: 10 of 20 Reference_Rules weight dials are below the locked floor of 12 ("dial corruption") — Compression 4, MacroBias 4, EventImpact 3, Above30D 6, etc. (2 are intentional negatives). Low dials suppress the Composite → which suppresses SACS → which trips GRADE_FAIL across the book. There is a fn=resetweights to restore locked defaults.

Plan-assumption corrected: the suspected "RiskGate gates on Risk%≤2.5%" was not the cause — high-ATR LLY passes; the gate keys on the broken SACS/grade. The real fix is the weight dials + SACS calibration, not the risk gate.

→ VERDICT-MOVER. Held for Step 4d (your explicit decision). Fixing dials/SACS will move verdicts — that's the point, done deliberately with a fresh baseline.
2 · P&L covers only 14 of ~28 positions

Performance reads +$4,202 (+15.0%) on $27,971 cost basis — but that's only 14 positions. The holdings feed has ~28 non-cash equity lines, and every one has a matching entry in the cost map, yet the engine's internal join is narrower. ~half the book is excluded from P&L. The headline gain and the winner/loser detail (NVDA +$101 / GOOG −$27) are computed over different position sets — internally inconsistent.

→ MECHANICAL (widen the cost-basis join to all positions) — needs your OK. Note: cost basis is currently a global per-ticker blend (e.g. one META avg of $579.42 used across all 4 accounts), not per-account lots, so per-account P&L stays approximate until per-lot basis is loaded.
3 · The Schwab active book is absent from the data

Accounts in the holdings feed: 5378 (daughter), 4073 (son), 600 (= Invest-n-Save …720600), 5692 (= Joint), 241 (a cash line). No Schwab account appears at all — and the entire 2.5%/mo thesis rests on Schwab being the active book. This is consistent with you having sold Schwab to cash (so it'd show cash, not equities) — but the MIS data feed needs Schwab wired in for the per-account mandate view to work. Also: Book risk = 0.0% (the risk engine has no active book to measure) and ~$1,000 of "cash" in portmetrics doesn't reconcile with the holdings cash lines.

→ NEEDS YOUR INPUT: confirm account-code mapping (is 600 = Invest-n-Save, 5692 = Joint, 241 = ?) and whether to wire Schwab cash/positions into the feed.
🟡 Mechanical fix-list — needs your approval (no verdict movement)
#FindingMechanical fix
M1P&L covers 14 of ~28 positionsWiden the cost-basis join so every held position with a cost entry counts toward P&L
M2Decision_Log = 8 synthetic test rows (NVDA, all @211.14, May 31), zero real decisionsClear the test-burst rows
M3NEWS_CACHE empty (fn=news never run)Run fn=news once to populate holdings news (safe — doesn't touch verdicts)
M4Duplicate sector tabs: Sector (idx5) + RS_Sector (idx27) + Sector_MapIdentify the stale one, archive it (mv, not delete)
M5Orphan/scratch tabs: Position_Intent, Ticker_Memory, FORWARD_NOTE, DIAGNOSTICSConfirm unused → archive to a _ARCHIVE suffix (rename, not delete)
M6Tickers tab = 21 rows but FSE/Snapshot = 20 (one ticker not flowing through)Trace + fix the one-row drop-off
M71 ticker blank sector · 1 ticker zero/blank live price (integrity WARN)Fill the blank sector + chase the blank price (sector feeds gates — verify no verdict move after)
Each runs behind the no-regression + structural-input gate; M7 touches a gate input so it's verified verdict-neutral before keeping.
🟣 Verdict-movers — Step 4d (your explicit decision, NOT silent)
🔍 Couldn't confirm via read-only endpoints — need a direct sheet range-read

These live on tabs the read-only fn= endpoints don't expose; confirming them needs a direct Sheets/Drive read (next pass), not a build/write call: BTC stale $73,494 & VIX 16.06-vs-15.77 (Market tab) · Macro/VIX header-is-data · Price_Compare no-op (GF==FH) · RR_13W date-serial bleed · Flow column values.

🟢 Confirmed healthy
Source trail
File: outputs/2026-06-03_19-47_audit_mis-v2-foundation.html
Source: live MIS v2 web app, read-only endpoints (auditsheet · state · capacity · weak_weights · holdings · costs · portmetrics · performance · washlist · integrity · signals · digest · schwabdiag · peekoverlay · decisions · newsview) · sheet 1N2v-MDDi_vv0uyD90HQvDjylKG7mGkKXydU_nEFJGIM
Workspace commit 038ab7c · MIS repo cedb275 · Working dir C:\Users\ztrei\OneDrive\2. Hook Street\05. 2026 BH