Repository navigation
feat(rulesets): pilot a merge queue on playtester - #102
Conversation
|
@codex review |
Dependency Review✅ No vulnerabilities or license issues found.Scanned FilesNone |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Add a merge_queue inventory to config/repositories.json and a repository-owned "08 - Merge queue" ruleset template. GitHub accepts the merge_queue rule only in repository rulesets, so both policy scopes install it on each listed repository, like the CodeQL gate. The template squash-merges with ALLGREEN grouping, builds up to 5 entries, merges groups of 1 to 5 and gives required checks 60 minutes to report. A queued repository's required CI no longer requires an up-to-date branch, because the queue tests each merged result. The publisher installs the queue before relaxing that rule. On removal it restores the strict policy first, then deletes only an unmodified repository-owned queue. It fails before any write if a listed active repository is private on Team, and skips an inactive one as it does security gates. Validation keeps queued repositories in required CI and out of the Dependency review gate. It also bounds the queue parameters to GitHub's API ranges and the organization's merge method. The audit expects the exact repository-owned queue and non-strict required CI on queued repositories, and reports a queue retained anywhere else. playtester is the pilot. Apply only after atrinik/playtester#66 merges, so both required checks report on merge_group. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Codex Review: Didn't find any major issues. 🚀 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
2198a42 to
12474e4
Compare
Review round 1
🤖 Generated with Claude Code |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 12474e4414
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The retirement path matched the live queue once and then deleted it, so an owner edit made between that read and the DELETE would be removed. Like security-gate retirement, it now checks the repository's identity and archive state, re-reads the rule and repeats the ownership and payload match immediately before deleting. A changed rule or repository is retained with a SKIP, and a failed final read stops the publisher. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review round 2
The plan diff in the description is unchanged: this fix touches only the retirement path, which has nothing to retire today. 🤖 Generated with Claude Code |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: beb2fcecab
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The required-CI payload dropped the up-to-date requirement for every repository named in merge_queue. The queue publisher skips an inactive entry, so such a repository would lose strict CI without gaining a queue, and the gap would become live if it were later reactivated. Required CI now relaxes only for listed repositories that are active in this run, which are exactly the ones the queue publisher installs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review round 3
The plan diff in the description is unchanged, because playtester is active: the same two payloads differ from 🤖 Generated with Claude Code |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d5e1d388b8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
When applying, required CI dropped the up-to-date requirement for every active queued repository, even if the queue had been deleted, disabled or scoped away after the queue publisher ran. Both scopes now re-read the queue just before publishing required CI. They relax it only when that read shows the exact repository-owned queue, and otherwise keep it strict with a SKIP. A plan still reports the planned installation. The pilot queue also waited 5 minutes for a minimum group size of 1, which the first queued pull request already meets, so the wait did nothing. It is now 0, and validation allows a wait only with a minimum above one. A new schema test covers the inventory, queue template, required-CI template and Dependency review constraints. The CONTRIBUTING paragraph is moved back after the Classic CodeQL example it split. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review round 4
All 28 🤖 Generated with Claude Code |
|
@codex review |
|
Codex Review: Didn't find any major issues. What shall we delve into next? Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
@codex security review |
🛡️ Codex Security ReviewSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
|
🎉 This PR is included in version 2.25.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Summary
This pilots GitHub's merge queue on
playtesterand addsmerge_queuesupport to the desired state, publisher, validation and audit. The owner approved the pilot on 2026-10-18; other repositories follow later.merge_queuelist inconfig/repositories.jsonholds onlyplaytester. A newconfig/rulesets/merge-queue.jsontemplate defines08 - Merge queue:SQUASHmerges andALLGREENgrouping;merge_queueonly in repository rulesets; the org rulesets API rejects it. So08 - Merge queueis repository-owned in both policy scopes, like06 - CodeQL security. The publisher only writes on drift (KEEP when converged) and refuses to overwrite a same-name rule with foreign ownership. A queued repository's03 - Required CIrule getsstrict_required_status_checks_policy: false, because the queue tests each merged result. Every other repository stays strict. Ordering:SKIP;SKIP ... retained;required_ci, and must never be a Dependency review gate, which has no merge-group trigger. Queue parameters must stay within GitHub's API ranges and use the organization's only allowed merge method. A wait is allowed only with a minimum group size above 1. The03 - Required CItemplate is pinned to strict.merge_queuerules, and non-strict required CI. A queue retained on any other repository is reported for manual review.Owner steps (in order)
Playtester validation,Conventional PR title) report onmerge_group. Without it, queued merges stall until the 60-minute timeout.bin/publishin plan mode frommainand confirm the diff below. Then runbin/publish --apply. That step is the owner's; nothing was applied from this branch.Plan diff (
bin/publish, plan mode only, never--apply)Organization
atrinik, planteam, policy scopeorganization. Run on head0c2dc23: the branch plan has 50 operations and themainbaseline has 49. I compared every payload of the two runs. Exactly two differ:The new
08 - Merge queuepayload:{ "name": "08 - Merge queue", "target": "branch", "enforcement": "active", "bypass_actors": [{"actor_id": 1, "actor_type": "OrganizationAdmin", "bypass_mode": "pull_request"}], "conditions": {"ref_name": {"include": ["~DEFAULT_BRANCH"], "exclude": []}}, "rules": [{"type": "merge_queue", "parameters": { "check_response_timeout_minutes": 60, "grouping_strategy": "ALLGREEN", "max_entries_to_build": 5, "max_entries_to_merge": 5, "merge_method": "SQUASH", "min_entries_to_merge": 1, "min_entries_to_merge_wait_minutes": 0 }}] }Live
03 - Required CI - playtester(id 20669522) is still strict today, and playtester is public, so the Team limitation does not apply. The repository has no repository-level rulesets yet.Unrelated pending changes that the same apply would also perform. These operations appear identically in the
mainbaseline. They come from already-merged changes that have not been applied yet:PLAN POST /orgs/atrinik/rulesets:03 - Required CI - pathfinder(feat(repositories): require pathfinder CI #98);PLAN DELETE /orgs/atrinik/rulesets/20593696and20593698:03 - Required CI - editorand- renderer, left over from the transfer (chore: drop editor and renderer after transfer to Seraphina Studios #99).Verification
bin/validate: valid. Newtests/validate-merge-queue.shchecks that validation rejects:tests/publish-merge-queue.shcovers:alwaysbypass;tests/audit.shadds a playtester fixture with nine assertions over six queue scenarios: pass, missing queue, parameter drift, organization ownership, strict drift, and a queue retained on observatory.tests/*.shpass on0c2dc23. ShellCheck is clean onbin/*andtests/*.sh.git diff --checkis clean.Related work
Checklist
🤖 Generated with Claude Code