{"version":"2.1.224","anchor":"remote-control-tells-you-when-a-credential-expired-instead-o","canonical_anchor":"remote-control-tells-you-when-a-credential-expired-instead-o","heading":"Remote Control tells you when a credential expired instead of just dropping","tier":"notice","area":"Remote Control","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.224\/e\/remote-control-tells-you-when-a-credential-expired-instead-o","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.224","markdown":"### Remote Control tells you when a credential expired instead of just dropping\n\nAn expired Remote Control credential now closes with a clear message telling you to run \/login.\n\n**What**\n\nRemote Control now separates auth failures from other disconnects. When the worker token expires or is rejected, the session closes with a dedicated code and the message points you at `\/login`, instead of the previous generic re-authenticate wording.\n\n**Details**\n\n- New close code `4094`, \"worker credential expired or rejected (code 4094)\", used for `token_expired` and `auth_exhausted`.\n- `epoch_conflict`, `epoch_stale` and `session_not_found` keep close code `4090` and recover through the poll loop.\n- The cause-based mapping applies only when the transport is built with `causeTypedCloseCodes`; both v2 bridge call sites pass it as true, so it is live.\n- The 404-exhaustion path now names its cause explicitly as `session_not_found`.\n\n**Evidence**\n\n`worker credential expired or rejected (code 4094)`\n\n- Area: Remote Control\n- Names: `\/login`\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 1\/5"}