b2d670724a
The two-way live run unified the propped-phone mirror onto the real ExerciseProgressView driver, whose phase views anchor their timers to a local Date() captured when the page becomes active. For a remote-driven transition that meant anchoring at phaseStart + delivery-latency + render-time, so the receiver's countdown lagged the driver — visibly so iPhone->watch, where the watch is the slower receiver (apply -> SwiftUI re-render -> TabView animation -> phase view activates). The frame already carries phaseStart/phaseEnd wall-clock anchors (the way the old read-only mirror counted off them). Honor them: when a phase is reached by applying a remote frame, the active phase view anchors its timer to the frame's phaseStart/phaseEnd instead of local now. Scoped to the remote-driven page (remoteAnchorPage) so a local swipe or auto-advance still self-anchors; any local transition clears it. Applied symmetrically to both the iPhone and watch drivers. Delivery latency no longer shifts the displayed timer in either direction (limited only by sub-second inter-device clock skew), and the auto-advance at zero fires together since both share the same phaseEnd. Claude-Session: https://claude.ai/code/session_01SCv7zvGFcKy47KSTnTLxRe