Classification · Internal Research Build · Covert Cubicles M27
PENDING
M27 · Phase 6 · Layer 7 (UI & Presentation)
UI_Branch — Decision Presentation Renderer
Active interactive surface: from-line, prompt prose, choice buttons.
Module of
31 (Module 27)
Dependencies
None — fully decoupled, decision record passed in via render() opts
Consumed by
Orchestrator (test page now, M31 GM_Game in production)
ADRs recorded
ADR-093 to ADR-098 (six)
Test strategy
Hybrid per ADR-092: API assertions + integrated M26+M27 demo
Generated
5 May 2026 · Build state v1.8 (M26 closed; M28 next)
Contract banner — orchestrator responsibilities
M27 fires onChoice(decisionId, choiceId) when the participant clicks. The orchestrator is responsible for: (1) calling LOGIC_Decision.submitDecision(), (2) capturing instrumentation telemetry for M21 DATA_Recorder, (3) advancing or holding scene state, (4) invoking M28 UI_Modal with the resolved consequence, (5) re-rendering M27 with the next decision (or decision: null). The test page implements an inline orchestrator stub fulfilling these duties as a reference for M31's eventual implementation.
Synthetic decision records
The decisions exercised below are constructed inline in the test page rather than fetched from M3 DATA_Decisions. This isolates the test from the staged build while exercising M27's full validation, render, and commit path. Real-module integration is verified at the next regression sweep.
The frame below renders the full M26 scene shell with M27 occupying the decision area. Use the controls to step through the four-phase synthetic decision sequence; click a choice to commit. The orchestrator log below traces every event the orchestrator stub handles — this is the reference behaviour M31 GM_Game will replicate in production.