Context
Child of the H2 epic #13349 (conversational app creation: first Neo widget). The deterministic first-widget evidence pane (#13413 / PR #13409) projected a hand-authored blueprint. This leaf delivers the MECHANISM that lets the evidence pane reflect a grid CREATED at runtime via the container insert seam — the same add → insert path a Neural-Link create_component drives (ComponentService.createComponent → call_method(parentId, 'add', [config]) → container.add → insert) — rather than a static blueprint.
Scoped out (stays on #13355): the EXTERNAL create_component → evidence whitebox proof — an outside agent's write actually reaching the pane. That residual is currently blocked on the shared connectToApp e2e fixture, which does not resolve the worker id for a childapp's SharedWorker topology (target.toLowerCase on a non-string). This leaf proves the seam + projector via the in-app bootstrap; #13355 keeps the external-agent provenance proof.
The Fix
util/createdGridEvidence.mjs — projectCreatedGrid: maps a LIVE inserted grid (the item from the container insert event) into the safe {schema, title, columns, rows} blueprint shape projectBlueprintEvidence consumes. Scalar-only (never column internals / record data), fails closed to null, accepts live NeoInstances (a live grid/store is not a plain object, so Neo.isObject cannot guard it).
view/ViewportController.mjs — boots the grid by add()-ing it to a stage container (the same add → insert seam create_component drives), observes the stage's insert, and projects the inserted grid into the evidence pane.
view/Viewport.mjs — the grid is created into a known widget-stage container (not a static child), so an external agent can later create_component into the same stage.
Acceptance Criteria
Out of Scope
- External
create_component → evidence whitebox (stays #13355, blocked on the childapp connectToApp fixture).
- Durable transcript persistence / Memory Core write-through.
Related
Parent: #13349. Sibling residual: #13355 (external-NL provenance). Builds on #13413 / PR #13409. Delivered by PR #13437.
Context
Child of the H2 epic #13349 (conversational app creation: first Neo widget). The deterministic first-widget evidence pane (#13413 / PR #13409) projected a hand-authored blueprint. This leaf delivers the MECHANISM that lets the evidence pane reflect a grid CREATED at runtime via the container insert seam — the same
add → insertpath a Neural-Linkcreate_componentdrives (ComponentService.createComponent→call_method(parentId, 'add', [config])→container.add→insert) — rather than a static blueprint.Scoped out (stays on #13355): the EXTERNAL
create_component→ evidence whitebox proof — an outside agent's write actually reaching the pane. That residual is currently blocked on the sharedconnectToAppe2e fixture, which does not resolve the worker id for a childapp's SharedWorker topology (target.toLowerCaseon a non-string). This leaf proves the seam + projector via the in-app bootstrap; #13355 keeps the external-agent provenance proof.The Fix
util/createdGridEvidence.mjs—projectCreatedGrid: maps a LIVE inserted grid (theitemfrom the containerinsertevent) into the safe{schema, title, columns, rows}blueprint shapeprojectBlueprintEvidenceconsumes. Scalar-only (never column internals / record data), fails closed tonull, accepts liveNeoInstances (a live grid/store is not a plain object, soNeo.isObjectcannot guard it).view/ViewportController.mjs— boots the grid byadd()-ing it to a stage container (the sameadd → insertseamcreate_componentdrives), observes the stage'sinsert, and projects the inserted grid into the evidence pane.view/Viewport.mjs— the grid is created into a knownwidget-stagecontainer (not a static child), so an external agent can latercreate_componentinto the same stage.Acceptance Criteria
EvidencePanedefault).Out of Scope
create_component→ evidence whitebox (stays #13355, blocked on the childappconnectToAppfixture).Related
Parent: #13349. Sibling residual: #13355 (external-NL provenance). Builds on #13413 / PR #13409. Delivered by PR #13437.