Skip to content

feat(review): replay /review:merge-risk over past unattended merges before wiring demote #12984

Closed

Description

@kyle-sexton

Problem

/review:merge-risk (PR #12954) rates a pull request's merge risk and returns a demote flag that can only send an unattended merge to a human. No merge gate reads demote yet (owner question Q57). The earlier risk-only version was replayed once in #7024: across 11 unattended merges it demoted none and missed #6205, a CI trust-boundary change. The new rubric adds floors for exactly that class, but it has not been replayed.

Owner decisions (2026-11-03, in session)

  1. Do not wire demote into any merge gate yet. Replay the new rubric over past unattended merges first; the wiring decision (Q57) comes back to the owner with the replay's numbers.
  2. In the same replay, run the blind checker on the PR author's model and on a different model class, and compare.
  3. Record each /review:merge-risk result (PR, head, area levels, demote) so it can later be joined to reverts, and let /work-items:measure-delivery report the revert rate per risk level.

Acceptance criteria

  • Replay /review:merge-risk over every unattended lane merge the lane telemetry records (the 11 PRs in feat(review): add a risk-only action to explain-change that can only demote an unattended merge #7024 at minimum), each at its merged head.
  • Per PR: the rater's and the checker's maximum level, demote, and the hindsight outcome (reverted, regressed, follow-up fix, or none), in a table on this issue.
  • The checker runs twice per PR, on the author's model and on a different model class; the table shows both, with agreement counts.
  • Counts: demotions, missed risks (hindsight says a human should have looked), false demotions.
  • A design for recording merge-risk results (where they are written, how long they are kept, and how /work-items:measure-delivery joins them to reverts), brought to the owner with the replay results and the Q57 recommendation. No gate change lands under this issue.

Related

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 3, 2026
  2. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    Understood: replay /review:merge-risk over past unattended lane merges (at least the 11 PRs in #7024), each at its merged head. For each PR, record the rater's and checker's maximum level, demote, and the hindsight outcome. Run the checker on the author's model and on a different model class. Report the counts of demotions, missed risks and false demotions. Then bring a design for recording results, and how /work-items:measure-delivery joins them to reverts, to the owner along with the Q57 recommendation. No gate change lands under this issue.

    The done-when items are exact, and I found no cost charge: the replay runs on local sessions, not a billed service. The replay depends on #12954 merging first. The table and the Q57 recommendation need a person's review, but nothing blocks the work. I found no duplicate among the open issues.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 3, 2026
  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 3, 2026
  5. added
    status: needs-decisionAwaiting a human or maintainer judgment call.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 3, 2026
  6. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane: its title or stated work names a charge (retention), which needs an owner decision; Size large: the split into sub-issues at intake is pending (owner Q93). Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).

  7. melodic-automation-lanes commented on Nov 3, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: the issue is at status: ready.

  8. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Decision (Merge Risk session, owner away, settled by evidence): this issue names no charge. "Retention" in the first body meant how long merge-risk result records are kept in the repository; the body now says "how long they are kept". The replay runs local Claude Code sessions, which use subscription capacity, not a billed service; no Azure, GitHub runner, storage or plan change is involved. Basis: the issue body and the replay method in #7024. Size: the replay is one host run over about 11 PRs, done in one session, so no sub-issue split. The Merge Risk session runs it after #12954 merges.

  9. 9 remaining items

  10. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  11. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 5, 2026
  12. kyle-sexton commented on Nov 5, 2026

    @kyle-sexton
    MemberAuthor

    Status. agent-ready removed and host-run added: this is a host run, not issue-lane work. status: needs-decision stays for the owner's Q93 size-split rule, per the 2026-11-04T01:36Z correction above.
    Agent choice, not an owner answer.

    • The 2026-11-04T00:41Z comment says the replay "runs local Claude Code sessions" over about 11 PRs, done in one session by the Merge Risk session after feat(review): split merge-risk rating out of explain-change #12954 merges. The issue lane cannot run the claude CLI, so agent-ready sent it to a lane that cannot do it.
    • No other change; the Merge Risk session keeps it.
  13. self-assigned this
    on Nov 5, 2026
  14. kyle-sexton commented on Nov 5, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  15. kyle-sexton commented on Nov 5, 2026

    @kyle-sexton
    MemberAuthor

    Owner decision (2026-11-05, in session, verbatim: "ok go with recommendations"). #12984 runs as one host run, without a Q93 split. Basis: intake triage rated it Size: Medium (2026-11-03T23:16Z comment above); Q93 covers Size Large only, and the "Size large" in the admission comment conflicts with that rating. status: needs-decision comes off, since it stood only for the Q93 split.

    Lane 4 holds the lease and is building the replay inventory: the unattended merges in lane telemetry, author models, and hindsight outcomes. Model runs start after the count is known.

  16. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Replay result: /review:merge-risk over every unattended lane merge

    The new rubric (#12954) caught both known risks, but its demote flag would have sent 227 of 674 unattended merges (34%) to a person. Against hindsight, 212 of those had nothing later go wrong. Recommendation for Q57: do not wire demote into a merge gate. Record each rating instead (design below), and come back to Q57 when the revert data can measure precision.

    Criterion 1: every unattended lane merge, each at its merged head

    Criterion 3: two checkers per PR

    Models:

    • Checker 1 is the skill's own blind review:brief-reviewer, which runs on Opus at high effort.
    • Checker 2 runs the skill's step-3 brief verbatim on Sonnet at high effort, Read-only. Sonnet is the other class because brief-reviewer's Opus pin keeps judgment fan-out off the frontier tier (ADR 0045), and Haiku is held until the routing eval (multi-agent: paired model-routing eval for retrieval, review and mechanical-edit roles #6901).
    • Which checker matches the author. Lane commits carry no model trailer, so the author model was read from the lane's model config at each merge's base commit:

    Agreement over all 674 PRs:

    Agreement Count
    Opus checker max = Sonnet checker max 534 (79%)
    Opus and Sonnet maxes within one level 674 (100%)
    Rater max = Opus checker max 550 (82%)
    Rater max = Sonnet checker max 562 (83%)
    demote (Opus arm) = demote (Sonnet arm) 598 (89%)
    HIGH or above from the Opus checker only 86
    HIGH or above from the Sonnet checker only 24

    Opus and Sonnet maxes cross-tabulated (row is Opus, column is Sonnet; L, M, H, C are LOW, MEDIUM, HIGH, CRITICAL):

    L M H
    L 34 22 0
    M 7 375 24
    H 0 86 125
    C 0 0 1

    The Opus checker is the stricter one:

    • 75 of the 227 demotions came from the Opus checker alone, with the rater at MEDIUM or below.
    • Only 15 came from the rater alone.

    Criterion 4: demotions, missed risks and false demotions

    demote is computed as the skill defines it (rater or Opus checker at HIGH or above). The Sonnet arm is the same rule with the Sonnet checker in the checker's place.

    Stratum PRs Demoted (Opus arm) Demoted (Sonnet arm) Missed risks False demotions, Opus arm False demotions, Sonnet arm
    A: babysit 11 11 3 1 0 1 0
    B1: floor paths or workflows 35 19 18 0 18 16
    B2: other CI or config paths 37 17 15 0 14 12
    C: hooks 45 26 26 0 24 24
    D: Dependabot 39 11 13 0 11 13
    E: everything else 503 149 116 0 144 112
    H: hindsight follow-ups 4 2 2 0 0 0
    Total 674 227 191 0 212 177

    How each column is defined:

    Other numbers:

    • By authoring era (Opus arm): 196 of 530 Opus-route lane PRs demoted (37%), against 28 of 132 default-route PRs (21%).
    • Areas rated HIGH on demoted PRs: reversibility 113, verification 101, impact 92, other 22, error detection 3, alignment 1. One rating reached CRITICAL: feat(sql-server): add the human-approved write tier #12075, from the Opus checker.
    • The 105-PR stratified sample ran first and under-estimated. It demoted only 3 of 25 in the "everything else" stratum (12%); the census shows 149 of 503 (30%).

    Criterion 2: per-PR table

    Levels are the maximum over areas, as L, M, H, C. The hindsight classes are:

    • caused-by: a later change undid a defect this PR introduced.
    • follow-up: a later change finished this PR's work.
    • observed-on: a lane or CI defect was seen on this PR.
    • none: nothing later names this PR.
    All 674 PRs
    PR Stratum Rater Opus checker Sonnet checker demote demote (sonnet arm) Hindsight
    #6198 A L L L N N none
    #6200 A M M M N N none
    #6201 A M L M N N none
    #6203 A L M L N N none
    #6205 A H H H Y Y known miss (#7024 judgment)
    #6208 A M M M N N none
    #6209 A M H M Y N observed-on
    #6210 A M M M N N none
    #6213 A M M M N N none
    #6216 A M M M N N follow-up?
    #6217 A M H M Y N none
    #7708 D M M H N Y none
    #7795 E M M M N N none
    #7796 E M H M Y N none
    #7798 E M M M N N none
    #7801 E M M M N N none
    #7880 E M M M N N none
    #7896 C M M M N N none
    #7942 E M M M N N none
    #7943 E H H H Y Y none
    #7946 E L M M N N none
    #7947 E M M M N N none
    #7957 E L M M N N none
    #7961 E L L L N N none
    #8014 E M M M N N none
    #8033 E M L M N N none
    #8036 E L M L N N none
    #8038 E M M M N N none
    #8040 E M M M N N none
    #8045 E M M M N N none
    #8046 E M M M N N none
    #8049 E M M M N N none
    #8052 E L M M N N none
    #8060 E L L L N N none
    #8061 E L M M N N none
    #8064 E M M M N N none
    #8070 E M M M N N none
    #8071 E L L M N N none
    #8075 E M L M N N none
    #8091 E M H H Y Y none
    #8092 E M M M N N none
    #8093 E L L M N N none
    #8094 E M M M N N none
    #8099 E L M L N N none
    #8100 E M M M N N none
    #8102 E M M M N N none
    #8104 E M M M N N none
    #8105 E L M M N N none
    #8106 E M M M N N none
    #8107 E M M M N N none
    #8108 E M M M N N none
    #8114 E M M M N N none
    #8120 E H H H Y Y none
    #8124 E M M M N N none
    #8126 E L L L N N none
    #8128 E L L L N N none
    #8129 E M H M Y N none
    #8132 E M M M N N none
    #8134 E M M M N N none
    #8136 E L L L N N none
    #8139 E L L L N N none
    #8148 E M M M N N none
    #8155 E H H M Y Y none
    #8164 E H H M Y Y none
    #8165 E M M L N N none
    #8167 E M M M N N none
    #8174 E L M L N N none
    #8190 E H H M Y Y none
    #8195 E L L L N N none
    #8198 E M M M N N none
    #8199 E M L M N N none
    #8224 E M M L N N none
    #8229 E M M M N N none
    #8287 D M M M N N none
    #8289 D M M M N N none
    #8290 D M H M Y N none
    #8350 D M M M N N none
    #8352 D M M M N N none
    #8356 D H H M Y Y none
    #8585 D M M H N Y none
    #8616 E M M M N N none
    #8634 E M M M N N none
    #8661 E H H M Y Y none
    #8778 E M M M N N none
    #8807 E M M M N N none
    #8828 E L M M N N none
    #8829 E M L M N N none
    #8838 D M M H N Y none
    #8845 E M M M N N none
    #8944 E M M M N N none
    #9009 E M M M N N none
    #9057 D M M M N N none
    #9058 D M M M N N none
    #9131 D H M M Y Y none
    #9162 E M M M N N none
    #9200 E L L L N N none
    #9203 E L L L N N none
    #9206 E L L L N N none
    #9210 E L L L N N none
    #9219 E L L L N N none
    #9232 E L L L N N none
    #9233 E L L L N N none
    #9266 E L L L N N none
    #9322 E L L L N N none
    #9324 E L L L N N none
    #9325 E M M M N N none
    #9327 E L L L N N none
    #9337 E M L L N N none
    #9383 E L M M N N none
    #9386 D M M M N N none
    #9388 D H M H Y Y none
    #9392 E M M M N N none
    #9395 C M M M N N none
    #9401 E M M M N N none
    #9475 E L L L N N none
    #9489 E M M M N N none
    #9502 D H M M Y Y none
    #9511 D H M M Y Y none
    #9540 E M M M N N none
    #9554 E M M M N N none
    #9594 E H H H Y Y none
    #9597 E L L L N N none
    #9604 E M M M N N none
    #9631 D M M M N N none
    #9632 D M M M N N none
    #9637 E L L M N N none
    #9640 E M M M N N none
    #9642 E H H H Y Y none
    #9643 E M M M N N none
    #9654 E H H M Y Y none
    #9800 E M M H N Y none
    #9804 E M H M Y N observed-on
    #9806 H H H H Y Y follow-up fix
    #9811 E L M M N N none
    #9815 E M H M Y N none
    #9818 E H M M Y Y none
    #9821 E M M M N N none
    #9823 C H H H Y Y none
    #9825 E H H M Y Y none
    #9828 E H H H Y Y observed-on
    #9829 E H H H Y Y none
    #9830 E H H H Y Y observed-on
    #9831 E H H H Y Y none
    #9832 E M M M N N none
    #9833 E M H H Y Y none
    #9858 B2 H H H Y Y observed-on
    #9860 B2 H H H Y Y none
    #9884 E M M M N N none
    #9885 E H H H Y Y none
    #9887 C H H M Y Y none
    #9888 E L L L N N none
    #9890 B2 H H H Y Y observed-on
    #9894 C H H H Y Y none
    #9896 E L L L N N none
    #9897 E H H H Y Y none
    #9916 E L L L N N none
    #9917 E M M M N N none
    #9952 E M M M N N none
    #9956 E M M M N N none
    #9963 E H H H Y Y none
    #9965 E H H M Y Y none
    #9970 E M H M Y N none
    #9976 C H H H Y Y none
    #9980 E M M M N N none
    #9981 C H H H Y Y none
    #9985 B2 H H H Y Y none
    #9987 E M H M Y N none
    #9991 B2 H H H Y Y none
    #9994 C H H H Y Y none
    #9999 E M M M N N none
    #10000 E M M M N N none
    #10010 E M M M N N none
    #10013 E M M M N N none
    #10016 C M M M N N none
    #10018 E M M M N N none
    #10019 C H H H Y Y none
    #10021 E L L L N N none
    #10041 E M M M N N none
    #10042 E H H M Y Y none
    #10044 E M H M Y N none
    #10047 C H H H Y Y none
    #10050 E M M M N N none
    #10052 E H M H Y Y none
    #10054 B2 M M M N N none
    #10055 E H H H Y Y none
    #10056 E M M M N N none
    #10057 E H H M Y Y none
    #10059 E M M M N N none
    #10064 E H H H Y Y none
    #10066 E M M M N N none
    #10069 E M M M N N none
    #10071 E M M M N N none
    #10078 B2 M M M N N none
    #10090 E M H M Y N none
    #10092 E M M M N N none
    #10095 E H H H Y Y none
    #10097 E M M M N N none
    #10098 E M H M Y N none
    #10100 E M H M Y N none
    #10102 E L M M N N none
    #10116 E M M M N N none
    #10122 E M M M N N none
    #10123 E H H H Y Y none
    #10127 E M H H Y Y none
    #10137 E H H H Y Y none
    #10157 C M M M N N none
    #10158 E M M M N N none
    #10161 E M H M Y N none
    #10164 E M H M Y N none
    #10167 C H H H Y Y none
    #10169 E M M M N N none
    #10172 E M M M N N none
    #10187 E H H H Y Y none
    #10196 E H H H Y Y none
    #10216 E M M M N N none
    #10219 E M H H Y Y none
    #10220 B1 L M M N N none
    #10224 B1 H H H Y Y observed-on
    #10228 B2 M M H N Y none
    #10229 E M M H N Y none
    #10238 E M H M Y N none
    #10239 B2 H H H Y Y none
    #10245 D M M M N N none
    #10247 D M M M N N none
    #10285 B2 M M M N N none
    #10287 E H H H Y Y none
    #10306 E L M L N N none
    #10310 B2 M M M N N none
    #10311 E M M M N N none
    #10322 E M M M N N none
    #10324 E M M M N N none
    #10325 E M M M N N none
    #10328 E M M M N N none
    #10331 E M M M N N none
    #10332 E M H M Y N none
    #10343 E M M M N N none
    #10344 E M M M N N none
    #10345 E L M M N N none
    #10347 E M M M N N none
    #10348 E M M M N N none
    #10351 E M M M N N none
    #10352 B2 M M M N N none
    #10353 E M M M N N none
    #10354 E M M M N N none
    #10356 E M M M N N none
    #10372 E H H H Y Y none
    #10374 E L L L N N none
    #10375 E M M M N N none
    #10376 C H H H Y Y none
    #10377 B1 M M H N Y observed-on
    #10379 E M M M N N none
    #10380 B1 M M M N N none
    #10408 E M H M Y N none
    #10410 B1 H H M Y Y none
    #10411 E H H M Y Y none
    #10412 E H H H Y Y none
    #10413 E M M M N N none
    #10414 B2 H H H Y Y none
    #10415 E M M M N N none
    #10416 B1 M H H Y Y none
    #10418 E M M M N N none
    #10419 E M M M N N none
    #10421 C M M M N N none
    #10422 B2 M H M Y N none
    #10424 E M M M N N none
    #10425 E M H M Y N none
    #10426 E M M M N N none
    #10428 E H H H Y Y none
    #10430 E H H M Y Y none
    #10433 E M M M N N none
    #10435 E H H H Y Y none
    #10439 B2 H H H Y Y observed-on
    #10440 E M M M N N none
    #10441 B2 M M M N N none
    #10443 E M H M Y N none
    #10444 E M M M N N none
    #10447 E M M M N N none
    #10455 B1 M M M N N none
    #10457 D M M M N N none
    #10458 D M H M Y N none
    #10493 E M M M N N none
    #10495 E M H M Y N none
    #10497 E M M M N N none
    #10499 E H H M Y Y none
    #10508 E M M M N N none
    #10510 E H H H Y Y none
    #10514 E M M M N N none
    #10521 E M M M N N none
    #10524 E M M M N N none
    #10531 E M M M N N none
    #10535 E M M M N N none
    #10537 E M M M N N none
    #10539 B1 H M M Y Y none
    #10541 E M M M N N none
    #10542 E H H M Y Y none
    #10544 E M M M N N none
    #10546 E M M M N N none
    #10555 B2 H H M Y Y none
    #10556 E M M M N N none
    #10561 B2 M M M N N none
    #10566 E M M M N N none
    #10570 E M M M N N none
    #10572 B1 M M M N N none
    #10575 B1 M H H Y Y none
    #10577 B1 M M M N N follow-up fix
    #10578 E M M M N N none
    #10581 E H H H Y Y none
    #10582 B1 L M M N N none
    #10585 E H H H Y Y none
    #10586 E H H M Y Y none
    #10595 E M H M Y N none
    #10609 E M M M N N none
    #10610 E M M H N Y none
    #10612 E H H M Y Y none
    #10613 E M M M N N none
    #10615 E M M M N N none
    #10617 E M M M N N none
    #10621 E H H H Y Y none
    #10622 E L M M N N none
    #10623 B1 H H H Y Y none
    #10636 D M M M N N none
    #10637 D M M M N N none
    #10638 D M M M N N none
    #10639 D M M M N N none
    #10641 D M M M N N none
    #10642 D M M M N N none
    #10644 D H M M Y Y none
    #10645 E M M M N N none
    #10664 B2 M M M N N none
    #10665 B2 H M M Y Y none
    #10695 E M H M Y N none
    #10698 E M M M N N none
    #10702 E M M H N Y none
    #10714 E M M M N N none
    #10738 B1 H H H Y Y none
    #10745 B2 L L M N N none
    #10768 B2 L M M N N none
    #10769 E M M M N N none
    #10770 E M M M N N none
    #10773 E M H M Y N none
    #10776 D H M M Y Y none
    #10779 H M M M N N follow-up fix
    #10797 B2 M M M N N none
    #10798 B2 M L M N N none
    #10801 E M M M N N none
    #10802 C H H H Y Y observed-on
    #10803 E M M M N N none
    #10805 E M M M N N none
    #10806 E M M M N N none
    #10808 E M M M N N none
    #10809 E M M M N N none
    #10810 C H H H Y Y caused-by
    #10813 E M M M N N none
    #10814 E M M M N N none
    #10815 E M M M N N none
    #10820 E M M M N N none
    #10822 E H H H Y Y none
    #10824 E M H M Y N none
    #10826 E M M M N N none
    #10827 E M M M N N none
    #10828 E M M M N N none
    #10829 E H H H Y Y observed-on
    #10830 E L M M N N none
    #10833 B1 H H H Y Y none
    #10867 E M M M N N none
    #10869 B2 M M H N Y none
    #10870 C H H H Y Y none
    #10871 C M M M N N none
    #10875 E M M M N N none
    #10877 E L L M N N none
    #10878 E M M M N N none
    #10879 E M M M N N none
    #10882 E M M M N N none
    #10884 E L L M N N none
    #10885 E M H H Y Y none
    #10888 E M H M Y N none
    #10889 E M M M N N none
    #10890 E M M M N N none
    #10892 E M M M N N none
    #10893 E M M M N N none
    #10894 E H H H Y Y none
    #10895 E M M M N N none
    #10896 C M M M N N none
    #10899 E M H M Y N none
    #10900 C H H H Y Y none
    #10901 E M M M N N none
    #10904 E M M M N N none
    #10905 E M M M N N none
    #10907 E M M M N N none
    #10909 E M M M N N none
    #10911 E L L M N N none
    #10913 E M M M N N none
    #10914 C M H M Y N none
    #10915 E M M M N N none
    #10916 E M M M N N none
    #10918 B2 M H M Y N none
    #10920 E L L L N N none
    #10921 E M H M Y N none
    #10923 C M H H Y Y none
    #10924 E M H M Y N none
    #10925 E M M M N N none
    #10926 E M H M Y N none
    #10928 B2 M M M N N none
    #10929 C M H M Y N none
    #10930 E M H M Y N none
    #10932 B1 H H H Y Y none
    #10933 E M L M N N none
    #10934 E M M M N N none
    #10935 E M M M N N none
    #10936 B1 M M M N N none
    #10938 E M M M N N none
    #10940 E M M M N N none
    #10945 E M M M N N none
    #10955 B1 H H H Y Y none
    #10956 E M H M Y N none
    #10958 E M M M N N none
    #10960 E M M M N N none
    #10963 E M M M N N none
    #10965 E L L M N N none
    #10968 B1 M M M N N none
    #10973 C H H M Y Y none
    #10974 B2 M M M N N none
    #10984 B2 M H H Y Y none
    #10989 B1 H H H Y Y none
    #11027 E H H M Y Y none
    #11040 E M M M N N none
    #11049 E M M M N N none
    #11051 E M M M N N none
    #11052 E M M M N N none
    #11053 E M M M N N none
    #11054 C M M M N N none
    #11067 E M M M N N none
    #11071 E H H H Y Y none
    #11076 C M M H N Y none
    #11077 E H H H Y Y none
    #11081 E M M M N N none
    #11086 E H H H Y Y none
    #11089 E M M M N N none
    #11092 E M M M N N none
    #11093 E H H H Y Y none
    #11095 E M M M N N none
    #11098 E M M M N N none
    #11107 E M M M N N none
    #11108 E M M M N N none
    #11109 B1 M H H Y Y none
    #11111 E M M M N N none
    #11135 E H H H Y Y none
    #11138 E H M H Y Y none
    #11139 E H H H Y Y none
    #11140 E H H H Y Y none
    #11142 E M H M Y N none
    #11143 E M M M N N none
    #11144 E M H H Y Y none
    #11146 E H H H Y Y none
    #11148 E M M M N N none
    #11297 E M M M N N none
    #11305 C H H H Y Y none
    #11310 E M M M N N none
    #11313 C M M M N N none
    #11314 C M M M N N none
    #11341 C M M M N N none
    #11345 E M M M N N none
    #11347 C H H H Y Y none
    #11349 E M M M N N none
    #11350 E M M M N N none
    #11353 E M M M N N none
    #11354 E M M M N N none
    #11371 E M M M N N none
    #11374 E M M M N N none
    #11399 C M M M N N none
    #11400 B1 H H H Y Y none
    #11404 E M H H Y Y none
    #11409 E M H M Y N none
    #11417 B1 M H M Y N none
    #11419 E H H H Y Y none
    #11421 E H H H Y Y none
    #11443 E M M H N Y none
    #11444 B1 M M M N N none
    #11448 C M H M Y N none
    #11451 E M M M N N none
    #11452 E M H M Y N none
    #11454 E M M M N N none
    #11464 E M M M N N none
    #11468 E M M M N N none
    #11469 E H H M Y Y none
    #11477 E M M M N N none
    #11483 E L L L N N none
    #11495 E L L L N N none
    #11496 B1 M M M N N none
    #11497 E M M M N N none
    #11499 E L L M N N none
    #11505 B1 M M M N N none
    #11507 C M M H N Y none
    #11509 E H H H Y Y none
    #11510 E M H M Y N none
    #11512 E M M M N N none
    #11513 E H H H Y Y none
    #11515 C H M M Y Y none
    #11516 H H H H Y Y follow-up fix?
    #11518 E M M M N N none
    #11521 E M M H N Y none
    #11522 E H H M Y Y none
    #11523 E M M M N N none
    #11525 E M M M N N none
    #11529 E M M M N N none
    #11531 E M M M N N none
    #11532 E M M M N N none
    #11539 C H H H Y Y none
    #11554 C M M H N Y none
    #11559 E M H H Y Y none
    #11571 B2 L M M N N none
    #11610 B1 H H H Y Y none
    #11614 E L L L N N none
    #11635 E M M M N N none
    #11636 E M M M N N none
    #11642 D M M M N N none
    #11643 D M M M N N none
    #11676 C M M M N N none
    #11694 E M M M N N none
    #11699 B1 M H M Y N none
    #11703 E M H H Y Y none
    #11704 E M M M N N none
    #11706 B1 H H H Y Y none
    #11707 E M M M N N none
    #11709 B1 M M M N N none
    #11711 E M M M N N none
    #11712 C L L M N N none
    #11716 E M M M N N none
    #11718 E H H H Y Y none
    #11720 E H H M Y Y none
    #11721 E M M M N N none
    #11725 E M M M N N none
    #11730 E M M M N N none
    #11731 E L L L N N none
    #11737 B1 M M M N N none
    #11742 E H H H Y Y none
    #11746 E M M M N N none
    #11770 E M L M N N none
    #11778 E H M M Y Y none
    #11779 E M M M N N none
    #11781 E H H H Y Y none
    #11782 C M M M N N none
    #11787 E M M H N Y none
    #11793 E H H H Y Y none
    #11807 E H H H Y Y none
    #11810 E M M M N N none
    #11812 E H H M Y Y none
    #11822 E M M M N N none
    #11827 E L L L N N none
    #11829 E H M H Y Y none
    #11830 B2 M M M N N none
    #11852 B1 M M M N N none
    #11854 E H H H Y Y observed-on
    #11861 E H H H Y Y none
    #11862 E H H M Y Y none
    #11885 E M L M N N none
    #11890 E H H H Y Y none
    #11894 E H H H Y Y none
    #11899 E L L M N N none
    #11910 E M M M N N none
    #11915 E M H M Y N none
    #11919 E M M M N N none
    #11922 E H H H Y Y none
    #11925 E H H H Y Y none
    #11927 E M H M Y N none
    #11935 E M M M N N none
    #11942 E M H M Y N none
    #11947 E H H H Y Y none
    #11952 E H H M Y Y none
    #11978 E M M M N N none
    #11990 E M H M Y N none
    #11993 C H H H Y Y none
    #12000 E M M M N N none
    #12007 E M M M N N none
    #12045 E M M M N N none
    #12047 E M M M N N none
    #12075 E H C H Y Y none
    #12088 E H H H Y Y none
    #12089 E M M M N N none
    #12090 E M M M N N none
    #12098 E M M M N N none
    #12100 B2 M M M N N none
    #12125 E M M M N N none
    #12128 E M M M N N none
    #12130 E M M M N N none
    #12163 E H H H Y Y none
    #12165 E M M M N N none
    #12167 E M M M N N none
    #12169 E M M M N N none
    #12203 E M M M N N none
    #12205 E M H M Y N none
    #12216 E M M H N Y none
    #12238 B1 H H H Y Y none
    #12239 E H H H Y Y none
    #12246 E M M M N N none
    #12262 E M M M N N none
    #12266 C H H H Y Y none
    #12281 E M M M N N none
    #12288 E M M M N N none
    #12301 E H H H Y Y none
    #12307 E M M M N N none
    #12313 E M H M Y N none
    #12317 E M M M N N none
    #12319 C M M M N N none
    #12325 E M M M N N none
    #12329 E H H H Y Y none
    #12332 E M M M N N none
    #12338 E H H M Y Y none
    #12348 D H M M Y Y none
    #12407 E M M M N N none
    #12432 E H H H Y Y none
    #12435 E M M M N N none
    #12458 E M H H Y Y none
    #12460 E M M M N N none
    #12480 B2 H H H Y Y none
    #12512 E M M H N Y none
    #12514 E H H M Y Y none
    #12554 E M H H Y Y none
    #12578 E M M M N N none
    #12720 E M M M N N none
    #12808 D M M H N Y none
    #12885 E L L L N N none
    #12900 E M M M N N none
    #12914 E M M M N N none
    #12962 E M M M N N none
    #12974 E H H M Y Y none
    #12981 B2 M H M Y N none
    #13006 E M M M N N none
    #13031 E M M M N N none
    #13032 E M M M N N none
    #13043 E M M M N N none
    #13048 E H H H Y Y none
    #13052 E M M M N N none
    #13054 B2 M H M Y N none
    #13056 E M M M N N none
    #13059 E M M M N N none
    #13099 E M M M N N none
    #13100 E M L M N N none
    #13102 E M M M N N none
    #13115 E M H M Y N none
    #13118 E M M M N N none
    #13119 E M M M N N none
    #13151 D M M M N N none
    #13152 D M M M N N none
    #13154 D M H M Y N none
    #13155 D M M M N N none
    #13158 D M M H N Y none
    #13183 E H H H Y Y none
    #13195 E L M M N N none
    #13212 B1 M M M N N none
    #13216 H M M M N N follow-up fix
    #13240 B2 M M M N N none
    #13254 E M M M N N none
    #13255 E M M M N N none
    #13270 E M M M N N none
    #13273 E M M M N N none
    #13294 E M M M N N none
    #13317 E M M M N N none
    #13318 E M M M N N none
    #13335 E M M M N N none
    #13336 E M M M N N none
    #13345 E M H M Y N none
    #13365 E M H M Y N none
    #13382 E H H H Y Y none
    #13429 B1 H H H Y Y none
    #13446 E M M M N N none
    #13479 E M M M N N none
    #13487 C M H H Y Y none
    #13510 E M H H Y Y none
    #13514 E M M M N N none
    #13551 E M M M N N none
    #13553 E L L M N N none
    #13563 E M H H Y Y none
    #13567 B2 H H H Y Y none

    Criterion 5: recording design, and the Q57 recommendation

    The problem. Owner decision 3 asks for each merge-risk result (PR, head, area levels, demote) to be joinable to reverts, and for /work-items:measure-delivery to report the revert rate per risk level. measure-delivery reads only git history ("no tracker or forge call is made"), so where the result is stored decides whether the join needs any forge reads.

    Prerequisite, found during the replay. measure-delivery counts a revert only from a This reverts commit <sha> line or a Revert "<subject>" subject. All 13 revert commits on main since 2026-10-04 use the Conventional Commits form revert(<scope>): … and carry neither. Today it would report 0 reverts for this repository, whatever was recorded. It needs to recognize revert(<scope>): commits, and the lane revert records that the post-merge demotion alert files.

    Options for where the result is written:

    1. A Merge-Risk: line in the squash commit message (recommended).
      • The step that arms the merge already posts the head pin. It would also add one line to the PR body before the merge queue takes it: Merge-Risk: max=<level> demote=<bool> head=<sha> rubric=<plugin version> rater=<model> checker=<model>.
      • The line lands in the squash commit, so the deployment and its rating sit in the same record. measure-delivery joins them with no forge call.
      • Retention is git history, so nothing needs pruning.
      • Cost: one PR-body edit per merge. The line is report-only and never read by a gate, so a later edit of it changes no merge decision.
    2. Extend the existing pin comment (babysit-merge-pin) with the same fields.
      • This adds no new writer, and the record is per head.
      • But measure-delivery would need one comments read per merged PR, which breaks its git-only design. Retention is the PR's life.
    3. An artifact or JSONL file from the pr-merge workflow.
      • Artifacts expire, so the history needed for a revert rate is lost.
      • Rejected.

    Recommendation: option 1, plus the measure-delivery revert-detection fix above. Basis: measure-delivery is the named consumer, and its signal reads only git; option 1 is the only one that keeps that true.

    Q57: wire demote into a merge gate?

    • Recommended: no.
      • Keep /review:merge-risk report-only.
      • Ship the recording (option 1), so each lane merge carries its rating.
      • Revisit Q57 once measure-delivery can report the revert rate per level from enough reverts.
      • Basis: the replay demotes 34% of unattended merges, about 11 a day across the 20 days of lane merging. That is 227 human stops against 2 known positives, and 0 reverts to measure precision against.
      • The owner's stop rule sends an item to a person only for an intent change or a security issue in its PR (When work stops for the owner). Most demotions here are reversibility and verification ratings, which that rule does not cover.
    • Alternative: wire it as specified. Every HIGH from the rater or the Opus checker demotes. It catches #6205 and #10810, but stops 227 merges.
    • Alternative: wire a narrow rule. For example, demote only on an Impact row at HIGH that both the rater and a checker agree on. Data for this: Impact was rated HIGH on 92 demoted PRs, including both positives. This needs its own replay to count before it is chosen.
    • If any version is wired, use the Opus checker. It is the stricter arm (86 HIGH ratings that Sonnet did not give, against 24 the other way), and it is the author model for 542 of the 674 PRs.

    Also found (outside this issue's scope)

    • A lane merge landed at a head its pin did not name: #13240.
      • Auto-merge was armed at 5ccfd16e at 13:52Z.
      • pr-unblock/address-feedback pushed a62fcbb5 at 13:55Z, with no auto_merge_disabled event.
      • It merged at a62fcbb5 at 14:06Z.
      • ci-status and both review lanes passed on a62fcbb5. The arming step's own checks ran only on 5ccfd16e.
      • That was 1 in the 94 sampled lane merges where the pin was compared with the merged head. It needs triage on its own.
    • The lanes do not record the author model. Lane commits carry only Lane-Activity:. Which model the opus alias resolved to on each run is visible only in the run log, so the recording line should name the model ID.

    No gate change lands under this issue.

  17. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Owner decision Q57 (2026-11-05, in session, verbatim: "Go w/ recommenadtions"). demote is not wired into any merge gate. Ratings are recorded first, and Q57 comes back once revert rates per risk level can be measured.

    All five criteria are met: the replay covered 674 of 674 merges (criterion 1), the per-PR table and both checker arms are in the results comment above (criteria 2 and 3), the counts are there too (criterion 4), and the recording design plus the Q57 recommendation went to the owner and were decided (criterion 5). No gate change landed under this issue.

    The follow-up work is filed:

    Closing as completed.

  18. removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

Fields

Work status

ready

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions