Comms

The bottom-right corner — the close of the us diagonal (brand top-left ↔ comms bottom-right), and the mirror of Preferences. No fuss — just a round silver-blue button. One door with one job: talk to a human — no sales-or-support fork, no channel picker, no bot to get past. Comms is helpful background, not the main event — that's why this corner wears silver, not gold. (The AI assistant is its own launcher in the app-bar middle; this door is for people.)

BetaComms is Beta — CommsCorner is the pattern’s component. The mailto transport is settled; the popover + message form stage arrives only when a real comms backend ships.

Today the launcher IS the mailto link. Click it and your mail client opens — current page and build version already filled into the subject and body. No popover, no form. The mailto is the transport that never breaks, and hiding it behind a popover that can fail would defeat the point. When a real comms backend arrives (support inbox, websocket, the works), the pattern grows a popover and form next to this fallback — and the click still falls back to your mail client whenever the popover machinery can't run.

Any Halo surface

A round silver-blue button parked at bottom-right, mirror of Preferences at bottom-left. The trigger is a real <a href="mailto:…"> — left-click opens your mail client; right-click and middle-click behave like a real link (copy email, open as link). The page path and build version hitch a ride in the email body.

One door

One way in — no sales-or-support fork, no chat / email / call menu, no bot to get past. The only choice you make is open comms with a human. When something's wrong, you shouldn't have to sort yourself into a queue before a person can help.

What rides along

The mailto bakes page path and build version into the email body, so support knows where you were and which build you were on. When a real backend takes over, the same details ride the websocket or inbox channel — never on screen, always along for the ride.

Not the AI

This is the human door. The AI assistant has its own launcher in the app-bar middle. This button reaches a person — keep the two apart.

Silver-blue, bottom-right — the close of the us diagonal (brand top-left ↔ comms bottom-right), mirror of Preferences at bottom-left. They're the only silver that sticks around. Toasts stack above this corner, so a notification can never bury the door. Better still, it outlives the page: Comms mounts above the app's ErrorBoundary, out of reach of content errors — so the door still opens when the page behind it has crashed. Which is exactly when you want a human (and any AI assist here always keeps a bail-to-human escape hatch). (ADR-0027 · ADR-0025.)

API

The pattern’s component is CommsCorner — mount it once at the shell root, above the application’s ErrorBoundary (SiteLayout and Portal already mount it; pass them the comms config instead of mounting a second corner). One required prop, three optional.

mailto
The receiving address. Required — the launcher renders as a real mailto anchor pointed here, so link semantics (copy email address, open as link) come for free.
subjectPrefix?
Subject-line prefix; the current page path is appended after it. Defaults to the chrome bundle’s localized “Halo feedback”.
version?
Build version stamp appended to the email body alongside the page path — ambient context for support, never visible chrome.
onError?
Telemetry reporter — fires once if the corner’s internal boundary catches. The degraded fallback (same silver silhouette, pre-computed mailto) renders regardless; the door never closes.

Usage

The comms cornertsx
import { CommsCorner } from '@halo-compliance/ui'

// Mount once, at the shell root, ABOVE the application's ErrorBoundary —
// the door must still open when the page behind it has crashed.
// (SiteLayout and Portal already mount it; pass comms={{ … }} there
// instead of mounting a second corner.)
<CommsCorner
  mailto="support@halocompliance.com"
  subjectPrefix="Halo feedback"     // optional — chrome default applies
  version={BUILD_VERSION}           // rides along in the email body
  onError={reportChromeError}       // degraded fallback renders regardless
/>
  • /shell — the shell’s four-corner lattice this door closes.
  • /preferences — the mirror silver corner at bottom-left.
  • /error-states — the degraded fallback that renders when the corner’s own boundary catches.