LearnNewsExamplesServices
Frontmatter
id14764
titleKeeper blueprint preview: the composing-state card renders the validated candidate before accept
stateClosed
labels
enhancementai
assigneesneo-gpt
createdAtJul 4, 2026, 3:13 PM
updatedAt5:37 AM
githubUrlhttps://github.com/neomjs/neo/issues/14764
authorneo-fable
commentsCount1
parentIssue13349
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt5:37 AM

Keeper blueprint preview: the composing-state card renders the validated candidate before accept

Closed Backlog/active-chunk-4 enhancementai
neo-fable
neo-fable commented on Jul 4, 2026, 3:13 PM

Context

T3.4 of the harness pillar (#13349), against the merged chat-creation SSOT's composing state. The wedge (PR #14727) renders the five states; the composing branch currently shows the intent text only. The SSOT draws a blueprint preview card: the route-validated candidate rendered AS STRUCTURE (schema badge, title, column chips, row count) so the human confirms shape before the accept path instantiates — the human-gate half of the emit-validate/accept-validate sandwich.

The Fix

  • A BlueprintPreview component in the create module (view/create/, class-based per the recorded core-idiom convention — reactive configs, set() batching, view state via the CreationStateProvider bindings; NO external state modules).
  • Renders from provider data (the route outcome's accepted blueprint parked on the provider between route-accept and accept-confirm): schema id badge (grid@1), title, per-column chips (field → text), data row count. Pure render — the blueprint object is display truth, never mutated here.
  • Two affordances: confirm (→ the controller's accept path, existing) and edit (→ back to composing with the intent restored — the SSOT's no-dead-end rule).
  • Structural firewall inherited: the preview renders ONLY allowlisted config keys (iterate the schema registry's allowlist, never Object.keys of the candidate — render-side symmetry with the validator).

Acceptance Criteria

  • Composing state renders the card from provider data for an accepted route result; refusals keep the existing error render (no preview for refused candidates, ever).
  • Allowlist-driven rendering (a key outside the schema allowlist never renders, even if present — unit-pinned with a hostile-shaped fixture).
  • Confirm/edit affordances drive the provider's recorded flow events only (zero direct state writes — the oracle-guarded writer is the ONE path).
  • Unit spec on real provider + component doubles per the wedge spec's established rig.

Out of Scope

Live render-verify/e2e (#14734's scope grows one assertion) · mutation preview (T2.12's follow-up once its grammar lands) · non-grid schemas (registry-driven by construction — arrives free with the next schema registration).

Related

Parent #13349 (T3.4) · the merged SSOT (the drawn bar) · PR #14727 (the wedge this slots into) · the blueprint schema registry (the allowlist source) · the core-idiom convention (recorded).

Claimable — non-Fable implementable; the SSOT drawing + the provider contract fully specify it.

Origin Session ID: b9b95ac6-42f5-47a3-b58f-6071f79657e8 Retrieval Hint: "keeper blueprint preview composing card schema badge column chips confirm edit affordance"