Gap
The roadmap's planned cross-cutting primitive ("who perceives what is real," reused by dreamstates, illusions, disguise) was never built as a shared seam. The two consumers that shipped each built their own mechanism:
- Dreams as a room layer (
world/dreams/ — is_dream_engaged, get_dream_space)
- Illusion/disguise as form overlays (
DisguiseKind, ConcealmentLevel, active_fake_overlay, pierce contest in world/forms/services/identification.py)
SceneRound has no mode/variety axis at all, so a scene where different participants perceive different realities (an illusionist deceiving half the room, a shared dream, a haunting only one character sees) cannot be authored.
Why
This unlocks a whole register of scene types the magic system keeps gesturing at — and doing it as a primitive prevents a third and fourth parallel implementation when hauntings/visions/glamours arrive.
Shape (for spec)
Decide whether the seam lives on scenes (per-observer render filtering) or on the perception service layer both dreams and forms already pass through. Explicitly reconcile with the two shipped mechanisms rather than adding a third.
Gap
The roadmap's planned cross-cutting primitive ("who perceives what is real," reused by dreamstates, illusions, disguise) was never built as a shared seam. The two consumers that shipped each built their own mechanism:
world/dreams/—is_dream_engaged,get_dream_space)DisguiseKind,ConcealmentLevel,active_fake_overlay, pierce contest inworld/forms/services/identification.py)SceneRoundhas no mode/variety axis at all, so a scene where different participants perceive different realities (an illusionist deceiving half the room, a shared dream, a haunting only one character sees) cannot be authored.Why
This unlocks a whole register of scene types the magic system keeps gesturing at — and doing it as a primitive prevents a third and fourth parallel implementation when hauntings/visions/glamours arrive.
Shape (for spec)
Decide whether the seam lives on scenes (per-observer render filtering) or on the perception service layer both dreams and forms already pass through. Explicitly reconcile with the two shipped mechanisms rather than adding a third.