- Shipped
- 2026年4月30日 03:00 UTC
- Author
- kamo
- Commit
- 14bc9d8
The previous fix still let heads drift on release because: 1. Throw detection averaged velocity across the full 110ms window. A user who flicked then decelerated to a slow crawl before release still averaged > 650 px/s over that window and got a false-positive throw. Now we look only at the last RELEASE_TAIL_MS (60ms) of pointer samples, so a decelerating release with slow tail velocity is correctly read as a deliberate drop. Pause guard widened to 60ms to match. 2. animate(mx, fx, { velocity: 0 }) doesn't actually clear MotionValue's internally-tracked velocity from the rapid mx.set() chain — it just starts a new spring with 0 initial velocity. Switched to mx.jump(fx), which is purpose-built for this: it stops active animations, zeros tracked velocity, and sets the value in one call. 3. For the mega-cluster path, rewireCluster now runs BEFORE the anchor jump so follower change subscriptions are reattached cleanly before the jump fires its anchor-change event — the new subs see velocity-0 targets unchanged from where they just sprung to.