Context
The operator re-ranked the docking lane (2026-07-02) as an agent-harness cornerstone: the bar is Qt-Advanced-Docking-System-class WITH Neo's multi-window reality, and the assessed gap is not another implementation leaf but the missing design tier (operator direction comment on the parent: IC_kwDODSospM8AAAABIcPOUw). The parent epic's own history evidences unconverged design: its scope was reframed to "Docking on the Infinite Canvas — QT superset + multi-window" (2026-06-15) and reverted to "QT-parity docking polish" (2026-06-21) — a title oscillation is a design question wearing a rename. This ticket is the design gate that settles the tier above the remaining leaves. Filed under the product-surface planning lane ([lane-claim] broadcast 2026-07-02T02:30Z; #13158 self-assigned).
The Problem
The dockZone.v1 foundation is real and shipped (model contract, semantic-operation executor, split/tab adapter, drag preview, splitter resize, auto-hide model seam). But the remaining capability leaves (auto-hide UI #13280, named perspectives, grouped tab-drag/overflow) plus the multi-window bar share design questions that per-leaf contract settling cannot answer coherently:
- The persistence wrapper (
neo.harness.dockLayout.v1) models layoutId/title/revision, but perspective semantics — what a perspective captures across MULTIPLE windows on one SharedWorker heap, restore into a different window topology, fail-closed restore — are unspecified.
- Cross-window drag semantics (a dock item dragged between Chromium popups sharing one App-Worker heap; boundary with the
#13028 OS-window reintegration leaf) are unowned by any leaf.
- The SharedWorker seam — which docking state is per-window render projection vs worker-owned shared truth — is implicit in the adapter but never stated as a contract.
- The core-lift clause (contract §Ownership Boundary: stays in
src/dashboard/ until a second non-dashboard consumer proves reuse) is approaching its trigger: the Institution Cockpit (#13444) and FM-UX surfaces (#13015) are becoming exactly that second consumer class. Fire, defer, or amend is a design decision, not a leaf decision.
- Operator assessment: parts of the existing interaction code are brittle — brittleness at the interaction layer is the symptom of missing design authority above it.
The Architectural Reality
- Contract of record:
learn/agentos/HarnessDockZoneModel.md (dockZone.v1 — §Split Projection, §Serializable vs Runtime State, §Ownership Boundary, §Demand Validation).
- Shipped substrate:
src/dashboard/DockZoneModel.mjs (semantic ops incl. resizeSplit, setItemAutoHidden), src/dashboard/DockLayoutAdapter.mjs, src/dashboard/DockSplitter.mjs, apps/agentos/view/DockPreview.mjs.
- Verification surface:
examples/dashboard/dock/ (#13247 — slices landing).
- Multi-window substrate: Chromium popups on one SharedWorker App-Worker heap (ADR 0020 embodiment vessel); window-manager leaves #13025/#13028 are siblings, not children.
- Consumers-in-waiting: #13444 cockpit panes and #13015 FM-UX cards live INSIDE the docking shell; their container contract is this spec's downstream interface.
The Fix
Produce the docking design-tier specification as a contract document in learn/agentos/ (sibling-lift from HarnessDockZoneModel.md; exact filename settled at authoring per the sibling pattern — no new .mjs, so structural-pre-flight Stage 0 does not fire; if the cross-window seam proves to need binding decision authority beyond a contract doc, the spec escalates that single section to an ADR and says so explicitly). One PR. Sections the spec MUST settle:
- Layout model formalization — the full dockZone.v1 state space incl. multi-window: worker-owned truth vs per-window projection (the SharedWorker seam), as a normative table.
- Named perspectives — capture scope (single-window vs whole-topology), restore semantics into changed window topologies, fail-closed behavior, revision migration.
- Cross-window drag — semantic-operation shape for item movement between windows, riding the existing preview→operation path; boundary with
#13028 consumed, not owned.
- Grouped drag + overflow — the multi-item operation contract (leaf-implementable afterward).
- Core-lift clause disposition — fire / defer-with-named-trigger / amend §Ownership Boundary, given the cockpit/FM consumer class.
- Container contract for embedded product surfaces — the minimal interface #13444 panes and #13015 FM-UX cards consume (coordination: #13015 steward has the options DM, 2026-07-02).
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
learn/agentos/ docking design-tier contract doc (new) |
ADR 0020 + HarnessDockZoneModel.md (dockZone.v1) |
Adds the design tier above v1: multi-window layout model, perspectives, cross-window drag, SharedWorker seam, core-lift disposition |
Per-leaf contract settling continues (status quo) |
The doc IS the docs |
Cross-family-reviewed spec PR; render-verified diagrams if included |
HarnessDockZoneModel.md §Ownership Boundary |
The contract's own clause |
Spec dispositions the second-consumer trigger (cockpit/FM) |
Clause unchanged |
Amended §, iff disposition = amend |
V-B-A against #13444/#13015 consumer reality |
Decision Record impact
aligned-with ADR 0020. The spec itself declares whether the cross-window/SharedWorker seam requires a new ADR (escalation path named in The Fix); this ticket does not amend or supersede any ADR.
Acceptance Criteria
Out of Scope
- Implementation of the capability leaves (they follow, one Contract-Ledgered leaf per capability, per the parent's epic-review discipline).
- Executing the core
src/layout/Dock lift (the spec dispositions it only).
- Window-manager leaves #13025 / #13028 (consumed as boundaries).
- #13015 stewardship or FM-UX implementation (only the container interface is specified here).
- Public performance claims (inherited
#13032 guardrail).
Avoided Traps
- Spec-as-epic sprawl — rejected: one document, one PR, six named sections.
- dockZone.v1 redesign — rejected: the tier is additive on the shipped model (the parent's own rule).
- Gating in-flight work — rejected:
#13280 proceeds on its landed model seam; only unstarted leaves sequence behind the spec.
- Importing Qt-ADS architecture wholesale — rejected: Qt-ADS is the capability bar, not the design — its single-process, single-window-tree assumptions do not survive Neo's worker/multi-window reality (industry-friction-radar 3-step abstraction applies: extract the friction points, never the architecture).
Related
Parent: #13158. Foundation: the #13030 chain. Consumers: #13444, #13015. Boundaries: #13028, #13025. Verification: #13247. In-flight sibling: #13280.
Live latest-open sweep: checked latest 20 open issues at 2026-07-02T02:33Z; no equivalent found. A2A in-flight sweep: 30-message all-states scan at 02:33Z; only same-scope claim is my own [lane-claim] (02:30Z, first-claim-timestamp mine).
Origin Session ID: 4185a2ee-ff65-4544-9cc1-049d73e56649
Retrieval Hint: "docking design tier spec cross-window SharedWorker seam perspectives" · query_summaries: "product-surface planning lane #13158 claim"
Context
The operator re-ranked the docking lane (2026-07-02) as an agent-harness cornerstone: the bar is Qt-Advanced-Docking-System-class WITH Neo's multi-window reality, and the assessed gap is not another implementation leaf but the missing design tier (operator direction comment on the parent: IC_kwDODSospM8AAAABIcPOUw). The parent epic's own history evidences unconverged design: its scope was reframed to "Docking on the Infinite Canvas — QT superset + multi-window" (2026-06-15) and reverted to "QT-parity docking polish" (2026-06-21) — a title oscillation is a design question wearing a rename. This ticket is the design gate that settles the tier above the remaining leaves. Filed under the product-surface planning lane (
[lane-claim]broadcast 2026-07-02T02:30Z; #13158 self-assigned).The Problem
The dockZone.v1 foundation is real and shipped (model contract, semantic-operation executor, split/tab adapter, drag preview, splitter resize, auto-hide model seam). But the remaining capability leaves (auto-hide UI
#13280, named perspectives, grouped tab-drag/overflow) plus the multi-window bar share design questions that per-leaf contract settling cannot answer coherently:neo.harness.dockLayout.v1) modelslayoutId/title/revision, but perspective semantics — what a perspective captures across MULTIPLE windows on one SharedWorker heap, restore into a different window topology, fail-closed restore — are unspecified.#13028OS-window reintegration leaf) are unowned by any leaf.src/dashboard/until a second non-dashboard consumer proves reuse) is approaching its trigger: the Institution Cockpit (#13444) and FM-UX surfaces (#13015) are becoming exactly that second consumer class. Fire, defer, or amend is a design decision, not a leaf decision.The Architectural Reality
learn/agentos/HarnessDockZoneModel.md(dockZone.v1 — §Split Projection, §Serializable vs Runtime State, §Ownership Boundary, §Demand Validation).src/dashboard/DockZoneModel.mjs(semantic ops incl.resizeSplit,setItemAutoHidden),src/dashboard/DockLayoutAdapter.mjs,src/dashboard/DockSplitter.mjs,apps/agentos/view/DockPreview.mjs.examples/dashboard/dock/(#13247 — slices landing).The Fix
Produce the docking design-tier specification as a contract document in
learn/agentos/(sibling-lift fromHarnessDockZoneModel.md; exact filename settled at authoring per the sibling pattern — no new.mjs, so structural-pre-flight Stage 0 does not fire; if the cross-window seam proves to need binding decision authority beyond a contract doc, the spec escalates that single section to an ADR and says so explicitly). One PR. Sections the spec MUST settle:#13028consumed, not owned.Contract Ledger Matrix
learn/agentos/docking design-tier contract doc (new)HarnessDockZoneModel.md(dockZone.v1)HarnessDockZoneModel.md§Ownership BoundaryDecision Record impact
aligned-with ADR 0020. The spec itself declares whether the cross-window/SharedWorker seam requires a new ADR (escalation path named in The Fix); this ticket does not amend or supersede any ADR.Acceptance Criteria
DOMRect, screen coordinates,windowId, live components in layouts).#13280explicitly NOT gated on it.Out of Scope
src/layout/Docklift (the spec dispositions it only).#13032guardrail).Avoided Traps
#13280proceeds on its landed model seam; only unstarted leaves sequence behind the spec.Related
Parent: #13158. Foundation: the
#13030chain. Consumers: #13444, #13015. Boundaries: #13028, #13025. Verification: #13247. In-flight sibling:#13280.Live latest-open sweep: checked latest 20 open issues at 2026-07-02T02:33Z; no equivalent found. A2A in-flight sweep: 30-message all-states scan at 02:33Z; only same-scope claim is my own
[lane-claim](02:30Z, first-claim-timestamp mine).Origin Session ID: 4185a2ee-ff65-4544-9cc1-049d73e56649 Retrieval Hint: "docking design tier spec cross-window SharedWorker seam perspectives" ·
query_summaries: "product-surface planning lane #13158 claim"