Skip to content

pass: Follow the forge repositories' bot pull requests - #1075

Merged
cgwalters-bot merged 1 commit into
cgwalters-forge:mainfrom
cgwalters-bot:pass-follow-forks
Oct 31, 2026
Merged

cgwalters-bot merged 1 commit into
cgwalters-forge:mainfrom
cgwalters-bot:pass-follow-forks

Conversation

@cgwalters-bot

Copy link
Copy Markdown
Collaborator

Bot pull requests on branches inside cgwalters-forge repositories (agentic-job#144, agentic-job#2107) log not a pull request from the bot's fork, left to its author, and cgwalters-forge/bootc and cgwalters-forge/composefs-rs aren't followed, so their staged work sits idle.

This sets pr.headOwners to ["cgwalters-bot", "cgwalters-forge"] and adds those two forks to follow. It affects only the bot's own pull requests, and per docs/pass.md only the operator's review counts for merge on those heads; the review job's approval still counts only from the bot's fork. fix.toml and config.test.cjs don't change: midstream-fix.toml already admits both forks and bot/**, and the test that a followed repository is in a fix bounds file passes as is.

bootc-dev/bootc and composefs/composefs-rs are deliberately left out. That scope stays in #1050, which this does not change; that pull request will need a rebase on this one.

just test-config: 20 of 20 pass, with agentic-job on PATH so the policy tests ran too.

Known edge: a head shared with an upstream pull request

cgwalters-forge/bootc#55's branch bot/pin-ubi9-podman is also the head of upstream bootc-dev/bootc#2606, so a fix or rebase round there would change the upstream pull request. It is the only open fork pull request sharing a head with an open upstream one. The pass has no per-repository or per-branch exclusion; its one per-pull-request hold is the needs-human label (decide skips a labelled pull request before anything else), so #55 now carries that label. It stays until a person takes it off.

Separately, cgwalters-forge/composefs-rs#30's base is bot/capi-ostree-revdep, the head of upstream composefs/composefs-rs#408. A round on #30 pushes only its own head, and the pass merges only into the default branch, so only a person merging #30 by hand would move the upstream one.

What the first passes do

From a preview of this config (no --apply, 447 requests, an agent-board build slightly behind the pin):

Rounds that will fail at apply

  • agentic-job has no .github/agentic-job/accept-owner-branches, and apply pushes to a head outside the bot's fork only where the head repository's default branch has that file. So the fix rounds for agentic-job#144 and #2107 are expected to fail at apply and stop at needs-human. The same goes for any future in-repository head in tracker, actions or agent-board, which lack the file too; both forks have it. Adding it is the operator's call, because it lets an agent's commits run with that repository's workflow secrets, and this pull request doesn't change it.
  • agentic-job#2107's head per-forge-bounds-sections is outside fix.toml's branch globs as well. poll.yml doesn't pass --fix-bounds, so the pass still starts the round rather than skipping it.
  • [rescue] bootc: pre-merge backup of the composefs core series (#2248) bootc#50, bcvk: nextest: serialize the test_to_base_disk_* tests #51 and bootc: Propagate a refused reboot as an error (prep for bootc#1047) #52 (rescue/* heads on base forge) are outside both the branches and the bases of midstream-fix.toml, so their conflict fixes will be refused.

Generated-by: https://github.com/cgwalters/#llms

Bot pull requests on branches inside cgwalters-forge repositories sit
idle: the pass only treats the bot's own fork as its head, so they log
"not a pull request from the bot's fork" and never get a fix or a merge.
The midstream forks are not followed at all, though their staged work
is what holds much of the board.

Setting headOwners makes those the bot's own, with only the operator's
review counting for merge there, since a branch within a repository
could approve itself. fix bounds need no change: midstream-fix.toml
already covers both forks and their bot/** branches.

Upstream scope stays in cgwalters-forge#1050.

Assisted-by: https://github.com/cgwalters/cgwalters#llms

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: APPROVE: widens the pass to the forge's in-repository bot heads; merges there still need the operator's approval at the head

Reviewed head: 8ebcb73 (merge-base 447ba9a with main). The diff only changes .github/pass.json: it adds cgwalters-forge/bootc and cgwalters-forge/composefs-rs to follow, and adds pr.headOwners: ["cgwalters-bot", "cgwalters-forge"].

Worst case and what limits it. The pass runs agent-board 7c4339d with CGWALTERS_BOT_PAT. With this change, is_harness (agent-board crates/board-forge/src/poll.rs:2100) treats every bot-authored pull request with its head in any cgwalters-forge repository as the bot's own. That covers in-repository branches of tracker, agentic-job, agent-board and actions, not only the two midstream forks. At worst the pass starts fix or rebase rounds on those heads and merges them. Four things bound this:

  • Merge: the review job's approval still counts only through from_fork (poll.rs:1507-1509). A headOwners head merges only on the operator's APPROVED review at the current head, so a branch's own workflows cannot approve it.
  • Author: only pull requests authored by cgwalters-bot qualify (poll.rs:2102). Third-party pull requests in the newly followed forks are still skipped. dependabot[bot] pull requests there also need the operator's review, because job_counts needs from_fork.
  • Push targets: pushes still go through dispatch and apply. Apply pushes outside the bot's fork only where the head repository's default branch has accept-owner-branches. The pass makes no direct branch updates; I found no update-branch call.
  • Midstream forks: fixes there use midstream-fix.toml, which has no [unprotected_files], so .github and AGENTS.md stay refused even though both forks accept pushes.

The pull request's description matches the pinned code (docs/pass.md:725, pass.md:2398). It touches no CODEOWNERS file and no merge policy file.

Follow-ups

  1. important: .github/pass.json:66: headOwners is global, not per repository. Naming cgwalters-forge also takes in bot heads inside tracker, agentic-job, agent-board and actions. None of those has accept-owner-branches, so every fix or rebase round there is a full agent run whose push is certain to be refused. The same goes for agentic-job#2107, whose head per-forge-bounds-sections is outside fix.toml's globs and is not pre-filtered because poll.yml passes no --fix-bounds, and for bootc#50/#51/#52 (rescue/* heads on base forge). By the description's own preview, these rounds hold --max-dispatch 8 slots for several passes and spend budget before stopping at needs-human. Either pass --fix-bounds in .github/workflows/poll.yml so out-of-bounds heads are skipped before dispatch, or label these pull requests needs-human up front as was done for bootc#55.
  2. important: .github/pass.json:15-16, with :66: the only guard against a fork round rewriting a head that an open upstream pull request shares is the manual needs-human label. I confirmed it is on cgwalters-forge/bootc#55. Nothing stops a future staged pull request from sharing a head with a new upstream one, and once that label is off, a fix round there changes the upstream pull request (still bounded by midstream-fix.toml). Add a pass-side check or a documented rule that a promoted branch is never also a fork pull request's head.
  3. nit: .github/agentic-job/config.test.cjs:205-228: no test ties headOwners to its precondition. A test should check that every followed repository whose owner is in headOwners is either in a fix bounds file or listed as having accept-owner-branches (or known not to have it), so the next repository added under cgwalters-forge does not silently start rounds that are certain to fail.

Generated by review for #1075 at 8ebcb73

@cgwalters-bot
cgwalters-bot added this pull request to the merge queue Oct 31, 2026
Merged via the queue into cgwalters-forge:main with commit 34529b8 Oct 31, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants