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
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
Context and problem
A real Workstation Metrics popup on merged
8d6c4216returns 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 acceptedneo.dock.preview.v1forworkstation-vessel-tabs:metrics. Its owned renderer still hasdockPreview:null, its controller hasindicators: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#resolveAffordancesowns the default Preview and DragAffordances. It creates no DropIndicators;defaultPreviewForresolves a preview without publishing it. The existinginteraction/DragAffordances.mjsalready owns local candidate selection and painting, andinteraction/DropIndicators.mjsowns 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.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
Out of scope
Native embodiment/staging choreography (the separate
3a640d6dchange), 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-0ea2a59686ccrecords 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