Repository navigation
Description
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
- config-cascade: settings resolution and convention home #7571 Settings resolution and convention home (gates every slice except a and c)
- Pending, set on the slices when filed: slice a (pr-states) is blocked by every Phase 2 slice except
intent-r4 (pr-pipeline: admit marked epic slices in the resolve-issue lane #7596, testing: fix the two tests the can't-fail scan flags #7597, work-items/work: guard the pull-request create reference #7598, pr-pipeline: promote admitted items to agent-ready when their last blocker closes #7599, verification/confirm: intent-lookup ladder starting from the Brief #7602, implementation: pass the PLAN.md pointer at each handoff #7603, source-control/pull-request: carry the Brief's acceptance criteria into the PR body #7604, work-items/decompose: carry the Brief's goal and constraints into each item #7605, work-items/decompose: self-contained redacted item bodies #7607); slice
c (pre-ready-and-statuses) by slice a. Slices a and c run before the Settings thread as the
verifier spine.
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; settingpr_open_statedefaultready; 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. CIfix-docs
off (D100, Q158). Fixed floor: a model step on synchronize reviews only changed files. - Setting
review_venue(auto/local/ci/both, defaultauto): 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 handlingfollow-up-issue; findings-lane turn cap
judgment until measured. - Findings lane on
workflow_runof 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 existingpr-feedback-dispatch.ymllane rather than adding one. - PR template
## Merge danger(Door, Blast radius; door pre-filled fromHIGH_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 withenabledflags 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_TOKENstatuses that skip nothing; patch-id promise deleted;
statuses: writeon 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-conflictsremoved; 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.mdreturns 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
- pr-pipeline: address-feedback composite activity and its leaves #7032 address-feedback composite activity (sub-issue of this thread); the Phase 2 friction log target.
- pr-pipeline: ticket-to-merge lane decisions (pr-unblock, assess-risk) and SDLC gaps #6989 ticket-to-merge lane decisions (sub-issue of this thread).
- pr-pipeline: post-V1 audit and retro of the unattended merge flow #7531 post-V1 audit and retro of the unattended merge flow (sub-issue of this thread).
- fix(pr-pipeline): work-resolve-issue admits an issue that carries a held class beside an allowed one #7491 work-resolve-issue admits a held class beside an allowed one (sub-issue of this thread).
- work-resolve-issue: run required checks in the runner, not on the model's word #7497 work-resolve-issue runs required checks in the runner (sub-issue of this thread); hardens the lane pr-pipeline: admit marked epic slices in the resolve-issue lane #7596 widens, no shared file.
- Collides with pr-pipeline: admit marked epic slices in the resolve-issue lane #7596: fix(pr-pipeline): work-resolve-issue admits an issue that carries a held class beside an allowed one #7491 and pr-pipeline: admit marked epic slices in the resolve-issue lane #7596 both edit the resolve-issue lane's class filter; pr-pipeline: admit marked epic slices in the resolve-issue lane #7596 is blocked by fix(pr-pipeline): work-resolve-issue admits an issue that carries a held class beside an allowed one #7491 so the allowlist fix lands first and the marker path is written against it.
Metadata
Metadata
Assignees
Labels
Type
Fields
Work status
Activity
github-actions commentedon Oct 16, 2026
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_venueandpr_open_statesettings, the findings lane, run-once statuses, thepre_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.
36 remaining items
kyle-sexton commentedon Nov 4, 2026
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:
review_venuesetting (Q500, Q605) and blocking-only CI re-review after the first whole review (Q500)./source-control:pull-request's base-merge step, plus a CI conflict mode (Q541, Q568)./source-control:resolve-conflictsand every pointer at it (Q541); blocked by feat(source-control): recover conflict intent in the pull-request base-merge step and add a CI conflict mode #13137.Already on main:
pr_open_state: ready(#7661, #8655), thepre_readylist read at the base (#7688), auto review-venue detection, diff-only re-review, the findings lane asaddress-feedback, review rounds 3 (#7647), and the AGENTS.md draft heading's removal.Not in the children:
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.fix-docsoff (D100, Q158) is session-builder work for Automation Lanes: the dispatch is in a workflow and its dispatcher script, and the config schema floorsfix-docs-per-runat 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.
kyle-sexton commentedon Nov 4, 2026
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.
kyle-sexton commentedon Nov 6, 2026
Status (poteto, 2026-11-06): only Q512 remains, so this moves to After zero.
Done-when, checked at origin/main:
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.git grep -c '^## Open a pull request as a draft' origin/main -- AGENTS.mdfinds 0. AGENTS.md:6 setspr_open_state: ready.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:260governs until then. This issue is Q512's only carrier, so it moves to the After zero milestone rather than closing.kyle-sexton commentedon Nov 6, 2026
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:
plugins/source-control/skills/resolve-conflictsdirectory, andgit grep 'source-control:resolve-conflicts' origin/main -- plugins docs .github ':!**/CHANGELOG.md' ':!.changes/**'finds nothing.git show origin/main:AGENTS.md | grep -c '^## Open a pull request as a draft'returns 0.Where the open scope now lives:
plugins/source-control/reference/review-discipline.md:260governs until then.Closing as completed.