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:
Carry the committed addTab descriptor only through the projection refresh that consumes it.
Correlate the inserted itemId to the recreated header without persisting projection state in the dock document.
Apply the tab-enter class only to that header.
Bracket the real CSS animation with counted DockMotionSignal.enter/leave, including zero-duration, cancellation, replacement, and destroy settlement.
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.
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.
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-buttonanimation is not operation-correlated: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_motionlie and turn ordinary refreshes into visual motion.The Fix
Build one operation-specific tab-insert seam:
addTabdescriptor only through the projection refresh that consumes it.itemIdto the recreated header without persisting projection state in the dock document.DockMotionSignal.enter/leave, including zero-duration, cancellation, replacement, and destroy settlement.The exact carrier/owner must follow current adapter/tab-container precedents; no global selector or second timing source.
Contract Ledger
addTab→ projection handoff--dock-transition-duration/easingDockMotionSignal(#14779)Acceptance Criteria
addTabanimates exactly the inserted header, including when pane geometry does not change.--dock-transition-*; token-layer reduced motion settles without a local media query or fallback literal.DockMotionSignalis balanced for normal end, zero duration, cancellation, rapid successive inserts, replacement, and destroy.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"