Skip to content

feat(pr-pipeline): review lanes hold a risky PR with needs-human, ci-status enforces it, and clean PRs auto-merge natively #9276

Description

@kyle-sexton

Refs: #8823

Problem

The owner wants the PR review lanes to be the only gate (.work/backlog-to-zero/DECISIONS.md item 6) and the merge to happen on GitHub's native triggers, with anything risky flagged to the owner by a marker that blocks the merge until the owner approves. Today the only required check is ci-status; it fails on the do-not-merge label (.github/workflows/pr-require-checks.yml:3208-3229) and re-runs on labeled/unlabeled (:34-36), but not on needs-human. The review lanes post a review and cannot hold a PR, and merging waits on pr-merge's 15-minute cron (.github/workflows/pr-merge.yml:82-89).

Owner direction (2026-10-23, this lane's tab): put the risk criteria (protected or trust files changed, billing or cost, very high security findings, intent changes) into the review, have the AI flag "needs human" so the owner is pulled in and the PR cannot merge without approval, and otherwise use the fastest native path.

Done when

  • ci-status fails while a PR carries needs-human, with an error naming why and that removing the label approves, the same way it handles do-not-merge.
  • The code-review and security-review lanes apply needs-human with a comment stating the reason when a review criterion is met: protected or trust paths, billing or cost, a very high security finding, or an intent change. The model returns a verdict and a script step writes the label. A lane can only add the hold, never remove it.
  • A review lane that errors, times out or is switched off posts a status that holds the PR rather than passing it. A draft posts a skip that does not block forever once the PR is ready.
  • Lane PRs merge through GitHub native auto-merge (or the merge queue's auto-enqueue) once ci-status and both review checks pass. No cron wait.
  • A canary covers each path: clean (merges with no session), flagged (held with needs-human until the label is removed), and a lane error (held).

Cross-repo: the security and code review reusables live in melodic-software/ci-workflows (pr-review-security.yml@v0.62.0). Merge-trigger design is shared with #8823 (poteto). Option analysis: GitHub auto-merge merges "after all required reviews and status checks pass" (docs.github.com, automatically merging a pull request); check_suite: completed does not fire for Actions-created suites; workflow_run chains at most three levels (docs.github.com, events that trigger workflows).

Activity

  1. added
    priority: highSignificant impact, or blocks an imminent release; staff this cycle.
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    on Oct 23, 2026
  2. kyle-sexton commented on Oct 23, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded. Cost: accepted.

    Question (Q50, owner interview round 11, 2026-10-23): Accept the cost entries for #9306 (Refine restore, PR #9332), #9276, and #9215 (refine-issue funding, PR #9310)? #9310's refine-issue entry runs only on AUTOMATIONS_CLAUDE_CODE_OAUTH_TOKEN (no bill); #9332 runs Refine key-first then subscription, within Q46 (each prepaid $200 lasts about 2-3 days a month, then the subscription carries it); Actions minutes on this public repo are free.

    Answer (owner, 2026-10-23): "Yes that all sound logical and within the bounds/instructions I've been repeating here, lets go with those"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: highSignificant impact, or blocks an imminent release; staff this cycle.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions