hephaestus/crates
Erich Blume 11aa25c9f4
All checks were successful
Build / validate (pull_request) Successful in 6m11s
feat(heph-tui,hephd): surface sync health (last-sync age, conflicts, auth failure)
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>
2026-06-06 10:19:11 -07:00
..
heph C2(hephd-self-update): impl service-env-forge-access (public HTTPS, cargo on PATH) 2026-06-04 14:46:34 -07:00
heph-core feat(heph-tui,heph-pwa): humanized recurrence + indented/counted/scrolling project sidebar 2026-06-05 17:44:43 -07:00
heph-quickadd style: cargo fmt — normalize earlier hand-committed files 2026-06-03 20:38:44 -07:00
heph-tui feat(heph-tui,hephd): surface sync health (last-sync age, conflicts, auth failure) 2026-06-06 10:19:11 -07:00
hephd feat(heph-tui,hephd): surface sync health (last-sync age, conflicts, auth failure) 2026-06-06 10:19:11 -07:00