Projection field for live subscriptions. Reads
getObviousExits() (explicit ∪ zone-derived, !hidden) and
shapes each entry as { direction } for the wire. Destination
paths are deliberately NOT shipped — the pane renders a "go
No dependsOnFields plumbing today: rooms with explicit exits
settle at hydration and cartesian-derived exits are positional.
If runtime exit add/remove ever becomes a hot path (door
sealing, dynamic walls), wire addExit / removeExit to fire
FieldChangedEvent { field: 'exits' } the same way Container's
addContainable / removeContainable do for contents.
exitsis the canonical instruction field shape for declarative content.applyExitsconsumes aRecord<string, ExitInstruction>and installs the runtime entries — no paired getter for the spec (the runtimeexits: Map<string, Exit>has its own API). SeeapplyExitsandfeedback_property_vs_instruction_fields.