MIS_v7.1_gsheet — Tab Audit (2026-04-28)
Generated overnight Session 17 prep for FSE Session 1 (foundation).
Read-only audit of the live production sheet. No modifications.
Source: Driveread_file_contentreturns a single concatenated markdown stream of all tabs (no tab-name delimiters), so each tab below was identified by header-row + width + content + cross-reference toMIS/src/Code.js(buildXxx) andMIS/src/emailDailySnapshot.js(MIS_CFG.support/MIS_CFG.aliases). The sheet name is "MIS_v7.1_gsheet" but the in-sheetCONTROL!VERSIONreadsMIS MASTER v11.0f— so the script is v11.0f (peremailDailySnapshot.js), the builder is v7.6 (perCode.js), and the file label is v7.1. That mismatch is real and worth flagging on its own.
Tab inventory caveat — counts inferred, not enumerated
The Drive natural-language export concatenates all tabs without headers or page breaks. I identified 35 distinct table sections by detecting markdown header→separator pairs. Mapping each section to a tab name required cross-reference with the build code. I'm confident on 28 mappings and have flagged the rest. Sam should run a real tab list (e.g. =SHEETNAMES() via custom func, or visually) to confirm — but the row counts and shapes here are accurate.
Summary table
| # | Tab Name | Built by (Code.js / emailDailySnapshot.js) | Type | Observed rows | State | Recommendation | Notes |
|---|---|---|---|---|---|---|---|
| 1 | EARNINGS_MASTER |
misRefreshEarningsMaster_() (emailDailySnapshot.js:1142+) |
Data — earnings cache | 184 tickers | LIVE — refreshed 2026-04-23 from FINNHUB; ~30 ETFs marked NONE/Low | KEEP | Production data feed; downstream of Tickers!J propagation |
| 2 | Reference_Rules |
buildReferenceRules (Code.js:93) |
Config — VIX bands + risk params | 8 rules | LIVE | KEEP | Used by Daily_Snapshot.B1 regime lookup, FSE will reference these too |
| 3 | Tickers |
buildTickers (Code.js:122) |
Config — universe + Include flag | ~184 | LIVE — current Earnings Date column populated from EARNINGS_MASTER (April-July 2026 dates visible) | KEEP | Header column J is Current Earnings Date in live sheet vs. Next Earnings Date in Code.js:135 — rebuild would clobber. Schema drift. |
| 4 | Catalyst_Engine |
buildCatalystEngine (Code.js:178) |
Data — manual + auto-fed sentiment | 26 rows, 2026-04-27 | LIVE — ingesting from NEWS_CATALYST | KEEP | Feeds Momentum_Engine col AF (Event Impact) |
| 5 | Momentum_Engine |
buildMomentumEngine (Code.js:220) |
Brain — 60-col live computation | ~41 active tickers | LIVE — most rows compute; some D Perf_Grade rows; Action Flag bug confirmed (most show 🚫 Avoid even when score is healthy because thresholds in code (≥42) don't match observed score range — e.g. AAPL composite 26.4 → Avoid; AEP composite 45.6 → In Sync) |
REPAIR | Action Flag thresholds (Code.js:338) appear miscalibrated; Composite Score formula (AD*0.6+AF*3) caps low without catalysts. FSE must NOT trust raw Action Flag — must re-resolve. |
| 6 | Sector_Map (sector→ETF lookup) |
buildSectorMap (Code.js:384, lines 414-422 build the K:L lookup) |
Config — sector→ETF | 11 sector→ETF rows | LIVE | KEEP | Section 6 is the K:L lookup half; Section 7 is the A:E aggregation half (built by same function) |
| 7 | Sector_Map (aggregation half) |
buildSectorMap (Code.js:384, A:E rollup) |
Computed | 15 sectors | LIVE | KEEP | Same tab as #6 — markdown export split it into two visible blocks because of the formula gap |
| 8 | Daily_Snapshot |
buildDailySnapshot (Code.js:423) |
Truth source — VIX + regime + treasury + portfolio_start | 4 visible rows (VIX 18.02, 10Y 4.336, regime "Neutral") | LIVE — values populated; B1 regime label cell ("Regime_Label -->>") may not be visible because export started from row 3 |
KEEP | Per CONTEXT this is the regime/VIX truth source for the email pipeline. FSE depends on it. |
| 9 | TradeSignals |
buildTradeSignals (Code.js:493) |
Computed — QUERY of Momentum_Engine | 184 rows, ordered by SACS desc | LIVE — INTC/STX/AMD top, Mag-7 mid, ETFs bottom | KEEP | Useful but redundant to FSE once built; consider RETIRE post-Phase-5 |
| 10 | Snapshot |
buildSnapshot (Code.js:440) |
Computed — ATR + position sizing | 178 tickers | LIVE — most rows compute; Stop @ 1.3× ATR feeding execution_playbook |
KEEP | Feeds execution_playbook columns F/H. FSE will read from this for FSE_Stop. |
| 11 | Setup_Engine |
buildSetupEngine (Code.js:509) |
Manual placeholder | 1 row (empty) | EMPTY — header only | RETIRE | Never populated. Code.js builds header only. Already tagged "PLACEHOLDER" in Code.js:637. |
| 12 | Playbook_V2 |
buildPlaybookV2 (Code.js:522) |
Manual placeholder | 1 row (empty) | EMPTY — header only | RETIRE | Per MIS_FSE_ARCHITECTURE.md §3 line 49-50: "Sandbox only. No new features… Must become subordinate to FSE." Confirmed empty. |
| 13 | execution_playbook |
buildExecutionPlaybook (Code.js:535) |
Computed — bracket orders | ~63 BUY LMT rows | LIVE but BROKEN — emits BUY LMT for nearly every ticker (AAPL, ABBV, ZM all "BUY LMT") regardless of true Action Flag, because Code.js:544 filter REGEXMATCH(AH, "In Sync") may be returning all rows where AH is non-empty, OR because FILTER is leaking. Per FSE doc §2 line 50: this is the surface that conflicts with email. |
REPAIR | FSE doc Phase 5 explicitly rebuilds this. Until then, do not trust the BUY LMT outputs. |
| 14 | Trade_Planner |
buildTradePlanner (Code.js:566) |
Manual + Schwab/Fidelity import | 21 positions across 2 accounts (Z29720600 "Invest n Save", Z29835692 "JOINT BROK"), all dated 2026-04-14 | LIVE | KEEP | Trade entries are static — Stop/Target columns blank for all 21 rows. Sam to fill. Source for Holdings aggregation. |
| 15 | Trade_Log |
buildTradeLog (Code.js:584) |
Manual exit log | 0 data rows (header only) | EMPTY | KEEP (structural) | Will populate when Sam closes a trade. FSE Phase 5 may add automated writes. |
| 16 | Holdings |
buildHoldings (Code.js:602) |
Computed pivot of Trade_Planner | 2 rows (No open trades \| #N/A) |
BROKEN | REPAIR | Header shows toggle "View Account: Schwab" but the FILTER+SUMPRODUCT chain returning #N/A. Per MIS/CONTEXT and FSE doc the brokerage import path is the fragile point. Replaced functionally by HOLDINGS_CLEAN (#32). |
| 17 | MARKET_CALENDAR |
misWriteSupportTabs_() (emailDailySnapshot.js:749) |
Config — earnings/Fed/OpEx events | 8 rows, dates 2026-03-31 → 2026-12-31 | LIVE | KEEP | Used by misGetMarketCalendarLines_() |
| 18 | SELF_GRADE |
misWriteSupportTabs_() (emailDailySnapshot.js:755) |
Telemetry — run quality grade | 71 rows | LIVE — running 4/14/2026 → 4/27/2026; grades B/C; HoldingsWarnings 11→18 trending up | KEEP | The 18 HoldingsWarnings count = the broken Holdings tab's row count. FSE doc references this as Data Health input. |
| 19 | BROKER_IMPORT |
misWriteSupportTabs_() (emailDailySnapshot.js:761) |
Manual paste target | 1 row (header only) | EMPTY | KEEP (structural) | Schwab integration entry point; SCHWAB_CONNECTED=NO per CONTROL row |
| 20 | CONTROL |
misWriteControl_() (emailDailySnapshot.js:681) |
KEY/VALUE config + secrets | 26 rows | LIVE — VERSION=MIS MASTER v11.0f, LAST_DATA_REFRESH=4/27/2026 19:36, secrets present (EARNINGS_API_KEY, SCHWAB_CLIENT_SECRET, SCHWAB_REFRESH_TOKEN visible) |
KEEP | Privacy flag: secrets are in plaintext in this tab. Sheet is private but worth confirming visibility settings. SCHWAB_CONNECTED=NO so live broker pull is offline. |
| 21 | RUN_LOG |
misWriteSupportTabs_() (emailDailySnapshot.js:703) |
Telemetry — every script call | 500 rows (likely capped) | LIVE — running 3/12/2026 → 4/2/2026 visible; missing 4/3 → 4/26 implies overflow + truncation OR rolling window | KEEP | Looks like only first 500 rows in the export — actual sheet may be longer. Consider adding row-cap rotation if not already. |
| 22 | DIAGNOSTICS |
misWriteSupportTabs_() (emailDailySnapshot.js:709) |
Telemetry — module-level WARN/OK | 13 rows from 2026-04-27 19:36 | LIVE — single run captured; CoreSheet found all 6 aliases OK; SchwabAPI WARN (NO connection); MailApp OK (1490 quota left) | KEEP | Per FSE Phase 1 §10: this is the verification surface for the Session-1 INTC test |
| 23 | Holdings (Schwab subset?) — likely a 4-row block from Holdings tab Schwab view |
Likely buildHoldings view rendering |
View | 3 rows (AFRM, DAL, MRVL with Account=70010898) | LIVE — these 3 are real Schwab positions | KEEP (folded into #16) | This block in the export is probably the visible pivot from Holdings when toggle = Schwab. Same tab as #16. Verify on sheet. |
| 24 | VIX_OPEN_HISTORY |
misWriteSupportTabs_() (emailDailySnapshot.js:740) |
Time-series — daily 9:55 VIX | 34 rows, 2026-03-12 → 2026-04-27 | LIVE — but VIX_Day_High/Low have #NUM! errors for 7 most-recent rows (2026-04-16+) |
REPAIR | Calculation broke ~Apr 16. Likely GOOGLEFINANCE schema drift (high/low for VIX). Doesn't break FSE but worth fixing. |
| 25 | NEWS_CATALYST |
misFetchNewsToSheet_() + misWriteSupportTabs_() (emailDailySnapshot.js:715) |
News feed | 39 rows, all 4/27/2026 19:35:48 |
LIVE — sentiment scoring active; TICKER_BLOCK / MACRO_OVERRIDE flags being written; MRVL flagged Negative sev-5 = Legal/Reg |
KEEP | Single-snapshot in export — actual sheet likely retains MIS_CFG.news.maxStoredRows = 220. Critical FSE input for NewsRiskFlag. |
| 26 | LIVE_GUARD |
misBuildLiveGuard_() (emailDailySnapshot.js:1317) |
Computed — per-ticker block decisions | 166 tickers | LIVE — MRVL=BLOCK (TICKER_BLOCK), JBLU=BLOCK (SHOCK_DOWN -6.65%), UVIX=BLOCK (SHOCK_DOWN), most others freshness=FRESH no-block | KEEP | This IS the proto-FSE; FSE doc explicitly says LIVE_GUARD's resolver logic moves into FINAL_STATE_ENGINE. Critical input. |
| 27 | REPORT_SNAPSHOTS |
misWriteSupportTabs_() (emailDailySnapshot.js:734) |
Archive of every email body | 184 rows, 3/12/2026 → 4/27/2026 | LIVE | KEEP | Powers playback/audit. FSE doc Phase 6 references reading from history rather than email body parsing. |
| 28 | HIST_DAILY_SNAPSHOT |
misInitHistTab_ (emailDailySnapshot.js:773) + misArchiveDailySnapshot_ (~3144) |
Append-only history | 28 rows, 2026-03-20 → 2026-04-27 | LIVE — but VIX_Change, Top5Up, Top5Down, sectors blank for last ~9 rows (2026-04-16+) |
REPAIR | Same regression as #24 — VIX ratio calc broke ~Apr 16. Fix gives FSE clean regime history. |
| 29 | HIST_MOMENTUM |
misInitHistTab_ (emailDailySnapshot.js:768) + misArchiveMomentum_ (~3160) |
Per-ticker daily archive | 119 rows, dates 2026-03-20 onward | LIVE | KEEP | Critical for FSE_HISTORY backfill. 21-column schema matches what FSE doc specifies. |
| 30 | HIST_EXECUTION_PLAYBOOK |
misInitHistTab_ (emailDailySnapshot.js:777) + misArchivePlaybookSummary_ (~3197) |
Append-only — raw cell values | 416 rows from 3/12/2026 18:24:45 single run | PARTIAL — only one archive run captured; uses BlockType=VALUE/RowIndex/ColIndex/Value schema (not row-per-record) |
REPAIR or RETIRE | This schema is unusual — archives the raw cell layout rather than a normalized record. Hard to query. Consider replacing with row-per-trade-idea schema once FSE is online. |
| 31 | HIST_PLAYBOOK_V2 |
misInitHistTab_ (emailDailySnapshot.js:781) + misArchivePlaybookSummary_ (~3197) |
Append-only — raw cell values | 205 rows from 3/12/2026 18:24:46 single run | PARTIAL — same schema as #30, same single run; archives Sector_Map cell layout (BlockType=VALUE, RowIndex=1, Sector/Avg_RelStr/Max/Min/ETF) |
REPAIR or RETIRE | Mis-named — archives Sector_Map content despite the tab name "PLAYBOOK_V2". Either Code is buggy or tab is genuinely orphaned. Investigate before FSE Phase 6. |
| 32 | HOLDINGS_CLEAN |
misBuildHoldingsClean_() (emailDailySnapshot.js:401, 3331) |
Computed — clean replacement for Holdings | 21 positions across Trade_Planner + Schwab | LIVE — SPY 10.954sh / META 10.696 / ASML 4 / AVGO 10 / COST 2 / PYPL 29 / VOO 2 / AFRM 15 / SCHZ 21.376 / KO 6 / etc; all Data_Quality=OK | KEEP | This is the working positions table. FSE should read from here, not from Holdings (#16). |
| 33 | HIST_TRADE_LOG (or proto-Trade_Planner archive) |
misInitHistTab_ (emailDailySnapshot.js:785) |
Append-only history of trade ideas | 147 rows, 3/20/2026 → 4/3/2026 | LIVE — but contains data corruption: AMD row shows Stop = "Saturday, July 7, 1900" (date interpretation of numeric), LYB row shows Stop = "12:44 AM" (time interpretation). Number formatting bug. |
REPAIR | Stop column has number format pollution. Easy fix (set column format to plain number) but worth catching before FSE reads it. |
| 34 | (unnamed — Entry/Action signals) | Likely an undocumented archive from a Sheet-4 prototype | Append-only — 9-col schema (Date · Ticker · CurrentPct · CurrentPrice · EntryAction · RiskAlert · MomRegime · FlowStrength · Reason) | 277 rows, 3/20/2026 → 4/3/2026 | PARTIAL — last 5 columns blank for most rows; emoji-laden EntryAction values like "💎 LEAN IN (MAX)" / "🛑 STOP/WAIT" | INVESTIGATE then RETIRE | Not referenced by MIS_CFG.support or any buildXxx_. Likely the Sheet-4 "Entry Pad" prototype mentioned in FSE doc Phase 9. Has no data after 4/3 — abandoned. Sam to confirm; recommend archive to backup file then RETIRE. |
| 35 | (unnamed — NO_HEADER sparkline-feed?) |
Unknown | Numeric+emoji table | 649 rows, 2 cols (number 75–100 · emoji label "🚀 Accelerating Up" / "🐢 Decelerating Up") | ORPHANED | RETIRE | Tab literally has no header row. 649 rows of ranked numbers with emoji labels. No build function references. Likely scratch tab from a sparkline experiment. Move to backup, delete from live sheet. |
Per-tab detail
EARNINGS_MASTER (#1)
- Built by:
misRefreshEarningsMaster_()inemailDailySnapshot.jsnear line 1142 (referenced byCode.js:1142viagetSheetByName('EARNINGS_MASTER')— there are two functions with overlapping names; the actual builder is in emailDailySnapshot.js) - Schema:
Ticker · Next_Earnings · Source · Last_Updated · Confidence - Observed state: 184 rows; refreshed 2026-04-23 00:20;
Source = FINNHUBfor stocks,Source = NONE/Confidence = Lowfor ETFs (ARKK, CPER, DIA, DKS, FCG…) - Recommendation: KEEP
- Why: Live FINNHUB feed; downstream propagates into
Tickers!JviamisWireEarningsToTickers_()(emailDailySnapshot.js:3554) - FSE relevance: FSE_Earnings comes from this column; FSE blocks ADD/STARTER if earnings <2 days out per architecture doc
Reference_Rules (#2)
- Built by:
buildReferenceRules(Code.js:93) - Schema:
Parameter · Value · Notes— 8 rules - Observed state: VIX_Low=14 / VIX_Normal=19.5 / VIX_High=27 / VIX_Extreme=31 / Risk_Per_Trade=0.01 / Portfolio_Start=25000
- Recommendation: KEEP
- FSE relevance: FSE doc §6 specifies named ranges
RULES_*over this tab
Tickers (#3)
- Built by:
buildTickers(Code.js:122) - Schema: 10 cols —
Ticker · Current % Change · Live_Price · Beta · Name · Sector · Industry · Type · Include · Current Earnings Date - Observed state: ~184 rows;
IncludeY for all visible rows; live GOOGLEFINANCE values present; sectors clean ("Technology", "Cons. Disc.", "Semiconductors", etc.) - Schema drift: live header J =
Current Earnings Date(matchingmisWireEarningsToTickers_()'s expectation); butCode.js:135has'Next Earnings Date'. A rebuild viabuildMIS()would clobber the column header — and possibly break the wire-earnings function. - Recommendation: KEEP + fix Code.js to match live header before any rebuild
- FSE relevance: Universe + Include filter for FSE input set
Catalyst_Engine (#4)
- Built by:
buildCatalystEngine(Code.js:178) - Schema:
Date · Ticker · News Headline / Catalyst · Sentiment · Impact Scale (1-5) · Calculated Multiplier - Observed state: 26 rows all dated 2026-04-27; multipliers computing correctly (Bullish×Impact, Bearish×−Impact, Neutral=0); MRVL Bearish×5 = −5
- Recommendation: KEEP
- FSE relevance: feeds
Momentum_Engine.AF(Event Impact); FSE.NewsRiskFlag will read from NEWS_CATALYST primarily but cross-check this
Momentum_Engine (#5)
- Built by:
buildMomentumEngine(Code.js:220–379) — 60 columns - Observed state: ~41 active tickers; live data populated; but Action Flag column AH is wrong on most rows. Examples from L414+:
- AAPL Composite Score 26.4 → Action Flag = "🚫 Avoid" (per
Code.js:338thresholds: ≥42 In Sync, ≥28 Balanced, else Avoid; 26.4 < 28 ✓ → Avoid is technically correct per code, but the threshold is too high relative to typical scores) - AEP Composite 45.6 → "✅ In Sync" ✓
- AMD Composite 45.6 → "✅ In Sync" ✓
- ABBV Composite 16.8 → "🚫 Avoid"
- Diagnosis: the Composite formula is
AD*0.6 + AF*3(Code.js:336). With Flow Strength Index AD typically 28–76 and Event Impact AF mostly 0, max score without catalysts ≈ 45. So thresholds 42/28 are reasonable, BUT this means tickers with no news are systematically pushed below "In Sync." This matches the FSE doc §3 finding: "execution_playbook said BUY LMT but email said no setups." - Recommendation: REPAIR (post-FSE Phase 5)
- Why: FSE doc explicitly says re-resolve in FSE; do not trust raw Action Flag downstream
- FSE relevance: Primary input for FSE.FlowStrength, FSE.SignalTag, FSE.PreliminaryAction
Sector_Map (#6 + #7)
- Built by:
buildSectorMap(Code.js:384) — single tab, two visible blocks in export - Block 1 (K:L lookup): 11 sector→ETF mappings (Technology→XLK, Semiconductors→SOXX, etc.)
- Block 2 (A:E aggregation): 15 sectors with Avg_RelStr / Max_Composite / Min_Composite / ETF_Ticker
- Observed state: LIVE
- Recommendation: KEEP
- FSE relevance: FSE.Sector + FSE.SectorContext lookups
Daily_Snapshot (#8)
- Built by:
buildDailySnapshot(Code.js:423) - Schema: A1=
Regime_Label -->>/ B1=regime formula / B3=VIX / B4=10Y / B5=Treasury Regime / A9=Portfolio_Start - Observed: VIX=18.02; 10Y=4.336; Treasury Regime=Neutral
- Recommendation: KEEP
- FSE relevance: FSE.Regime + FSE.VIXState come from here
TradeSignals (#9)
- Built by:
buildTradeSignals(Code.js:493) — single QUERY formula - Observed: 184 rows ordered by SACS desc; INTC (84.99), STX (595.86), AMD (334.49), MRVL (158.21) at top
- Recommendation: KEEP (low priority; consider RETIRE in Phase 6)
- FSE relevance: redundant with FSE — FSE will produce a better-ranked list
Snapshot (#10)
- Built by:
buildSnapshot(Code.js:440) - Schema: 14 cols — Ticker · Price · Change · Close_15dAgo · Return_15d · Close_45dAgo · Return_45d · ATR14_proxy · Stop @ 1× / 1.3× / 2× ATR · % Risk @ 1.3× · Shares @ 1.3× ATR · Dollar risk deployed
- Observed: 178 tickers; ATR + position sizing live; AAPL Stop@1.3×ATR=$255.31 / Shares=20 / Risk=$246.13 visible
- Recommendation: KEEP
- FSE relevance: FSE.Stop / FSE.Shares / FSE.RiskDollars come from here directly
Setup_Engine (#11)
- Built by:
buildSetupEngine(Code.js:509) — placeholder - Observed: header only, 0 data rows
- Recommendation: RETIRE
- Why: never populated; Code.js calls it explicitly "PLACEHOLDER BUILDER"; not referenced elsewhere
Playbook_V2 (#12)
- Built by:
buildPlaybookV2(Code.js:522) - Observed: header only, 0 data rows
- Recommendation: RETIRE
- Why: per FSE doc line 50 "Sandbox only. No new features. Must become subordinate to FSE." Confirmed empty in live sheet.
execution_playbook (#13)
- Built by:
buildExecutionPlaybook(Code.js:535) - Observed: ~63 BUY LMT rows including AAPL, ABBV (Health Care/Pharma DOWNTREND ticker!), AEP, AMAT, AMD, AMZN, APD, AVGO, BA, BIDU, BLK, ZM. Filter is leaking.
- Diagnosis:
Code.js:544formula=IFERROR(FILTER(Momentum_Engine!A2:A200,REGEXMATCH(Momentum_Engine!AH2:AH200,"In Sync")),"No active signals")— but the visible output has tickers whose Action Flag is "🚫 Avoid" or "🟡 Balanced," not just "✅ In Sync." Either the formula was rebuilt mid-run from a stale Action Flag, or REGEXMATCH is matching emoji "✅" patterns inconsistently. - Recommendation: REPAIR (FSE Phase 5)
- FSE relevance: FSE doc §2 line 50 explicitly: this is the surface that conflicts with email and must become subordinate to FSE
Trade_Planner (#14)
- Built by:
buildTradePlanner(Code.js:566) - Observed: 21 positions, 2 accounts, all entered 2026-04-14, Stop+Target columns blank for ALL rows
- Recommendation: KEEP
- Open loop: Sam needs to fill Stop/Target on these 21 positions OR FSE Phase 5 needs to wire them in from Snapshot
Trade_Log (#15)
- Built by:
buildTradeLog(Code.js:584) - Observed: 0 data rows
- Recommendation: KEEP (structural)
Holdings (#16)
- Built by:
buildHoldings(Code.js:602) - Observed: returns "No open trades / #N/A" — FILTER+SUMPRODUCT chain broken
- Recommendation: REPAIR (or RETIRE in favor of
HOLDINGS_CLEAN#32) - Note: same tab as #23 (the 3-row Schwab subset is the toggle="Schwab" view)
MARKET_CALENDAR (#17)
- Schema:
Date · Event · Category · Notes - Observed: 8 events from 2026-03-31 (Quarter End) to 2026-12-31 (Quarter End)
- Recommendation: KEEP
SELF_GRADE (#18)
- Schema:
Timestamp · Score · Grade · BlockedTrades · HoldingsDataWarnings · StaleData · Notes - Observed: 71 rows; HoldingsWarnings climbed 11→18 over Apr 14–15; recent rows show 18 sustained
- Recommendation: KEEP
BROKER_IMPORT (#19)
- Observed: empty (header only)
- Recommendation: KEEP (structural)
- Note: SCHWAB_CONNECTED=NO in CONTROL — broker pull is offline; this tab is the manual-paste fallback target
CONTROL (#20)
- Schema:
KEY · VALUE, 26 rows - Live keys: VERSION (
MIS MASTER v11.0f), LAST_RUN, LAST_EOD_ARCHIVE (4/27/2026), LAST_REGIME (EXTREME— but Daily_Snapshot says VIX=18.02 = NORMAL → stale), LAST_VIX (27.29 — also stale), LAST_DATA_REFRESH (4/27/2026 19:36), TIMEZONE (America/New_York), EARNINGS_API_KEY, SCHWAB_* (CLIENT_ID, SECRET, REFRESH_TOKEN, CONNECTED=NO, CALLBACK_URL with ngrok), SCHWAB_PORTFOLIO_VALUE ($1215.35), SCHWAB_LAST_SYNC (2026-04-14 15:21), LAST_MORNING_BRIEF_DATE / LAST_PLAYBOOK_DATE / LAST_POWER_HOUR_DATE all 2026-04-27 - Recommendation: KEEP + repair LAST_REGIME / LAST_VIX (drift from current state — Daily_Snapshot has fresh VIX, CONTROL has stale)
- Privacy note: secrets are plaintext — sheet is private but worth confirming sharing settings on this specific tab
RUN_LOG (#21)
- Schema:
Timestamp · Function · Status · Message · User - Observed: 500 rows visible, 3/12/2026 → 4/2/2026 — possibly truncated by the Drive export, OR rolling window
- Recommendation: KEEP + verify rotation policy
DIAGNOSTICS (#22)
- Schema:
Timestamp · Module · Level · Message - Observed: 13 rows from single run 2026-04-27 19:36:19; CoreSheet aliases all resolved OK; SchwabAPI WARN; MailApp OK quota=1490
- Recommendation: KEEP
- FSE relevance: Phase 1 §10 specifies this is the verification surface for INTC test write
VIX_OPEN_HISTORY (#24)
- Schema: 11 cols —
Date · Time · Slot · Regime · VIX_Current · VIX_Day_High · VIX_Day_Low · Pct_From_High · Pct_From_Low · Snapshot_Time_Label · Notes - Observed: 34 rows 2026-03-12 → 2026-04-27; rows 2026-04-16 → 2026-04-27 show
#NUM!for Pct_From_High and Pct_From_Low — calc broke ~Apr 16 - Diagnosis: VIX_Day_High column is showing
4.28 / 4.29 / 4.347for those bad rows — looks like 10Y yield bleeding into the wrong column. Schema corruption. - Recommendation: REPAIR
NEWS_CATALYST (#25)
- Schema: 12 cols
- Observed: 39 rows all 4/27/2026 19:35:48 (single run snapshot in this export);
RiskFlag=YESfor MRVL (Legal/Reg sev-5) and "financials sector" macro item;OverrideFlagpopulated asTICKER_BLOCK/MACRO_OVERRIDE - Recommendation: KEEP
LIVE_GUARD (#26)
- Schema: 15 cols —
AsOf · Ticker · CurrentPct · Sector · SignalTag · ActionSource · ShockFlag · NewsRiskFlag · NewsOverride · FreshnessFlag · RegimeState · TradeBlock · Reason · Severity · CurrentPrice - Observed: 166 tickers; current blocks: MRVL (TICKER_BLOCK from news), JBLU (SHOCK_DOWN −6.65%), UVIX (SHOCK_DOWN −5.89%); rest FRESH no-block
- Recommendation: KEEP
- FSE relevance: This is the proto-FSE. FSE doc Phase 1+ specifies LIVE_GUARD's resolver logic moves into FINAL_STATE_ENGINE.
REPORT_SNAPSHOTS (#27)
- Schema: 6 cols including
SubjectandBody - Observed: 184 rows of email archive 3/12/2026 → 4/27/2026
- Recommendation: KEEP
- FSE relevance: Phase 6 reads from this for delta block instead of email body parsing
HIST_DAILY_SNAPSHOT (#28)
- Schema: 11 cols —
Date · Regime · VIX_Current · VIX_High · VIX_Low · VIX_Change · RegimeFactor · Top5Up · Top5Down · StrongestSectors · WeakestSectors - Observed: 28 rows 2026-03-20 → 2026-04-27; rows 2026-04-16 → 2026-04-27 have blank
Top5Up/Down/Sectorsand#NUM!VIX_Change - Recommendation: REPAIR — same regression as #24
HIST_MOMENTUM (#29)
- Schema: 21 cols —
Date · Ticker · CurrentPct · CurrentPrice · Trend · Flow · SignalTag · ActionFlag · CompositeScore · Compression · MomRegime · VolMode · VSM · SACS · NextEarnings · RS_SPY · PerfGrade · Sector · PctFrom13WH · PctFrom13WL · PctFrom52WH - Observed: 119 rows; 21 columns line up cleanly with FSE doc's specified per-ticker history shape
- Recommendation: KEEP
HIST_EXECUTION_PLAYBOOK (#30)
- Schema: 6 cols —
ArchiveAt · SourceSheet · BlockType · RowIndex · ColIndex · Value - Observed: 416 rows from a single run 3/12/2026 18:24:45; archives raw cell layout (header + values cell-by-cell)
- Recommendation: REPAIR or RETIRE
- Why: cell-level archive schema is hard to query. FSE Phase 6 should switch to row-per-decision.
HIST_PLAYBOOK_V2 (#31)
- Schema: same as #30
- Observed: 205 rows from 3/12/2026 18:24:46 single run; archives Sector_Map cells, not Playbook_V2 cells —
SourceSheet = "Sector_Map",BlockType = "VALUE", RowIndex=1 / ColIndex=1..5 with values "Sector / Avg_RelStr / Max_Composite / Min_Composite / ETF_Ticker" - Recommendation: INVESTIGATE then REPAIR/RETIRE
- Why: tab name says PLAYBOOK_V2 but content is Sector_Map. Either
misArchivePlaybookSummary_()is buggy or the tab is genuinely orphaned. Worth a 5-min dig before FSE Phase 6.
HOLDINGS_CLEAN (#32)
- Built by:
misBuildHoldingsClean_()(emailDailySnapshot.js:401, 3331) - Schema: 10 cols —
Ticker · Shares · Avg_Price · Current_Price · Market_Value · Unrealized_$ · PnL% · (blank) · Data_Quality · Source - Observed: 21 positions; SPY 10.954 / META 10.696 / ASML 4 / AVGO 10 / COST 2 / PYPL 29 / VOO 2 / AFRM 15 / SCHZ 21.376 / KO 6 / etc; all
Data_Quality=OK; sources areTrade_Planner (Invest n Save (Z29720600), JOINT BROK (Z29835692))orSchwab(AFRM, DAL, MRVL — same rows as #23) - Recommendation: KEEP
- FSE relevance: FSE.Position lookup MUST come from here, not from Holdings (#16)
HIST_TRADE_LOG (#33)
- Schema: 17 cols —
Date · Ticker · CurrentPct · CurrentPrice · EntrySignal · Stop · RiskPct · TargetPct · TargetPrice · RR · Shares · Flow · Trend · IPQ · ActionVerdict · Reason · Notes - Observed: 147 rows 3/20/2026 → 4/3/2026; Stop column has number-format pollution: AMD row Stop="Saturday, July 7, 1900", LYB row Stop="12:44 AM"
- Recommendation: REPAIR
- Fix: change column F format to plain Number (not Date/Time). Underlying values are likely correct decimals; only display is broken.
Tab #34 (unnamed Entry/Action signals)
- Schema: 9 cols —
Date · Ticker · CurrentPct · CurrentPrice · EntryAction · RiskAlert · MomRegime · FlowStrength · Reason - Observed: 277 rows 3/20/2026 → 4/3/2026; emoji actions ("💎 LEAN IN (MAX)", "🛑 STOP / WAIT"); last 5 cols blank for most rows; no data after 4/3
- Recommendation: INVESTIGATE then RETIRE
- Why: not in
MIS_CFG.support, not built by anybuildXxx, abandoned ~Apr 3. Probably the Sheet-4 prototype mentioned in FSE doc Phase 9.
Tab #35 (NO_HEADER orphan)
- Schema: 2 unnamed columns — number 75–100, emoji label
- Observed: 649 rows
- Recommendation: RETIRE
- Why: literal
NO_HEADERmarkers in the export = the tab has no header row at all. No build function references. Likely scratch from a sparkline experiment. Move to backup.
Counts
- Total tabs identified: ~33 (35 sections in export, but #6+#7 = same Sector_Map tab visually split, #16+#23 = same Holdings tab with different account toggle view)
- KEEP (live, healthy): 19 — EARNINGS_MASTER, Reference_Rules, Tickers, Catalyst_Engine, Sector_Map, Daily_Snapshot, TradeSignals, Snapshot, Trade_Planner, Trade_Log, MARKET_CALENDAR, SELF_GRADE, BROKER_IMPORT, CONTROL, RUN_LOG, DIAGNOSTICS, NEWS_CATALYST, LIVE_GUARD, REPORT_SNAPSHOTS, HIST_MOMENTUM, HOLDINGS_CLEAN
- REPAIR (broken / partial): 7 — Momentum_Engine (Action Flag thresholds), execution_playbook (filter leaking BUY LMT to non-In-Sync), Holdings (FILTER returning #N/A), VIX_OPEN_HISTORY (#NUM! since Apr 16), HIST_DAILY_SNAPSHOT (same regression), HIST_TRADE_LOG (Stop column number format), HIST_EXECUTION_PLAYBOOK + HIST_PLAYBOOK_V2 (cell-level archive schema; PLAYBOOK_V2 archive is misnamed)
- RETIRE (dead, orphaned, superseded): 4 — Setup_Engine, Playbook_V2, Tab #34 (Entry signals abandoned 4/3), Tab #35 (NO_HEADER orphan)
Tabs the FSE architecture needs that don't exist yet
Confirmed against docs/MIS_FSE_ARCHITECTURE.md Session 1 plan (lines 202–223):
FINAL_STATE_ENGINE— does not exist. 30 columns per architecture doc §6; the single source of decision truth.FINAL_STATE_HISTORY— does not exist. Same schema as FSE; append-only; powers Morning vs Power Hour delta block.SURFACE_CONFLICT_CHECK— does not exist. 7 columns:AsOf · Ticker · Surface · Surface_Action · FSE_FinalState · ConflictFlag · ConflictReason.
These three are the Session 1 deliverable per the FSE doc. Phase 1 Steps 2/4/5 explicitly create them with frozen header rows, no formulas yet.
Additionally, FSE doc §6 specifies named ranges (FSE_*, RULES_*, SNAP_*) that don't exist yet but ride on existing tabs (Reference_Rules, Snapshot, the new FSE tab) — those are part of Session 1 step 3.
Cross-cutting findings (worth noting before Session 1)
- Version mismatch: file is "MIS_v7.1_gsheet", builder code is v7.6, controller (
emailDailySnapshot.js) is v11.0f. The CONTROL tab shows v11.0f. Sam should confirm the file label is just stale. - CONTROL drift:
LAST_REGIME=EXTREME / LAST_VIX=27.29(from 3/12 max) vs Daily_Snapshot showing live VIX 18.02 NORMAL. The dispatcher writes LAST_REGIME but doesn't refresh it on every run, or refresh failed. Worth fixing pre-FSE so FSE doesn't read the stale value. - VIX history calc broke ~Apr 16 across two tabs (#24 + #28). One root cause. Fix once.
- Action Flag math is too tight: max composite without catalysts ≈ 45, threshold for "In Sync" is ≥42. Almost no ticker reaches "In Sync" without a positive catalyst. Either the threshold needs to drop OR the formula needs to weigh more inputs. FSE doc says re-resolve in FSE — so this is about whether to fix Momentum_Engine also or just bypass it.
- execution_playbook emits BUY LMT for tickers it shouldn't — including ABBV (Downtrend, Composite 16.8, Avoid). The REGEXMATCH filter is leaking. This is the conflict the FSE is built to prevent.
- HIST_PLAYBOOK_V2 contains Sector_Map data — bug in
misArchivePlaybookSummary_()or genuine orphan. Investigate. - HIST_TRADE_LOG Stop column has type confusion — display-only fix.
- Tab #34 + #35 are dead weight — recommend archive + retire before FSE Phase 1 to declutter the universe FSE has to reason about.
Source trail
- Sheet ID:
1cosuFrU_EJRAprVMm-FEpmddSUTVQWhlI0tHpS1w2S4 - Code.js path:
MIS/src/Code.js(32834 tokens; line numbers cited inline) - emailDailySnapshot.js path:
MIS/src/emailDailySnapshot.js(81246 tokens; line numbers cited inline) - Drive export cache:
C:\Users\ztrei\.claude\projects\C--Users-ztrei-OneDrive-2--Hook-Street-05--2026-BH\0f2612c9-22b9-47af-8506-ff3bdc1924a7\tool-results\mcp-claude_ai_Google_Drive-read_file_content-1777349410399.txt(1,555,862 chars / 3,903 lines / 35 detected sections) - Cross-reference:
docs/MIS_FSE_ARCHITECTURE.md(Session 1 plan, §3 "Where it stands today", §6 named ranges) - Generated: 2026-04-28 ~12:30 AM EDT (overnight Session 17 prep)
Generated by Claude Code subagent (general-purpose) for Session 17 overnight prep · Opus 4.7 (1M)