LearnNewsExamplesServices
Frontmatter
id18395
titleRender complete drop affordances for default dock targets
stateClosed
labels
bugaitestingdashboard
assigneesneo-gpt
createdAtSep 6, 2026, 10:04 PM
updatedAtSep 6, 2026, 10:46 PM
githubUrlhttps://github.com/neomjs/neo/issues/18395
authorneo-gpt
commentsCount0
parentIssue18304
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 6, 2026, 10:46 PM

Render complete drop affordances for default dock targets

Closed v13.2.0/archive-v13-2-0-chunk-19 bugaitestingdashboard
neo-gpt
neo-gpt commented on Sep 6, 2026, 10:04 PM

Context and problem

A real Workstation Metrics popup on merged 8d6c4216 returns an accepted drop preview from its default Participation hover path but paints no preview or drop menu. The replacement full PopupWorkspace lost the affordances the earlier vessel mounted; the root remains a positive control with a DropIndicators instance.

Live reproduction: open Metrics using its header pop-out action, call the popup Participation's defaultPreviewFor({draggedItem:{dockItemId:'audit'}, localX:200, localY:180}) after geometry warms, and observe accepted neo.dock.preview.v1 for workstation-vessel-tabs:metrics. Its owned renderer still has dockPreview:null, its controller has indicators:null, and the popup's indicator query is empty. This is production-path AppWorker evidence after a real pop-out, not a full native-transfer receipt.

Architectural reality and fix

src/dashboard/dock/window/Participation.mjs#resolveAffordances owns the default Preview and DragAffordances. It creates no DropIndicators; defaultPreviewFor resolves a preview without publishing it. The existing interaction/DragAffordances.mjs already owns local candidate selection and painting, and interaction/DropIndicators.mjs owns menu geometry and pointer selection.

Complete that default composition using those existing owners. Share candidate selection and preview publication between the synchronous remote-hover path and local drag path, preserving the controller's geometry-generation fences. Retire default-owned overlays with their Participation; caller-supplied callbacks remain caller-owned. Reuse the relevant renderer-publication work from Emmy's unmerged b947033b, adapted to the registered PreviewContract from #18392. No new helper class or consumer overlay implementation is needed.

Surface Authority Behavior Fallback Docs Evidence
Participation default hover Existing Preview / DragAffordances / DropIndicators composition Accepted preview and candidate menu reach the same owned rendered overlays Geometry unavailable or retired owner yields no preview Changed method/config JSDoc Unit ownership controls and rendered popup
DragAffordances Existing candidate policy and registered PreviewContract Local and remote paths share candidate selection and painting Clear invalidates geometry and feedback Method JSDoc Candidate-selection regression and stale-geometry controls

Decision Record impact: aligned-with ADR 0029's shared affordance/preview separation; no wire or authority amendment. Structural pre-flight: no new or relocated module. Agent OS structure map: N/A, existing Engine owners only.

Acceptance criteria

  • AC-1: default Participation owns one Preview and one DropIndicators through its existing DragAffordances, reused over hover calls.
  • AC-2: local and default remote hover share the existing candidate grammar, pointer selection and renderer publication; accepted target previews paint the menu and target region without consumer callback copies.
  • AC-3: clear/destroy and stale asynchronous geometry cannot leave active feedback; only default-owned overlays are destroyed.
  • AC-4: existing local drag, explicit callback, policy and geometry tests remain green; regression tests fail against the pre-fix source.
  • AC-5: a rendered Workstation popup demonstrates accepted default hover, visible menu/preview, selection and cleanup while its document remains unchanged during hover. State precisely whether dispatch is through Neural Link or a human drag.

Out of scope

Native embodiment/staging choreography (the separate 3a640d6d change), full native-transfer repair, independent full roots, Workspace decomposition, new placement grammar/schema, theme redesign, Brain or tooling changes. This leaf repairs visible target affordances; it does not certify all remaining #18303 product acceptance.

Avoided traps and prior art

Do not add Workstation-specific overlay copies or a second candidate controller. Memory Core 149ef22a-615b-4e6d-b5ac-0ea2a59686cc records the earlier standalone-demo move toward this shared controller; that work excluded native/cross-window reintegration. #18121 instead owns older native-popup placement/claim instability and is not this missing default composition.

Live latest-20 open issue, own-assignment and latest-30 all-status A2A sweeps repeated immediately before creation; no equivalent leaf found. Emmy explicitly released this surface to Euclid at 19:46Z and remains on #18393. Ask/KB tooling is excluded by current operator direction.

Related: #18304, #18303, #18314, #18383

Origin Session ID: 01a07609-5e09-70f0-bf2c-a27d77d1b7f2

Retrieval Hint: popup accepted preview dockPreview null indicators absent b947033b