MIS Email Render — UI/UX Requirements (Post-FSE Targets)
Status: Architectural requirements log. Do NOT code these tonight. FSE Session 1 (
MIS_FSE_ARCHITECTURE.md§8) is prerequisite.
Captured: 2026-05-03 9:30 PM EDT · Session 22 pt 2
Source: Gemini critique #3 (May 3 Power Hour test email teardown) + Genesis Context §13 + Sam's recurring email-clarity asks
When these apply
After FSE_ENGINE tab exists and is the single source of decision truth (per MIS_FSE_ARCHITECTURE.md). Email render becomes a consumer of FSE state, not an independent classifier.
Until then: keep current Lean In / Actionable / Watch split (already shipped 2026-05-03 commit).
Requirement 1 — Zero Contradictions Rule
Rule: Email must never surface a ticker under "Trade Actions," "Lean In," "High Conviction," or any execution-implying header unless the ticker has cleared the FSE ADD or STARTER gate.
Pattern that violated this (May 3 test email):
- Game Plan said "OBSERVE-ONLY — 0 actionable today"
- Trade Actions section showed 💎 LEAN IN: LLY, PEP, XLU, DBX, AAPL
- Reader has to resolve the conflict the system should have resolved
Already partially fixed (May 3): Plaintext + HTML now split into ✅ ACTIONABLE TODAY (In Sync gate) vs 💎 LEAN IN SETUPS — INFORMATIONAL ONLY (pattern only).
Still needed (post-FSE):
- Replace independent signalTag === 'Lean In' filter with FSE.FinalState IN ('ADD','STARTER') lookup
- Tickers that are FSE-WATCH go to "🔭 On The Radar" appendix at email tail, never near execution headers
- Tickers that are FSE-BLOCKED / REJECTED never appear in user-facing render at all (still logged in DIAGNOSTICS)
Requirement 2 — Smart Earnings Tiering
Rule: Earnings list must split into two tiers with distinct visual weight. No "top 5 dumb cap" filter.
Tier 1 — Direct Risk (always show, bold):
- Currently held tickers (per Holdings_Clean)
- Active watchlist tickers (per Tickers tab Include = TRUE)
Tier 2 — Macro Movers (always show, dimmer):
- Mkt Cap > $150B (per Tickers tab cap column or Yahoo lookup)
- OR Mag 7 (AAPL, MSFT, GOOG, AMZN, NVDA, META, TSLA — already wired in misBuildMag7_)
- OR sector leaders for Semis / Banks / Mega-cap Tech regardless of cap
Tier 3 — Hide:
- Small/mid-cap not in Tier 1 or 2
- Behind a "+ N other tickers reporting this week (see EARNINGS_REPORTED_LOG)" footer
Implementation hint: add IsMacroMover boolean column to Tickers tab (or compute from cap+sector lookup). Email reads that flag.
Requirement 3 — Mandatory Risk Display
Rule: Any ticker printed under Holdings or Trade Actions MUST display Stop and Target inline.
Today's failure: Trade Progress block shows P&L without showing where the rip-cord is.
Format: TICKER · $price (+chg%) · Stop: $X · Target: $Y · R:R: 2.0
Source data: Snapshot tab columns K (Stop_1xATR), L (Stop_1.3xATR), M (Stop_2xATR), P (Target_Price), S (RR_Ratio). All exist; render layer just doesn't pull them.
Tied to Trade_Planner: if Entry_Date is populated (per Sam's manual entry), show Held N days after R:R.
Requirement 4 — BLUF (Bottom Line Up Front)
Rule: First element of every email body (after header band) must be a 1-2 sentence dynamically generated summary.
Inputs: Macro regime label, breadth (in-sync count vs total), FSE actionable count.
Format:
BLUF: Regime is
<NORMAL|SELECTIVE|DARK>· Breadth<N of M tickers in sync>· FSE shows<K actionable>setups today.
One-line read:<dynamic narrative tied to those 3 numbers>
Examples:
- Regime NORMAL · 47 of 184 in sync · FSE shows 3 actionable. Selective tape, narrow leadership.
- Regime DARK · 12 of 184 in sync · FSE shows 0. No new entries; protect capital.
- Regime NORMAL · 89 of 184 in sync · FSE shows 7. Broad strength; full deployment allowed.
Already partially shipped: the existing misBuildBLUF_ (May 1 commit 4504d44) has the skeleton. Needs to be promoted to position #1 (currently buried below Macro Pulse) and rewritten to read off FSE counts not raw signal counts.
Requirement 5 — Market Mode Framing (added 2026-05-03 after Sun PM test)
Rule: Every email must carry an explicit "Market Mode" line at the top describing why the data looks the way it does. Empty actionable list with no framing = reader assumes system is broken.
The missing frames:
- Closed (weekends, holidays): "📅 Markets closed · Showing post-
- Pre-market (4-9:30 AM weekdays): "🌅 Pre-market · Yesterday's close data + overnight news · No live trigger gates yet"
- Open / mid-day (9:30 AM – 2:30 PM): "📈 Live trading · Setups not yet validated for ADD (per FSE Time Lock §X) · STARTER tier may fire"
- Power Hour (3:00-4:00 PM): "⚡ Power Hour · Live tape · ADD signals unlocked"
- After-hours (4-8 PM): "🌆 After-hours · Today's close data · Tomorrow's setups previewing"
Hypothetical-mode caveat: when no setups qualify due to mode (closed/pre-market), the email should still show what WOULD be top-conviction if market were open. Frame as: "Hypothetical Lean In if market were open: TICKER1, TICKER2, TICKER3 — verify on Mon open."
Source: Sam Sun May 3 10:25 PM EDT — email read came across as broken because it didn't acknowledge market state. "Why isn't it telling me that the reason it's not there is because it's after hours?"
Implementation note: FSE schema already includes DataQuality and RunType columns. After Session 1, RunType can carry the mode value. After Session 5 (email reads FSE), this becomes a one-line read at top of every email body.
Sequencing rule
These 4 requirements are downstream of FSE. They can be wired in any order after FSE_ENGINE tab exists, but not before — wiring them on top of the current pre-FSE pipeline (where 4 surfaces classify independently) builds a more elaborate version of the contradiction Gemini's critique #3 already exposed.
Proposed order once FSE is in place:
1. R1 (Zero Contradictions) — biggest reader-trust win
2. R4 (BLUF) — sets the frame for everything below it
3. R3 (Mandatory Risk Display) — every ticker now self-documents
4. R2 (Smart Earnings Tiering) — last because requires Mkt Cap data wiring
Source trail
- Local file:
docs/MIS_EMAIL_RENDER_REQUIREMENTS.md - Gemini critique source: pasted by Sam in Session 22 pt 2 chat (May 3 ~9:15 PM EDT)
- Genesis Context cross-ref:
MIS/audits/MIS_Genesis_Context.docx§13 - FSE prerequisite:
docs/MIS_FSE_ARCHITECTURE.md§8 (9-session build plan)