LearnNewsExamplesServices
Frontmatter
id14959
titleDock drop-indicator menu: candidate-set producer extension + DockDropIndicators + the cold-open drag beat
stateOpen
labels
enhancementai
assigneesneo-fable-clio
createdAt1:53 PM
updatedAt1:53 PM
githubUrlhttps://github.com/neomjs/neo/issues/14959
authorneo-fable-clio
commentsCount0
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Dock drop-indicator menu: candidate-set producer extension + DockDropIndicators + the cold-open drag beat

Open Backlog/active-chunk-5 enhancementai
neo-fable-clio
neo-fable-clio commented on 1:53 PM

Context

Split from #14930 (scope replacement, not addition): the parent leaf proved to be two PR-sized tiers — the design tier (the §06 authority section + the DockPreview FM/motion-contract polish, delivered by PR #14955, which now resolves the narrowed #14930) and this leaf: the implementation tier that builds the indicator experience the authority specifies. Operator PRIO-0 lineage (2026-07-10): the drag → visible-options → drop loop is the felt Qt-parity floor.

The Problem

The §06 authority decides the interaction model — the indicator-overlay menu as the primary drag affordance — but nothing renders it yet: DockPreviewProducer computes ONE affordance from pointer position, no component renders an option menu, and no showcase films a human drag.

The Architectural Reality

  • Producer extension (src/dashboard/DockPreviewProducer.mjs): expose the full valid-candidate set for the hovered area (the per-pointer-position single affordance derives from it today) — presentation-tier surface change; the reducer contract and previewToOperation stay untouched. Gated on PR #14933 (open), which owns the producer file in flight.
  • DockDropIndicators (new src/dashboard/ sibling, structural fast-path): renders the candidate set as the §06 menu — 5-position cross on the hovered area + container edge chips; hovering an indicator drives the existing DockPreview target-region highlight; drop commits through previewToOperation unchanged; Escape cancels (absorbs tree line C5, single-window). Real child components on the composition bar (the #14906 precedent), FM tokens, motion via --dock-transition-*.
  • The cold-open camera beat: ~15s of human drag with the menu lit on the Demo-A surface, before the tour ("now watch an agent do it") — consumes the two pieces above.

The Fix

One PR per slice as they unblock: producer extension (post-#14933), the indicator component + its unit contract specs, the beat staging on the dockdemo surface. The §06 artifact section is the binding authority for every visual/interaction decision — deltas amend the artifact first.

Acceptance Criteria

  • Producer exposes the full candidate set for a hovered area; existing single-affordance callers unchanged.
  • DockDropIndicators renders cross + edge chips from the candidate set; hover previews the exact target region (accept/reject policy-honest); Escape cancels mid-drag.
  • Real-component composition (no raw-vdom synthesis); FM tokens; --dock-transition-* motion; reduced-motion compliant.
  • The Demo-A cold-open beat films the experience; recordable per the tour contract.
  • Unit contract specs; the live gesture tier rides the #14591 animation half.
  • Cross-family review before merge.

Out of Scope

  • The design authority + DockPreview polish (delivered: PR #14955 → the narrowed #14930).
  • Grouped-drag proxy (E-tranche) · cross-window drag scenes (#14772) · the non-FLIP transition classes (#14949, Grace).

Decision Record impact

aligned-with ADR 0029 — presentation tier over the §2.1 seams; the §06 artifact section is the design authority of record.

Related: parent #13158 · split-from #14930 · authority PR #14955 · gates: PR #14933 (producer file) · siblings #14949 (Grace), #14929 (FLIP) · consumer #14591 animation half.

Live latest-open sweep: latest-20 checked immediately before create; no equivalent (nearest #14949 = the non-FLIP motion classes, disjoint). A2A herd window: no competing claim on the indicator tier.

Origin Session ID: 748f9b8f-20cd-4360-9a29-c3084d059052 Retrieval Hint: "dock drop indicator menu candidate set cross edge chips cold open drag beat"