LearnNewsExamplesServices
Frontmatter
id14930
titleHuman-drag showcase beat + dock-guide affordance polish pass
stateOpen
labels
enhancementai
assigneesneo-fable-clio
createdAt6:47 AM
updatedAt8:14 AM
githubUrlhttps://github.com/neomjs/neo/issues/14930
authorneo-fable-clio
commentsCount4
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Human-drag showcase beat + dock-guide affordance polish pass

Open Backlog/active-chunk-4 enhancementai
neo-fable-clio
neo-fable-clio commented on 6:47 AM

Context

Operator directive (2026-07-10, live session, PRIO 0): the docking epic lives from drag and drop — visible drop targets, dropping into them, animated layout updates — and nothing visual has been put in front of the operator. Qt-ADS is the designated capability floor, and its signature felt experience is the drag: dock guides light up, areas highlight, the drop commits smoothly. Tree audit this session (all 46 #13158 leaves): the drag mechanics are landed and e2e-proven, but no leaf owns the drag experience as a showcase, and the affordance visuals have no design authority (tree line I4 covers token alignment only).

The Problem

Two gaps, one story:

  1. No camera beat features a human drag. Every Demo-A/B scene (F/G tranches) is NL-driven — right for the agent story, but the first thing every dock-library evaluator does is grab a tab and watch what happens. That moment is currently unstaged, unrecorded, and unpolished.
  2. The affordance visuals are functional, not flagship. DockPreview (apps/agentos) already renders accept zones (translucent fill + border), reject zones (red dashed), split insertion bars and tab before/after markers with 120ms transitions — verified this session — but the visual language is placeholder-grade (hardcoded GitHub-blue vars), has no design-artifact authority, and predates the FM token family.

The Architectural Reality

  • The full loop is live in examples/dashboard/dock: pointer drag → DockPreviewProducer.produce()DockPreview affordance render → previewToOperation() → reducer commit (MainContainer.mjs:546-556). Grace's gesture layer (#14851/#14864/#14906) made drags real; #14913 (claimed) is fixing the cross-zone drop regression.
  • The polish surface is apps/agentos/view/DockPreview.mjs + resources/scss/src/apps/agentos/DockPreview.scss (+ theme layers). Tokens: the FM module vocabulary (apps/agentos/TOKENS.md) — a new token is a recorded design decision per that doc's rule.
  • The showcase surface is the Demo-A dockdemo childapp (apps/agentos/childapps/dockdemo/): the design artifact already promises "manual-drive stays available — the tour yields"; the human-drag beat is the natural opening scene before the NL tour ("your hands first — now watch an agent do it").
  • Qt-ADS is the floor, not the blueprint: whether Neo adopts a compass/cross dock-guide idiom or sharpens its edge-band idiom is a design decision that belongs in the design artifact, decided against the house bar — not copied.

The Fix

One PR (design-first, house precedent):

  1. Design-artifact section for the drag affordance language in apps/agentos/design/dock-choreography-demo.html (or a sibling design page if it outgrows a section): zone glow/fill/border treatment on FM tokens, insertion-bar treatment, accept vs reject states, easing/durations, and the explicit compass-guide-vs-edge-band disposition with rationale.
  2. Polish DockPreview to that authority: token-pure styling (no hardcoded palette), motion per the artifact, reduced-motion compliance — folds tree line I4 (FM-module alignment) into this leaf.
  3. The opening beat: a scripted ~15s human-drag moment in the Demo-A surface (drag terminal into the preview group with affordances visible, drop, animated commit via the FLIP sibling leaf) staged before the tour button's run — recordable as the video's cold open.

Acceptance Criteria

  • The design artifact carries the drag-affordance section incl. the guide-idiom disposition; reviewed before implementation (house design-first bar).
  • DockPreview visuals match the artifact exactly: accept/reject zones, insertion bars, token-pure, reduced-motion compliant.
  • The Demo-A surface stages the human-drag opening beat; drop targets visibly light during drag on camera; the drop commits through the standard reducer path.
  • Tree line I4 is absorbed (recorded on the epic tree comment) — no separate token-alignment leaf remains.
  • Public-safe; cross-family review before merge.

Out of Scope

  • The commit-animation mechanism itself (#14929, the sibling FLIP leaf — this beat consumes it).
  • Cross-window drag scenes (#14772 owns the two-window transfer showcase).
  • Grouped-drag preview (tree line E3).

Decision Record impact

aligned-with ADR 0029 — presentation/design tier over the landed §2.1/§2.3 seams.

Related: parent #13158 · sibling #14929 (FLIP commit animation — consumed) · substrate #14906 (rails), #14913 (cross-zone regression, claimed — this leaf builds after it lands) · folds tree line I4 · boundary #14772.

Live latest-open sweep: checked latest 20 open issues at 2026-07-10T04:4xZ; no equivalent. A2A in-flight claim sweep: herd window scanned same-turn; no overlapping claim.

Origin Session ID: 54156254-a1a8-40b3-ba22-86e7d2a1bf81 Retrieval Hint: "human drag showcase beat dock guide affordance polish DockPreview design artifact"

gleephoenixcrew
gleephoenixcrew 8:10 AM

Re: human-drag showcase beat dock-guide affordance — We dogfood in public and file what failed, not just the highlight reel. We tag public issues with the receipt id that reproduced the failure. What's your current approach to human-drag showcase beat dock-guide affordance?

@neo-fable-clio - 2026-07-10T06:13:25Z

Design authority LANDED — implementation slice map + named gates (claimed, in progress)

Slice 1 (done, pushed): the drag-affordance authority section (§06) is in the design artifact on agent/14930-drag-affordance-design (commit 7665a8dee, render-verified) — the disposition is decided: indicator-overlay menu = primary affordance (5-position cross + container edge chips, all options visible; per-option target preview, accept signal-tinted / reject policy-honest; drag proxy; Escape-cancel absorbing tree line C5 single-window), edge-band inference = fallback tier (touch + pre-hover). Tokens bound to the FM vocabulary; every duration via the --dock-transition-* contract (zero local motion policy — consumes the #14779/#14947 substrate by reference).

Remaining slices, gated honestly:

  • Producer full-candidate-set extension — BLOCKED on PR #14933 (open; it owns DockPreviewProducer.mjs in flight). Extends produce()-adjacent surface to return all valid candidates for the hovered area; presentation-tier, reducer untouched. Unblocks when #14933 merges.
  • DockDropIndicators presentation component — downstream of the producer extension (renders its candidate set).
  • DockPreview token polish to the §06 authority — independent, next up (replaces the hardcoded palette vars with FM tokens + contract motion).
  • The cold-open camera beat on the Demo-A surface — last, consumes all of the above.

One-PR-per-slice discipline applies; this branch carries slice 1 (+ the polish slice if it stays small) toward its own PR.

— Clio (@neo-fable-clio · Fable 5)

tobiu
tobiu 8:14 AM

@gleephoenixcrew this works very well with the neural link possession interface, and afterwards saving view permutations as whitebox e2e tests. plus saving memory core session ids.

  • 2026-07-10T06:15:55Z @neo-fable-clio referenced in commit 4ce5822 - "feat(design): dock-preview affordances speak the FM family + the motion contract (#14930)"