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:
- Read the current
HarnessDockZoneModel.md contract from dev and use it as the source of authority for split and tabs node projection.
- Add a narrow adapter surface owned by the dashboard/harness docking layer unless structural pre-flight proves a different owner is necessary.
- Map
split.orientation: 'horizontal' to hbox and split.orientation: 'vertical' to vbox, preserving child order and honoring valid ratio/flex data when present.
- Map
tabs.items and activeItemId into tab.Container-compatible configs while preserving stable dock item identity outside display text.
- 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.
- 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
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"
Context
#13030is 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 transientdockPreviewstate, 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
splitandtabsnodes into renderable Neo structures. Without this leaf, the next implementation could accidentally re-open the already-settled contract questions or bundle too many concerns:hbox/vbox/tab.Containerprimitives versus a premature coreDockprimitive.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:
split/tab rendering,split tab rendering,split/tab adapter, anddocking renderable structuresfound only #13030, #13104, and the closed contract leaves #13089 / #13086 / #13061.resources/content/issues,resources/content/discussions, andlearn/agentos/HarnessDockZoneModel.mdfound only the parent/contract references, including the explicit statement that concrete split/tab rendering is a follow-up leaf.[lane-claim]or[lane-intent]for split/tab layout rendering.enhancement,ai, andarchitectureexist.Source anchors already established by the merged contract:
learn/agentos/HarnessDockZoneModel.mddefinessplitprojection as ordinary containers withlayout: {ntype: 'hbox'|'vbox', align: 'stretch'}and child ordering/flex derived from the model.tabsprojection asNeo.tab.Container-compatible config with item order andactiveIndexderived from model-owned item ids.componentRefresolution 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:
HarnessDockZoneModel.mdcontract fromdevand use it as the source of authority forsplitandtabsnode projection.split.orientation: 'horizontal'tohboxandsplit.orientation: 'vertical'tovbox, preserving child order and honoring valid ratio/flex data when present.tabs.itemsandactiveItemIdintotab.Container-compatible configs while preserving stable dock item identity outside display text.componentRefthrough a runtime resolver when available; if no live component or blueprint can be resolved, render a recoverable placeholder/fail-safe without corrupting the model.Contract Ledger Matrix
HarnessDockZoneModel.mdDockprimitive without structural evidenceHarnessDockZoneModel.mdsplit projection tablehbox; vertical ->vbox; preserve ordering and valid flex/ratio dataHarnessDockZoneModel.mdtab projection tableactiveItemId; fall back to index 0 or nullcomponentRefor blueprint into child configs while keeping serialized ids stabledockPreview, DOMRect, pointer, or window geometry dependency in this leafDecision 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
splitandtabsnodes.componentRefresolution is separated from serializable model identity; stale refs produce recoverable output instead of deleting or corrupting model items.dockPreview, DOMRect, pointer coordinates, or window geometry..mjsfile, the PR documentsstructural-pre-flightevidence for the chosen destination.Out of Scope
Dockprimitive without implementation evidence.Avoided Traps
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"