Skip to content

Introduce triage system - #3126

Merged
aryangorwade merged 1 commit into
NVIDIA:mainfrom
aryangorwade:external-contributor-policy
Nov 4, 2026
Merged

aryangorwade merged 1 commit into
NVIDIA:mainfrom
aryangorwade:external-contributor-policy

Conversation

@aryangorwade

@aryangorwade aryangorwade commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Description

This PR implements a triage system adapted from the one mentioned in #572. Commit-by-commit summary of changes made:

Change Description
Add AI usage guidance Adds an AI Guidance section to CONTRIBUTING.md listing when maintainers may close contributions without review. Tells agents in AGENTS.md not to write issue or PR descriptions or replies to maintainers.
Add issue triage workflow Documents the issue-first workflow, labels, triage criteria, and claim template in CONTRIBUTING.md. Adds Motivation and "work on this issue" fields to the issue templates and an issue link to the PR template. Turns template guidance into HTML comments so it doesn't appear in posted issues. Updates GOVERNANCE.md, AGENTS.md, and README.md to match.
Move questions to GitHub Discussions and Slack Removes the question issue template. Points questions to Discussions and the community Slack from the new-issue page, README.md, and CONTRIBUTING.md.
Close needs-more-info issues after 30 days Adds a stale rule that closes needs-more-info issues after 30 days without activity. Exempts accepted issues from the 90-day rule.
Label new issues for triage Adds a workflow that labels new issues needs-triage when they arrive without a state label.
Apply triage automation only to new issues and PRs Skips issues and PRs created before the policy start date, so existing ones keep today's behavior.
Add /assign command for accepted issues Lets maintainers assign accepted issues by commenting /assign @user, replacing any previous non-maintainer assignee.
Add workflow ensuring one state label per issue This workflow removes the old state label when a maintainer applies a new one.

Checklist

  • No secrets, sensitive information, or unrelated changes
  • Lint checks passing (make lint)

Devin Review

@aryangorwade aryangorwade self-assigned this Oct 27, 2026
devin-ai-integration[bot]

This comment was marked as resolved.

Comment thread .github/workflows/pr-gatekeeper.yaml Resolved
@aryangorwade
aryangorwade force-pushed the external-contributor-policy branch 2 times, most recently from 8952f7c to a145f3a Compare October 27, 2026 01:27
Comment thread .github/ISSUE_TEMPLATE/config.yml Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not directly related to this PR -- I feel like this file could use a rehaul. The first 4 sections, Introduction, Architecture, License, and Artifacts don't directly relate to the contribution process and probably should live in a different document. It makes our actual contribution process more difficult to find for readers (they have to scroll down fairly far on this page to get to the meat of it).

@NVIDIA/gpu-operator-dev thoughts? I would be in favor of removing this content and jumping straight to the contribution process / AI usage guidelines.

@aryangorwade aryangorwade Oct 27, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thoughts on moving main's CONTRIBUTING.md's architecture and artifacts section to the README and deleting the rest of the old sections (apart from Signing your work)?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't find the architecture or artifacts sections too helpful to be honest. I would be fine removing all of the sections. Our product documentation should suffice, which lists all of our artifacts and the operands we support. If we want to write actual architectural documents, they could live in the docs/ folder.

@aryangorwade aryangorwade Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'm in favor of keeping these sections somewhere in the codebase. AI agents (and humans) don't always check official docs external to a codebase (even if linked in /docs). Including a brief overview like this one in /docs would be helpful.

Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread .github/workflows/pr-gatekeeper.yaml Outdated
Comment on lines +48 to +66
const hasWriteAccess = async (username) => {
try {
const { data } = await github.rest.repos.getCollaboratorPermissionLevel({ owner, repo, username });
return ['admin', 'maintain', 'write'].includes(data.permission);
} catch (error) {
if (error.status === 404) {
return false;
}
throw error;
}
};

if (['OWNER', 'MEMBER'].includes(pr.author_association) || await hasWriteAccess(author)) {
return;
}
// A maintainer reopening a closed pull request overrides the check.
if (context.payload.action === 'reopened' && await hasWriteAccess(context.payload.sender.login)) {
return;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could this code block be replaced by the below if statement attached to the job itself?

if: >-
   !contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'),
   github.event.pull_request.author_association)

I believe this would prevent the job from running when any user with write access to the repo opens or reopens a PR.

@aryangorwade aryangorwade Oct 27, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yeah, it makes more sense to allow anyone in the NVIDIA org/with write access and not just gpu-operator-dev to open PRs. We should also exempt bots like dependabot from this:

if: >-
  github.event.pull_request.user.type != 'Bot' &&
  !contains(fromJSON('["OWNER","MEMBER"]'), github.event.pull_request.author_association)

The only problem I can see is that if maintainers reopen a PR that was closed by this bot which references an unapproved issue. This is a very narrow case though and probably is not that relevant; it should not be happening in the first place. Added this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thoughts on replacing the current logic (which runs the if statements in the script), with the below?

if: >-
  github.event.pull_request.user.type != 'Bot' && 
  !contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.pull_request.author_association)

"OWNER","MEMBER","COLLABORATOR" cover everyone with write access to the repo. Another benefit of this approach is that is avoids the extra GitHub API call in hasWriteAccess()

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Missed actually applying this. I've applied it now.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@cdesiniotis @aryangorwade I have a question with the suggestion to use the user type, if users have their membership set as private (I checked mine and it seems to be private), then the code that calls this I think needs to be authenticated as an NVIDIA org member to view private membership otherwise it marks the author as CONTRIBUTOR. I checked the following

PR author With my login Without login (anonymous)
kvalliyurnatt MEMBER CONTRIBUTOR
tariq1890 MEMBER CONTRIBUTOR
aryangorwade MEMBER CONTRIBUTOR

This is what I called curl -s https://api.github.com/repos/NVIDIA/gpu-operator/pulls/3145 | jq .author_association

Do we know whatever calls the code in github actions will have the right permissions to see private memberships ?

@aryangorwade aryangorwade Nov 2, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@kvalliyurnatt good catch. We could consider providing the script an authenticated token but that still would not work.

TLDR: We could just check the author's repo permission (write/maintain/admin access). Downside is other members of NVIDIA org that do not have such access will have their PRs closed. Is this approach worth it?

An other option is to check NVIDIA org: GET /orgs/NVIDIA/members/{user}. We'd have to set up a GitHub app in the org settings and configure it on our repos, and then generate. private key and a workflow. This is a decent amount of work for what seems like a simple problem.

We could fetch the PR again with an NVIDIA member's token but this would need one of our tokens. Not a big fan of this one.

@aryangorwade aryangorwade Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@NVIDIA/gpu-operator-dev Thoughts on gating PRs only to members with write access for now (our team)? To get the triage PR in as soon as possible? Using a GitHub app to gate access to NVIDIA org members is a better but more complex solution we can look into implementing right after we get this change in.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think to not block the PR, I would be okay with it.

Comment thread .github/workflows/pr-gatekeeper.yaml Resolved
@aryangorwade
aryangorwade marked this pull request as ready for review October 27, 2026 20:07
@aryangorwade
aryangorwade requested a review from a team as a code owner October 27, 2026 20:07
@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Walkthrough

The pull-request changes update contribution guidance and issue templates, add workflows for issue triage and assignment, and introduce a pull-request eligibility check based on linked accepted issues. The stale workflow now exempts accepted issues and applies a separate schedule to issues labeled needs-more-info. Contact guidance now points questions to GitHub Discussions and community Slack.

Priority: Normal

Merge Risk: Low · up to a145f

This change adds contribution-intake automation. Merging is low risk, but the accepted-issue handling in the stale workflow and the gatekeeper's one-time check could behave unexpectedly in edge cases, so maintainers should be aware of them or address them soon.

- [ ] Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

coderabbitai[bot]

This comment was marked as resolved.

@aryangorwade
aryangorwade force-pushed the external-contributor-policy branch from a145f3a to 6fe37ba Compare October 28, 2026 00:37
devin-ai-integration[bot]

This comment was marked as resolved.

@aryangorwade
aryangorwade force-pushed the external-contributor-policy branch 3 times, most recently from c7d1b2b to 6f4445d Compare October 29, 2026 17:07
devin-ai-integration[bot]

This comment was marked as resolved.

@aryangorwade
aryangorwade force-pushed the external-contributor-policy branch from 6f4445d to 1da5668 Compare October 29, 2026 17:25
Comment thread CONTRIBUTING.md Resolved
Comment thread .github/ISSUE_TEMPLATE/config.yml Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread README.md Resolved
@aryangorwade
aryangorwade force-pushed the external-contributor-policy branch from e183c2d to 1f6946e Compare November 2, 2026 21:44
Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md Resolved
Comment thread CONTRIBUTING.md Resolved
@aryangorwade
aryangorwade force-pushed the external-contributor-policy branch 5 times, most recently from 0d2f269 to 404d5d8 Compare November 3, 2026 21:52
Comment thread CONTRIBUTING.md

1. **Open an issue.** Use the bug report template to report a defect, or the feature request template to propose new behavior or a [major change](GOVERNANCE.md#core-decisions). Indicate if you want to work on the issue. Each new issue gets the `needs-triage` label.
2. **Wait for triage.** A maintainer reviews the issue against the [triage criteria](#triage-criteria). The maintainer then labels the issue `accepted`, `needs-more-info`, or closes it.
3. **Claim the issue.** When an issue is `accepted`, comment on it expressing interest and summarizing your proposed solution. Issue authors have priority if they indicate they would like to work on it. Other claims are first-come, first-served. A maintainer discusses your plan with you and assigns the issue to you when the plan is ready.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should we define when to unassign inactive contributors? For example, follow up after 2 weeks of inactivity and unassign if there's no response, keeping the issue open for others to pick up.

@aryangorwade
aryangorwade force-pushed the external-contributor-policy branch from 404d5d8 to 7ef11aa Compare November 3, 2026 22:51
Comment thread .github/ISSUE_TEMPLATE/bug_report.md Outdated
**Motivation**
<!-- A clear and concise description of your motivation: is this a real issue you ran into while using the product? -->

**Would you like to work on this issue?**

@tariq1890 tariq1890 Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Instead of a yes/no. Can we make it a checkbox? The message would look something like

Suggested change
**Would you like to work on this issue?**
**Check here if you would look like to work on this issue**

<!-- A clear and concise description of your motivation: e.g. would this feature greatly help your use-case, and why? -->

<!-- A clear and concise description of the feature request. Please outline the motivation for the proposal. Is your feature request related to a specific problem? e.g., *"I'm working on X and would like Y to be possible"*. If this is related to another GitHub issue, please link it here too. -->
**Would you like to work on this issue?**

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

same as previous.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Unapproved pull requests remain open

External authors can open pull requests without an assigned, accepted issue because PR Gatekeeper no longer runs. No remaining workflow closes these pull requests.

Devin Review

Comment thread CONTRIBUTING.md
NVIDIA is willing to work with partners for adding platform support for the GPU Operator. The GPU Operator is open-source and permissively licensed under the Apache 2.0 license with only minimal requirements for source code [contributions](#signing).

To file feature requests, bugs, or questions, submit an issue at https://github.com/NVIDIA/gpu-operator/issues
To file feature requests or bugs, submit an issue at https://github.com/NVIDIA/gpu-operator/issues. For questions, start a discussion at https://github.com/NVIDIA/gpu-operator/discussions or ask in the `#gpu-operator` channel in our community Slack at https://inviter.co/dsx-ai-factory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should we link SECURITY.md here so contributors know where to report security vulnerabilities instead of opening public issues?

@aryangorwade
aryangorwade force-pushed the external-contributor-policy branch 2 times, most recently from dfa9480 to f93bea1 Compare November 3, 2026 23:19
Signed-off-by: Aryan Gorwade <gorwadearyan@gmail.com>
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.

5 participants