LearnNewsExamplesServices
Frontmatter
id13445
titleRelocate first-widget EvidencePane into a dashboard.Container host
stateClosed
labels
enhancementairefactoringarchitecture
assigneesneo-opus-vega
createdAtJun 17, 2026, 8:33 AM
updatedAt5:38 AM
githubUrlhttps://github.com/neomjs/neo/issues/13445
authorneo-opus-ada
commentsCount7
parentIssue13448
subIssues
13753 First-widget cockpit-host (S1, verified) — slice of #13445
subIssuesCompleted0
subIssuesTotal1
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt5:38 AM

Relocate first-widget EvidencePane into a dashboard.Container host

Closed Backlog/active-chunk-2 enhancementairefactoringarchitecture
neo-opus-ada
neo-opus-ada commented on Jun 17, 2026, 8:33 AM

Context

The v13.1 release gate is a presentable harness cockpit PoC (operator @tobiu, 2026-06-17): the harness substrate is built (Project 13 = a wall of Done leaves), but the apps/agentos cockpit assembly is the gap. The cockpit UX/IA convergence (Discussion #13436, Vega-driven) needs the first-widget EvidencePane to be relocatable into the cockpit's dockable work-area — hosted by a dashboard.Container so it works both inline (S1) and with the grid popped to its own window (S2, the operator's "Chromium popup" path).

This leaf is the structure sub of the forthcoming cockpit-UX epic (Vega seeds it on #13436 graduation). It is filed now, ahead of graduation, by explicit coordination with @neo-opus-vega to clear the §5.2 Step-Back blocker: the #13436 body routes relocation to "ada's #13427 structure epic," but #13427 is closed (the #13430 cockpit-cleanup, merged 2026-06-16) and was never an epic — V-B-A'd 2026-06-17. This realises @neo-gpt's §5.2 exit option-1 ("a new linked relocation leaf").

The Problem

Per #13437, the EvidencePane is not a standalone file — it is a coupled subtree: EvidencePane + the observed stage + the inserted grid + the insert-observer ViewportController (which binds stage.on('insert') and projects the inserted grid's config into EvidencePane.blueprint). It currently lives under apps/agentos/childapps/widget/view/ (verified present on origin/dev, 2026-06-17). The cockpit needs this subtree hosted in the main view as a movable unit, not buried in the childapp shell.

The Architectural Reality

  • The relocation rides the existing src/dashboard/Container.mjs machinery: openWidgetInPopup + onWindowConnect already re-parent a live widget instance across windows (mainView.add(widget)), and in Neo's one-App-Worker model the container insert fires + the controller projects App-Worker-locally, independent of which DOM window the grid mounts in. So S2 is not net-new cross-window provenance — it rides the colors / dashboard.Container pattern. (My earlier "net-new" claim was V-B-A-corrected by the operator in #13436.)
  • Target: host the EvidencePane subtree in the main apps/agentos view via a dashboard.Container; the childapp shell reduces to a bare empty-viewport (the colors runtime-relocation pattern).

The Fix

  • Move the EvidencePane subtree (EvidencePane + the ViewportController insert-observer + the stage/grid wiring) from apps/agentos/childapps/widget/view/ into the main apps/agentos view, hosted by a dashboard.Container.
  • Preserve the #13437 projection seam (stage.on('insert')EvidencePane.blueprint) verbatim — App-Worker-local, so it fires regardless of DOM window.
  • Expose both modes: S1 (pane + grid inline, same window) and S2 (grid popped to its own window via openWidgetInPopup / onWindowConnect, evidence pane stays in the shell).

Contract Ledger

N/A — internal apps/agentos view relocation. No public method, config key, MCP tool, or external surface changes. The NL / evidence-projection contract (the insertblueprint seam from #13437) is preserved, not modified (App-Worker-local). The first-widget grid's reference:'first-widget-grid' (per the #13361 handover) is carried unchanged.

Decision Record impact

aligned-with ADR 0020 (the cockpit / embodiment vessel; apps/agentos repurpose per §3 / §6). No amend / supersede. The cockpit-UX epic may carry its own render-model ADR (per #13444) — this leaf is the relocation only.

Decision Record (Discussion-origin)

Source: Discussion #13436 (v13.1 cockpit UX/IA convergence), not yet graduated. Filed ahead of graduation by explicit @neo-opus-vega coordination to clear the §5.2 blocker; Vega re-parents it under the cockpit-UX epic and may refresh ACs on graduation. ADR classification (per #13436 / §5.2): Not needed for the relocation itself (ADR-0020-aligned).

Acceptance Criteria

  • The EvidencePane subtree (pane + insert-observer ViewportController + stage/grid wiring) lives in the main apps/agentos view, hosted by a dashboard.Container; the widget childapp shell is reduced to a bare empty-viewport (or removed) per the colors pattern.
  • S1: pane + grid render inline in the same window; the first-widget loop is unchanged.
  • S2: the grid pops to its own window (openWidgetInPopup / onWindowConnect); the EvidencePane stays in the shell; the live grid instance survives the re-parent with state intact.
  • The #13437 insert-observer projection still fires App-Worker-locally — evidence updates whether the grid mounts inline or in the popped window.
  • The existing #13437 deterministic e2e stays green (adapted to the new host path if needed); no regression to the first-widget loop.
  • No new cross-window transport invented — S2 rides the existing dashboard.Container machinery (verified, not net-new).

Out of Scope

  • The agent-driven M2 create→evidence path (external NL create_component → evidence) — that is #13439 (connectToApp blocker) / #13355. This leaf is the host structure, not the agent-driven proof.
  • Full multi-window choreography beyond the cheap S2 (WindowManager positioning).
  • Nav / IA decisions (Fork B), provider-login / Accounts, welcome / landing — those are #13436's convergence, not this leaf.
  • #13361 (live-mutate follow-up edits) — builds on the relocated EvidencePane but is its own ticket.

Avoided Traps

  • "S2 = net-new cross-window provenance" — rejected (V-B-A'd): the App-Worker-local insert + openWidgetInPopup already re-parent live widgets; S2 is cheap, not an epic.
  • A second demo / widget path — rejected: relocate + reuse the existing subtree; no parallel hardcoded path (per #13361's premise correction from @neo-gpt).
  • Parent under #13427 — rejected: #13427 is closed cleanup, never an epic; this leaf is the relocation #13427 did not deliver.

Related

  • Discussion #13436 (source — v13.1 cockpit UX/IA convergence; this is its structure sub)
  • #13437 (the coupled subtree origin — deterministic EvidencePane projection)
  • #13427 / #13430 (prior apps/agentos cockpit cleanup — context, NOT the relocation)
  • #13439 (M2 agent-driven proof — sibling critical-path)
  • #13361 (live-mutate follow-up edits — builds on the relocated pane)
  • #13012 (Agent Harness umbrella) · #13444 (v14 Institution Cockpit — builds on this v13.1 floor)

Origin Session ID

c94823b9-7756-4a7f-99af-78a097e28b28

Handoff Retrieval Hints

  • query_summaries: "EvidencePane relocation dashboard.Container cockpit S1 S2"
  • Reference: the colors runtime-relocation pattern + src/dashboard/Container.mjs openWidgetInPopup / onWindowConnect; the #13437 merge (deterministic EvidencePane projection subtree)