{"version":"2.1.235","anchor":"permission-dialogs-persistent-dont-ask-again-rows-now-re","canonical_anchor":"permission-dialogs-persistent-dont-ask-again-rows-now-re","heading":"Permission dialogs: persistent \"don't ask again\" rows now require a minted ConsentRow, and unshowable values withhold them","tier":"internal","area":"Permissions","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.235\/e\/permission-dialogs-persistent-dont-ask-again-rows-now-re","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.235","markdown":"### Permission dialogs: persistent \"don't ask again\" rows now require a minted ConsentRow, and unshowable values withhold them\n\nPermission dialogs now build their 'don't ask again' options through a single minted, validated ConsentRow path\n\nEvery dialog that can persist a permission rule (Bash prefix\/exact, Chrome host, Skill exact\/prefix, plan-mode exit keep-context rows, and MCP elicitation) now produces its label and the `permissionUpdates` it applies together through a single mint function, and consumers check the row before applying it. If a row wasn't produced this way, the dialog falls back to a one-time allow with no persistent rule written; the mint step also deep-freezes its input and rejects getters, symbols, and non-plain prototypes.\n\nSeparately, untrusted strings shown in these dialogs (MCP server\/tool names, elicitation URLs, commands, skill and cell names, question labels) now pass through a sanitizer that can withhold display entirely, showing \"approval withheld; one-time options only\" instead. When a value is withheld, persistent options are dropped, and for the elicitation URL dialog the default choice becomes \"decline\" and the URL cannot be opened. This applies to everyone.\n\n- Area: Permissions\n- Tier: Under the hood\n- Useful: 2\/5\n- Signal: 2\/5"}