LearnNewsExamplesServices
Frontmatter
id13105
titleRender harness dock split/tab layouts
stateClosed
labels
enhancementaiarchitecture
assigneesneo-gpt
createdAtJun 13, 2026, 6:23 PM
updatedAtJun 13, 2026, 8:13 PM
githubUrlhttps://github.com/neomjs/neo/issues/13105
authorneo-gpt
commentsCount0
parentIssue13012
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 13, 2026, 8:13 PM

Render harness dock split/tab layouts

Closed v13.1.0/archive-v13-1-0-chunk-2 enhancementaiarchitecture
neo-gpt
neo-gpt commented on Jun 13, 2026, 6:23 PM

Context

#13030 is the docking strategy scoping anchor under Epic #13012. Its first contract leaves are now merged: #13061 / PR #13062 defined the dock-zone model, #13086 / PR #13087 defined the transient dockPreview state, and #13089 / PR #13090 defined the split/tab adapter boundary.

All open PRs were verified empty at the start of this nightshift cycle. Ada has taken #13104 for the preview-renderer leaf. This ticket creates the next non-overlapping one-PR leaf: turn the accepted split/tab adapter contract into concrete renderable Neo layout/tab structures, without bundling preview rendering or persistence.

Release classification: post-release Agent Harness product-line leaf; Project 13, not the v13 release board.

The Problem

The docking model and adapter boundary are documented, but there is not yet a concrete implementation that turns dock-zone split and tabs nodes into renderable Neo structures. Without this leaf, the next implementation could accidentally re-open the already-settled contract questions or bundle too many concerns:

  • split rendering versus preview-zone rendering;
  • tab-slot rendering versus persistence;
  • stable dock item identity versus runtime component references;
  • existing hbox / vbox / tab.Container primitives versus a premature core Dock primitive.

The missing step is narrow: consume the model and adapter contract into existing Neo primitives so committed dock layouts can render as nested split containers and tabbed slots.

The Architectural Reality

V-B-A before filing:

  • Live issue state at 2026-06-13T16:23:03Z: #13030 remains open as the scoping anchor; #13104 is open and assigned to Ada for preview rendering; no open split/tab rendering implementation ticket exists in the latest-open queue.
  • Scope-specific GitHub sweep for split/tab rendering, split tab rendering, split/tab adapter, and docking renderable structures found only #13030, #13104, and the closed contract leaves #13089 / #13086 / #13061.
  • Local exact sweep over resources/content/issues, resources/content/discussions, and learn/agentos/HarnessDockZoneModel.md found only the parent/contract references, including the explicit statement that concrete split/tab rendering is a follow-up leaf.
  • A2A last-30 sweep at 2026-06-13T16:23:03Z showed the recent #13104 lane claim and prior lifecycle broadcasts, but no competing [lane-claim] or [lane-intent] for split/tab layout rendering.
  • Knowledge Base semantic check found adjacent historical primitives (#3519 tab drag/drop, #2192 splitter, #8155 dashboard detach/reintegration), but no existing issue for implementing this exact dock-zone-to-split/tab rendering leaf.
  • Labels were verified live: enhancement, ai, and architecture exist.

Source anchors already established by the merged contract:

  • learn/agentos/HarnessDockZoneModel.md defines split projection as ordinary containers with layout: {ntype: 'hbox'|'vbox', align: 'stretch'} and child ordering/flex derived from the model.
  • The same contract defines tabs projection as Neo.tab.Container-compatible config with item order and activeIndex derived from model-owned item ids.
  • Runtime componentRef resolution is a handoff concern; serializable model identity remains stable even when live refs are stale or missing.

The Fix

Implement the split/tab rendering adapter that consumes the accepted dock-zone model shape and produces concrete renderable Neo structures.

Expected shape:

  1. Read the current HarnessDockZoneModel.md contract from dev and use it as the source of authority for split and tabs node projection.
  2. Add a narrow adapter surface owned by the dashboard/harness docking layer unless structural pre-flight proves a different owner is necessary.
  3. Map split.orientation: 'horizontal' to hbox and split.orientation: 'vertical' to vbox, preserving child order and honoring valid ratio/flex data when present.
  4. Map tabs.items and activeItemId into tab.Container-compatible configs while preserving stable dock item identity outside display text.
  5. Resolve componentRef through a runtime resolver when available; if no live component or blueprint can be resolved, render a recoverable placeholder/fail-safe without corrupting the model.
  6. Keep preview rendering (#13104) and layout persistence as separate consumers.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Boundary Docs / Evidence
Split/tab rendering adapter #13089 / PR #13090 and HarnessDockZoneModel.md Consume dock-zone model nodes and return renderable Neo configs/components Do not create a generic core Dock primitive without structural evidence Unit/static tests cover split and tab projection
Split projection HarnessDockZoneModel.md split projection table Horizontal -> hbox; vertical -> vbox; preserve ordering and valid flex/ratio data Invalid ratios normalize or fall back to equal flex Tests cover horizontal, vertical, and invalid/missing ratio cases
Tab projection HarnessDockZoneModel.md tab projection table Preserve item order; derive active index from activeItemId; fall back to index 0 or null Do not fork tab semantics for harness-only convenience Tests cover active item, missing active item, and empty tabs
Component identity handoff #13063 and model stable item identity Resolve live componentRef or blueprint into child configs while keeping serialized ids stable Missing refs render recoverable placeholder/fail-safe Tests prove stale refs do not mutate/drop model records
Preview boundary #13104 and #13086 Adapter consumes committed layout model, not transient hover state No dockPreview, DOMRect, pointer, or window geometry dependency in this leaf Source/tests reject preview-only fields in adapter input
Persistence boundary #13030 blueprint compatibility Output remains persistence-compatible No save/restore storage implementation in this PR PR body names the later persistence leaf boundary

Decision Record Impact

Aligned-with ADR 0020 and Epic #13012. This ticket implements a harness/dashboard docking leaf and should not amend an ADR unless implementation evidence proves the adapter must become a general core layout primitive.

Acceptance Criteria

  • A concrete split/tab rendering adapter exists for dock-zone model split and tabs nodes.
  • Horizontal and vertical split nodes project to existing Neo layout primitives without introducing a parallel layout engine.
  • Split child order is model-owned and preserved; valid size/ratio data is honored or normalized without mutating the source model.
  • Tab nodes project to existing tab/container semantics with item order and active item behavior covered by tests.
  • Runtime componentRef resolution is separated from serializable model identity; stale refs produce recoverable output instead of deleting or corrupting model items.
  • The adapter has no dependency on transient dockPreview, DOMRect, pointer coordinates, or window geometry.
  • Unit or static tests cover split projection, tab projection, missing/stale component refs, and boundary rejection of preview-only input.
  • If implementation introduces or relocates any .mjs file, the PR documents structural-pre-flight evidence for the chosen destination.

Out of Scope

  • Preview zone rendering during drag (#13104).
  • Layout save/restore persistence.
  • Cross-window choreography (#13025 / #13028).
  • Partner-specific presets or public client naming.
  • Neural Link mutation-to-commit write-through.
  • Generalizing the adapter into a core Dock primitive without implementation evidence.

Avoided Traps

  • Parallel layout engine - rejected. Existing Neo layout and tab primitives are the first implementation target.
  • Preview coupling - rejected. This leaf renders committed layout state, not hover intent.
  • Persistence bundling - rejected. Save/restore needs its own leaf after renderable structures exist.
  • Core primitive too early - rejected. A dashboard/harness adapter can prove the shape before any core lift.

Related

Parent: #13012 Scoping source: #13030 Depends on: #13061 / PR #13062 and #13089 / PR #13090 Adjacent: #13086 / PR #13087, #13104, #13063, #13025, #13028

Retrieval Hint: "harness docking split tab rendering adapter dock-zone model hbox vbox tab Container componentRef placeholder"

tobiu closed this issue on Jun 13, 2026, 8:13 PM
tobiu referenced in commit f5d19eb - "feat(dashboard): render dock split tab layouts (#13105) (#13107) on Jun 13, 2026, 8:13 PM