Skip to content

fix(review): quality-gate pr mode assumes code-review always posts; it now outputs to the terminal by default #13010

Closed

Description

@kyle-sexton

Problem

plugins/review/skills/quality-gate/context/pr.md treats the marketplace code-review plugin (/code-review:code-review) as a surface that always posts to the PR. It gates the plugin as a mutation (its Mutation gate) and never runs it as a read-only pass. The pointer record there carries the recheck trigger "a mode that returns findings to the session".

That trigger has fired. The plugin's official README (https://raw.githubusercontent.com/anthropics/claude-plugins-official/main/plugins/code-review/README.md, fetched 2026-11-04) says the command "Outputs review (to terminal by default, or as PR comment with --comment flag)" and documents --comment as opt-in.

Fix

  1. Re-read the plugin's README and commands/code-review.md, and record what the default run does now.
  2. Decide whether quality-gate pr may run /code-review:code-review without --comment as a read-only pass, and whether the Mutation gate then covers only the --comment form.
  3. Update pr.md's pointer record (as-of date and trigger) and the mode's routing to match.

Acceptance

  • pr.md no longer depends on the plugin having no terminal mode.
  • The Mutation gate's scope matches what the plugin's default run actually does.

Refs: #12697 (found while verifying the pointer swaps in that PR).

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 4, 2026
  2. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Low
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Understood: quality-gate's pr mode and the fanout skill assume /code-review:code-review always posts to the PR. The plugin now prints to the terminal by default and posts only with --comment.

    Decision recorded. Answers to the refinement's four questions, from the upstream command file read 2026-11-04.
    Agent choice, not an owner answer.
    [quote truncated; the full decision is at the link]

    #13010 (comment)

    The decision settles the four open questions, so nothing is asked again. No duplicate found.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 4, 2026
  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 4, 2026
  5. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane yet: no trusted-human acceptance criteria: a listed human must put the confirmed - [ ] criteria in the body or post them as their own comment, or, on an issue a listed human filed, intake's newest refinement comment must hold them unedited; intake's refinement of this body is due and may supply them.

  6. added
    status: needs-decisionAwaiting a human or maintainer judgment call.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 4, 2026
  7. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    Refinement. A read-only run explored this repository, searched its issues and pull requests, and read the allowed docs to draft what follows. On an issue a listed human filed, it counts as the issue's spec once posted, while unedited; it is still model text, so check it.

    Intended outcome: pr.md describes /code-review:code-review as terminal-by-default and read-only without --comment, gates only the --comment form, and carries an updated as-of date and recheck trigger.

    Related work

    Open questions

    1. Does the plugin's commands/code-review.md, read live, make the default run (no --comment) fully read-only, with no PR comment, label or working-tree write? I could not fetch it in this run (WebFetch was denied), so only the README line quoted in the issue is known.
      RECOMMENDED: Yes if the command file confirms it. Then the Mutation gate covers only the --comment form, and a bare /code-review:code-review run on a PR is a permitted read-only pass. Basis: judgment
    2. Should quality-gate pr dispatch the plugin's default run automatically, or only list it as an optional read-only pass beside the bare bundled /code-review and the manual path?
      RECOMMENDED: List it as an optional read-only pass, not a default. The manual path stays the default, as pr.md treats the bundled command. Basis: plugins/review/skills/quality-gate/context/pr.md:50
    3. Should the pointer record add the plugin README and commands/code-review.md as pointers, with a new recheck trigger on the plugin's default output or --comment semantics changing, and an as-of date of 2026-11-04?
      RECOMMENDED: Yes. Replace the fired trigger with that one and update the date. Basis: plugins/review/skills/quality-gate/context/pr.md:36
    4. Should the same change update the other places that assume the plugin always posts, namely the fanout eval and the fanout SKILL.md line?
      RECOMMENDED: Yes, if they assert the plugin always posts. Narrow the eval at fanout/evals/evals.json:72 to the --comment form and check fanout/SKILL.md:166 for the same wording. Basis: plugins/review/skills/fanout/evals/evals.json:72

    Sources read

    • plugins/review/skills/quality-gate/context/pr.md:11-14: says the plugin always posts findings as a PR comment and has no mode returning them to the session
    • plugins/review/skills/quality-gate/context/pr.md:26-39: pointer record, as of 2026-10-11, with the recheck trigger
    • plugins/review/skills/quality-gate/context/pr.md:41-48: Mutation gate covers the plugin unconditionally and says every run posts
    • plugins/review/skills/fanout/evals/evals.json:72: eval forbids dispatching /code-review:code-review without opt-in
    • https:/​/raw.githubusercontent.com/anthropics/claude-plugins-official/main/plugins/code-review/commands/code-review.md: not read, WebFetch was denied in this run

    To answer, post a comment that starts with this line:

    **Decision recorded.** <answer>
    

    Automated refinement by the lanes App. Answer with a comment whose first line is **Decision recorded.**.

  8. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded. Answers to the refinement's four questions, from the upstream command file read 2026-11-04.
    Agent choice, not an owner answer.

    Source: plugins/code-review/commands/code-review.md on anthropics/claude-plugins-official main, read directly with gh api (not through /discovery:research; it is the single primary source). Line numbers below are origin/main after #12997.

    1. Yes, the default run posts nothing. Step 7 outputs the findings to the terminal, then: "If --comment argument was NOT provided, stop here. Do not post any GitHub comments." Only the --comment branches post: step 7 posts a summary comment with gh pr comment when no issues were found, and step 9 posts inline comments. The command still lists Bash(gh pr comment:*) and the inline-comment tool in allowed-tools, so the read-only default rests on its instructions, not a tool restriction; pr.md should say so. Step 1 also stops every run on a closed or draft PR, and when "Claude has already commented on this PR". A PR that already carries a review comment written by Claude, such as one from this repository's CI review lanes, can trip that stop, so pr.md should name it as a reason a default run may return nothing.
    2. Optional read-only pass, not a default. List /code-review:code-review without --comment beside the bundled /code-review <target> (pr.md:57-59); the manual path stays the default.
    3. Yes. The plugin's pointer bullet (pr.md:14-18, which already points at the README's Commands section) adds commands/code-review.md, with as-of 2026-11-04, and its recheck trigger becomes: the command file changes its --comment handling, its step-1 stop conditions, or its allowed-tools. The Mutation gate (pr.md:45-50) covers the plugin only in its --comment form.
    4. Yes for fanout/SKILL.md:166, fanout/context/findings-normalization.md:21 and the expected output at fanout/evals/evals.json:69; the assertion at evals.json:72 stays. SKILL.md:166 says "there is no mode that returns them to the session instead", findings-normalization.md:21 says the plugin "ends by posting its surviving findings as a PR comment", and evals.json:69 says it "always ends by commenting on the PR". Each is true only of the --comment form, so each is narrowed to it, and SKILL.md:166 says an opted-in dispatch passes --comment, since the comment fetch-back it describes needs a posted comment. Fanout still dispatches the plugin only on that opt-in: the default run's terminal output (step 7, "list each issue with a brief description") has no documented schema, and the parse row at findings-normalization.md:16 covers only the posted comment. So the no-dispatch-without-opt-in assertion at :72 stays true.

    Same plugin, may ride the same PR: fanout/SKILL.md:166 ("parallel reviewers + confidence scorer") and findings-normalization.md:16 ("0–100, filters <80") describe a scorer the current command no longer has; it validates findings with subagents (steps 5-6).

    • plugins/review/skills/quality-gate/context/pr.md no longer says this mode never runs /code-review:code-review as a read-only pass; it describes the plugin's default run as terminal output with no GitHub writes, says that default rests on the command's instructions rather than its allowed-tools, and names the step-1 stops (a closed or draft PR, and a PR Claude has already commented on).
    • The Mutation gate in pr.md covers /code-review:code-review only with --comment, and the plugin's default run is listed as an optional read-only pass beside the bundled command.
    • The code-review plugin's pointer bullet in pr.md points at the plugin README's Commands section and at commands/code-review.md, its as-of date is 2026-11-04, and its recheck trigger is the one in answer 3.
    • plugins/review/skills/fanout/SKILL.md no longer says the plugin has no mode that returns findings to the session, and says an opted-in dispatch passes --comment.
    • plugins/review/skills/fanout/context/findings-normalization.md and the expected output of the post-to-PR case in plugins/review/skills/fanout/evals/evals.json describe posting as the --comment form only.
  9. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    and removed
    status: needs-decisionAwaiting a human or maintainer judgment call.
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 4, 2026
  10. added
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    on Nov 4, 2026
  11. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  12. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  13. removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 4, 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

    priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    Work status

    agent-ready

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions