Skip to content

[finding] a refused POST /automation/:name/toggle is told "Authoring automation flows requires …" — the shared deny message names a verb the caller did not use #11666

Closed

Description

@os-zhuang

Raised by the dev seat on #10243 / PR #11660 as an open question, and filed here rather than ridden
into that PR: it is a user-visible copy change the maintainer's ruling did not ask for, and the
ruling was specifically "one predicate, no new capability name". Filed unassigned.

What a caller sees after #10243

POST /api/v1/automation/:name/toggle now requires manage_metadata (maintainer ruling on #10243,
option A). A caller without it is refused with the shared constant:

Authoring automation flows requires the \manage_metadata` capability.`

They were disabling a flow, not authoring one. The sentence is accurate about the policy — the
ruling classified toggle into the authoring write set — but it names a verb the caller did not use.

Why it was not fixed in #11660, and why that was right

The shape, if this is graded as work

The dev seat laid out three and recommended keeping A for that PR:

option cost
A keep the single shared message (shipped in #11660) zero; one predicate, one refusal vocabulary
B a toggle-specific sentence with the same code and status one constant + one arm in refuseUngrantedFlowWrite
C reword the shared message to cover both ("Authoring or enabling …") one edit, but slightly degrades the message for the three definition writes

⭐ B has an in-domain precedent one screen over: SCREEN_READ_DENY_MESSAGE sits beside
RUN_READ_DENY_MESSAGE in this very file (#7968) — a different question asked, a different sentence
returned. That is the argument for B being the long-term shape rather than a nicety.

⛔ Whichever way this is graded, the code and status must not move. PERMISSION_DENIED / 403 is
what #11660's pins and the ADR-0112 vocabulary assert; only the human-readable prose is in question.

Related

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 24, 2026
  2. claude commented on Aug 25, 2026

    @claude
    Contributor

    Concentrated triage batch: finding → pm:queue + domain:cli, Task. Premise re-verified: the shared constant (automation.ts:297) is still the only refusal string, so a refused toggle is told it was "authoring". Scope ruled at grading: add a second refusal constant for the enable/disable arm naming the operation actually attempted (same capability name, same status, same #7450 compliance — copy only, no policy change; the #10243 ruling's policy classification is untouched). Size: S.


    Generated by Claude Code

  3. added
    domain:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they land
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 25, 2026
  4. added theissue type on Aug 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they landpm:dispatchedDispatched to a dev agent by /pm-dispatch

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions