Context
T3.3 of the harness pillar (#13349) — the first PRODUCT-FACING view leaf: the chat-creation surface that renders Grace's render-verified SSOT (#14645 / PR #14692 — at review, the last gate of the SSOT pair) by binding the create-module spine built this cycle. This is the operator's wedge made visible: a stranger types an intent and gets a live app.
The Fix
The create-module view (per the recorded module convention, apps/agentos/view/create/):
- A view (Container + Controller per house pattern) whose five render branches bind
data.flowState from CreationStateProvider — one branch per SSOT state (empty · composing · generating · materialized · error), matching the drawn bar exactly (the empty invitation single-affordance, the blueprint preview, the cancellable progress, the live-panel + promote affordance, the always-a-reason error with edit-and-retry).
- User events dispatch through the provider's
applyFlowEvent (the ONE writer); the submit path calls routeCreationRequest (the merged #14655 route) with the intake text, then applyCreationRouteOutcome + acceptBlueprint (#14689) on acceptance — the stage add → insert seam does the instantiation, the registrar writes the registry.
data.flowReason renders the ERROR state's reason verbatim (the refusal vocabulary surfaces to the human unchanged).
- Bindings only: no component-local flow booleans (the #14711/#14718 contract), instance data read via
stores.createdInstances.
§9.6 Core-Idiom Pre-Flight (to be recorded at intake): src/core/Base.mjs, src/Neo.mjs, src/state/Provider.mjs read this session by the claimant; the view leaf adds src/component/Base.mjs / container + controller contracts at intake time.
Acceptance Criteria
Blocked-by (implementation; the spec binds the SSOT artifact CONTENT — PR #14692 merging joins the gate list)
PR #14710 (accept path) · PR #14712 (transition oracle) · PR #14719 (state provider) · PR #14692 (the SSOT itself — unstick package posted 09:03) — this leaf imports the first three and renders the fourth.
Out of Scope
The promote/dock mechanics beyond the affordance (dock lane) · NL provider wiring (the injected generate stays a double until its leaf) · pane chrome beyond this surface · theming (#14681).
Related
Parent #13349 (T3.3) · #14645/PR #14692 (the SSOT — the bar; at review) · #14718/PR #14719 (the provider this binds) · #14711/PR #14712 (the oracle) · #14689/PR #14710 (the accept path) · #14655/#14656 (merged route + registry).
First-claim: @neo-fable (create-stack continuity; claims at the gates' merge). Claimable by anyone sooner — the spec is complete.
Origin Session ID: b9b95ac6-42f5-47a3-b58f-6071f79657e8
Retrieval Hint: "keeper chat surface five state view binding provider wedge stranger intent live app"
Context
T3.3 of the harness pillar (#13349) — the first PRODUCT-FACING view leaf: the chat-creation surface that renders Grace's render-verified SSOT (#14645 / PR #14692 — at review, the last gate of the SSOT pair) by binding the create-module spine built this cycle. This is the operator's wedge made visible: a stranger types an intent and gets a live app.
The Fix
The create-module view (per the recorded module convention,
apps/agentos/view/create/):data.flowStatefromCreationStateProvider— one branch per SSOT state (empty · composing · generating · materialized · error), matching the drawn bar exactly (the empty invitation single-affordance, the blueprint preview, the cancellable progress, the live-panel + promote affordance, the always-a-reason error with edit-and-retry).applyFlowEvent(the ONE writer); the submit path callsrouteCreationRequest(the merged #14655 route) with the intake text, thenapplyCreationRouteOutcome+acceptBlueprint(#14689) on acceptance — the stageadd → insertseam does the instantiation, the registrar writes the registry.data.flowReasonrenders the ERROR state's reason verbatim (the refusal vocabulary surfaces to the human unchanged).stores.createdInstances.§9.6 Core-Idiom Pre-Flight (to be recorded at intake):
src/core/Base.mjs,src/Neo.mjs,src/state/Provider.mjsread this session by the claimant; the view leaf addssrc/component/Base.mjs/ container + controller contracts at intake time.Acceptance Criteria
applyFlowEvent/applyCreationRouteOutcome— zero flow booleans anywhere in the view (the §7.5.1 audit line).Blocked-by (implementation; the spec binds the SSOT artifact CONTENT — PR #14692 merging joins the gate list)
PR #14710 (accept path) · PR #14712 (transition oracle) · PR #14719 (state provider) · PR #14692 (the SSOT itself — unstick package posted 09:03) — this leaf imports the first three and renders the fourth.
Out of Scope
The promote/dock mechanics beyond the affordance (dock lane) · NL provider wiring (the injected
generatestays a double until its leaf) · pane chrome beyond this surface · theming (#14681).Related
Parent #13349 (T3.3) · #14645/PR #14692 (the SSOT — the bar; at review) · #14718/PR #14719 (the provider this binds) · #14711/PR #14712 (the oracle) · #14689/PR #14710 (the accept path) · #14655/#14656 (merged route + registry).
First-claim: @neo-fable (create-stack continuity; claims at the gates' merge). Claimable by anyone sooner — the spec is complete.
Origin Session ID: b9b95ac6-42f5-47a3-b58f-6071f79657e8 Retrieval Hint: "keeper chat surface five state view binding provider wedge stranger intent live app"