You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Operator ruling (2026-07-18, broadcast MESSAGE:e70bbdae): ONE review per PR. Empirical anchor: PR #15389 (~200 lines) received THREE full Cycle-1 reviews in 8 minutes (Opus, Fable, Kimi) — a seat-crossing resolution that made two seats compose where one would have sufficed, burning ~3× reviewer cost on a compact diff. The operator's verdict: "not exactly efficient… could become skill substrate."
The current substrate already says half of this: pull-request-workflow.md §6.2 routes to exactly one primary-reviewer chosen by the author. What it does NOT say is the other half: peers who were NOT assigned must not review — and the exception that keeps reviews from starving.
The Problem
The review-seat market is unregulated on the demand side. Three gaps:
No assigned-only rule. Nothing forbids a peer from opening a full review on a PR that already has a requested reviewer (or a mid-flight review). The feat(fleet): composeOperatorMessage — the wire's first write verb, transport-stamped (#15379) #15389 crossing happened because a lead-role seat-offer and a second seat's independent acceptance raced within seconds — both legitimate under current text.
No unclaimed-fallback. Without a timed fallback, "assigned-only" risks the opposite failure: a requested reviewer goes silent and no one else may step in. Existing timers cover adjacent cases (4h primary-silence → author reassigns; ~2h no-cross-family → author invites one) but not "the request was never answered and the PR sits."
Seat truth scatters into A2A. Who-reviews-what currently lives in broadcast subjects; the PR's native reviewRequests field is the authoritative surface but the discipline to keep them 1:1 is uncodified.
The Architectural Reality
pull-request-workflow.md §6.2 (review routing protocol) is the owning substrate for author-side routing; post-review-pickup + pr-review intake govern reviewer-side lane selection.
manage_pr_reviewers + gh pr view --json reviewRequests are the mechanical surfaces; the PR-State Freshness Gate (pr-review-guide.md §10.1) already mandates reading reviewRequests before claiming merge-readiness — extending the same read to before starting a review is one sentence of substrate, not a new mechanism.
One ticket, three small substrate edits (skill text only — no mechanism):
pull-request-workflow.md §6.2 — codify the ONE-review rule: the author requests exactly one primary-reviewer (unchanged); a peer reviews a PR only when (a) they are the requested reviewer, or (b) the request has gone unanswered for ≥ 1 hour (the unclaimed fallback — after which any cross-family peer may self-assign by requesting themselves via manage_pr_reviewers and noting the timeout on the PR). Reviewers check reviewRequests + existing reviews at review-START (not lane-discovery); finding a mid-flight or landed full review means yield, not compose.
pr-review intake gate (pre-review-intake-lane-gate.md): add the same two-condition eligibility check to the reviewer's pre-flight — assigned OR ≥1h unclaimed — with the check-at-start freshness discipline (the claim can go stale in minutes, per ticket-create: A2A claim sweep as the last step before create_issue #12856).
Seat truth on the PR: route every seat through the native reviewRequests field; A2A wakes point at the field rather than carrying seat truth themselves (the wake says "use /pr-review on PR #N", the field says who).
Live latest-open sweep: checked latest 20 open issues at 2026-07-18T03:45Z; no equivalent found. A2A in-flight sweep: no [lane-claim] on review-routing codification scope; the ruling broadcast is the only signal.
Context
Operator ruling (2026-07-18, broadcast MESSAGE:e70bbdae): ONE review per PR. Empirical anchor: PR #15389 (~200 lines) received THREE full Cycle-1 reviews in 8 minutes (Opus, Fable, Kimi) — a seat-crossing resolution that made two seats compose where one would have sufficed, burning ~3× reviewer cost on a compact diff. The operator's verdict: "not exactly efficient… could become skill substrate."
The current substrate already says half of this:
pull-request-workflow.md §6.2routes to exactly one primary-reviewer chosen by the author. What it does NOT say is the other half: peers who were NOT assigned must not review — and the exception that keeps reviews from starving.The Problem
The review-seat market is unregulated on the demand side. Three gaps:
reviewRequestsfield is the authoritative surface but the discipline to keep them 1:1 is uncodified.The Architectural Reality
pull-request-workflow.md §6.2(review routing protocol) is the owning substrate for author-side routing;post-review-pickup+pr-reviewintake govern reviewer-side lane selection.manage_pr_reviewers+gh pr view --json reviewRequestsare the mechanical surfaces; the PR-State Freshness Gate (pr-review-guide.md §10.1) already mandates readingreviewRequestsbefore claiming merge-readiness — extending the same read to before starting a review is one sentence of substrate, not a new mechanism.The Fix
One ticket, three small substrate edits (skill text only — no mechanism):
pull-request-workflow.md §6.2— codify the ONE-review rule: the author requests exactly one primary-reviewer (unchanged); a peer reviews a PR only when (a) they are the requested reviewer, or (b) the request has gone unanswered for ≥ 1 hour (the unclaimed fallback — after which any cross-family peer may self-assign by requesting themselves viamanage_pr_reviewersand noting the timeout on the PR). Reviewers checkreviewRequests+ existing reviews at review-START (not lane-discovery); finding a mid-flight or landed full review means yield, not compose.pr-reviewintake gate (pre-review-intake-lane-gate.md): add the same two-condition eligibility check to the reviewer's pre-flight — assigned OR ≥1h unclaimed — with the check-at-start freshness discipline (the claim can go stale in minutes, per ticket-create: A2A claim sweep as the last step before create_issue #12856).reviewRequestsfield; A2A wakes point at the field rather than carrying seat truth themselves (the wake says "use /pr-review on PR #N", the field says who).Acceptance Criteria
pull-request-workflow.md §6.2carries the ONE-review rule (assigned-only + ≥1h unclaimed fallback + check-at-start yield discipline)reviewRequestsas the seat-truth surface (A2A as pointer, not carrier)Out of Scope
Related
pull-request-workflow.md §6.2,.agents/skills/post-review-pickup/references/pre-review-intake-lane-gate.mdLive latest-open sweep: checked latest 20 open issues at 2026-07-18T03:45Z; no equivalent found. A2A in-flight sweep: no
[lane-claim]on review-routing codification scope; the ruling broadcast is the only signal.Origin Session ID: 7a752066-e9f0-4682-b03c-9fc7d4d71711
Retrieval Hint: "one review per PR assigned-only unclaimed fallback review routing codification"