LearnNewsExamplesServices
Frontmatter
id13104
titleRender harness dock preview zones during drag
stateClosed
labels
enhancementaiarchitecture
assigneesneo-opus-ada
createdAtJun 13, 2026, 5:43 PM
updatedAtJun 13, 2026, 8:48 PM
githubUrlhttps://github.com/neomjs/neo/issues/13104
authorneo-gpt
commentsCount1
parentIssue13012
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 13, 2026, 8:48 PM

Render harness dock preview zones during drag

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

Peer-role active: substrate-validation, precedent-checking, and evidence-backed convergence pressure count as execution; suspend Auto Mode 'ack-and-move-on' bias until exit conditions are met. Schlagfertig-discipline (§6.7) anchors the positive disposition.

Context

#13030 is the QT-grade docking scoping anchor under Epic #13012. Its two prerequisite contract leaves are now merged: #13086 via PR #13087 for dock preview-state semantics, and #13089 via PR #13090 for the split/tab adapter boundary. The next narrow leaf is the runtime preview renderer: make the transient dockPreview state visible during drag without bundling persistence, split/tab rendering, or a new drag system.

Release classification: boardless (harness docking implementation leaf; not required for the v13 release gate).

Duplicate sweep: latest-open sweep checked the latest 20 open issues at 2026-06-13T15:42:27Z; no equivalent found. Scoped live GitHub search for drag-to-dock preview renderer docking preview zones returned only parent #13030. A2A latest-30 sweep found no overlapping [lane-claim] / [lane-intent] on the preview-renderer scope. Local exact sweep over resources/content/issues and resources/content/discussions for drag-to-dock preview, preview renderer, preview zones, dock preview, and docking preview found no active/archived duplicate. KB semantic sweep attempted the same scope but failed because Knowledge Base health reports knowledgeBase:null.

The Problem

The merged dock-zone contract defines a runtime-only dockPreview object, but there is not yet a renderer that turns it into visible edge/split/tab target affordances while a pane is dragged. Without this leaf, the docking sequence remains abstract: the model knows what a preview means, but the operator cannot see where a drop will land.

The Architectural Reality

learn/agentos/HarnessDockZoneModel.md is the current source of authority. Its Drag Integration Boundary states that future preview slices should listen to existing drag surfaces and produce a transient dockPreview object; the model does not own pointer events, and dockPreview must remain runtime-only.

The relevant existing substrates named by the contract are src/dashboard/Container.mjs, src/draggable/dashboard/SortZone.mjs, src/manager/DragCoordinator.mjs, and src/manager/Window.mjs. This ticket is a runtime adapter / visual-affordance leaf. If implementation introduces any new .mjs file, the claimer must run structural-pre-flight before choosing the destination.

The Fix

Implement the drag-time preview renderer that consumes the accepted dockPreview shape and projects it into visible dock target affordances for the harness workspace. The renderer should use the existing drag lifecycle as the event source, map preview placements into edge/split/tab indicators, and clear the overlay on drag leave, drop, cancellation, or stale/invalid preview state.

The renderer must not persist DOMRects, screen coordinates, hover rectangles, or overlay state. On drop, the owning adapter converts the preview into semantic dock operations such as moveItem, splitNode, or addTab; the overlay itself must not perform direct persisted-tree mutation.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback Evidence
dockPreview runtime object learn/agentos/HarnessDockZoneModel.md Drag Integration Boundary Consume itemId, targetNodeId, placement, and index to render the current drop intent Missing, invalid, or stale preview clears the visual target and performs no model mutation Focused unit coverage for preview mapping and invalid-state cleanup
Existing drag lifecycle src/draggable/dashboard/SortZone.mjs / src/manager/DragCoordinator.mjs Preview updates ride the existing drag substrate rather than adding parallel pointer ownership Existing reorder / drag behavior remains unchanged when no dock preview is active Unit or whitebox coverage around event-to-preview handoff
Drop commit boundary Dock-zone semantic operations in learn/agentos/HarnessDockZoneModel.md Renderer stays visual-only; accepted drops are committed by semantic operations in the adapter layer Cancelled / rejected drops clear preview with no serialized state change Tests prove cleanup and no direct persisted-tree write from overlay code

Decision Record impact

Aligned-with ADR 0020 and the merged Agent Harness dock-zone model contract. No ADR amendment is required for this implementation leaf.

Acceptance Criteria

  • Dragging a dockable harness pane can render visible edge, split, or tab target affordances from a dockPreview object.
  • The implementation uses the existing dashboard / drag lifecycle; it does not add a parallel pointer or drag system.
  • Preview overlays clear on drag leave, drop, cancellation, and invalid/stale preview state.
  • Runtime-only fields such as DOMRects, screen coordinates, hover rectangles, and overlay nodes are never written into the persisted dock-zone model.
  • The drop path remains semantic: preview acceptance routes into model operations such as moveItem, splitNode, or addTab, not direct tree surgery inside overlay code.
  • Test coverage validates preview mapping, cleanup, and the fail-closed invalid-preview path. Use whitebox/e2e only if the implementation crosses the visible UI path.

Out of Scope

  • Implementing split/tab rendering structures from #13089 beyond what is necessary to target preview affordances.
  • Layout persistence / save-restore.
  • Cross-window choreography from #13025 or #13028.
  • A generic core Dock layout primitive.
  • Partner-specific presets or public client-specific references.

Avoided Traps

  • External docking-library object models are rejected; this leaf must consume Neo's worker-owned JSON contract.
  • Pixel-absolute persistence is rejected; preview geometry is runtime-only.
  • A parallel drag system is rejected; the preview renderer adapts the existing drag substrate.

Related

Parent: #13012 Related: #13030 Related: #13086 Related: #13089 Related: #13087 Related: #13090

Origin Session ID: d2d31447-5009-47a8-992e-9ecc35b806c1 Retrieval Hint: "#13030 dock preview renderer dockPreview drag-to-dock preview zones HarnessDockZoneModel Drag Integration Boundary"