xp/ edits → E:\hitthe.link pushes. Never edit the deployed copy.Mac xp/ is ahead of deployed E:\hitthe.link\{xos,xui} despite the same commit. Pick xp/ as winner, copy forward, commit once, tag xenphone-canon-v11. Also fix the chatID→chatId mismatch that silently breaks sends. Edits never reached users until this is true.
Confirm omnimind.js serves all routes on :4441 and the api.xlrd.org tunnel is up. Health check becomes a deploy gate.
Spine folds Beeper threads into /api/omni/threads (source:beeper). beeper-warm-keeper holds the bridge live. XUI left panel already filters by source + persona.
Beside inbound → omni (source:beside); /api/omni/send sends; keypad/contacts → /api/call-start; SMS → /send. Call lifecycle closed by /api/call-end.
Mic (Web Speech → composer) + muse/3 webview already wired, echo-immune. Verify the iframe + mic both load. No new wiring.
Middle webview = the WebView of the wrapper showing the same XUI. Native XenBrowser (:9999) is the Mac power tool, not required for GTM.
VVSVEI WebView wrapper: iOS WKWebView IPA + Android WebView APK, both loading the canonical XUI over https. Sign the IPA + publish the APK — that's the gap between "demoable" and "shippable."
Push → GitHub Pages. "Live" = HTTP 200 + no template tokens + real-browser render with ZERO console errors + spine health 200. Anything less is "deployed," not "live."
The whole live experience depends on the omnimind spine running only on the Mac (api.xlrd.org → Mac :4441 via Cloudflare tunnel). Mac sleeps or tunnel drops = every shell silently empties = "Mac-Death." Until the spine is redundant (always-on host or cloud fallback), the product is one closed laptop lid from total outage. Fix before GTM.
xp/ → E:\hitthe.link → push).chatId BEFORE adding features.