moodlit-native/Sources/Core/Sync
till c92995b7e9 feat(beat-sync): μ-10.4 NTP-Style Lookahead-Timing für tight Beat-Sync
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>
2026-05-19 15:44:04 +02:00
..
BeatSubscriber.swift feat(beat-sync): μ-10.4 NTP-Style Lookahead-Timing für tight Beat-Sync 2026-05-19 15:44:04 +02:00
ClockSync.swift feat(beat-sync): μ-10.4 NTP-Style Lookahead-Timing für tight Beat-Sync 2026-05-19 15:44:04 +02:00
PresenceClient.swift feat(presence): μ-8.3 iOS+macOS PresenceClient + Banner-UI 2026-05-19 13:18:12 +02:00
PresenceState.swift feat(presence): μ-8.3 iOS+macOS PresenceClient + Banner-UI 2026-05-19 13:18:12 +02:00
WidgetSnapshot.swift μ-7.3: Widget (Small/Medium/Large) + Deep-Link-Handling 2026-05-18 15:21:55 +02:00