Thank you for being patient! We're working hard on resolving the issue
Garmin Connect SDK + connector + sync-plugin.
The default build is just the SDK (HTTP client, OAuth, model types). Two opt-in features wire it into the row-schema dispatch system:
connector — pulls in tento-lona-connector, exposes
tento_garmin::connector::{Garmin, GarminClient, GarminBackendDeps, GarminAuth, GarminParams} plus per-metric
Row impls (sleep, stress, hrv, each with a sibling
:logs row).
sync-plugin — pulls in lona-sync, exposes
tento_garmin::sync_plugin::{GarminSyncProvider, GarminSyncExecutor, GarminApiContext, GarminSyncDeps, RowSyncState}. Drives the orchestrator's two-stage viewport
→ backfill sync over Garmin's daily APIs.
Garmin is the canonical example of the thin-deps + provider
drives sync pattern: Row bodies build per-day cells inside
Row::sync and call ctx.deps.persist_cells(...). See the
connector docs
for the integration contract.