generated from eblume/project-template
All checks were successful
Build / validate (pull_request) Successful in 6m11s
A spoke could be silently failing to sync (expired token → 401, or hub unreachable) with the only signal buried in the daemon log. Now: - hephd tracks SyncHealth (last attempt/success time, last error, auth-failure flag) from the background sync loop and sync.now, classifying a 401 as an auth failure. sync.status returns it plus the pending merge-conflict count. - heph-tui shows a live status-line indicator (spoke only): '⟳ <age>' since the last good sync, red '⚠ auth' when re-login is needed, '⚠ offline' when the hub is unreachable, and '⚠ N conflicts' when conflicts are pending. The event loop polls on a 2s tick so the age advances and failures appear while idle. - docs: recommended Authentik access/refresh token validity to stop frequent re-logins (with the iOS PWA localStorage-eviction caveat). Closes the 'Add hub connection status to heph-tui' and 'Spoke sync health: surface unhealthy state instead of silent 401 spam' backlog items. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
480 B
480 B
heph-tui's status line now shows a live sync indicator for spokes: how long since the last successful sync (⟳ 5m), a red ⚠ auth when the hub is rejecting the token (re-login needed), ⚠ offline when the hub is unreachable, and a ⚠ N conflicts chip when merge conflicts are pending. The daemon tracks this health and exposes it via sync.status (also visible in heph sync --status), so a silently-broken spoke is obvious at a glance instead of buried in the log.