From 81fce99958d24ebca9bbde7e194be867157173a9 Mon Sep 17 00:00:00 2001 From: logan-nc Date: Tue, 18 Aug 2026 23:50:35 -0400 Subject: [PATCH 1/2] CI - BUGFIX - Count a reviewer as named once they have reviewed The metadata job read only requested_reviewers, which holds pending review requests. GitHub removes a reviewer from that list as soon as they submit a review, so the check went quiet while nobody had reviewed and fired once somebody did -- nagging precisely the pull requests furthest along. Treat a submitted review from anyone other than the author as evidence that a reviewer was named. Assignment alone still suffices; the reviewer never has to act. Verified against all open pull requests: silences #390, #391, #392, #407, leaves every pending-request PR untouched, and still nags the nine with nobody named. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Dh1NCejnd3fYMmcRKoQRcG --- .github/workflows/pr-conventions.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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**'); } From 0cd175a559c0aca07b68312dfd369386767a4b18 Mon Sep 17 00:00:00 2001 From: logan-nc Date: Wed, 19 Aug 2026 08:24:30 -0400 Subject: [PATCH 2/2] Docs - MINOR - Give CI and Repo a named reviewer in the contributor list Focus values were all src/ modules, so a workflow or conventions change had nobody obvious to review it and landed unassigned -- which is how the reviewer nag this branch fixes went unowned. Add the CI and Repo Areas from naming.md to the two maintainers who work on repository plumbing, and say in the prose that Focus names Areas outside src/ too. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Dh1NCejnd3fYMmcRKoQRcG --- docs/development/contributors.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 |