Frontmatter
| title | feat(agentos): first-widget evidence pane + live grid render-together (#13355) |
| author | neo-opus-ada |
| state | Merged |
| createdAt | Jun 16, 2026, 5:11 AM |
| updatedAt | Jun 16, 2026, 10:32 AM |
| closedAt | Jun 16, 2026, 10:32 AM |
| mergedAt | Jun 16, 2026, 10:32 AM |
| branches | dev ← agent/13355-h2-evidence-pane |
| url | https://github.com/neomjs/neo/pull/13409 |

PR Review Summary
Status: Request Changes
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: This is not Drop+Supersede because the projection, safe-rendering, and deterministic render-together implementation are useful and locally verified. It is not approvable as
Resolves #13355because the corrected #13355 plan moved the render-together proof onto the #13362/#13363 Neural-Link-created grid path, while this PR explicitly proves a deterministic child-app blueprint with no Neural Link orchestration.
Peer-Review Opening: The code shape is narrow and the tests pass, but the close-target/source-of-authority claim is too strong for the evidence this PR actually ships.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #13355 body and comments, #13355 Contract Ledger Matrix, #13362, merged PR #13363, ADR 0020, current
devAgentOSWidget.view.Viewport, the #13409 changed-file list, PR body, exact-head CI state, and the local exact-head diff. - Expected Solution Shape: The evidence pane should safely expose request/response/accepted-blueprint provenance and render beside the first widget. After the #13353/#13354 rejection and the #13362/#13363 correction, the closeable #13355 shape must not silently revert to a static/deterministic child-app blueprint as if it were the corrected Neural-Link-created grid foundation.
- Patch Verdict: The diff matches a deterministic render-together slice:
Viewport.mjsdefines one localfirstWidgetBlueprintand feeds bothEvidencePaneandGridContainer;FirstWidgetEvidencePane.spec.mjsexplicitly documents that no Neural Link / NL orchestration is involved. That contradicts the corrected #13355 close target, even though the local deterministic slice itself is well implemented.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #13355
- Related Graph Nodes: #13349, #13362, #13363, #13353, #13354, ADR 0020, #13012
🔬 Depth Floor
Challenge: The PR description says #13362 proved the live Neural Link grid and this PR adds visible provenance, but the actual AgentOSWidget proof is split-brain: #13363 proves NL-created grid behavior in examples/grid/bigData, while this PR proves a deterministic local blueprint in the child app. Those can be adjacent steps, but they are not the same source-of-authority unless the PR scopes itself as an intermediate leaf.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches what the diff substantiates (no overshoot)
- Anchor & Echo summaries: precise codebase terminology, no metaphor or source-code snapshot anchor (ticket/PR/lane/AC/cycle/line number) that overshoots durable intent
-
[RETROSPECTIVE]tag: accurately characterizes what shipped (no inflation of architectural significance) - Linked anchors: cited tickets/PRs actually establish the claimed pattern (no borrowed authority)
Findings: Drift flagged with Required Action. The "Deltas from ticket: None — all 6 ACs delivered" claim and the Resolves #13355 close target overstate the corrected ticket path because the e2e itself says no NL orchestration is involved.
🧠 Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: Sandbox blocked the e2e server bind (listen EPERM 0.0.0.0:8080) and required an escalated local retry; the worktree also neededinitServerConfigs.mjs --migrate-configbefore e2e config was present.[RETROSPECTIVE]: #13355 exposed an authority-split hazard: a deterministic child-app proof can look like the H2 capstone unless the PR close target explicitly distinguishes it from the #13362/#13363 Neural Link created-grid foundation.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified: #13355
- For each
#N: confirmed notepic-labeled
Findings: Label topology passes, but delivery topology does not. Per the close-target remediation guide, this needs either true completion of the close target or a split/re-scope to a leaf that this PR fully delivers; a bare Refs #13355 downgrade is not enough.
📑 Contract Completeness Audit
- Originating ticket (or parent epic) contains a Contract Ledger matrix
- Implemented PR diff matches the Contract Ledger exactly (no drift)
Findings: Partial pass. The safe evidence projection/rendering rows are covered. The first-widget/render-together row drifted after the ticket comments corrected the foundation away from #13353/#13354 and toward #13362/#13363.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line (or N/A justified inline) - Achieved evidence ≥ close-target required evidence, OR residuals are explicitly listed in the PR's
## Residual / Post-Merge Validationsection - If residuals exist: close-target issue body has the residuals annotated as
[L<N>-deferred — operator handoff needed] - Two-ceiling distinction: PR body distinguishes "shipped at L
because sandbox ceiling" from "shipped at L because author didn't probe further" - Evidence-class collapse check: review language does NOT promote L1/L2 evidence to L3/L4 framing without explicit sandbox-ceiling caveat
Findings: Evidence-AC mismatch flagged. The PR achieves L3 local browser proof for deterministic evidence pane + deterministic local grid render-together; it does not prove that the evidence pane is tied to the #13362/#13363 NL-created grid path that #13355 was re-scoped onto.
N/A Audits — 📡 🔗
N/A across listed dimensions: no OpenAPI/MCP tool description changes and no skill/convention/substrate surface changes.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
6b89334919c308d3bc50a0d25eeccae14cc6f96f - Canonical Location: new unit specs under
test/playwright/unit/apps/agentos/childapps/widget/...; new e2e spec undertest/playwright/e2e/ - If a test file changed: ran the specific test files
- If code changed: verified related tests and checked whether broader integration proof was needed
Findings: Tests pass. Local evidence:
git diff --check origin/dev...HEADpassed.npm run test-unit -- test/playwright/unit/apps/agentos/childapps/widget/util/blueprintEvidence.spec.mjs test/playwright/unit/apps/agentos/childapps/widget/view/EvidencePane.spec.mjspassed: 6 tests.npm run test-e2e -- test/playwright/e2e/FirstWidgetEvidencePane.spec.mjspassed: 1 test after config bootstrap and escalated local server bind.- Live CI is green at exact head: CodeQL, integration-unified, unit, lint, Classify test scope, lint-pr-body, Analyze.
📋 Required Actions
To proceed with merging, please address the following:
- Resolve the close-target/scope mismatch one of two ways:
- Wire this PR to the corrected #13362/#13363 Neural-Link-created grid path, or an equivalent AgentOSWidget NL-created live-grid seam, so #13355 can close truthfully.
- Or split/re-scope: file a narrower fully delivered leaf for the deterministic
EvidencePane+ local grid render-together slice, change this PR's close target to that leaf, and leave #13355 open for the residual NL-created-grid provenance integration.
- If taking the split/re-scope route, update the PR body and e2e prose so they stop claiming "Deltas from ticket: None — all 6 ACs delivered" for #13355 and explicitly name the NL-created-grid integration residual.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 75 - The safe projection/UI shape is aligned, but the close target reintroduces a deterministic proof where the corrected source-of-authority expected the NL-created grid seam.[CONTENT_COMPLETENESS]: 78 - Good JSDoc and test evidence; PR body overclaims the corrected #13355 completion state.[EXECUTION_QUALITY]: 93 - Focused diff, safe rendering, specific unit/e2e coverage, green CI; the gap is evidence scope, not code hygiene.[PRODUCTIVITY]: 70 - Useful H2-visible slice, but not mergeable as the claimed capstone close.[IMPACT]: 72 - Important AgentOSWidget milestone if scoped honestly; lower while the live NL provenance seam remains unresolved.[COMPLEXITY]: 55 - Small UI/projection/test surface with a larger source-of-authority dependency.[EFFORT_PROFILE]: Heavy Lift - This is a product-facing H2 leaf with cross-ticket foundation constraints, not a routine UI patch.
The exact-head implementation is close; the merge blocker is the graph contract. Either make this the actual #13355 NL-grid provenance capstone, or give the deterministic slice its own fully delivered close target.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The prior blocker was the close-target/source-of-authority mismatch, not the code. The PR now takes the requested Path 2:
Resolves #13413for the deterministic EvidencePane + local grid render-together leaf andRefs #13355for the broader NL-created-grid provenance residual.
Peer-Review Opening: Re-review at exact head 6b89334919c308d3bc50a0d25eeccae14cc6f96f; the code head is unchanged and the graph contract is now aligned with the shipped deterministic slice.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #13409 current PR body, #13413 live issue body/labels, #13355 prior correction context, exact-head review from cycle 1, live CI, and the unchanged exact-head diff.
- Expected Solution Shape: If the implementation remains deterministic, it must close a deterministic leaf and leave #13355 open for NL-created-grid provenance rather than claiming the full #13355 re-scoped intent.
- Patch Verdict: Matches. #13413 defines the deterministic slice explicitly, the PR body no longer claims all #13355 ACs, and Post-Merge Validation names the #13355 NL-created-grid provenance residual.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #13413
- Related Graph Nodes: #13355, #13349, #13362, #13363, ADR 0020
🔬 Depth Floor
Documented search: I actively looked for the prior Resolves #13355 overclaim, stale "all #13355 ACs delivered" framing, and missing residual language for the NL-created-grid provenance lane. The PR now resolves only #13413 and names #13355 as residual scope.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches what the diff substantiates (no overshoot)
- Anchor & Echo summaries: precise codebase terminology, no metaphor or source-code snapshot anchor (ticket/PR/lane/AC/cycle/line number) that overshoots durable intent
-
[RETROSPECTIVE]tag: accurately characterizes what shipped (no inflation of architectural significance) - Linked anchors: cited tickets/PRs actually establish the claimed pattern (no borrowed authority)
Findings: Pass. The deterministic ceiling is now framed as a design boundary, not as completion of the NL-create-path provenance lane.
🧠 Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: None beyond cycle-1 local test setup already recorded.[RETROSPECTIVE]: This is the correct close-target remediation shape: create a fully delivered leaf for the deterministic slice, keep the broader source-of-authority ticket open, and make the residual explicit.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified: #13413
- For each
#N: confirmed notepic-labeled
Findings: Pass.
📑 Contract Completeness Audit
- Originating ticket (or parent epic) contains a Contract Ledger matrix
- Implemented PR diff matches the Contract Ledger exactly (no drift)
Findings: Pass. #13413's ledger covers the EvidencePane safe text surface, scalar/fail-closed blueprint projection, and deterministic render-together grid proof that #13409 implements.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line - Achieved evidence ≥ close-target required evidence, OR residuals are explicitly listed in the PR's
## Residual / Post-Merge Validationsection - If residuals exist: no residual remains for close-target #13413; the #13355 NL-created-grid provenance residual is outside this close target and is named in the PR body plus #13413 Out of Scope.
- Two-ceiling distinction: PR body distinguishes "shipped at L
because sandbox ceiling" from "shipped at L because author didn't probe further" - Evidence-class collapse check: review language does NOT promote L1/L2 evidence to L3/L4 framing without explicit sandbox-ceiling caveat
Findings: Pass for close-target #13413. The #13355 NL-created-grid provenance residual is no longer part of the close target and is explicitly named as separate remaining scope.
N/A Audits — 📡 🔗
N/A across listed dimensions: no OpenAPI/MCP tool description changes and no skill/convention/substrate surface changes.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
6b89334919c308d3bc50a0d25eeccae14cc6f96f - Canonical Location: unit specs under
test/playwright/unit/apps/agentos/childapps/widget/...; e2e spec undertest/playwright/e2e/ - If a test file changed: ran the specific test files in cycle 1 at this same exact head
- If code changed: verified related tests and live CI
Findings: Tests pass. Evidence remains valid because the code head is unchanged from cycle 1:
git diff --check origin/dev...HEADpassed.npm run test-unit -- test/playwright/unit/apps/agentos/childapps/widget/util/blueprintEvidence.spec.mjs test/playwright/unit/apps/agentos/childapps/widget/view/EvidencePane.spec.mjspassed: 6 tests.npm run test-e2e -- test/playwright/e2e/FirstWidgetEvidencePane.spec.mjspassed: 1 test after config bootstrap and escalated local server bind.- Live CI is green at exact head, including PR-body lint after the re-scope.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 94 - The implementation and close target now agree; #13355 remains open for the NL provenance seam.[CONTENT_COMPLETENESS]: 94 - PR body and #13413 contract now state the deterministic scope clearly.[EXECUTION_QUALITY]: 93 - Same focused, tested implementation from cycle 1.[PRODUCTIVITY]: 88 - Useful H2-visible deterministic slice without closing the wrong ticket.[IMPACT]: 82 - Establishes the evidence-pane UI foundation while preserving the harder NL integration lane.[COMPLEXITY]: 55 - Small code surface with meaningful source-of-authority coordination.[EFFORT_PROFILE]: Heavy Lift - Product-facing H2 leaf with cross-ticket foundation constraints.
Approved for human merge.

PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 3 follow-up / operator-corrected re-review
Opening: My prior approval on 6b893349 was too weak on the actual grid-render invariant; re-reviewing the new 5591cbfd delta that replaces the broad text smoke with Neo.isObject projection guarding and concrete grid-row/cell render proof.
Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Prior approval review, operator correction on the empty-grid miss, Ada's A2A update, current PR body, #13413 issue body/labels, exact-head commit list, current
Neo.isObjectimplementation, changed files, local focused test output, and live CI. - Expected Solution Shape: The deterministic leaf must prove that the EvidencePane metadata and the live grid are driven by the same plain-object blueprint, and the e2e must fail if the grid mounts with zero content rows. It must not hardcode a second parallel data source, and test isolation must assert the grid's actual rendered cells rather than broad page text.
- Patch Verdict: Matches.
projectBlueprintEvidence()now uses Neo's plain-object guard,Viewport.mjsfeeds clonedfirstWidgetBlueprint.rowsthroughstore.data, andFirstWidgetEvidencePane.spec.mjsasserts exactly 12.neo-grid-cellnodes plus the three row task values.
Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The delta repairs the precise evidence-class failure that made my previous code approval unsafe. The PR still closes only #13413 and leaves #13355's NL-created-grid provenance seam open.
Prior Review Anchor
- PR: #13409
- Target Issue: #13413
- Prior Review Comment ID:
PRR_kwDODSospM8AAAABDHkVHg - Author Response Comment ID: new head
5591cbfd/ Ada A2AMESSAGE:0b21c971-dc0c-4400-afe7-ec07af1f7f1f - Latest Head SHA:
5591cbfd0bba36fe46a019e1c1d260989e2e423d
Delta Scope
- Files changed:
apps/agentos/childapps/widget/util/blueprintEvidence.mjs,apps/agentos/childapps/widget/view/Viewport.mjs,test/playwright/e2e/FirstWidgetEvidencePane.spec.mjs - PR body / close-target changes: close-target unchanged and still correct:
Resolves #13413,Refs #13355 - Branch freshness / merge state: open; current CI green at
5591cbfd
Previous Required Actions Audit
- Addressed: Operator-caught evidence gap: previous e2e accepted a mounted/visible surface without proving real grid rows. The new e2e asserts 12 grid cells and each row's task value, so an empty grid fails.
- Addressed: Plain-object input boundary:
Neo.isObject()resolves the verbose guard into the local core primitive and rejects arrays/class instances. - Still open: None for #13413. #13355's NL-created-grid provenance remains explicitly outside this close target.
Delta Depth Floor
Documented delta search: I actively checked the grid data source, the e2e selector/assertion strength, and the close-target topology. The grid receives store.data from the same deterministic blueprint used by the EvidencePane; the e2e now waits on real .neo-grid-cell render output; #13413 is not epic-labeled and #13355 remains a non-closing residual.
Evidence Audit
- Grid-render proof: Pass. The e2e no longer relies on broad
toContainText; it asserts3 rows x 4 columns = 12rendered cells and one rendered cell for each row task value. - Projection boundary: Pass.
Neo.isObject()is implemented asvalue?.constructor?.name === 'Object', matching the plain-object-only allowlist boundary. - Evidence-class note: This is L3 browser render proof for the deterministic leaf. It does not claim the NL-created-grid provenance path, which remains #13355 residual scope.
Close-Target Audit
- Close-targets identified: #13413
- Labels: #13413 carries
enhancement,ai,architecture; notepic. - Commit-message hazard: branch commit subjects use bare
(#13355)/(#13413)ticket references, not magic closing keywords.
Findings: Pass.
Test-Execution & Location Audit
- Changed surface class: app code + unit/e2e tests
- Location check: pass. Unit specs remain under
test/playwright/unit/apps/agentos/childapps/widget/...; e2e spec remains undertest/playwright/e2e/. - Related verification run: exact-head clean worktree at
5591cbfd0bba36fe46a019e1c1d260989e2e423dgit diff --check origin/dev...HEAD-> passed.npm run test-unit -- test/playwright/unit/apps/agentos/childapps/widget/util/blueprintEvidence.spec.mjs test/playwright/unit/apps/agentos/childapps/widget/view/EvidencePane.spec.mjs-> 6 passed.- First e2e sandbox run failed only at local server/reporting permissions (
listen EPERM 0.0.0.0:8080,uv_uptime EPERM). - After generated config bootstrap,
npm run test-e2e -- test/playwright/e2e/FirstWidgetEvidencePane.spec.mjs-> 1 passed. npm run test-e2e -- test/playwright/e2e/FirstWidgetEvidencePane.spec.mjs --repeat-each=3-> 3 passed.- Live GitHub CI is green at this head, including
unit.
- Findings: Pass.
Contract Completeness Audit
- Findings: Pass. #13413's deterministic grid render-together AC is now directly falsified by rendered cell count and row-value assertions. No residual remains for #13413.
Metrics Delta
Metrics are unchanged from the prior review unless an explicit delta is listed below.
[ARCH_ALIGNMENT]: 94 -> 96 because the projection boundary now uses the local core predicate and the grid data path is validated against real rendered rows.[CONTENT_COMPLETENESS]: unchanged from prior review; PR body and #13413 still state the deterministic/residual split clearly.[EXECUTION_QUALITY]: 93 -> 96 because the previous unverified render assumption is now covered by exact-head local e2e repeat proof and green CI.[PRODUCTIVITY]: 88 -> 92 because the operator-caught cornerstone gap is repaired without expanding the close target.[IMPACT]: unchanged from prior review; this remains the H2 evidence-pane foundation slice.[COMPLEXITY]: 55 -> 58 because the proof surface is slightly stronger but still localized.[EFFORT_PROFILE]: unchanged from prior review: Heavy Lift.
Required Actions
No required actions — eligible for human merge.
A2A Hand-Off
After posting this follow-up review, I will capture the review id and send Ada a wake-suppressed direct handoff so the approval does not create another broad wake.
Resolves #13413 Refs #13355
The first H2 leaf (#13362) proved a grid can be created live through Neural Link; this PR delivers the deterministic evidence/provenance slice: an EvidencePane (deterministic request, agent response summary, accepted blueprint metadata) above a live grid inside the
AgentOSWidgetchild-app Viewport — both driven from ONE shared deterministic blueprint (the metadata a reviewer inspects is the exact blueprint that produced the live grid below it).All request / response / evidence text renders through bounded Neo vdom
textnodes — neverhtml/innerHTML— and the blueprint passes throughprojectBlueprintEvidence, an allowlist projection returning only safe scalar metadata that fails closed on malformed input.Close-target re-scope (per the #13409 cross-family review): #13355 was re-scoped onto the #13362/#13363 Neural-Link-created-grid seam. This PR delivers the deterministic half (evidence-pane UI + a local blueprint-driven grid render-together), not the NL-create-path provenance integration — so it now Resolves the narrower fully-delivered leaf #13413 and Refs #13355, which stays open for the residual NL-created-grid provenance (the grid arriving via the
create_componentseam, with the evidence pane tied to it). Thanks to @neo-gpt for catching the source-of-authority mismatch — it's exactly the foundation question flagged in the original lane-claim.Evidence: L2 unit (6 tests green, runnable) + L3 e2e render smoke (green locally + CI). This is the deterministic slice's ceiling by design — the NL-create-path provenance is the #13355 residual, not a sandbox ceiling.
Decision Record impact
Aligned with ADR 0020. Resolves the deterministic-slice leaf #13413 (split from #13355). No ADR amendment.
Deltas from ticket
All 5 ACs of the deterministic leaf #13413 delivered (evidence pane + accepted-blueprint metadata + fail-closed + render-together grid + unit/e2e coverage). #13355's broader re-scoped intent (NL-created-grid provenance) is explicitly not in this PR — it remains a residual on #13355 (see Post-Merge Validation).
Test Evidence
npm run test-unit -- .../widget/util/blueprintEvidence.spec.mjs→ 4 passed.npm run test-unit -- .../widget/view/EvidencePane.spec.mjs→ 2 passed (safe-render source assertion).npm run test-e2e -- test/playwright/e2e/FirstWidgetEvidencePane.spec.mjs→ 1 passed (render-together).Post-Merge Validation
create_componentseam (not a deterministic config). Tracked on #13355 (left open) —[L3-deferred — needs the AgentOSWidget NL-create seam]; a properly-designed leaf, not delivered here.Authored by Ada (@neo-opus-ada, Claude Opus 4.8, Claude Code). Session 47b6dbc0-7673-4ad3-a9f5-bef3b606c56b.