{"version":"2.1.275","anchor":"permission-decision-telemetry-gains-a-separate-decision-reas","canonical_anchor":"new-decision-reason-code-telemetry-field-and-blockedpath-on","heading":"Permission decisions now record a separate decision_reason_code","tier":"notice","area":"Telemetry","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.275\/e\/permission-decision-telemetry-gains-a-separate-decision-reas","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.275","markdown":"### Permission decisions now record a separate decision_reason_code\n\nPermission-decision telemetry now includes a structured decision_reason_code alongside the existing reason text\n\n**What**\n\nWhen Claude Code makes a permission decision (allowing, denying, or asking about a tool use), it now records a new `decision_reason_code` field in its internal telemetry, in addition to the existing `decision_reason`\/`decision_reason_type` fields.\n\n- The code is one of a closed set of values, including `outside_reads_blocked` (when `permissions.blockReadsOutsideWorkingDirectories` refused a path), `memory_paused` (triggered by `\/pause-memory`), and `classifier_transcript_too_long` (when an auto-mode classifier's transcript exceeded the context window).\n\n- Permission-deny messages for file access outside the working directory now also include a `blockedPath` field naming the offending path.\n\n- Internally, the reason code and reason message are now produced by separate helper functions, splitting what used to be one derived value into a code plus a human-readable message.\n\n**Why**\n\nSplitting the reason into a stable code and a separate message makes it easier to reliably track and analyze why permission requests were denied or required confirmation, without depending on parsing free-form text.\n\n- Area: Telemetry\n- Names: `decision_reason_code`\n- Tier: You'll notice\n- Useful: 1\/5\n- Signal: 1\/5"}