LearnNewsExamplesServices
Frontmatter
id14949
titleDock choreography transitions: the non-FLIP motion classes consume the #14779 contract substrate
stateClosed
labels
enhancementai
assigneesneo-gpt, neo-opus-grace
createdAtJul 10, 2026, 8:01 AM
updatedAtJul 10, 2026, 7:12 PM
githubUrlhttps://github.com/neomjs/neo/issues/14949
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 10, 2026, 7:12 PM

Dock choreography transitions: the non-FLIP motion classes consume the #14779 contract substrate

Closed Backlog/active-chunk-5 enhancementai
neo-opus-grace
neo-opus-grace commented on Jul 10, 2026, 8:01 AM

Context

Successor leaf from the #14779↔#14929 signed motion-contract disposition: #14779 / PR #14947 delivered the shared --dock-transition-* token set, token-layer reduced-motion collapse, and counted Neo.dashboard.DockMotionSignal. This leaf delivers the first correct non-FLIP Body-side consumer: the auto-hide reveal overlay. Structural re-layout remains with #14929 / PR #14944's FLIP consumer; operation-correlated tab-header motion is the explicit successor #14968.

The Problem

The auto-hide overlay appears and disappears at the projection tier, but its motion must never leak into dock documents or rely on a second timing source. Its signal lifecycle must remain truthful when CSS does not emit animationend (early dismissal, item-only hide/re-show, rapid re-entry, destroy) and when the event does arrive through Neo's serialized local DOM-event bridge.

Two original rows were falsified during implementation:

  • committed splitter resize recreates the projected flex nodes, so a transition on the replacements has no prior DOM identity; the merged FLIP consumer owns that structural jump;
  • a broad tab-header selector animates initial construction and every coarse refresh, while the FLIP signal can settle before a no-geometry refresh's CSS duration. #14968 owns the operation-specific addTab correlation instead.

The Fix

One presentation-tier PR:

  1. Auto-hide reveal slide — edge-specific keyframes source duration/easing only from --dock-transition-*.
  2. Balanced observability — one idempotent reveal producer opens/closes DockMotionSignal across computed hidden↔visible changes, cancellation, destroy, and serialized root-target animation completion. The existing wire omits animationName; config-aware target identity distinguishes the overlay's event from bubbled hosted-pane events.
  3. Arrival settle substrate — a token-driven class/keyframe exists for #14769 to toggle at the real cross-window arrival seam.
  4. Token cleanup — the pre-contract reveal/dismiss duration variables are removed.

Presentation remains JSON-first: zero motion state enters documents, previews, saved perspectives, or persistence.

Contract Ledger

Target Surface Source of Authority Behavior Failure Posture Evidence
reveal CSS classes --dock-transition-* token contract (#14779) edge-specific reveal animation uses only shared duration/easing missing/zero token collapses to the instant path; no local timing fallback live Web Animations sampling + SCSS audit
reveal motion signal DockMotionSignal counted instance ownership hidden→visible enters once; normal end, cancellation, item removal, or destroy leaves once idempotent finish and fail-safe prevent wedges focused lifecycle matrix
local animationend wire DomEvents config-aware target.id only the overlay root settles its producer bubbled children and raw DOM-id collisions are ignored exact serialized-wire regressions
arrival-settle class #14769 future arrival seam token-driven presentation substrate only inert until the owning arrival operation toggles it class/keyframe inspection + live injected-scope sample

Acceptance Criteria

  • Reveal motion sources duration/easing only from --dock-transition-*; reduced motion collapses through the token layer.
  • Reveal routes one balanced DockMotionSignal lifecycle for normal serialized completion, early dismissal, item-only visibility shifts, rapid re-entry, and destroy.
  • Bubbled hosted-pane child animations and raw-DOM-id collisions cannot settle the config-aware root-owned reveal producer.
  • Arrival-settle substrate is token-driven; #14769 owns its real event toggle and signal bracket.
  • No ineffective splitter transition or uncorrelated broad tab animation ships; #14929 / PR #14944 and #14968 are the explicit owners.
  • Zero motion state enters documents, previews, saved perspectives, or persistence.
  • Focused unit evidence covers the final exact tree.
  • Cross-family review before merge.
  • Visual reveal direction/feel on examples/dashboard/dock passed at L3 under the documented token-scope injection; #14969 owns mounting that already-verified scope natively on both dock surfaces.

Out of Scope

Structural FLIP motion (#14929 / PR #14944) · operation-specific tab-header morphing (#14968) · cross-window arrival trigger (#14769) · native dock-surface token scope (#14969 / PR #14971) · downstream hidden-cls delta investigation (#14970) · future Neural-Link motion assertions (#14591 successor) · affordance visual-language polish (#14930).

Scope Reconciliation

  • Delivered here: per-edge reveal slide, exact counted lifecycle ownership, token cleanup, arrival-settle substrate, and JSON-first isolation.
  • Structural splitter resize: satisfied by #14929 / merged PR #14944; live pointer drag remains direct and unanimated.
  • Tab insert: broad selector removed after falsification; #14968 owns operation-correlated class application and its independent counted lifecycle.
  • Arrival: #14769 owns the first product toggle because the cross-window arrival event does not exist before that leaf.

Related

Parent #13158 · substrate #14779 / PR #14947 · structural consumer #14929 / PR #14944 · tab successor #14968 · arrival trigger #14769 · token-scope successor #14969 / PR #14971 · delta investigation #14970 · visual authority #14930 · future assertions #14591.

Origin Session ID: ef6b9a4a-54ec-4afb-8438-f89a3ee46ad2

Retrieval Hint: "dock reveal choreography balanced motion signal serialized animation event operation-correlated tab successor"

tobiu referenced in commit b4a4731 - "feat(dashboard): choreography transitions — the non-FLIP motion classes consume the motion contract (#14949) (#14966) on Jul 10, 2026, 7:12 PM
tobiu closed this issue on Jul 10, 2026, 7:12 PM