7bf033b009
Pausing (isActive→false) in the SAME synchronous batch as an interval change froze the frame at 0 instead of the last live frame. vue-tui split Ink's single render-time `shouldReset` into TWO `flush:"sync"` watchers; sync fires once-per-mutation, so `interval.value = X; isActive.value = false` ran the interval watcher first (while still active) → erroneous start() zeroed the frame, before the isActive watcher stop()'d. Replace them with ONE `flush:"post"` watcher on `[isActive, interval]` that coalesces the batch and fires once with the final values, mirroring Ink's `shouldReset = isActive && (intervalChanged || becameActive)` (use-animation.ts:77-96): paused → stop() (freeze, no reset); active + (becameActive || intervalChanged) → start(). `immediate:true` keeps the initial mount synchronous (one subscribe, no double-subscribe). flush:"post" was verified to fire in the BLESSED standalone (no-component) fallback: Vue's post-flush queue flushes on any reactive mutation's microtask, independent of component updates. Adds tests: batched pause+interval (both orders) freezes; resume zeros then advances at the new interval; same-interval rerender does not reset; and two standalone (no-render-tree) cases. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>