Context
Split from #13355 per the #13409 cross-family review (close-target remediation, pr-review/references/close-target-remediation.md). #13355 was re-scoped to consume the #13362/#13363 Neural-Link-created grid path; PR #13409 delivered the deterministic half — the safe evidence-pane UI + a local blueprint-driven grid render-together — but NOT the NL-create-path provenance integration. This leaf is the fully-delivered close-target for that deterministic slice; #13355 stays open for the NL-created-grid provenance residual.
Release classification: post-release Agent Harness product line → boardless.
The Problem
H2 needs the visible evidence/provenance surface (request + response + accepted-blueprint metadata) rendered safely, alongside a live grid, as a deterministic + smoke-testable slice — independent of the harder NL-create-path provenance integration. Delivering this slice as its own leaf lets it close truthfully while the NL-provenance integration (#13355's residual) is designed separately, rather than overclaiming #13355's full re-scoped intent.
The Architectural Reality
apps/agentos/childapps/widget/util/blueprintEvidence.mjs — the safe allowlist projection (scalar metadata only, fail-closed).
apps/agentos/childapps/widget/view/EvidencePane.mjs — request/response/metadata via safe vdom text nodes (no html/innerHTML).
apps/agentos/childapps/widget/view/Viewport.mjs — mounts the EvidencePane + a Neo.grid.Container from ONE shared deterministic blueprint.
- Tests:
blueprintEvidence.spec.mjs + view/EvidencePane.spec.mjs (safe-render source assertion) + test/playwright/e2e/FirstWidgetEvidencePane.spec.mjs (render-together).
- Distinct from #13362/#13363 (the NL-create-path proof, which targets
examples/grid/bigData).
The Fix
Delivered by PR #13409 (re-pointed to this leaf):
- The safe blueprint-evidence projection (allowlist, fail-closed).
- The EvidencePane (safe vdom text, fail-closed on invalid blueprint).
- The Viewport wiring: EvidencePane + a deterministic-blueprint grid (render-together), one shared blueprint = the provenance link.
- Unit coverage (valid/invalid/safe-render source) + a render-together e2e.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
| Evidence pane (request/response/metadata) |
#13349, ADR 0020, #13018 |
Safe vdom text only; deterministic request + response + accepted-blueprint metadata |
invalid blueprint → bounded rejected-state text |
JSDoc/@summary |
unit + e2e (shipped green) |
| Blueprint-evidence projection |
#13355 blueprint contract |
scalar metadata only (schema/title/col-count/row-count); allowlist |
unknown keys/malformed → fail closed |
JSDoc/@summary |
unit, 4 tests (shipped) |
| Deterministic grid render-together |
ADR 0020 |
one shared blueprint drives both the evidence pane + a live grid |
n/a (deterministic) |
JSDoc |
render-together e2e (shipped) |
Decision Record impact
Aligned with ADR 0020. Split from #13355 (does NOT supersede it — #13355 retains the NL-create-path provenance scope).
Acceptance Criteria
(all delivered by PR #13409)
Out of Scope
- The NL-create-path grid provenance integration (tying the evidence pane to a grid created via the #13362/#13363
create_component seam) — stays on #13355.
- LLM / streaming / persistence / git-write / Electron.
Related
- Parent epic: #13349
- Split from: #13355 (retains the NL-provenance residual)
- Delivered by: PR #13409
- Distinct foundation: #13362 / #13363 (NL-create-path proof)
Origin Session ID: 47b6dbc0-7673-4ad3-a9f5-bef3b606c56b
Context
Split from #13355 per the #13409 cross-family review (close-target remediation,
pr-review/references/close-target-remediation.md). #13355 was re-scoped to consume the #13362/#13363 Neural-Link-created grid path; PR #13409 delivered the deterministic half — the safe evidence-pane UI + a local blueprint-driven grid render-together — but NOT the NL-create-path provenance integration. This leaf is the fully-delivered close-target for that deterministic slice; #13355 stays open for the NL-created-grid provenance residual.Release classification: post-release Agent Harness product line → boardless.
The Problem
H2 needs the visible evidence/provenance surface (request + response + accepted-blueprint metadata) rendered safely, alongside a live grid, as a deterministic + smoke-testable slice — independent of the harder NL-create-path provenance integration. Delivering this slice as its own leaf lets it close truthfully while the NL-provenance integration (#13355's residual) is designed separately, rather than overclaiming #13355's full re-scoped intent.
The Architectural Reality
apps/agentos/childapps/widget/util/blueprintEvidence.mjs— the safe allowlist projection (scalar metadata only, fail-closed).apps/agentos/childapps/widget/view/EvidencePane.mjs— request/response/metadata via safe vdomtextnodes (nohtml/innerHTML).apps/agentos/childapps/widget/view/Viewport.mjs— mounts the EvidencePane + aNeo.grid.Containerfrom ONE shared deterministic blueprint.blueprintEvidence.spec.mjs+view/EvidencePane.spec.mjs(safe-render source assertion) +test/playwright/e2e/FirstWidgetEvidencePane.spec.mjs(render-together).examples/grid/bigData).The Fix
Delivered by PR #13409 (re-pointed to this leaf):
Contract Ledger Matrix
Decision Record impact
Aligned with ADR 0020. Split from #13355 (does NOT supersede it — #13355 retains the NL-create-path provenance scope).
Acceptance Criteria
(all delivered by PR #13409)
Out of Scope
create_componentseam) — stays on #13355.Related
Origin Session ID: 47b6dbc0-7673-4ad3-a9f5-bef3b606c56b