f06ee259b4abdec7dd531af8822a83c2d7e5be2d
Adds VelocityTracker and a port of AOSP SplineOverScroller's fling curve (FlingCalculator, cited at the definition) to iris::sense, and wires List::fling/is_scrolling/cancel_fling/tick_fling through Selection::drag's release path -- a pan's release now decelerates instead of stopping dead on the finger lifting, matching IRIS_TODO.md's "swiping has no momentum" ask. Clamped at the loaded content's start/end and cancelled by the next touch-down. Also fixes the scroll jitter DragArbiter's slop release caused: crossing DRAG_SLOP applied the whole pre-threshold drag (measured from press_start) in one step, since nothing pans while a gesture might still resolve to a selection. Now only the excess past DRAG_SLOP is applied on that frame, the same way Android's own touch handling consumes touch slop rather than replaying it. Root-caused by reading DragArbiter's state machine and covered by new unit tests (fling distance against the closed-form spline result within 1%, cancel-on-touch, start/end clamp, the slop-crossing regression); no emulator was used this pass, so an on-device trace/feel-check is still open, and Benchmark v2's four-phase bench_client.rs spec was not attempted. docs/IRIS.md, docs/IRIS_TODO.md and docs/RUST.md's P0 box record what's done and what's left. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Languages
Rust
53%
Kotlin
44.4%
Shell
2.6%