0030 — Every PR has one owner per job, and the PR arms it

The decision

  1. A fix is one canonical path. It is never a switch, an opt-in command, or a list of callers who must remember to call it. If a mechanism covers some PRs and not others, the uncovered ones are the bug, and the fix is to delete the second path, not to arm the first one more widely.

  2. Coverage is triggered by the ARTIFACT, not the PRODUCER. "Every open PR" is observable; "every session that remembered to run add" is not. A new kind of producer (a Driver's Agent-tool lane, a scripted gh pr create, a human) must be covered on the day it appears, without anyone noticing it appeared.

  3. Every decision that can be blocked is re-evaluated when the blocker clears. A decision taken once, at an event, is not durable: if the event lands while something else is blocking, the decision is lost. Either the owner re-reads on a clock, or the thing that clears the blocker re-fires the decision for everything it was blocking.

  4. One owner per job, per PR:

    Job Owner Armed by
    Merge (propflowai) auto-merge-all.yml — it already carries every incident-hardened rule: the freeze, the cure nomination, hold-for-review, the dangerous-diff hold, the merge-evidence gate, stacked-base rule 4, 🟡/🔴 across both reviewer logins, dismissals every pull_request event — the PR itself
    Merge (repos with no auto-merge-all.yml) PrDriveWorkflow (agent-smith) the PR, via its drive — never both on one repo
    Seeing an idle PR puller — idle-PR rows in the digest, computed every run enumeration by author, i.e. every fleet PR
    Waking the Driver that owns it nudge check-in (ADR-0017 rule 3: the puller is not a wake source) driver setup, for every Driver — not per-Driver by hand
    An ORPHANED PR (owner session not live; amendment 2026-09-25) idle ≥ 7d: cleaner --prs closes it with an evidence comment. Under 7d: the live Driver whose area it is adopts it by pushing. The puller only marks it (ADR-0017). puller's ORPHANED mark (liveness DEAD) on every idle row. Never auto-closed: a PR with no owner stamp, a hold-for-review PR, a draft
  5. The merge owner honours hold-for-review; the normal flow does not apply it. The label is how a fence bot or a dangerous-diff hold stops a merge for a person to read one SHA, and the mechanism must respect it. ADR-0025 decision 1 still stands: nothing holds for a human on the ordinary path. On 2026-09-24, driver-2 and driver-3 held every one of their 47 PRs, costing ~20 PR-hours. Under ADR-0025 that is a doctrine defect in whatever told those Drivers to label at open. It is not a merge-policy choice.

  6. The guard asserts the outcome, not the wiring. The health question is "did an open PR sit with nothing running, no verdict pending, and nobody acting for longer than N minutes?" — not "does every caller call the hook?". tests/test_canonical_paths.py in agent-smith pins the second kind, and it was blind to the Driver fleet by construction: Driver lanes are not claude_runner consumers.

Why

Measured over 12 hours on 2026-09-24 across the four live Drivers (159 PRs opened, 155 merged): per Driver, 0–24% of PR open-time was dead — nothing running, nothing approved, nobody acting. (A first pass also reported 9–29% "approved-but-unmerged". That figure is withdrawn: it counted 🟢 verdicts that Withdraw an approval the tests contradict later took back because the PR's own required tests failed.)

Rejected

Consequences

What this supersedes — precisely, and nothing more

Per ADR-0023 decision 6 and ADR-0025's own convention, ADRs are not rewritten. The superseded clause is marked on its own Status line, appending no line.

record clause superseded what stands
ADR-0025 decision 1 "Its machine gate … moves into the PR driver", as applied to propflowai. propflowai's merge owner is auto-merge-all.yml (decision 4 above); PrDriveWorkflow merges only in repos that have no auto-merge-all.yml. Everything else in decision 1: merge on green with no human ask, human-authored PRs included, SmithApprovalWorkflow's human wait deleted, the reviewer's 🟢 as the load-bearing gate, and nothing holds for a human on the ordinary path.
agentflow-relay CLAUDE.md, "AND SINCE 2026-09-12 THE MERGE ITSELF IS THE DRIVER'S" "every PR, every repo" as a claim about which system merges. Amended in the same PR to name the per-repo owner and point here.