Timekeeping and clock recovery

The DS3231 RTC supplies wall time immediately at boot. The BOOT CHECK rtc=ok message means the chip responds and does not report oscillator stop; it does not prove that the displayed time is accurate.

If no phone or manual time source has synchronized the clock within 15 seconds of UI startup, firmware starts a background network fallback when saved Wi-Fi credentials are available. It makes up to two bounded Wi-Fi/NTP attempts, with HTTP time endpoints as an NTP fallback. The display and BLE event loop continue while this runs. A completed timestamp is applied from the main loop to keep RTC access serialized.

Time sources have priority: manual adjustment, then phone/companion time, then network time. Thus a phone's Current Time Service update can correct the RTC after boot and can replace a network result that arrived first. A network result cannot override a phone or manual adjustment. If Wi-Fi is not configured or both attempts fail, the watch keeps running from the RTC and can still correct time when a phone connects or the user syncs manually.

The RTC battery and oscillator should still be checked if time is wrong after repeated successful synchronization. The RTC adjusted log confirms a source changed the chip; it does not validate the backup cell or long-term drift.

Use ewctl time status over USB to inspect the current value, I²C readability, oscillator-stop flag, and the DS3231/software difference. ewctl time set <epoch> sets the watch's displayed wall time directly. After setting a known time, record time status, leave the watch running for several hours, then compare again. A continuing offset while powered suggests the RTC or its clock source; a reset to an old value after main power is removed points to backup-cell or RTC backup-path trouble. The status command cannot measure the coin cell's voltage, so that final distinction still needs a hardware check.