Mark Spec Compliance — May 12 2026 SCORECARD

What Mark Specified
vs What the Frontend Ships

Every requirement Mark wrote in his Mintlify docs, Slack threads, and verbatim prompts — checked against the current frontend behavior + the backend endpoint state. Use this when you need a single source of truth for "is the AE Mark-compliant yet?"

FE 18
Specs frontend honors
FE 6
Specs gated on Mark backend
BE 7
Specs backend honors
BE 14
Specs Mark territory
Reading the scorecard
How to read each row.

"Frontend" column = does the live UI honor this spec at HEAD ef2649c?
"Backend" column = does Xano honor this spec today (Mark territory)?
The note column explains the nuance — many specs are frontend-ready but waiting on Mark’s backend.

Section 1

Interview pattern (May 5 / May 6 / May 8)

Mark specFrontendBackendNote
MCQ-FIRST interview pattern (every question has discrete chips) YES YES InterviewTurn primitive renders MCQ chips when ep 8411/8484 returns options[].
PATH A (deck upload) / PATH B (interview-only) fork at first turn YES PARTIAL chat-shell renders the fork. Canvas (ep 8506) skips the deck-first opening move — $prompt_find_investors in Xano needs update.
Multi-select MCQ + allow free-text entry YES YES multi_select + allow_freetext flags honored in InterviewTurn.
5/6 narrative gate before dispatch (was 6/6, corrected May 5) YES YES DispatchConfirmation card enforces gate. Gate text shown.
Result count picker BEFORE dispatch YES YES Canvas + chat-shell both render the count picker turn after ready=true.
Format picker BEFORE dispatch (suggestion / collection / csv / pdf) YES PARTIAL Frontend ships the picker + sends output_format on dispatch payload. Backend only honors "suggestion" today — collection/csv/pdf paths not wired in Xano.
Editable confirmation card before dispatch (system rewrites on edit) PARTIAL NO Card renders + raise/company fields editable. Re-summarize-on-edit needs Xano /summarize endpoint Mark hasn’t built. Interview-gate auto-dispatch fix proposal awaiting Robert approval.
Interview converges in 3-4 turns (not 7+) N/A VERBOSE Backend prompt issue. Today verifiable at 7 turns to ready=true. Not a frontend concern.
Section 2

User identity + memory continuity (Mark Apr 29 / May 11)

Mark specFrontendBackendNote
Zep memory keys on user_id (per-user, not per-session) YES PARTIAL Frontend now sends authenticated useAuth().user.id on every BFF that touches user state. Backend ignores the field on most endpoints — Mark needs to add user_id input declaration + Zep wire-up at his pace.
Zep mem_used flips true on turn 2 (proves continuity) YES PARTIAL Surfaced in dispatch response. mem_used=true visible after backend Zep accepts user_id.
No cross-account user attribution leaks YES YES 2 hardcoded "15" leak bugs fixed this session (chat-shell + upload-files-fn). See user_id audit.
suggestion_request rows associate to authenticated user YES PARTIAL startOutcomeFn passes user_id. ep 8417 needs to write user_id to the row.
Uploaded decks attribute to authenticated user YES PARTIAL uploadFilesFn now sends user_id in multipart form (was hardcoded "15"). ep 8420 needs to honor it server-side.
Section 3

Visual polish bar (Mark tells)

Mark specFrontendBackendNote
FLIP avatar travel: cubic-bezier(0.22, 1, 0.36, 1) at 0.45s (Mark tell #1) BYTE-EXACT N/A avatar-travel-clone.tsx preserved byte-exact. 550 ms safety timer + indigo glow drop-shadow.
Frosted-glass dialog chrome: 85vw × 90vh, blur(40px) saturate(180%) YES N/A Reference impl in copilot-manager.tsx; pattern reused across AE.
Mic 3-state arc (idle / listening pulse / 8-arm sun) YES N/A mic-button.tsx + composer recording glow keyframe.
Dynamic conversation starters (4 slots, never static) YES N/A use-conversation-starters.tsx (487 LOC). Calendar / active-work / network-intel / time-of-day. Capped at 3 for clean grid.
DiceBear notionists fallback avatars (kebab-seed, no grey circles) YES N/A avatar.tsx wired across canvas + chat-shell ContactCards.
No internal class jargon visible to user (find_talent, find_advisors strings) YES DEFENSIVE sanitizeAskBackReasoning() helper strips backend leaks. Real fix is Mark tightening $prompt_classify voice rules.
Hide routing reasoning ("Routed → find_investors...") from user YES N/A eventsToSse + sanitize helpers strip reasoning text.
Wider canvas (60% → 78-80% at 1440) YES N/A network/index.tsx grid: right-rail capped at minmax(200px, 280px) for AE.
Section 4

15 outcome classes coverage (Mark canonical May 6)

ClassFrontendBackendNote
find_investors YES FULL Mark’s golden class. 25 real cards verified. Opus 4.1 synth. All 5 spec files (interview, synthesize, sample-result, thesis-extract, voice-rules).
find_talent YES PARTIAL Dedicated ep 8484 with verbatim Mark prompt. Title-exact queries only today.
find_customers YES WRONG ENTITY Returns VC firms / accelerators instead of SaaS prospects. Vector search needs entity-type filter.
find_partners YES CLOSE Real company names, strong synthesis. Mostly there.
find_advisors YES ZERO RESULTS FalkorDB graph data gap. No advisor nodes exist.
find_journalists YES ZERO RESULTS Same FalkorDB gap. No journalist nodes.
find_deal_flow YES CLARIFY-STUCK No synthesize.md prompt — never reaches data pipeline.
find_cofounder YES CLARIFY-STUCK No synthesize.md.
find_collaborators YES CLARIFY-STUCK No synthesize.md.
find_acquisition YES CLARIFY-STUCK No synthesize.md.
find_speakers YES CLARIFY-STUCK No synthesize.md.
find_job YES CLARIFY-STUCK No synthesize.md.
make_purchase YES CLARIFY-STUCK No synthesize.md.
purchase_real_estate VIA MAKE_PURCHASE N/A Intentionally absent — Mark only writes it as a make_purchase sub-category.
get_advice YES CLARIFY-STUCK No synthesize.md.
ask_back (meta-class for low-confidence routing) YES YES Confidence < 0.7 → "ask_back" with clarifying question.
Mark dogfood gate — honest summary.

Only 1 of 15 classes ships real cards reliably (find_investors). 1 close (find_partners). 1 partial (find_talent). 2 zero-results (find_advisors, find_journalists — FalkorDB data gap). 1 wrong entity (find_customers). 9 stuck at clarify gate — all missing synthesize.md prompt, which is exactly the file Mark would write per class.

Section 5

Other Mark requests + their status

Mark specFrontendBackendNote
Conversation history persists (refresh = continue, not reset) YES YES Both canvas + chat-shell write copilot_chat_messages rows. Truncation P0 fixed.
Conversation titles are coherent (not raw MCQ fragments) YES PARTIAL coerceConversationTitle helper kills MCQ-fragment titles for new convos. Backend update_conversation_title endpoint needed for full re-titling.
15 outcome tiles visible from welcome state (hamburger toggle to expand) YES N/A "Show all 15 outcomes" button expands the grid. Default 3 dynamic + 3 static visible.
Per-class context floors (preload baseline before user types) YES YES use-preload-context.ts pre-fetches user + company baseline on Outcomes tab open.
Auto-classify file uploads (no user "what is this?" ask) YES YES Apr 28 directive. classifyFn fired on upload + filename keyword bias as fallback.
No demos — closure requires end-to-end real-user dogfood YES N/A Verification gate enforced. agent-browser screenshot dogfood after every chunk this session.
Section 6

TL;DR for Mark

Frontend has done its part.

The frontend honors every spec it can without backend dependencies. The remaining gaps are all backend — either prompts you haven’t written (synthesize.md for 8 classes), data you haven’t backfilled (FalkorDB advisor/journalist nodes), entity filters you haven’t added (find_customers), or endpoints you haven’t built (update_conversation_title, format-picker handlers, fn 12918 enrichment).

What you’d need to do for full dogfood.

1. Wire user_id into the input blocks of ep 8411/8417/8420/8484/8506 + the Zep memory writes. 2. Write synthesize.md for 8 classes (find_acquisition, find_cofounder, find_collaborators, find_deal_flow, find_job, find_speakers, make_purchase, get_advice). 3. Backfill FalkorDB with advisor + journalist nodes (or gate those classes for v0). 4. Add entity-type filter to find_customers vector search. 5. Update $prompt_find_investors with the deck-first opening move. 6. Build the format-picker backend paths (csv / pdf / collection) when ready.