Development updates, QA reports, and documentation for the Orbiter frontend.
openui05/dispatch (#8497) script + table schemas verified this session. The swap: Zep → Mem0 V3 as a distilled-memory recall layer (never a transcript/profile store), entirely server-side inside Xano — frontend contract identical (query / thread_id / suggestion_request_id in, mem_used / mem_ingested back), zero UI changes. 5 of 7 callouts decided + implemented for Outcomes: transcript-writes = no change; idempotency = deterministic source_id + retrieved-dedup (no new table); self-context metadata = N/A to the Mem0 path; streaming/failed-turns = #8497 is non-streaming, extractor runs end-of-stack; ownership guard = verify suggestion_request.user_id == auth.id before any run-scope op, else degrade to user-scope. The 2 non-Outcomes callouts (meeting-prep identity bridge, How I Know persistence) are deferred with a stated position. Ground truth: #8497 is auth="user" ($userId=$auth.id), owner col = user_id, no ai_memory_event_log table exists, #8497 writes no transcript today. Mem0 recall drops into the existing [NETWORK MEMORY] slot; extractor = gpt-5-nano (OpenRouter) w/ claude-haiku-4-5 fallback. Build + verify on sandbox clone openui05/dispatch-mem0; live #8497 stays pristine until Robert/Mark green-light cutover; Zep blocks stay (re-gated) for full reversibility. Outcomes must hit 100% + verified (incl. draft select) before the other 3 chats are touched.suggestion_request row (preserves modification history for RL, not the unused modified boolean) — fired live 6/4: Submit on suggestion 245 minted row 1718, dispatch reached the server (ep 8497 + ep 8491 both 200), original 245 byte-identical and re-openable. Dev-only tuning levers gated behind the flask (#62 dispatch-lever mirror + #64 Modify tab) so the default surface is demo-clean. S1 cosmetics: tonal Submit (#38), word/char counter removed (#42), bars waveform glyph (#40), real enumerateDevices mic dropdown (#53), Show Options grid (#24), Context Inspector flask (#25/#43). Draft restore (#57/#63) replays the conversation + presents the editable submit fork. One open item is backend, not frontend: row 1718 stays processing / osc:0 — the M10 lifecycle writeback that affects every row (Charles/Mark territory). 24 live-dogfood screenshots embedded.anthropic/claude-opus-4-7 primary for find_investors (3× cheaper, ~40% faster, Opus-grade synthesis). Haiku 4.5 "7+ rows = empty arrays" root-caused and fixed across 11 endpoints (cap at 6 rows + fallback lambdas). Hardcoded 0.5 match scores eliminated — real keyword-density scoring now produces distributions like [0.88, 0.76, 0.62…]. Rule-based Cypher keyword matching replaces name_embedding ANN on 6 abstract-query endpoints. Mark's 4 standing directives (Mintlify sync, context/get-master-context-person, leverage loop context, outcome interview context) all shipped. Test suite 1,411 → 1,463 (+52). PR #354: Lint ✓ Build ✓ CodeRabbit ✓ Netlify ✓.pitch/update-pitch-profile, NEW) replaces the inline stub; ep 8545 (/summarize-pitch-profile, NEW, Haiku 4.5) lights up system-rewrite-on-edit behind the Wave 19 pre-wire; travel class shipped end-to-end as outcome #16. Wave 18: auth-flicker / env-tests / MemoryPanel parity. Wave 19: per-thread pitch-confirm gate, TTS over-fire fix, right-rail bridge, mobile CSS, system-rewrite pre-wire. Wave 20: Path A persist, 254 LOC of dead CSS removed, stale-docs correction. 4 page-feedback flags from Robert closed (paperclip attach, freetext margin, taking-longer pill removed, system-rewrite live). 1,391 tests passing. PR #343 still MERGEABLE / CLEAN. 3 of 5 Mark-territory blockers from yesterday's report closed./chat shipped instead of the 2,285-line sandbox state machine. Three parallel agents tonight: structural baselines, supporting-component port (DONE), copilot polish-bar inventory (DONE — 678-line doc). Pixel-diff loop next. Two dev servers up side-by-side. Updates as waves close.