{"version":"2.1.225","anchor":"headless-sessions-expire-held-peer-messages-instead-of-holdi","canonical_anchor":"headless-sessions-expire-held-peer-messages-instead-of-holdi","heading":"Headless sessions expire held peer messages instead of holding forever","tier":"notice","area":"Cross-Session Messaging","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.225\/e\/headless-sessions-expire-held-peer-messages-instead-of-holdi","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.225","markdown":"### Headless sessions expire held peer messages instead of holding forever\n\nHeadless runs no longer hang forever on a peer message that needs an approval nobody can give.\n\n**What**\n\nIn non-interactive mode a held peer message whose hold cause is a mode mismatch now gets a deadline, so a headless run no longer blocks indefinitely waiting for an approval that can never arrive.\n\n**Details**\n\n- The expiry uses an unref'd timer, so it does not keep the process alive on its own.\n- On expiry the message is dropped and a cancelled receipt is issued to the sender.\n- The drop is logged with the reason that no approval surface exists.\n\n**Evidence**\n\n`[cross-session-inbound] headless: held peer message expired (no approval surface) \u2014 dropped with an expired receipt`\n\n- Area: Cross-Session Messaging\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 0\/5"}