Skip to content

docs(triage): add triage duty tooling - #3082

Merged
purp merged 8 commits into
mainfrom
elezar/triage-duty-tooling
Oct 14, 2026
Merged

purp merged 8 commits into
mainfrom
elezar/triage-duty-tooling

Conversation

@elezar

@elezar elezar commented Sep 1, 2026

Copy link
Copy Markdown
Member

Summary

Add the triage-duty queue review and user-gated action workflows, including a
local playbook and explicit continuation order for in-progress triage passes.

Related Issue

No issue required: triage-process tooling and documentation. Replaces #2978 and #3081.

Changes

  • Add read-only queue review and user-gated recommendation-application skills.
  • Surface open Dependabot pull requests before general community pull requests.
  • Keep triage-duty local state and inbox out of version control.
  • Preserve report-local order when resuming a triage pass; record the next issue
    in the checkpoint.

Testing

  • git diff --check origin/main...HEAD
  • mise run pre-commit (not run: mise is unavailable in this environment)
  • Unit tests added/updated (documentation and skill workflow changes only)
  • E2E tests added/updated (not applicable)

Checklist

  • Follows Conventional Commits
  • Commits are signed off (DCO)

elezar added 5 commits August 28, 2026 11:31
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
@purp
purp self-requested a review September 1, 2026 16:06
@pimlock
pimlock self-requested a review September 1, 2026 19:03
@purp purp self-assigned this Sep 3, 2026
@github-actions

Copy link
Copy Markdown

This pull request has had no activity for 14 days and is now marked stale. It may be closed in 7 days if there is no further activity.

@github-actions github-actions Bot added the state:stale Inactive item at risk of automatic closure. label Sep 18, 2026
@purp purp removed the state:stale Inactive item at risk of automatic closure. label Oct 13, 2026

@purp purp left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The two-skill split is the right shape: queue review stays read-only, and application covers one ID at a time behind preview-and-confirm. Most of what follows is about making the skills safe to keep in a public repo and making their state survive a duty handoff.

Must address

  • Internal Slack sources are hardcoded in a public repo. On main, nothing under .agents/ references internal Slack. This PR adds channel IDs at review-triage-queue/SKILL.md:40-41 and nvidia.enterprise.slack.com links at triage-duty-playbook.md:33-34. That publishes internal identifiers, and community users running the skill would be told to scan channels they cannot reach. Suggested fix:

    • Put the intake sources in a committed .agents/triage-intake.yaml, with an add-only, gitignored .agents/triage-intake.local.yaml overlay for internal sources.
    • Give every source a required trust: community|internal field.
    • Never allow an internal identifier into an external write or a committable file.
    • Without the overlay, the skill falls back to GitHub-only.
  • The intake-gap lane re-surfaces issues that were already triaged. triage-issue replaces state:triage-needed when it records an outcome (CONTRIBUTING.md "replace the previous assessment state"). The predicate at review-triage-queue/SKILL.md:34 keys on that label being absent, so needs-info, validated, and later-state issues match it. As of 2026-09-02, 28 of 101 matches were false positives. Suggested fix: an issue is eligible only if it is not state:stale and carries no lifecycle state:* label. Discover that label set at run time per Label Discovery rather than enumerating it (sync-agent-infra step 3).

  • apply R-02 can resolve to a different item than the one the engineer read. IDs are report-local and reused (review-triage-queue/SKILL.md:75). apply-triage-action resolves against the newest report (apply-triage-action/SKILL.md:8), and deferred items get renumbered each run. Suggested fix: key each ID to the intake object rather than the row: I2991 for issues and P3082 for PRs, and a short Crockford-base32 hash for CI runs and Slack threads. R-nn can stay as display order only.

  • Rebase onto current main. The PR conflicts with main, and main has since adopted conventions this branch predates:

    • Both skills need metadata.internal: true; all 19 existing contributor skills have it.
    • CONTRIBUTING.md now requires every non-dependency PR to close an issue, and this PR says "No issue required".
    • agents/openai.yaml now exists only for create-rfc. Confirm the two new ones are wanted.

Should address

  • Deferred items crowd out new intake. Pending and deferred items count against the same five slots (review-triage-queue/SKILL.md:82). Once five are deferred, no new ordinary intake reaches Needs your decision. Suggested fix: give new intake and deferred items separate budgets. The oldest-first backlog sweep also needs its own cursor, because recency timestamps don't advance through an age-ordered list.

  • Triage history doesn't survive a handoff. All dispositions stay local (triage-duty-playbook.md:134), so the next person on duty inherits nothing. Suggested fix:

    • If a deferral reason is shareable (waiting on the reporter, a dependency, or PR changes), post it on the issue through the apply gate, usually with state:needs-info.
    • Keep only private reasons local.
    • The trust field from the first item already sorts community state from internal state.

Minor

  • architecture/plans/ is gitignored (.gitignore:227), and the playbook is force-added past that rule. Consider an RFC, or land only the skills.
  • Closing an issue is the highest-consequence action, but it's folded into the duplicate entry (apply-triage-action/SKILL.md:39). Give it its own line.
  • The report is described as "immutable" but carries a Current disposition field. State which record is authoritative.
  • A report template would let consecutive reports diff cleanly.
  • .markdownlint-cli2.jsonc disables MD013 for single-line prose, but parts of all three files are hard-wrapped.

@TaylorMutch

Copy link
Copy Markdown
Collaborator

+1 to removing the slack tooling, that isn't relevant outside of the GitHub context.

@TaylorMutch

Copy link
Copy Markdown
Collaborator

Also remove the plan document since we no longer have the architecture/ directory

purp added 3 commits October 13, 2026 22:36
Signed-off-by: Jim Meyer <jimeyer@nvidia.com>
Signed-off-by: Jim Meyer <jimeyer@nvidia.com>
Signed-off-by: Jim Meyer <jimeyer@nvidia.com>

@elezar elezar left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@purp purp left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚢

@purp
purp added this pull request to the merge queue Oct 14, 2026
Merged via the queue into main with commit d3bb266 Oct 14, 2026
79 of 80 checks passed
@purp
purp deleted the elezar/triage-duty-tooling branch October 14, 2026 16:22
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.

3 participants