v2.3.1
Summary
Fixes the stale pair code spam bug: a daemon with an unpaired pair_code file was retrying every 15 seconds forever. In production, this ran for 2 months (~5,760 retries/day).
Changes
Tiered backoff based on pair_code file age:
- 0-5 min: 15s intervals (normal pairing — common case)
- 5-60 min: 1 min intervals (slow colleague / relay restart)
- 1-24 hours: 5 min intervals (provisioning, "I'll do it tomorrow")
- After 24h: stop, delete pair code, log "expired"
Uses the pair_code file's mtime as start, so a daemon restart doesn't reset the 24h expiry clock.
Total retries in 24h: ~290 (vs 5,760 with flat 15s).
Test plan
- Unit tests pass
- CI passes (tests + coverage gate)
- Deployed to dk1, rbm21, local — all on v2.3.1
- No pair code spam in relay log
Generated with Devin