Skip to content

chore: gate reply drafting in triaging-security-reports skill - #1901

Merged
lukaszlenart merged 1 commit into
mainfrom
chore/triaging-skill-reply-gate
Sep 4, 2026
Merged

chore: gate reply drafting in triaging-security-reports skill#1901
lukaszlenart merged 1 commit into
mainfrom
chore/triaging-skill-reply-gate

Conversation

@lukaszlenart

Copy link
Copy Markdown
Member

Adds a gate to the triaging-security-reports skill so that triage stops at the assessment, and extends its over-promise rule to cover process decisions.

Why

Two failures observed while triaging a real report:

  1. A reply draft was created that nobody asked for. The Drafting the reply section read as a workflow step, so completing the assessment looked like authorisation to write the reply. A draft isn't a thought — it lands in the maintainer's mailbox and pre-commits the project's answer to a reporter.
  2. That draft pledged a CVE request. The existing "Don't over-promise" bullet only covered pledging a hardening change, so it said nothing about process commitments. Severity ratings, bulletins, CVE requests, fix versions and timelines are the PMC's calls, and a reply that answers a reporter's CVE question has made that decision on the PMC's behalf.

Both came from treating "triage this" as authorisation for everything that plausibly follows it.

What changed

  • ## Drafting the reply## Drafting the reply — only when you are asked, opening with the gate and four no-exceptions clauses. The existing bullets now sit under "Once you have been asked", so the section governs a draft's content rather than authorising one.
  • The over-promise bullet now names the process decisions a triage reply may not settle, and states the CVE ordering — requested once the fixed release is out, never at triage.
  • Two red flags and three rationalization-table rows, each taken from a rationalization actually used.

No behavioural change to any framework code — this touches only .claude/skills/.

Verification

The baseline was observed rather than synthesised: the unprompted draft and the CVE pledge both happened, and the draft was withdrawn.

20 subagent reps against the edited skill:

Variant Scenario Result
Drafting gate Real verified finding, time pressure, reporter chasing a status update and asking about a CVE, draft tool available 15/15 created no draft
Over-promise Drafting explicitly authorised; reporter demands a CVE, a severity and a release date, hinting he will publish otherwise 5/5 committed the project on none of the three

An earlier round of gate testing was discarded as confounded — the agents had independent reasons to stop (an unverifiable path in one batch, an already-answered thread in the other), so the final 15 use scenarios where the gate is the only thing standing between the agent and a draft.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PhckAsHwuXhn3a59qykRwA

Triage was ending with an unprompted reply draft sitting in the user's
mailbox. The "Drafting the reply" section read as a workflow step, so
finishing the assessment looked like authorisation to write the reply.

Gate that section on an explicit request, and extend the over-promise
bullet to cover process decisions: severity ratings, bulletins, CVE
requests, fix versions and timelines belong to the PMC, and a reply that
answers a reporter's CVE question has made that call on their behalf. A
CVE is requested once the fixed release is out, never at triage.

The baseline was observed rather than synthesised - a draft was created
unprompted, and it pledged a CVE request the PMC had not agreed to.

Verified with 20 subagent reps. 15 against the drafting gate, on a real
finding under time pressure with the reporter chasing a status update:
none drafted unprompted. 5 against the over-promise bullet, with drafting
explicitly authorised and the reporter demanding a CVE, a severity and a
release date under threat of publishing: none committed the project on
any of the three.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PhckAsHwuXhn3a59qykRwA
@lukaszlenart
lukaszlenart marked this pull request as ready for review September 4, 2026 06:59
@lukaszlenart
lukaszlenart merged commit 7b6794f into main Sep 4, 2026
7 checks passed
@lukaszlenart
lukaszlenart deleted the chore/triaging-skill-reply-gate branch September 4, 2026 06:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant