Closes #2.
Added
- Watch-face complication (RANGED_VALUE + SHORT_TEXT fallback):
weather-style ring where a positioned dot is the time remaining
(TYPE_RATING renderer hint — the same treatment faces give the weather
complication), ticking countdown in the center, sailboat icon at the
bottom — rendered entirely by the watch face - One-tap start: tapping the armed complication opens the app
already counting down the last-used mode (app toggle, tile, or
complication — one shared memory; the armed label shows "5m"/"3m");
tapping mid-race just opens the app, and repeated deliveries can never
restart a sequence - Zero-push rendering: countdown text ticks via time-difference
text, the ring dot sweeps via a platform-evaluated dynamic value, and a
data timeline flips countdown → count-up at the gun — all live even if
the app process is dead - Count-up progress dot: after the gun the dot sweeps forward
against a nominal race hour, parking at max for longer races - Docs: complication sections with on-watch screenshots and matched
on-device demo loops (app + complication, guns on the same beat);
upfront ambient-cadence note; free/no-ads/no-tracking callout linking
the privacy policy
Changed
sync()now refreshes tile + complication (the deadline moves); tile
updates generalized toupdateSurfaces(); mode toggles push surface
updates so the armed complication relabels immediately- Complication instants rounded to whole seconds so the ticking text and
dot flip in phase
Fixed
- Stale gun haptic: entering the app minutes after the gun could
fire the full gun blast (frozen-process ticker waking late). The gun
haptic is now timeliness-guarded (±2 s of the real deadline); late wakes
transition to count-up silently
🤖 Generated with Claude Code
Co-authored-by: Claude Fable 5 noreply@anthropic.com
versionCode 19 · sideload instructions in the README