feat(agents): triage fires on comments + claude-triaging lifecycle label#3146
Merged
feat(agents): triage fires on comments + claude-triaging lifecycle label#3146
Conversation
Three coordinated changes to the triage routine + workflow + playbook: 1. **Workflow fires on issue_comment.created** with self-loop / bot / /triage / PR-conversation filtering. Plain prose comments now reach the routine through the new `comment.created` event kind (previously the routine prompt's issue_comment.created branch was dead logic — workflow only fired on issues.opened/reopened and repository_dispatch). 2. **`claude-triaging` lifecycle label.** Routine applies it immediately after concurrency + already-engaged checks pass, swaps to `claude-triaged` at end of run. Gives humans a visible "I'm on this, don't open a parallel PR" signal during the 1-3 min triage window. Skip cases (concurrency-skip, already-engaged-defer, non- substantive comments) leave the label off entirely. 3. **Manual triage docs in playbook.** New "Triage Routine — Manual Nudge" section explains the slash-command syntax, what does/does not trigger triage, how to read claude-triaging vs claude-triaged, and how to recover from webhook misses. Motivated by issue #3112 where a "Pinging triage" prose comment didn't fire the routine because the slash-command-dispatch only matches the literal `/triage` token. Workflow filter prevents loops by skipping comments that contain the `Triaged by Claude Code` footer (the routine's own signature). PR-conversation comments (issue.pull_request != null) skip too — those are the auto-fix feature's territory, not triage. `claude-triaging` label created in adcontextprotocol/adcp ahead of this merge; sibling repos need the label created before this change flows there. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bokelley
added a commit
to adcontextprotocol/adcp-client
that referenced
this pull request
Apr 25, 2026
…bel (#992) Mirrors the changes from adcontextprotocol/adcp#3146 + #3155: - Workflow fires on issue_comment.created with self-loop / bot / /triage / PR-conversation filtering. Plain comments now reach the routine through the new comment.created event kind. - claude-triaging lifecycle label: routine applies it after the concurrency + already-engaged checks pass, swaps to claude-triaged at end of run. Gives humans a visible "I'm on this" signal. - Manual triage docs in .agents/routines/README.md. - clear-stuck-claude-triaging.yml: cron every 30 min clears orphaned labels on issues stuck >30 min. - triage-webhook-miss-sweep.yml: cron hourly catches issues opened in last 24h that the issues.opened webhook silently missed. - .agents/scripts/triage-local.sh: local fire script. claude-triaging label created in this repo ahead of merge. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bokelley
added a commit
to adcontextprotocol/adcp-client-python
that referenced
this pull request
Apr 25, 2026
…bel (#277) Mirrors the changes from adcontextprotocol/adcp#3146 + #3155: - Workflow fires on issue_comment.created with self-loop / bot / /triage / PR-conversation filtering. Plain comments now reach the routine through the new comment.created event kind. - claude-triaging lifecycle label: routine applies it after the concurrency + already-engaged checks pass, swaps to claude-triaged at end of run. Gives humans a visible "I'm on this" signal. - Manual triage docs in .agents/routines/README.md. - clear-stuck-claude-triaging.yml: cron every 30 min clears orphaned labels on issues stuck >30 min. - triage-webhook-miss-sweep.yml: cron hourly catches issues opened in last 24h that the issues.opened webhook silently missed. - .agents/scripts/triage-local.sh: local fire script. claude-triaging label created in this repo ahead of merge. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bokelley
added a commit
to adcontextprotocol/adcp-go
that referenced
this pull request
Apr 25, 2026
…bel (#93) Mirrors the changes from adcontextprotocol/adcp#3146 + #3155: - Workflow fires on issue_comment.created with self-loop / bot / /triage / PR-conversation filtering. Plain comments now reach the routine through the new comment.created event kind. - claude-triaging lifecycle label: routine applies it after the concurrency + already-engaged checks pass, swaps to claude-triaged at end of run. Gives humans a visible "I'm on this" signal. - Manual triage docs in .agents/routines/README.md. - clear-stuck-claude-triaging.yml: cron every 30 min clears orphaned labels on issues stuck >30 min. - triage-webhook-miss-sweep.yml: cron hourly catches issues opened in last 24h that the issues.opened webhook silently missed. - .agents/scripts/triage-local.sh: local fire script. claude-triaging label created in this repo ahead of merge. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three coordinated changes to the triage routine + workflow + playbook to close the gaps surfaced by #3112 (webhook miss with no audit trail) and #937 / #935 (PR-drafting linkage).
What changes
1. Workflow fires on
issue_comment.createdThe routine prompt has long had an
issue_comment.createdbranch — but the workflow never fired on plain comments, only onissues.opened/reopenedandrepository_dispatch(the slash-command-dispatch path). So the prompt's comment-handling logic was dead code. This PR adds the trigger with self-loop / bot //triage/ PR-conversation filtering:The
if:filter for the new path:comment.user.type/[bot]suffix /sender.type)Triaged by Claude Codefooter)/triageslash-commands (handled by the existing repository_dispatch path)issue.pull_request != null— those are auto-fix's job)The workflow now has three event kinds:
auto.opened/reopened,comment.created,manual.triage.2.
claude-triaginglifecycle labelThe routine takes 1-3 minutes between fire and posting an outcome. During that window, humans had no signal that triage was active and might start a parallel PR. New rule: routine applies
claude-triagingimmediately after concurrency + already-engaged checks pass, swaps toclaude-triagedat end of run. Skip cases (concurrency-skip, already-engaged-defer, non-substantive comments) leave the label off entirely. If the routine errors mid-run,claude-triagingis left orphaned — a future scheduled sweep should clear stuck labels >30 min old.Label created in
adcontextprotocol/adcp(color #FBCA04) ahead of this merge. Sibling repos (adcp-client, adcp-client-python, adcp-go) need the label created before the same change flows there.3. Manual triage docs in
.agents/playbook.mdNew "Triage Routine — Manual Nudge" section documenting:
/triageslash-command, automatic on issue open, plain comments via the new event path)/triage, PR conversation comments, bot authors, self-loops)claude-triagingvsclaude-triagedlifecycle states/triageto retrigger)Motivated by #3112 — a "Pinging triage" prose comment didn't fire the routine because slash-command-dispatch only matches the literal
/triagetoken. The doc makes this discoverable so humans don't waste cycles waiting on a routine that was never going to wake up.Follow-ups (not in this PR)
claude-triaginglabel in adcp-client, adcp-client-python, adcp-go.claude-triagingstuck >30 min) — useful but not blocking.🤖 Generated with Claude Code
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com