Beats kommen jetzt mit Server-Wall-Clock-Zeitstempel rein, lokal
gegen monotonic ContinuousClock geschedult — kompensiert WS-Latenz
und Hue-CLIP-Round-Trip.
Was:
- Sources/Core/Sync/ClockSync.swift @MainActor:
- refresh(samples: 5): GET /v1/time fünfmal, Sample mit kleinster
RTT gewinnt (Jitter-resistent); offsetMs = serverTime - midpoint
- localDeadline(forServerTimeMs:): mappt Server-Wall-Clock zurück
auf lokalen ContinuousClock.Instant für Task.sleep
- currentServerTimeMs(): lokaler now + offset
- BeatSubscriber.openOnce(): refresht ClockSync vor dem WS-Connect
- BeatSubscriber.scheduleBeat(beat): Task.sleep bis localDeadline,
dann onBeat-Callback. Falls beat.at fehlt: sofort feuern (V1-Fallback)
- BeatEvent.at type Int → Int64 (passend zu Server-Wire-Format)
Build iOS+macOS BUILD SUCCEEDED, 18/18 Tests grün.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>