diff --git a/.github/workflows/pr-conventions.yaml b/.github/workflows/pr-conventions.yaml index 0a0d5eb54..93103e2e9 100644 --- a/.github/workflows/pr-conventions.yaml +++ b/.github/workflows/pr-conventions.yaml @@ -124,9 +124,18 @@ jobs: } // Assignee and reviewer need a human decision, so comment rather than block. + // A reviewer counts as named whether or not they have acted yet. GitHub drops a + // reviewer from requested_reviewers the moment they submit a review, so the + // submitted reviews are what remember an assignment that has already been acted + // on; without them this nags precisely the pull requests that got reviewed. + const { data: reviews } = await github.rest.pulls.listReviews({ + owner, repo, pull_number: pr.number, per_page: 100, + }); + const reviewedByOther = reviews.some(r => r.user && r.user.login !== pr.user.login); + const missing = []; if (!pr.assignees.length) missing.push('an **assignee**'); - if (!pr.requested_reviewers.length && !pr.requested_teams.length) { + if (!pr.requested_reviewers.length && !pr.requested_teams.length && !reviewedByOther) { missing.push('a **reviewer**'); } diff --git a/docs/development/contributors.md b/docs/development/contributors.md index 64c19d06d..4cdb8d683 100644 --- a/docs/development/contributors.md +++ b/docs/development/contributors.md @@ -4,14 +4,16 @@ A short list of who to suggest as a reviewer or assignee, and the GitHub handle **This is a suggestion list, not a roster.** It names lead developers only — many more people contribute, and their absence here means nothing. It exists mainly so an AI agent has somewhere sensible to start; a human opening a pull request can simply pick from GitHub's own dropdown and does not need this file. +**Focus names Areas, including the ones outside `src/`.** Focus values are the Area names from [`naming.md`](naming.md), so they cover repository maintenance as well as physics modules: `CI` is the workflows under `.github/`, and `Repo` is the cross-cutting plumbing — conventions, templates, the changelog, and the regression harness. Those rows exist so a tooling change has somewhere to go; without them a CI fix has no obvious reviewer and lands unassigned. + **Focus is advisory, not ownership.** Nobody is obliged to review a change because they appear in a row, and nobody is barred from one because they do not. There is no `CODEOWNERS` file, so GitHub requests no reviewers automatically — choosing them is the author's job. When it is not obvious who should review, ask rather than guess, and open the pull request as a draft until it has a reviewer and an assignee. This file is not published to the documentation site; `docs/development/` sits outside the Documenter source tree. | Name | Handle | Focus | |---|---|---| -| Nikolas Logan | `@logan-nc` | KineticForces, PerturbedEquilibrium, Equilibrium, ForceFreeStates | -| Matthew Pharr | `@matt-pharr` | ForceFreeStates, InnerLayer | +| Nikolas Logan | `@logan-nc` | KineticForces, PerturbedEquilibrium, Equilibrium, ForceFreeStates, CI, Repo | +| Matthew Pharr | `@matt-pharr` | ForceFreeStates, InnerLayer, CI, Repo | | Jake Halpern | `@jhalpern30` | Vacuum, ForceFreeStates, Equilibrium | | Daniel Burgess | `@d-burg` | Tearing, ForceFreeStates | | Jaebeom Cho | `@JaeBeom1019` | Vacuum, Equilibrium, ForceFreeStates |