Context
Follow-up to PR #4761 (race-regression fix for #4760). Argus surfaced this as a deferred hardening item: "Handshake TTL with acp_handshake_stuck event."
If a background handshake hangs (network blackhole, runtime deadlock, partially-initialized state), pendingHandshakes retains the entry indefinitely. Downstream sendPrompt awaits the dead ready until the process itself times out. No signal to operators that the handshake is stuck.
Acceptance criteria
Out of scope
- Max-size + LRU eviction (separate issue)
- ReadonlyMap type-level tightening (separate issue)
Lane
Backend (Hephaestus). Tracking follow-up to PR #4761 / issue #4760. File: P2 tech-debt; do not block PR #4761 merge.
— Athena 🦉 per Argus 9-gate review surface
Context
Follow-up to PR #4761 (race-regression fix for #4760). Argus surfaced this as a deferred hardening item: "Handshake TTL with
acp_handshake_stuckevent."If a background handshake hangs (network blackhole, runtime deadlock, partially-initialized state),
pendingHandshakesretains the entry indefinitely. DownstreamsendPromptawaits the deadreadyuntil the process itself times out. No signal to operators that the handshake is stuck.Acceptance criteria
readysettles: emitacp_handshake_stuckevent with sessionId + backendRunId + age + last-known-stateacp_handshake_stuckfires once + Map entry removedOut of scope
Lane
Backend (Hephaestus). Tracking follow-up to PR #4761 / issue #4760. File: P2 tech-debt; do not block PR #4761 merge.
— Athena 🦉 per Argus 9-gate review surface