LearnNewsExamplesServices
Frontmatter
id14968
titleDock tab-insert morphing: operation-correlated class + counted motion signal
stateOpen
labels
enhancementai
assigneesneo-gpt
createdAt4:02 PM
updatedAt4:02 PM
githubUrlhttps://github.com/neomjs/neo/issues/14968
authorneo-gpt
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Dock tab-insert morphing: operation-correlated class + counted motion signal

Open Backlog/active-chunk-5 enhancementai
neo-gpt
neo-gpt commented on 4:02 PM

Context

Successor to #14949 after exact-head review of PR #14966 falsified its broad tab-header animation shape. The merged motion contract (#14779 / PR #14947) requires token-only timing and one counted DockMotionSignal; the merged FLIP consumer (#14929 / PR #14944) brackets structural geometry motion. Tab-header insertion needs its own non-FLIP producer only when a real tab-insert operation creates the target header.

The Problem

A broad .neo-dashboard .neo-tab-header-button animation is not operation-correlated:

  • it animates initial construction with no motion-signal producer;
  • coarse re-projections animate every recreated header, not only the inserted one;
  • gating it behind the FLIP signal still fails when DockFlip.play() finds no geometry delta and settles before the tab's token duration.

That shape was removed from PR #14966. Shipping it would make observe_motion lie and turn ordinary refreshes into visual motion.

The Fix

Build one operation-specific tab-insert seam:

  1. Carry the committed addTab descriptor only through the projection refresh that consumes it.
  2. Correlate the inserted itemId to the recreated header without persisting projection state in the dock document.
  3. Apply the tab-enter class only to that header.
  4. Bracket the real CSS animation with counted DockMotionSignal.enter/leave, including zero-duration, cancellation, replacement, and destroy settlement.
  5. Clear the transient descriptor after the consuming projection so initial boot, restore, unrelated refresh, and later re-projections stay motion-free.

The exact carrier/owner must follow current adapter/tab-container precedents; no global selector or second timing source.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback / Failure Docs Evidence
committed addTab → projection handoff DockZoneModel operation descriptor + #14944 refresh owner one transient descriptor reaches exactly one consuming projection missing/invalid correlation = instant landing, never animate every tab JSDoc at owner seam focused operation/projection spec
inserted header choreography #14779 token contract + #14949 non-FLIP tier only the inserted header consumes --dock-transition-duration/easing token 0/invalid target = instant durable class/JSDoc summary unit + browser/NL journey
motion observability DockMotionSignal (#14779) enter/leave covers the actual header animation; concurrent FLIP stays counted cancel/destroy/replacement settles synchronously; fail-safe remains backstop producer JSDoc balance/cancellation regressions

Acceptance Criteria

  • Initial construction, perspective restore, and unrelated coarse refresh do not run the tab-enter animation.
  • A committed addTab animates exactly the inserted header, including when pane geometry does not change.
  • Duration/easing come only from --dock-transition-*; token-layer reduced motion settles without a local media query or fallback literal.
  • DockMotionSignal is balanced for normal end, zero duration, cancellation, rapid successive inserts, replacement, and destroy.
  • Transient correlation never enters dock documents, previews, saved perspectives, or persistence.
  • Focused unit coverage plus one real browser/Neural-Link insertion journey proves the class and signal start/settle sequence.
  • Cross-family review before merge.

Out of Scope

Splitter/structural resize (owned by #14944 FLIP) · reveal choreography (PR #14966) · cross-window arrival trigger (#14769) · tab removal choreography unless the same operation-specific seam supports it without widening the contract.

Duplicate / Prior-Art Sweep

Live open-title/body search for “dock tab morph animation” returned only parent #14949. Memory Core surfaced the signed #14779↔#14929 disposition and confirmed CSS toggles and FLIP are complementary but must share one token/signal contract; no operation-specific tab-header owner exists.

Related

Parent #13158 · predecessor #14949 / PR #14966 · motion substrate #14779 / PR #14947 · FLIP owner #14929 / PR #14944 · future assertions #14591.

Origin Session ID: de713f27-0e82-4960-b4c6-f281e0c36449

Retrieval Hint: "dock tab insert header morph operation descriptor DockMotionSignal no geometry delta"