Skip to content

source-control: PR pipeline states, review venue, findings lane and statuses #7576

Closed
18 of 18 issues completed
Closed

Description

@kyle-sexton

Parent

Refs #7555. Source: PLAN Phase 8, topic poteto-review. Thread: PR pipeline (source-control; save
point, draft, ready, statuses, review venue, merge queue), except its merge setups, which the Merge
authority thread carries.

Depends on

Outcome

Each PR follows one sequence: prep once, open ready, one AI review in CI, a findings lane fixes
accepted findings, deterministic checks plus changed-files review on each fix push, the verifier's
verdict on the final head, then merge.

Decisions

  • PR states: save point = commits pushed, no PR; draft only on request or as a multi-session
    container; ready = complete and through local gates; setting pr_open_state default ready; the
    AGENTS.md draft section is replaced by this rule (D75, Q501; owner chose ready with Matt).
    Unfinished multi-session skills are draft containers (Q585). PRs from earlier threads open as
    drafts until slice a merges.
  • One sequence per PR: prep once (format, lint, markdown cleanup, tests, local gates), open ready, one
    whole AI review in CI, findings lane fixes accepted findings, each fix push gets deterministic
    checks plus changed-files review, verifier verdict on the final head, merge queue. CI fix-docs
    off (D100, Q158). Fixed floor: a model step on synchronize reviews only changed files.
  • Setting review_venue (auto/local/ci/both, default auto): one venue per PR;
    blocking-only after the first review; fix rounds capped at 3; open security, auth or data findings
    escalate (D75, Q500). Settings: review nit handling follow-up-issue; findings-lane turn cap
    judgment until measured.
  • Findings lane on workflow_run of the review lanes, turn cap and escalation; every finding vetted
    with context; a harmless nit becomes a follow-up issue blocked by the PR (D75, Q512). It reconciles
    with the existing pr-feedback-dispatch.yml lane rather than adding one.
  • PR template ## Merge danger (Door, Blast radius; door pre-filled from HIGH_FLOOR; Risk folded
    in), written by a separate evaluating agent; optional in the org template first (D88, Q519;
    Matt's). Deny list stays with a reason per entry; risk is a reading order, never a gate (D72,
    Q78).
  • Shipping order: a pre_ready: step list with enabled flags in the source-control convention,
    read at the base branch, reported step by step on ready; writers before readers, verification last
    (D73, D77, Q504, Q507; Lauren's configurable, auditable shipping order).
  • Run-once statuses: GITHUB_TOKEN statuses that skip nothing; patch-id promise deleted;
    statuses: write on the work-lane report job stands (D73, D92, Q118, Q120).
  • Routines and lanes open ready PRs and never merge; only the merge lane merges; overridable by
    config or a routine's prompt (D57, D75, Q91).
  • Operator review thread = instruction to implement (interview first if intent is unclear); a wait
    or hold thread is a hold; neither is merge approval (D77, Q503, Q104).
  • /source-control:resolve-conflicts removed; the lane resolves conflicts after reading both sides'
    intent (a step in /source-control:pull-request's base-merge step), escalating only when both
    intents cannot hold; no message into a live session (D109, Q541, Q568). The base-merge step lands
    before the removal; pr-unblock tests update in the same slice.
  • PR body: prose plus at most one code-shape view (setting PR body code view auto); a fix or new
    behavior states its check result before and after (fixed floor; combined: Matt for fixes,
    Lauren for the rest), other changes give 1-3 run-path bullets; glossary terms (D109, Q523, Q536,
    Q574).
  • A revert ships as a new patch version (Q90).

Key interfaces

From the design's contracts, "Settings": "review_venue: auto (auto/local/ci/both),
repo. pr_open_state: ready, repo. pre_ready: step list with enabled flags in the
source-control convention, read at the base branch." "Review: nit handling follow-up-issue;
fix-round cap 3; blocking-only after first review; findings-lane turn cap judgment until
measured." "Other": "Marker comment TODO(#n); PR template section ## Merge danger (Door, Blast
radius)."

Variation verdicts: "Review venue: contain now; source-control review_venue setting; abstract-now
not chosen by owner (Q500)."

Conventions followed: ADR 0049, the source-control and pr-pipeline conventions.

Slices, filed when this phase starts: pr-states, review-venue-and-findings-lane,
pre-ready-and-statuses, merge-danger, and the base-merge-then-remove-resolve-conflicts slice.

Done when

  • The resolve-conflicts skill directory is gone and
    rg -n 'source-control:resolve-conflicts' plugins docs .github --glob '!**/CHANGELOG.md' --glob '!.changes/**'
    finds nothing.
  • rg -c '^## Open a pull request as a draft' AGENTS.md returns 0 (1 on main) and
    node --test '.github/scripts/pr-unblock/*.test.mjs' exits 0.
  • Every slice sub-issue is closed by a merged PR, or closed by the owner as completed or not planned (amended 2026-11-06 by hub Q12 (a): a child the owner closed as deferred counts as handled for its parent).

Out of scope

  • Merge setups and the verifier (Merge authority thread).
  • The org PR template in melodic-software/.github (another repository: owner stop).

Related

Activity

  1. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 16, 2026
  2. github-actions commented on Oct 16, 2026

    @github-actions
    Contributor

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

    Size: Large
    Complexity: High
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    Understood: this is the PR-pipeline thread for source-control. It covers PR states, the review_venue and pr_open_state settings, the findings lane, run-once statuses, the pre_ready: step list, and removing /source-control:resolve-conflicts. The decisions are recorded in the body, so I found no open intent question.

    The work is too big for one change and is meant to be split into the five slices it names. The body lists #7571 and several Phase 2 issues as dependencies. None of them appear in the newest-200 open-issues list I was given, so I couldn't confirm they are open and left Blocked by as none. Please set the real blocked-by edges when the slices are filed. I found no likely duplicates.

    Automated triage, applied by the lanes App.

  3. changed the issue type fromtoon Oct 16, 2026
  4. changed the issue type fromtoon Oct 16, 2026
  5. 36 remaining items

  6. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Status.
    Agent choice, not an owner answer.

    Spec recorded as three lane-sized children; their bodies carry the criteria, each checked against main and against admission's own rules before filing:

    Already on main: pr_open_state: ready (#7661, #8655), the pre_ready list read at the base (#7688), auto review-venue detection, diff-only re-review, the findings lane as address-feedback, review rounds 3 (#7647), and the AGENTS.md draft heading's removal.

    Not in the children:

    • Q512 (a nit becomes a follow-up issue blocked by the PR) conflicts with the live rule at plugins/source-control/reference/review-discipline.md:259-260 ("no item for a nit or a speculative concern") and the current no-new-issues direction. It is held for the owner; the live rule governs until then.
    • Turning CI fix-docs off (D100, Q158) is session-builder work for Automation Lanes: the dispatch is in a workflow and its dispatcher script, and the config schema floors fix-docs-per-run at 1.
    • ## Merge danger (D88, Q519) belongs in the org PR template, which this issue lists as out of scope.

    This issue closes when its sub-issues do, #7531 included.

  7. removed
    needs-specNeeds a Brief or plan before anyone can build it.
    on Nov 4, 2026
  8. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Status. Owner answer on Q512, recorded here so no session re-asks it.

    Question, as asked: Interview Q512, "a nit that breaks nothing becomes a follow-up issue blocked by the PR, agent-ready, picked up once the PR merges, never blocking it", against the live rule plugins/source-control/reference/review-discipline.md:259-260 ("no item for a nit or a speculative concern"). Options: (a) defer to After zero (recommended); (b) adopt now, raising the open count; (c) retire Q512 and keep the live rule.

    Owner, verbatim, 2026-11-04 ~14:3xZ: "Go w/ recommended".

    So: (a). No nit-rule child of this issue is filed now; the live rule governs until After zero, when Q512 returns with the deferred hardening work.

  9. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 5, 2026
  10. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Status (poteto, 2026-11-06): only Q512 remains, so this moves to After zero.

    Done-when, checked at origin/main:

    1. Met: plugins/source-control/skills/ holds babysit-loop, babysit-prs, commit, pull-request, setup and worktree. resolve-conflicts was removed by refactor(source-control)!: remove resolve-conflicts in favour of the pull-request conflict mode #13256.
    2. Met: git grep -c '^## Open a pull request as a draft' origin/main -- AGENTS.md finds 0. AGENTS.md:6 sets pr_open_state: ready.
    3. Met in substance: all 18 sub-issues are closed. 11 closed by merged PRs (fix(pr-pipeline): work-resolve-issue admits an issue that carries a held class beside an allowed one #7491, work-resolve-issue: run required checks in the runner, not on the model's word #7497, feat(source-control): ship the pr_open_state default as ready #8655, fix(source-control): apply a config change on main to pr-merge's policy read for PRs opened before it #8834, fix(source-control): read pr-merge's plugin declarations and Dependabot policy at main's head too #8858, fix(source-control): stop and dequeue when main's agent identity differs or its merge config fails to parse #8873, fix(source-control): stop holding a PR for an earlier head's verify fail once the current head passes #8883, feat(source-control): exempt test-only changes under floored script paths from pr-merge's path floor #8884, fix(source-control): never update the branch of a standards-sync pull request #8888, feat(source-control): add the review_venue setting and blocking-only re-review #13136, feat(source-control): recover conflict intent in the pull-request base-merge step and add a CI conflict mode #13137), refactor(source-control)!: remove resolve-conflicts in favour of the pull-request conflict mode #13138 after refactor(source-control)!: remove resolve-conflicts in favour of the pull-request conflict mode #13256, and the owner closed six (pr-pipeline: address-feedback composite activity and its leaves #7032, pr-pipeline: ticket-to-merge lane decisions (pr-unblock, assess-risk) and SDLC gaps #6989, pr-pipeline: post-V1 audit and retro of the unattended merge flow #7531, feat(source-control): start pr-merge when a gated input finishes instead of waiting for the schedule #8823 as completed; pr-pipeline: harden issue-lane admission after the ratification marker #7612, chore(source-control): measure the bare CLAUDE_PLUGIN_ROOT floor against its revisit condition #8835 as not planned).

    The five named slices are covered or moved out (see the 2026-11-04 status comment): pr-states (#8655, docs/conventions/source-control.yaml:26), pre-ready (:38), venue and findings lane (#13136, :28), base-merge then removal (#13137, #13138), merge-danger (org template, out of scope).

    Left: Q512 (a nit becomes a follow-up issue). The owner deferred it to After zero (issuecomment-6633241114, "Go w/ recommended"), and the live rule at plugins/source-control/reference/review-discipline.md:260 governs until then. This issue is Q512's only carrier, so it moves to the After zero milestone rather than closing.

  11. added this to the After zero milestone on Nov 6, 2026
  12. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded.
    Owner answer, verbatim, relayed by the GitHub Support hub session (2026-11-06T19:27Z, after seeing the options): "Jesus, just go with recommended. Be smart." That picks Q12 (a): a child the owner closed as deferred (#7612, #8835, not planned at his 11-05 direction) counts as handled for its parent. The done-when is amended to match.

    Done-when, checked at origin/main today:

    1. No plugins/source-control/skills/resolve-conflicts directory, and git grep 'source-control:resolve-conflicts' origin/main -- plugins docs .github ':!**/CHANGELOG.md' ':!.changes/**' finds nothing.
    2. git show origin/main:AGENTS.md | grep -c '^## Open a pull request as a draft' returns 0.
    3. All 18 sub-issues are closed (poteto's status, issuecomment-6689182209).

    Where the open scope now lives:

    Closing as completed.

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: mediumReal value, no hard deadline; normal backlog flow.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.

    Fields

    Work status

    confirmed

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions