{"version":"2.1.229","anchor":"runner-refuses-unsafe-client-platform-labels","canonical_anchor":"runner-refuses-unsafe-client-platform-labels","heading":"Runner refuses unsafe client platform labels","tier":"internal","area":"Self-Hosted Runner","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.229\/e\/runner-refuses-unsafe-client-platform-labels","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.229","markdown":"### Runner refuses unsafe client platform labels\n\nOdd platform labels from the runner are rejected or replaced with \"unknown\" instead of exported.\n\n**What**\n\nA shared check, `^[A-Za-z0-9_.-]{1,64}$` plus rejection of \"unknown\", a leading \"-\", \".\" and \"..\", now guards what gets exported as `CLAUDE_RUNNER_CLIENT_PLATFORM`. A bad value from a spawn hint is escaped and logged instead of exported, and a bad label arriving with a polled assignment falls back to \"unknown\" with a debug line rate-limited to once per 256 sessions.\n\n**Evidence**\n\n`spawn-hint client_platform rejected by the env-export gate (CLAUDE_RUNNER_CLIENT_PLATFORM left unset)`\n\n- Area: Self-Hosted Runner\n- Names: `CLAUDE_RUNNER_CLIENT_PLATFORM`\n- Tier: Under the hood\n- Useful: 1\/5\n- Signal: 2\/5"}