add host retention: dormant state, higher backoff, reconciliation
hosts that exhaust max failures are now marked "dormant" (not
"exhausted") and their thread stops. a reconciliation fiber runs every
5 minutes, queries active hosts from DB, and respawns any missing
workers. on successful reconnect, reset_failures also flips the host
back to "active", so recovered PDS instances are picked up automatically.
other changes:
- backoff is now a struct field on Subscriber, reset to 1 on connect
- max_backoff raised from 60s to 1800s (30 min) for dormant-eligible hosts
- "dormant" mapped to "offline" in getHostStatus API responses
- reconcile thread added to design.md threading table
- host status lifecycle documented in postgres tables section
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>