personal memory agent

fix(link): bound the PL dial and hold backoff across short-lived sessions master

The manager loop dialed with no overall bound, so the effective bound was whatever the composed per-attempt sub-bounds happened to produce, and one stall class was unbounded outright. It now computes one absolute monotonic instant per attempt and threads it through, so a stalled dial raises into the existing failure and backoff path instead of hanging. Relay enrollment ran outside the deadline, so on the primary remote path a stalled enrollment left the dial fan-out waiting. It is now covered by the same instant. The worker thread cannot be cancelled and may outlive the timeout, which is acceptable because the loop escapes and retries. Backoff reset on a successful dial rather than on a session that stayed up, so a connect-then-die loop retried near the floor indefinitely. Reset is now gated on the adopted session surviving a stability threshold, measured monotonically. Both bounds are constructor keywords with named defaults; no config key. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>


+399 -27
4 changed files