# The room and its fixtures **🟠 Advanced · Lesson 10** THE ROOM. Every Rift owns exactly one, and the law around it is stricter than people expect: A RIFT OWNS ONE PRIMARY ROOM, ITS KIND IS CHOSEN ONCE AT CREATION, AND IT IS NEVER SWITCHED. There is no room registry. There is no "active space". There is no swap, promote, or re-type verb. `RiftSpaceType` is the single input that fixes a Rift's capability posture FOR LIFE, and `Rift` reads it at creation to construct the matching `RiftSpace` subclass. That is a design choice worth pausing on. A room you can re-type is a room whose permissions are a moving target, and every consumer holding a reference has to re-ask what it is allowed to do. Fixing the kind at birth makes the answer cacheable and makes an audit of "what can this rift do" a question about creation, not about now. THE FIXTURES - every room carries the same SET, whatever its kind: space_id / space_name / owner_rift_id / space_kind / metadata frame_viewer - the read surface (TYPE VARIES BY KIND) workstation - the binding canvas (lesson 12) command_system - the verb surface (TYPE VARIES BY KIND) event_system - rift-local publish/subscribe memory_system - rift-local command/execution records action + category hooks - pre/post interception, unregister by id So every room has the same fixtures BY NAME, and two of them differ BY TYPE: command_system and frame_viewer - what you may DO and what you may SEE. The other three are literally the same classes. Lesson 11 takes that pair apart. (An earlier draft of these lessons claimed only command_system varied; the owner's 3.14t run proved frame_viewer varies too, and the corrected version is the better story - authority and visibility narrow TOGETHER.) ## Before you run Use the [Advanced guide](../../advanced/index.md) for prerequisite concepts. Run from a checkout with Melder installed and Python 3.14 free-threading selected. The collection download includes the level's local helper modules. ## Run the saved script ```bash python UX_and_AIX_experiences/03_advanced/10_the_room_and_its_fixtures.py ``` ```powershell py -3.14t UX_and_AIX_experiences/03_advanced/10_the_room_and_its_fixtures.py ``` {download}`Download this collection <../../downloads/advanced-examples.zip>` · [Source on GitHub](https://github.com/Synaptic724/melder/blob/a30a754d0bb61db0b142936010cdb82cffecec6f/UX_and_AIX_experiences/03_advanced/10_the_room_and_its_fixtures.py) ## Public surface md.RiftSpace via rift.space, the room fixtures, the one-room law. Room kind is passed as the STRING "static"; md.RiftSpaceType appears only in the doc-drift check below, where the enum itself is the subject. ## Code ```{literalinclude} ../../downloads/03_advanced/10_the_room_and_its_fixtures.py :language: python :linenos: ``` ## Check the outcome The script contains its own assertions or demonstrated refusal paths. Run it to evaluate those checks against your installed version. The code above is taken directly from the saved file; no run output is invented here. [More advanced examples](index.md) · [Level guide](../../advanced/index.md) ## Related guides - [Enable Nexus and open a Rift](../../advanced/nexus.md) ## API contracts - [RiftSpace](../../reference/api/inspection/riftspace.md) - [RiftSpaceType](../../reference/api/inspection/riftspacetype.md)