M.010.12 — iOS SharePlay Multi-User AR via FaceTime (Execution Spec)
Date: 2026-04-04
Owner: Copilot execution lane
Status: Ready for implementation
Goal
Enable shared holographic sessions over FaceTime using SharePlay so participants can co-view and co-edit .holo scenes with synchronized state and session controls.
Product behavior
- Host starts FaceTime call and launches SharePlay AR session.
- Invitees join and auto-load synchronized scene context.
- Participant actions (placement/edit/tool changes) propagate to all peers.
- Session state remains coherent through pause/resume and participant churn.
- Final scene can be exported or persisted by host authority rules.
Scope
In scope (v1)
- SharePlay session bootstrap + participant lifecycle
- shared scene state sync contract
- host/participant role model and permissions
- conflict handling for concurrent edits
- reconnection and late-join snapshot replay
Out of scope (v1)
- cross-platform non-FaceTime participation
- large-room (>N participants) scaling beyond launch target
- granular enterprise ACL management
Architecture
1) SharePlay session controller
- detect active group session
- join/leave hooks
- participant identity mapping
ts
interface SharePlayParticipant {
participantId: string;
displayName?: string;
role: 'host' | 'editor' | 'viewer';
joinedAtMs: number;
}2) Shared state channel
ts
interface SharePlayStateMessage {
sessionId: string;
senderId: string;
type: 'snapshot' | 'delta' | 'presence' | 'control';
sequence: number;
timestampMs: number;
payload: Record<string, unknown>;
}- host authoritative ordering
- deltas for low-latency updates
- snapshots for late join/recovery
3) Conflict policy
- default host-ordered last-write-wins
- optional object-lock hint for active edit focus
- correction messages for rejected mutations
4) Resilience model
- participant reconnect handshake
- state gap detection + snapshot replay
- session pause/resume semantics for app backgrounding
Proposed code touch points
packages/runtime/- SharePlay adapter + participant lifecycle manager
- state message codec and replay logic
packages/core/- shared-session schema validation + merge helpers
packages/studio// iOS front-end package- host controls, participant list, role indicators
Failure taxonomy
SHAREPLAY_SESSION_UNAVAILABLEPARTICIPANT_SYNC_TIMEOUTSTATE_SEQUENCE_GAPCONFLICT_RESOLUTION_REJECTEDSESSION_RESUME_FAILED
Acceptance criteria
- Host and at least one participant can co-join and view the same AR scene.
- Edit deltas propagate with deterministic ordering.
- Late joiners converge to host scene state via snapshot replay.
- Reconnect path restores participant state without scene corruption.
- Session controls and role indicators are visible and functional.
Test plan
Unit
- message sequencing and gap detection
- role/permission gating
- conflict resolver behavior
Integration
- host + 2 participant edit propagation
- late join snapshot replay
- reconnect after temporary disconnect/background
Device validation
- iOS FaceTime SharePlay with supported devices
- variable network quality scenarios
- long-running collaboration session stability
Shipping slices
- Slice A: SharePlay join/lifecycle + base message channel
- Slice B: scene delta/snapshot sync + conflict policy
- Slice C: participant UX, resilience hardening, and telemetry
Metrics
shareplay_session_start_totalshareplay_participant_join_totalshareplay_delta_apply_latency_msshareplay_snapshot_replay_totalshareplay_reconnect_success_total
Definition of done
- Multi-user SharePlay AR session works end-to-end in FaceTime context
- acceptance criteria pass
- reconnect and late-join behavior validated
- operator docs include session roles, controls, and known limits