I3212 — Two open pull requests that realise the same issue are reported as duplicates, with the survivor named
Use the pull request to issue edge the work graph already derives to report open pull requests that realise the same issue, name the survivor by evidence (green head, landed member of a top, newer head) and leave the closing to the landing seat; never close automatically on title or path similarity.
BLOCKED wave 1 · p2 · implementation profile · parallel safe
Blocked. This issue cannot start until I3204 is done. The status is derived from that, not declared.
Objective
Use the pull request to issue edge the work graph already derives to report open pull requests that realise the same issue, name the survivor by evidence (green head, landed member of a top, newer head) and leave the closing to the landing seat; never close automatically on title or path similarity.
Why
The 2026-10-12 pack proposed that duplicate and superseded pull requests be detected from the work graph and closed knowingly with a pointer to the survivor (c242#5). The drain closes a pull request only when a declared Supersedes marker's successor lands. It extends milestone work-graph-github. Proposed in ADR 0197 (The backlog is bounded by a declared bound that every session reads at start, and the bound reports rather than refuses) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c242#5, chatgpt-majordomus:c051#2.
Current state
I1405 (DONE) derives the pull request to issue edge; classify.rs holds and closes on 'Supersedes #N' markers; no reading reports two open pull requests on one issue.
Desired state
integration.queue carries a duplicates section: the issue, the pull requests, the proposed survivor and the evidence for it; integration.explain repeats it per pull request; nothing is closed by it.
Scope
- apps/majordomus-cli/src/integration/classify.rs
- apps/majordomus-cli/src/integration/model.rs
- docs/INTEGRATION.md
- apps/majordomus-cli/src/capability/builtin/brief.rs
- apps/majordomus-cli/src/commands/prs.rs
Out of scope
- Closing pull requests
- Similarity by title or overlapping paths
Dependencies
Acceptance criteria
- Two open pull requests naming the same issue are reported with the survivor and why
- A pull request naming no issue is never reported as a duplicate
- The drain's closures are unchanged
- The brief's integration line (prs brief) names the number of duplicate candidates and their issues when there are any, from the same reading as integration.queue
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib integration::classify
- majordomus plan validate
Evidence required
- test_duplicates_by_issue
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3212.yaml. Read it back with majordomus plan show I3212.