Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
11 KiB
AB — Watch + Vision Pro variants
Goal
Lightweight platform extensions of brief E — not full re-designs. Brief E explicitly out-of-scopes Apple Watch and visionOS. AB lifts that out-of-scope into a speculative sketch so the design system knows what shape these surfaces would take when (and if) we ship them. Both are companion-class: glance + approve, not author.
Designer skim
- Headline UX: Watch = wrist-glance + one-tap approval for medium/high cards; no chat composition. Vision Pro = spatial drawer + gaze+pinch approval; hands-free voice always-on.
- Variants (4): AB1 Apple Watch · AB2 visionOS Vision Pro · AB3 Watch ⇄ phone handoff · AB4 Watch notifications-per-C.
- Status: speculative. Neither has a P-tier yet. Brief exists so the design system reserves slot space and so token reuse stays accountable.
- Pair-with: E, A, C,
cross-device-handoff.flow.md. - Open Qs: AB-Q1 Watch independence · AB-Q2 Vision Pro @chobit avatar deferred · AB-Q3 complication slot choice.
Constraints
- No full feature parity expected. Both surfaces are companion-glance + companion-approve only. Chat composition, drawers (B), audit row detail (I), settings (S), tour planning (R) all stay on phone/iPad/web.
- Token + voice inheritance is mandatory. Same stakes colors, same register gradient (00-system-voice §V2). Watch leans plain register because screen real estate forces brevity; Vision Pro leans working register because read-aloud time is cheap.
- Phone-tethered by default. AB1 and AB2 assume the phone is the primary session host; both surfaces are projections of the phone's pending-approvals queue.
- No standalone Vision Pro session at P0-of-this-brief. If Vision Pro ever ships independent, that's a separate brief.
- Stakes-aware haptics translate. Watch haptic vocabulary mirrors phone (per C); Vision Pro uses subtle spatial audio cue instead of haptic.
- Voice TTS check (voice §V8) applies extra-hard on Vision Pro: every surfaced line gets read aloud by default; copy must be prose, not UI labels.
States to design
(Per variant; full state matrix lives in screen-files if/when we promote AB out of speculative.)
- Idle / no pending — quiet glanceable state.
- One card pending — single approval surfaced.
- N cards pending — collapsed count + next-card preview.
- High-stakes incoming — interrupt-class surfacing (haptic on Watch, spatial-near pop on Vision Pro).
- Approved / rejected toast — brief confirmation.
- Open on phone — handoff affordance.
- Offline / unreachable — phone session not linked (banner only).
AB1 — Apple Watch
Form factor: wrist; ~1.7" display; 2-3 visible lines max; haptic-rich; voice via Siri stack (not our voice).
Surfaces:
- Complication — single small-modular slot on the watch face. Shows pending-approvals count + stakes-tinted dot (gray / yellow / red). Tap → opens the Watch app to the queue.
- Glanceable queue — vertical scroll of pending cards. Each row: stakes dot · 4-word title · surface glyph (per 00-system §F5 24-surface iconography). No body preview; tap-to-expand.
- Card expanded view — 1 stakes badge · 1 line "what" (≤ 8 words) · 1 line "why" (≤ 6 words, pulled from
outcome_json.whyper A's stakes-popover) · two big buttons (Approve / Reject) edge-to-edge. - Stakes-aware haptic on incoming high-stakes card — distinct haptic pattern (per C: "haptic on receipt" for high). Medium = single tap. Low = silent (digest only — matches C defaults).
- Single-tap approve / single-tap reject — full-width buttons, generous hit targets. No swipe gestures (Watch swipe is reserved for navigation).
- Long-press for "open on phone" — long-press anywhere on the card hands off to the iPhone (per AB3).
- No chat composition on Watch. No keyboard. No dictation-to-chat. Voice replies are out of scope (Siri-stack integration speculative; defer).
Voice register on Watch: plain register exclusively. 4-word maxes. No metaphor. The wrist is the worst place for editorial flourish.
Complication slot choice (AB-Q3): small-modular vs corner vs circular. Lean small-modular (count + colored dot fits cleanly; corner is too tight for two-element).
AB2 — visionOS Vision Pro
Form factor: spatial; hands-free presumed; gaze tracking + pinch gesture as primary input; voice always-on cheap; large effective canvas.
Layout — spatial drawer pattern:
- Spatial-near layer (~0.7m) — the single attention card. Floating panel, gaze-target. This is where the approval card lives. Card body uses working register (same as iOS approval card per A's State 3), but lines are spaced wider for read-aloud cadence.
- Spatial-mid layer (~1.2m) — the chat stream, scrollable, peripheral. Same content as iOS chat; gaze-scroll.
- Spatial-far layer (~2m+) — audit drawer (per brief I). Pinned at the periphery; ambient receipts feed; tappable but designed to be ignorable while focused on the near card.
Gestures:
- Look-to-target affordances — gazed-at cards subtly highlight (per visionOS HIG hover semantics).
- Gaze + pinch = approval. Look at Approve, pinch. Look at Reject, pinch. Same target-then-confirm idiom Vision Pro users already have.
- Long-pinch on card = edit (opens working-register edit panel in spatial-near).
- No swipe-to-approve — swipe doesn't exist in pinch-grammar.
Voice always-on by default. Hands-free context implies voice is the cheap input. The push-to-talk affordance from A is replaced by always-listening with VAD (matches A's State 5 hands-free, just elevated to default). Wake-word optional.
Read-aloud-friendly copy. Per voice §V8 TTS check: every card body is auto-spoken on appearance unless suppressed by the user. Therefore copy must read as prose, not as labels. Brief E's working-register patterns translate directly; Watch-tight 4-word constraints do not apply.
Audit drawer at spatial-far — the trust loop benefits hugely from being peripherally visible without being intrusive. Quinn can glance "up-right" to see what shipped in the last hour. Tapping a row brings it forward to spatial-near.
@chobit avatar integration deferred (AB-Q2). A persona avatar in Vision Pro is the obvious "wow" frame, but @chobit is a sibling project and the integration contract isn't drawn. AB2 ships avatarless; @chobit slot reserved as the "speaker-position" in spatial-near.
AB3 — Cross-device handoff Watch ⇄ phone
Reuse the cross-device-handoff.flow.md pattern verbatim. Specifics:
- Watch long-press → phone — long-press on a Watch card raises the phone (if nearby/unlocked) at that exact card. Matches the "notification chase" path in the handoff flow.
- Phone → Watch passive sync — every pending-approvals fetch on the phone pushes the delta to the Watch app. No explicit handoff from phone to Watch needed.
- Vision Pro ⇄ phone handoff — Vision Pro session checkpoints to phone every N seconds; doffing the headset surfaces a "pick up where you left off" banner on phone (same hearth-register copy as E4 web).
AB4 — Notifications on Watch (per C)
Stakes-aware translation of brief C's matrix to the wrist:
| Stakes | Watch behavior |
|---|---|
| High | Vibrate (distinct haptic) + foreground the approval card on raise-to-wake. Matches C's "always all channels" default for ai-copilot high. |
| Medium | Single-tap haptic; glanceable complication count increments; no card foreground. Tap complication to enter queue. |
| Low | Silent. Digest-only on phone/email per C defaults. No Watch surfacing. |
Channel-offline behavior (mac-sync down etc.) does not propagate to Watch UI — Watch is a projection of the phone's queue; if the phone shows the banner, Watch quietly inherits the degraded state without its own banner. Wrist real estate is too precious for meta-status copy.
In-the-wild copy
AB1 · Watch · complication, 3 pending mixed (plain, ultra-tight):
3 · ●●○
AB1 · Watch · high-stakes card expanded (plain, 4-word max):
Tryst bump failed. Re-auth or pause? [ Re-auth ] [ Pause ]
AB1 · Watch · medium-stakes card expanded (plain):
OF tour-tease · 9pm. Confidence 0.83. [ Approve ] [ Reject ]
AB1 · Watch · low-stakes does not surface — silent; digest-only on phone.
AB2 · Vision Pro · approval card on appear (working, read-aloud-friendly per §V8):
content-onlyfans has a tour-tease ready for nine tonight — confidence eighty-three. Approve to send, edit before you do, or set aside.
AB2 · Vision Pro · post-approval toast (hearth, spoken):
Tucked in. Receipt's in the drawer.
AB3 · Watch long-press handoff (hearth, on phone):
Picked up from your wrist.
Out of scope
- Full chat composition on Watch. No keyboard, no dictation-to-thread, no voice replies routed through ai-copilot. Watch is glance + approve only.
- Full audit drawer on Watch. Brief I's row detail, feedback affordances, counter-actions — all phone/iPad/web only. Watch shows pending; phone shows past.
- Standalone Vision Pro without phone. Phone is the session host. If the phone is unreachable, Vision Pro shows the offline banner only.
- Drawer interactions on Watch. No calendar, no asset library, no specialist drawer (brief B). Tap to "open on phone" instead.
- Settings on either surface. S-brief lives on phone/web only.
- @chobit avatar on Vision Pro. Deferred (AB-Q2).
- Android Wear / Pixel Watch / any non-Apple wrist surface. Symmetric to E's no-Android stance.
Open questions
- AB-Q1 Watch independence vs phone-tethered. Lean phone-tethered: Watch as projection of phone queue. Standalone Watch app (cellular Watch, no phone) is a separate brief. [exploratory]
- AB-Q2 Vision Pro persona avatar @chobit integration. Deferred — the speaker-position is reserved in spatial-near but unfilled at v1. Requires @chobit integration contract drawn first. [exploratory]
- AB-Q3 Watch complication slot choice — small-modular vs corner vs circular. Lean small-modular (count + colored stakes dot). Needs design pass. [nice-to-have]
- AB-Q4 Vision Pro voice always-on — wake-word required or pure VAD? Pure VAD on Vision Pro risks accidental capture in shared space. Lean: wake-word default-on, user-disableable. [exploratory]
- AB-Q5 Watch app independence from phone over LTE — if the phone is dead but the Watch is on cellular, does the Watch app talk to
platform.apidirectly? Lean: yes, but only the read-approvals + approve/reject endpoints; no chat, no streaming. [exploratory]
Related
- E — Cross-platform variants — AB is the speculative lift of E's out-of-scope.
- A — Chat surface — approval-card semantics + stakes/confidence inputs feed AB1 + AB2.
- C — Notifications — channel × stakes matrix translates to wrist haptics in AB4.
cross-device-handoff.flow.md— pattern AB3 inherits verbatim.- 00-system-voice §V8 — TTS read-aloud check governs Vision Pro copy.
- 00-system-visual-system §F5 — 24-surface iconography reused as Watch surface glyphs.