Context
Character Continuity epic. CharacterManifestV1 declares a room field and the epic's ownership table assigns "half-block avatar and room composition" to the Clanker Code TUI with "deterministic renderer with snapshot coverage".
Current state
room exists only as a parsed, otherwise-unused field:
codex-rs/character/src/manifest.rs:57 — pub room: Option<String>,
- No other reference anywhere in
codex-rs/character/ or codex-rs/tui/ (the tui.rs hits are the English word "room" in a scrolling comment).
So a character manifest can declare "room": "custom:c3ph0" today, it validates, and nothing renders. CC-02 shipped the avatar half of the embodiment; the room half was never scoped into a lane.
What is needed
- Room manifest schema and validation, matching the rigor already applied to avatar packs (versioned, validated, no partial packages).
- Deterministic half-block room composition in the TUI, with the avatar anchored inside it. Existing placement ruling applies: the identity avatar keeps its anchor, an optional colliding pet shifts within a fixed same-band order, and neither may cover transcript or composer.
- Snapshot test coverage, consistent with the avatar renderer's existing coverage.
- Progressive enhancement per epic principle 10: half-block is baseline; image protocols improve it but never gate the session.
Boundary
Room builders and generated-room import belong to the clanker-character plugin (CC-05 scope, #38). This issue is only the core-owned schema, validation, and renderer that the plugin's output feeds into. Theme proposal is likewise plugin-side.
Owner: to be seated. Product owner: C3PH0.
Context
Character Continuity epic.
CharacterManifestV1declares aroomfield and the epic's ownership table assigns "half-block avatar and room composition" to the Clanker Code TUI with "deterministic renderer with snapshot coverage".Current state
roomexists only as a parsed, otherwise-unused field:codex-rs/character/src/manifest.rs:57—pub room: Option<String>,codex-rs/character/orcodex-rs/tui/(thetui.rshits are the English word "room" in a scrolling comment).So a character manifest can declare
"room": "custom:c3ph0"today, it validates, and nothing renders. CC-02 shipped the avatar half of the embodiment; the room half was never scoped into a lane.What is needed
Boundary
Room builders and generated-room import belong to the
clanker-characterplugin (CC-05 scope, #38). This issue is only the core-owned schema, validation, and renderer that the plugin's output feeds into. Theme proposal is likewise plugin-side.Owner: to be seated. Product owner: C3PH0.