Version. 0.1 Date. 2026-04-28 Status. Scoping complete. Eight decisions settled. Ready for CR drafting.
Phase 22 builds the Rendering room — the fourth and final methodology room in the UI. After this phase, the full pipeline (Memory → Manifestation → Shaping → Rendering) is live and navigable. The Rendering room is where produced Renders appear: consumer-facing artifacts derived from confirmed Shapes by registered render specialists.
The room is organized by DeclaredRenderType from the seed, grouped into the seed's two categories (Build and Commons). Each declared render type is a section; Renders produced for that type appear within. The Operator can request a Render (explicit trigger), retire a Render, and see invalidated Renders (drift-triggered by the substrate). Render content is not displayed inline — Phase 22 shows metadata cards; a content viewer is future work.
Phase 22's Step 0 also registers the five DeclaredShapeTypes from candidate seed v0.5 in the substrate. This is prerequisite work that unblocks the Shaping room (currently showing a dead-end because the seed had no declared shape types) and completes the seed's production-stream declarations. The DeclaredShapeType registration is bundled here because Phase 22 is the last room phase — after it, all four rooms must be functional.
Thirteen declared render types organized into two groups matching the seed structure: Build (11) and Commons (2). Each group is a top-level section heading. Within each group, each declared render type is a subsection. Renders produced for that type appear as cards within the subsection.
This parallels the Shaping room's DeclaredShapeType sections but adds a grouping level because thirteen flat sections would be unwieldy. The grouping follows what the seed already declares.
Set aside: flat list of all 13 (too many sections without grouping). Set aside: organizing by render format or by source shape type (neither matches how the seed describes them; format is a technical axis, source shape type is a valid axis but the consumer-facing organization is by render type, not by shape type).
Each produced Render is a card showing metadata: state (produced/retired/invalidated with state dot), render format, source reference ("From [Shaping name] · Shape v[N]"), specialist display name, trigger ("Requested by [name]" or "Auto-triggered"), and production timestamp.
Render content (render_content field) is not displayed inline. The field can carry full documents (methodology documents, CRs, seeds) — inlining them would overwhelm the room. A "View content" link or detail page is future work; Phase 22 shows the lineage and status card only.
Set aside: inline content preview (too large for most render types; a truncated preview risks misrepresenting the content). Set aside: download button for render content (correct eventually, but requires format-aware serialization that Phase 22 doesn't build).
A "Request Render" button appears on a DeclaredRenderType subsection when at least one confirmed Shape exists for the render type's source shape type. Clicking opens a modal:
The request goes to POST /renders/ (explicit_request trigger). Returns 202 with a job_id.
Auto-triggered renders (fired by the substrate on shape_confirmed) appear in the room when they land — no UI action needed. Auto-trigger configuration is not in Phase 22's scope.
Set aside: auto-trigger configuration UI (the substrate handles auto-trigger wiring; the UI just shows results). Set aside: render without a confirmed Shape (the substrate requires a confirmed Shape reference).
Render production is asynchronous. After the 202 response:
GET /render-jobs/{jobid} at intervals until the job completes.Same pattern as Shape production in Phase 21 but with explicit polling because renders can take longer (LLM-dependent specialist work).
Set aside: WebSocket push notification for render completion (correct at scale, premature for Phase 22). Set aside: progress percentage (the substrate doesn't report partial progress).
Retirement (operator-driven): inline confirmation pattern, same as Shaping retirement — not a modal, an inline expansion with reason input. On confirmation, the Render transitions to "retired."
Invalidation (system-driven via drift detection): invalidated Renders are displayed with an "Invalidated" state badge and the drift reason. No operator action available — invalidation happened upstream. The Render card shows the consideration that triggered the invalidation if the metadata is available.
Both retired and invalidated Renders move to collapsible sections below active Renders within their DeclaredRenderType subsection.
Active (produced) Renders first, newest at top. Below active Renders:
If a DeclaredRenderType has no produced Renders and no pending candidates, show: "No Renders have been produced for this type yet."
If confirmed Shapes exist for the source shape type (potential candidates), add a "Request Render" primary button to the empty state.
DeclaredRenderTypes come from the seed. The room displays them as sections with their names, consumer declarations, render format, and source shape type reference. CRUD on DeclaredRenderTypes remains API-only.
Set aside: DeclaredRenderType CRUD in the UI (modifying the seed's render commitments through a room is a governance action that belongs in a seed-management surface, not in a methodology room). Set aside: render specialist registration through the UI (still API-only; same reasoning as executor registration in Phase 21).
Step 0 bundles three substrate tasks before frontend work begins:
declared_shape_type_added events following the Phase 9 pattern. This unblocks the Shaping room's sections.phase-21-shaping-room-ui on main. 1134 tests, 2 skips. Full Render layer from Phase 10 (DeclaredRenderTypes, RenderEvents, render specialists, render_events_view, drift detection). Full Shaping layer from Phase 9/11 (DeclaredShapeTypes, Shapings, ShapeEvents, shape_events_view).phase-21-shaping-room-ui on main. Lint + tsc + build + test clean. Twelve surfaces. 55 component tests, 1 E2E test. Three rooms live (Memory, Manifestation, Shaping). One count-only (Rendering)./engagement/[id]/rendering.DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks Phase 22 — Scoping note — v0.1 — 2026-04-28