Entering and leaving an Encounter

In plain words: Spectre: Entering and leaving a meeting

Designed 3 min read 2 glossary terms 3 connected pages
The short version written for the Snayu team

How one VR meeting is admitted, how runtime events (focus loss, revoked tracking, disconnects) are recorded, how each participant can leave, and how the meeting is settled.

Why read it: Read this when designing VR session handling, consent tracking or exit behaviour.
  1. 1A meeting binds a VR place, participants, purpose, consent and optionally an avatar projection.
  2. 2Runtime events are evidence only; they do not prove attendance, understanding or consent.
  3. 3Changes in participants, purpose or consent require fresh admission.

Designed Contract only.

Words on this page, decoded click one for its card

The original text Underlined words open their plain-English card.

The participant enters an admitted VR Habitat to meet the LichAssistant. Later the runtime loses focus, a tracking permission is revoked, or the headset connection disappears. An Encounter keeps those events attributable and ends according to what can actually be observed.

Admit this meeting

spectre.enter_encounter@2 begins with exact VRHabitat@1, participants, purpose, consent, and—when meeting the LichAssistant—an already admitted Avatar ProjectionBinding@2 for that Habitat. A generic Encounter needs no Avatar. Spectre may report the target result but cannot create, revise, replace, or close Avatar's binding.

Follow the meeting in SpectreEncounter@2: retain participant/entry admission, purpose, Habitat revision, consent chronology, optional Avatar reference, significant semantic interactions, focus/pause/recenter, interruption/recovery, exit, and terminal judgment. If participants, purpose, consent scope, or Avatar binding change, require fresh admission or an explicit recovery boundary. The Habitat can support many such Encounters while each meeting remains finite.

flowchart TD
    F["Foundry world/<br/>build reference"] --> H["VRHabitat@1"]
    C["Capabilities ·<br/>reference space ·<br/>comfort · exit"] --> H
    H --> E["SpectreEncounter@2"]
    P["Participants ·<br/>purpose · consent"] --> E
    A["Avatar<br/>ProjectionBinding@2 ·<br/>optional"] --> E
    R["Volatile runtime<br/>session facts"] --> E
    E --> T["Attributed<br/>terminal settlement"]
    T --> AS["Avatar settles<br/>its binding<br/>separately"]

Runtime state and experienced events

The OpenXR lifecycle describes readiness, visibility, focus, stopping, pending loss, and exit. Spectre records attributed events such as runtime_ready, input_suspended, exit_requested, runtime_stopping, and runtime_lost. These observations prove neither attendance, perception, consent, understanding, nor memory.

An XrSession, game process, socket, device handle, or pose stream remains volatile provider state. Preserve runtime version, session-state changes, selected space kind, capabilities, start/stop/loss, and session epoch as observations. They cannot replace durable Encounter identity.

When the runtime reports XR_SESSION_STATE_LOSS_PENDING or equivalent loss, open an interruption. Policy must either settle it or offer explicit recovery by enumerating capabilities again, rechecking purpose/consent, and creating and linking a fresh provider epoch. A runtime EXITING request ends the XR road without automatic restart. Do not fabricate rendering or input across the gap.

Each participant may leave

Participants independently pause, recenter, leave, or revoke consent. Departure removes that person; continuation requires the remaining participants, purpose, consent, and comfort policy to permit it. A required participant's departure can settle the whole Encounter as safely exited or interrupted.

The admitted modality determines what each person actually received. Optional tracking revocation removes or degrades the feature under policy. If the remaining mode no longer meets purpose or comfort requirements, expose exit and settle instead of inventing an equivalent experience.

Safe exit means following the declared local pause, disclosure, handoff, and exit protocol and settling observed results. It guarantees neither physical safety, device behavior, comfort for every body, nor unseen effects. WebXR's privacy model motivates retaining semantic events and minimum capability facts rather than raw tracking archives.

Head/hand/gaze/face/body/room-mesh/camera/microphone/device-id/per-frame streams remain volatile in the admitted runtime or separately governed owner. They are never used to infer identity, attention, affect, intent, consent, co-location, or remembered experience. Spectre receives no ambient engine console, filesystem, tracking database, microphone, world mutation, or body authority.

Settle what happened

Return completed, safely_exited, interrupted, refused, or unresolved, with exact externally owned Avatar/world/audio/effect receipts. No terminal can claim that every frame, gesture, utterance, or external effect occurred.

In the reference journey, the Habitat admits required features and records optional downgrade; Avatar independently supplies its binding. The participant enters through a declared immersive or companion modality. Spectre records pause, focus, recenter, reference-space changes, consent and semantic events. Tracking revocation may narrow participation or lead to exit. Runtime loss then either settles interruption or receives explicit fresh-epoch recovery. Avatar separately settles its projection from that attributed result.

First proof and revision continuity

A network-disabled synthetic fixture admits seated, separate bounded room-scale, and companion-screen Encounters, with a static or head-and-hands Avatar. Prove required-feature refusal, optional downgrade, focus loss, recenter/space change, participant exit, consent revocation, visible exit request, abrupt loss, new-epoch recovery, export, and deletion. It proves no hardware compatibility, universal comfort, content quality, multiplayer, physical safety, or delivery.

spectre.virtual_reality revision 2 replaces revision 1 for LichThe Assistant encounters: spectre.enter_encounter@2/SpectreEncounter@2 consume Avatar's corrected ProjectionBinding@2. Habitat admission and VRHabitat@1 stay unchanged. No registry or RunJob Record used revision 1; historical references retain meaning without executable migration.

Return to Spectre.