Impact
A filed PR can be superseded upstream without Mailman noticing. A contributor
opened python/mypy#21967 against the same issue our python/mypy#21961 fixes,
at 2026-09-10T20:17Z, about an hour after the reviewer comment that questioned
our framing. Nothing in the harness surfaced it. It was found by hand while
reading the PR thread on 2026-09-11.
mailman contributions --refresh reads the state of our own PRs: open, checks,
review decision. It never asks whether someone else filed a PR that closes the
same upstream issue. A competing PR changes what to do with ours, so missing it
spends the maintainer's review time on a PR we would otherwise close.
Evidence
Next action
Extend the contributions refresh: for every filed PR with a recorded upstream
issue number, query the target repo for open PRs referencing that issue and
report any that are not ours. Mark the ledger row and exit non-zero when one
exists. A test against a recorded GitHub response is enough.
Related: #85.
Impact
A filed PR can be superseded upstream without Mailman noticing. A contributor
opened python/mypy#21967 against the same issue our python/mypy#21961 fixes,
at 2026-09-10T20:17Z, about an hour after the reviewer comment that questioned
our framing. Nothing in the harness surfaced it. It was found by hand while
reading the PR thread on 2026-09-11.
mailman contributions --refreshreads the state of our own PRs: open, checks,review decision. It never asks whether someone else filed a PR that closes the
same upstream issue. A competing PR changes what to do with ours, so missing it
spends the maintainer's review time on a PR we would otherwise close.
Evidence
Closes #21960)Fixes #21960), a broaderfix, six lines plus a test.
(
duplicate-search.jsonin the run record), never after filing.Next action
Extend the contributions refresh: for every filed PR with a recorded upstream
issue number, query the target repo for open PRs referencing that issue and
report any that are not ours. Mark the ledger row and exit non-zero when one
exists. A test against a recorded GitHub response is enough.
Related: #85.