{"version":"2.1.225","anchor":"held-cross-session-messages-are-now-settled-as-expired-at-sh","canonical_anchor":"held-cross-session-messages-are-now-settled-as-expired-at-sh","heading":"Held cross-session messages are now settled as expired at shutdown","tier":"notice","area":"Cross-Session Messaging","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.225\/e\/held-cross-session-messages-are-now-settled-as-expired-at-sh","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.225","markdown":"### Held cross-session messages are now settled as expired at shutdown\n\nQuitting now settles pending peer messages as expired so the sending session gets a definite answer.\n\n**What**\n\nWhen Claude Code exits, peer messages that were being held in the cross-session inbound queue are answered as expired instead of being abandoned, so the sending session gets a definite result.\n\n**Details**\n\n- A shutdown hook drains the hold buffer and settles every still-held peer message with an `expired` status, logging how many were settled\n- The drain is raced against a grace period of up to 750 ms before shutdown continues\n- Once shutdown has begun, a late peer message is refused rather than parked, recording peer_inbound_gate \/ shutdown_expired telemetry\n- Unix-socket messaging server teardown now also destroys open connections and unlinks the socket file before awaiting the drain\n- A new lookup lets the headless expiry path read a message's hold cause\n\n**Evidence**\n\n`[cross-session-inbound] shutdown: settling ${e.length} still-held peer message(s) as expired`, `shutdown: settling `, `[cross-session-inbound] shutdown: not parking a late peer message \\u2014 settled as expired: `\n\n- Area: Cross-Session Messaging\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 0\/5"}