MIS CROSS-SHEET LOGIC ANALYSIS — Does the math actually fit?

Sun May 3 2026 · 12:15 PM EDT · Claude Code Opus 4.7 · Session 22
BLUF — does the logic fit across the 3 working sheets? YES, with one important caveat. The 3 different LLY SACS values (86.77 v1 / 70.43 Sandbox / production's 0-55 scale) ARE mathematically consistent — they're the SAME underlying score at three different stages of an upgrade pipeline. v1 has had Fix #5 (1.8× scale expansion) applied; Sandbox hasn't; production uses an entirely different (older, more compressed) scale. The naming confusion + 5 sheets is real, but the math underneath is coherent. Folder organized. Now make 3 hard decisions: kill Architect V11 Microservices weekend triggers, retire v2/Sandbox to graveyard, decide v1-vs-production primary.

🧮 THE SACS DISCREPANCY EXPLAINED — math is consistent

The breakthrough finding from reading runSACSUpgrade.js: Sam's Fix #5 — SACS Scale Expansion applies this formula to existing SACS values:
SACS_new = MIN(100, MAX(0, (SACS_raw - 50) × 1.8 + 50))
This stretches scores around midpoint 50. A raw 70.43 becomes 50 + (70.43-50)×1.8 = 50 + 36.77 = 86.77. Exactly what we see for LLY across v1 vs Sandbox.
SheetLLY SACSHas Fix #5?Math check
v1 (1HEmRev)86.77✅ YES (1.8× applied)50 + (70.43 − 50) × 1.8 = 86.77 ✓
V2 SACS Sandbox (1HtMOd)70.43❌ NO (raw value)This IS the input to Fix #5
Production (1cosuFr)~50.99 INTC topn/a — different scale entirely0-55 range, different formula

Conclusion: v1 and Sandbox are NOT showing different conviction levels — they're showing the same underlying conviction at two different points in an upgrade chain. Sandbox is the testbed before Fix #5; v1 is after. Both are valid; v1 is the next step.

Production's scale is genuinely different — uses Sam's older 13-weight Composite (0-55 effective range) with tristate Flow (28/44/76 only). It's a different lineage.

📐 ALL 8 FIXES IN runSACSUpgrade.js — what they do, what they affect

Fix #What it changesWhy it mattersSheets where applied
1RR_13W: wrap in IFERROR + MAX(denom, 0.01)Kills phantom AMGN=58,340,000 / DHR=48,270,000 from divide-by-near-zeroUnknown — verify by checking AMGN row in v1
2RiskGate: change from Risk%≤2.5% → Shares≥1UNLOCKS LLY, AMD, MRVL, NVDA from WATCH→ADD eligibility. Was the #1 critical bug in V11 teardown.Unknown — v1's "ACTIONABLE TODAY (0)" output suggests not yet applied
3ATR Floor: Shares=0 if stop < 0.5% of pricePrevents SGOV/SCHR/TLT generating 1,700+ share orders (Master v11.0f had this bug catastrophically)Unknown
4ZScore: verify returns-based not price-levelZ-score should normalize day's % move vs sector mean, not raw price levelsv1 shows "+2σ Up" Compression label → Z-score IS upgraded in v1
5SACS 1.8× scale expansionBreaks the 70.4 ceiling so top conviction names reach ADD threshold (60+)✅ APPLIED in v1 (LLY=86.77 confirms)
6New Close_vs_Open% columnCatches Gap-and-Trap (opens strong, closes weak = distribution)Unknown
7Catalyst: exponential decay (Earnings k=0.07, Macro k=0.35, Fed k=0.14)Linear decay can go negative; exponential approaches 0 cleanlyUnknown
8Dashboard: Pool Starvation indicator (⛔ DARK if <5 qualifying)Tells you when to NOT trade — system goes dark in poor regimesUnknown

Action: Run runSACSUpgrade from v1's MIS Tools menu. The function logs to SACS_Upgrade_Log tab showing which fixes are DONE / SKIPPED / ALREADY_APPLIED. That single run answers all the "Unknown" cells above.

🔍 LOGIC INCONSISTENCIES SURFACED

Inconsistency #1 — v1 says "ACTIONABLE TODAY: 0" but should say "5 candidates"

v1's email I patched Friday surfaces ACTIONABLE = Lean In + In Sync. Currently shows 0. But v1's Top Conviction shows ABBV/LLY/AMT/GD/PEP all as Lean In setups with SACS 66-86. The bottleneck is the actionFlag === '✅ In Sync' filter. The actionFlag is defined as ≥42 In Sync per legend. After Fix #5's 1.8× expansion, scores like 86.77 should EASILY clear actionFlag — but the actionFlag uses the Composite (not the post-expansion SACS) so it's still the old scale.

Verdict: Fix #5 expanded SACS but didn't expand the actionFlag threshold. Asymmetric upgrade. Need to either (a) lower actionFlag threshold, or (b) compute actionFlag from post-expansion SACS, or (c) don't tie Actionable to actionFlag at all — tie it to FinalState=ADD from Snapshot's 5-gate pipeline directly.

Inconsistency #2 — Test_Entry tab present but blank in V11 Microservices

You asked specifically about Test_Entry. It exists in Architect V11 Microservices (1MU_Ni) as Test_Entry tab. Content per Drive snippet:

📱 MIS MOBILE SANDBOX
ENTER TICKER:
Category, No usable data / invalid ticker
SACS Score
Live Price
Model Size
Stop Loss
Target
Downside %
Upside %
Risk $
Target $
Reason
Blocks
Headline Check

It's a SCHEMA only — placeholder cells with no live data. Never wired. Per the Mobile Command Center vision Sam discussed with Gemini, this was supposed to be the "type ticker → get answer" mobile pattern. It exists; it's not connected.

Inconsistency #3 — Mobile Command Center: code exists, no sheet uses it

Sam dropped scripts/mobile_command_center.js today — checkbox-driven controls for Dashboard tab cells Z1-Z5. Zero sheets currently have these checkboxes. The code is a DESIGN, not a deployment. Adding it requires:

  1. Paste mobile_command_center.js into v1's Apps Script
  2. Set up onEdit trigger: handleMobileButtons
  3. Manually add 5 Insert→Checkbox cells in v1's Dashboard tab at Z1, Z2, Z3, Z4, Z5
  4. Label cells in column AA next to each checkbox

~10 minutes of setup. Not done yet.

Inconsistency #4 — Architect V11 Microservices SACS uses different model

The Microservices Playbook_Dashboard shows DUOL/IBIT/GD with SACS 100/100/97. SACS=100 doesn't appear anywhere else. v1 max was 86.77 (LLY). Production max was 50.99 (INTC). Either:

Without reading its bound script 1mSbzO directly (which the runSACSUpgrade context implies is older code), can't confirm. This is the third independent SACS scale. Three in production = bad.

Inconsistency #5 — Trade_Log formatting bugs across multiple sheets

v1's Recent Trade History shows: 46125, 93947.00%, 95519.00% — that's date as serial number, prices as percentages. Same bug Sam's V11 teardown flagged. Inherited from production. Cell format issue, not formula. 2-minute fix in each sheet's Trade_Log tab.

📸 IOS SCREENSHOTS — what Sam was looking at on phone Apr 28

Reviewed one of the 14 screenshots in the new screenshots/ subfolder. They show the MIS Morning Brief email rendered on phone — Mag 7 panel with prices, percentages, prev close + 30-Day Charts (mentioned tickers) with embedded TradingView/Yahoo chart links. This is Sam's reference visual for what the email should look like. The current v1 email already has both sections. Visual format is consistent.

📂 MIS FOLDER ORGANIZED — what's where now

SubdirContentsTracked?
screenshots/14 PNG iOS + browser screenshots from Apr 28 / Apr 30 / May 1✅ committed
scripts/5 .js automation files (auto_triggers, mobile_command_center, runSACSUpgrade, trigger_power_system, MIS_ARCHITECT_COMPLETE_FIXED)✅ committed
audits/3 forensic teardown MDs + MIS_Genesis_Context.docx + SACS_ZScore_Analysis.docx✅ committed
src/Production clasp project (Code.js + emailDailySnapshot.js + appsscript.json) — bound to 1cosuFr✅ tracked
MIS-v1-script/v1 clasp project — bound to 1HEmRev⚠️ now gitignored (clasp-only)
archive/ + data/ + files/ + python/ + docs/Pre-existing subdirsper .gitignore patterns
RootREADME.md, .clasp.json, .gitignore, .claspignore, appsscript.json, handoff briefs (.txt), Schwab CSV, gitignored .xlsx filesmixed

🚨 RECOMMENDED HARD DECISIONS (do these in order)

Decision 1 — Kill the duplicate-emails source NOW

Open script 1mSbzO (Architect V11 Microservices) → Triggers tab → DELETE ALL TRIGGERS. That stops the weekend "MIS Power Hour" emails. 60 seconds.

Decision 2 — Run runSACSUpgrade on v1 NOW

v1 script 1yBMzt → paste runSACSUpgrade.js into a new Apps Script file → save → from MIS Tools menu run "Run SACS Upgrade (V2)" → check SACS_Upgrade_Log tab to see what changed. 5 min. This applies all 8 fixes including the critical RiskGate fix that unlocks LLY/AMD/MRVL.

Decision 3 — Move v2/Sandbox to graveyard

Per workspace policy (CLAUDE.md): rename in Drive, don't trash. Suggestions:

Decision 4 — Pick primary engine

OptionProsCons
A. v1 (1HEmRev) as primarySACS upgrade applied; my BLUF/Actionable/Earnings-filter patches deployed; clean 5-gate pipelineProduction's Schwab API integration not yet ported; 200+ logged runs of intelligence lost; no closed_trades log
B. Production (1cosuFr) as primary, port v1's improvementsSchwab live; 200+ logged runs of telemetry; mature data layerPlaintext credentials must be rotated FIRST; SACS upgrade work needs porting; UI patches need re-applying
C. Microservices (1MU_Ni) as primaryCleaner architecture per its name; lighter weight; better Power Hour formatTiny sheet; tab structure incomplete; uses unknown 3rd SACS scale; would need rebuild

Recommendation: Option B with strict sequencing — (1) rotate credentials, (2) port v1's runSACSUpgrade + email patches into production, (3) retire v1 to sandbox. This preserves your 200+ logged runs of intelligence and the Schwab pipeline while gaining the v1 improvements.

Decision 5 — Test_Entry / Mobile Command Center

If you want phone-driven control: paste mobile_command_center.js into chosen primary script + add 5 checkboxes in Dashboard. ~10 min. The Test_Entry tab in Microservices is a placeholder — wire it up only after primary engine is chosen.

📊 LOGIC FIT VERDICT — does it all hang together?

LayerLogic fitNotes
SACS scoring math✅ CONSISTENTv1=Sandbox×1.8 expansion. Production uses different lineage but internally consistent.
5-gate pipeline (RiskGate / GradeGate / SACS_Gate / FlowGate / FinalGate)⚠️ PARTIALRiskGate is wrong everywhere until Fix #2 applied. SACS_Gate threshold (60) doesn't match post-expansion scale (max 92).
Email render (Morning Brief / Power Hour / Playbook)✅ FIXED FridayBLUF + ACTIONABLE/SETUP split + Earnings filter all live in v1 since Friday.
Macro panel (Gold/Oil/USD/BTC/ETH)✅ FIXED FridayCode-side fix at line 4342 of v1 emailDailySnapshot.js. Run misSendMorningBrief to verify.
Trade_Log formatting❌ BROKEN ACROSSDate serial numbers, prices as percentages — needs cell-format fix in each sheet.
Sector classifications (BTCUSD as Utilities, etc.)❌ BROKENSam's teardown documented; not yet fixed.
Plaintext credentials❌ EMERGENCYProduction sheet KEY_VALUE tab. Rotate now.
Trigger management❌ 3 ENGINES FIRINGProduction (uncertain) + v1 (active) + Microservices (firing weekends). Consolidate to one.