docs(agent): product-change watch — 2026-07-24 to 2026-08-07 - #12338
Open
mergify-ci-bot wants to merge 1 commit into
Open
docs(agent): product-change watch — 2026-07-24 to 2026-08-07#12338mergify-ci-bot wants to merge 1 commit into
mergify-ci-bot wants to merge 1 commit into
Conversation
Contributor
Merge Protections🔴 2 of 6 protections blocking · waiting on 👀 reviews
🔴 👀 Review RequirementsWaiting for
This rule is failing.
🔴 🔎 ReviewsWaiting for
This rule is failing.
Show 4 satisfied protections🟢 🤖 Continuous Integration
🟢 Enforce conventional commitMake sure that we follow https://www.conventionalcommits.org/en/v1.0.0/
🟢 📕 PR description
🟢 🚦 Auto-queueWhen all merge protections are satisfied, this pull request will be queued automatically. |
jd
marked this pull request as ready for review
August 7, 2026 15:22
There was a problem hiding this comment.
Pull request overview
Updates the Mergify documentation to reflect recent product behavior/configuration changes detected by the change-watch agent (merge queue behavior and labels, queue batch branch editing constraints, and updated default command restrictions).
Changes:
- Documented the
allow_queue_branch_editconstraint and its implications when usingmerge-batch/fast-forward. - Added merge-queue lifecycle guidance for “conflict deferral” and documented
checking_labelalongside existing queue labels. - Added prose explaining the default
commands_restrictionsbehavior for author-triggered commands on fork PRs.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/content/docs/merge-queue/merge-strategies.mdx | Adds guidance for editing batch branches and required merge methods for allow_queue_branch_edit. |
| src/content/docs/merge-queue/lifecycle.mdx | Documents conflict deferral behavior and introduces the new checking_label queue label semantics. |
| src/content/docs/commands/restrictions.mdx | Explains default command restriction logic and provides examples for customizing author permissions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+75
to
+80
| The fork condition matters because `update`, `rebase` and `squash` rewrite the | ||
| pull request's head branch. On a pull request opened from a fork, that branch | ||
| lives outside your repository. On one opened from a branch of your own | ||
| repository, it does not, and GitHub lets someone with read-only access open such | ||
| a pull request. Without the fork condition, they could have Mergify rewrite a | ||
| branch of your repository on their behalf. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What I looked at
Product-change watch over 2026-07-24 → 2026-08-07, comparing what shipped against
what the docs say.
Sources, in the order the mission ranks them:
Schema diff (primary signal):
public/mergify-configuration-schema.json,public/api-schemas.jsonandpublic/cli-schema.jsondiffed from4b21236c(last commit before 2026-07-24) toHEAD. 555 insertions,788 deletions across the three files. I read it for added keys, removed keys,
changed defaults, changed enums and changed descriptions, and diffed the API
schema structurally (paths, methods, component schemas) rather than by text.
Changelog (context only, read-only): the 7 entries in the window.
Engine source for every claim the schemas did not settle: command
restriction defaults, the
from-forkattribute,queue-checking, theallow_queue_branch_editvalidator and its migration, and the wholeconflict-deferral path including its user-facing check-run copy.
The window's shape confirmed the method. Every one of the 7 changelog entries
is already covered by the docs — the Time Breakdown Avg/P95/Max selector and
the Batches Saved chart in
merge-queue/monitoring.mdx, "No runner setuprequired" in
ci-insights/runners.mdx, the Depends On panel anddepends_on_pull_requestsinmerge-protections/builtin.mdx, the flaky-testprevention and detection pages under
test-insights/, and thegithub_actionsdeprecation with its migration guide. All three fixes below came from the
schema diff, and none of the three has a changelog entry.
The API schema gained 8 component schemas and lost none; no path or method was
removed. The CLI schema changed only its version string.
What I changed
3 files, 142 lines added, 0 removed.
src/content/docs/merge-queue/lifecycle.mdx— new "Conflicts with a PullRequest Ahead" section. A pull request that conflicts with one ahead of it is
no longer dequeued on the spot: while the blocker is still queued, it is held,
its check run reports deferred checks, and the status comment names the
blockers. Evidence: the new
action.queue.conflict_deferredevent type andEventQueueConflictDeferredschema inapi-schemas.json, plus the engine'sdeferral gate. The two outcomes (blocker leaves → checks resume; blocker
merges → dequeued as a base-branch conflict) are taken verbatim from the
engine's own check-run sub-bullets, which is also what corrected my first
draft — I had written that the conflict usually resolves itself, which is
backwards.
src/content/docs/merge-queue/lifecycle.mdx— new "Queue Labels" sectiondocumenting
checking_labelalongsidequeued_labelanddequeued_label.checking_labelis new in the window (added toMergeQueuein the configschema, default
null) and had no prose anywhere. Evidence: the schema, andthe engine rule that toggles the label on the internal
queue-checkingattribute, which is true exactly while the pull request is attached to a
batch.
src/content/docs/commands/restrictions.mdx— prose for the "DefaultRestrictions" section, which was a bare generated table. The defaults for
update,rebase,squashandrefreshchanged in the window: the authorclause is now
sender = {{author}} and from-forkrather thansender = {{author}}. Evidence: the fourdefaultblocks inCommandsRestrictionsRulesModel, and the engine's shared default-restrictionhelper. The page now explains why the fork clause is there (those commands
rewrite the head branch, and a same-repository head branch is a branch of your
repository) and shows how to opt back in. I wrote it as product behavior and
rationale only — the engine's justification cites a private security report,
which does not belong in published docs.
src/content/docs/merge-queue/merge-strategies.mdx— new "Editing theBatch Branch" section.
allow_queue_branch_edit: truenow requiresmerge_method: merge-batchormerge_method: fast-forwardand is rejectedotherwise. Evidence: the expanded schema description on both
QueueRuleModeldefinitions, and the engine's validator and its rejection message. Written
dateless per the repo's rule against dated migration notices.
Proofreading pipeline ran (all five subagents, >10 lines changed). The technical
pass reversed one claim of mine and tightened two others; I re-verified both
reversals against the engine before keeping them.
pnpm check,pnpm check:config-examples(120 examples valid) andpnpm check:internal-leaks(143 files, clean) all pass.
What I skipped and why
Everything in the changelog. All 7 entries are already documented. Nothing
to do — this is the reportable result, not an omission.
from-forkas a condition attribute. It renders automatically in thegenerated
<PullRequestAttributesTable />on/configuration/conditions. Ilink to it from the restrictions page rather than duplicating it.
The
workflowfield now accepting a numeric workflow id (github_actionsaction). Renders automatically in the generated
ActionOptionsTableon theaction's page.
The
queue-dequeue-reasonenum restructuring and thex-has-data-type→x-mergify-has-data-type/x-enum-descriptions→x-mergify-enummarker rename. Presentation metadatafor the docs site's own generated tables; this repo already switched to the
namespaced markers in commit
e6f51144. No enum value was added or removed.The
queue_branch_merge_methoddescription reversal (it used to sayfast-forward "only works when
merge_methodis set tomerge"; it now saysthe behavior applies whatever
merge_methodis). No docs prose mentions thisdeprecated key, so nothing was stale; the corrected text renders in the
generated table.
The rename-detection clarifications to
files,added-files,modified-files,removed-files,scopeand the scopes barrier filter.Already documented in
configuration/conditions.mdx,merge-queue/scopes.mdxandmerge-queue/scopes/file-patterns.mdx.batch_sizegaining an explicitdefault: 1. The docs already describebatching as opt-in; no page claimed a different default.
The ~30 configuration keys that render only in generated
OptionsTableswith no prose. Known debt, out of scope. I only wrote prose for the two keys
that changed in this window.
NEEDS A HUMAN
Four command defaults were narrowed with no changelog entry. In
public/mergify-configuration-schema.json, the default restriction forupdate,rebase,squashandrefreshchanged from["sender-permission >= write", "sender = {{author}}"](as anor) toor: [sender-permission >= write, and: [sender = {{author}}, from-fork]].The practical effect: a contributor with read-only access who opened a pull
request from a branch of your own repository can no longer run these four
commands on it. Nothing in
src/content/changelog/announces this. Theengine's rationale is a security fix, so silence may well be deliberate — but
it is a user-visible change to a default, and the decision on whether to
announce it belongs to a human. The changelog is generated outside this
repository and I cannot write to it. I have documented the new behavior on
src/content/docs/commands/restrictions.mdx.The
checking_labeldescription in the configuration schema is imprecise,and now disagrees with the docs page. The schema says the label applies
"from the moment they enter a batch until they leave the queue". The second
half is wrong: the engine toggles the label on the internal
queue-checkingattribute, which is true exactly while the pull request is attached to a
batch. Any return to the waiting list — a conflict deferral, re-batching after
a failure ahead, a queue reset — removes the label while the pull request is
still queued. I wrote the accurate behavior into
src/content/docs/merge-queue/lifecycle.mdx, but/configuration/file-formatrenders the schema's own wording in itsgenerated
MergeQueuetable, so the same site now says two different things.The schema is synced in from outside this repository; the fix has to happen at
the source.
allow_queue_branch_editwas silently turned off on existingconfigurations, with no changelog entry. The option now requires
merge_method: merge-batchormerge_method: fast-forward. Configurationsusing it with
merge,squashorrebaseare not rejected — the enginemigrates them by disabling the option, restoring the default behavior where an
externally edited batch branch dequeues its pull requests and reports a
failure. Anyone relying on it under those three merge methods has had that
behavior change without being told, and there is no entry in
src/content/changelog/. (The option was never doing anything useful there —the edit was already being dropped at merge time — but the dequeue it
suppressed is a visible difference.) I documented the constraint on
src/content/docs/merge-queue/merge-strategies.mdx.Merge-queue conflict deferral shipped with no changelog entry. The API
schema gained
EventQueueConflictDeferred,EventQueueConflictDeferredMetadataand theaction.queue.conflict_deferredevent type, and the engine gained a wholedeferral path: a pull request conflicting with one ahead of it in the queue is
now held rather than dequeued. This is a behavior change to the merge queue's
most user-visible failure mode and it is worth announcing. Nothing in
src/content/changelog/mentions it. I documented the behavior onsrc/content/docs/merge-queue/lifecycle.mdx.from-forkis a new pull request condition attribute with no changelogentry. It was added to the attributes list in the configuration schema. It
renders automatically in the generated attributes table, so there is no docs
gap — but a new condition attribute is normally something users are told
about, and this one is load-bearing for the default command restrictions in
item 1.
Someone should decide whether the docs site documents dashboard UI at all.
This window is unusually clean on that front — every dashboard-facing
changelog entry (Time Breakdown percentiles, Batches Saved, the Depends On
side panel, automatic runner tracking) already has prose. But that prose
describes screens I cannot see, and I have no way to tell whether it still
matches them.
src/content/docs/merge-queue/monitoring.mdxin particularcarries a Statistics page screenshot next to a widget list that has grown
since; if the image predates the Avg/P95/Max selector or the Batches Saved
chart, it now shows a page that no longer exists. I did not touch it and
cannot verify it. Treat this as a shot-list item for whoever can log in.