Skip to content

merge queue: checking #19155 on release/v3.8.53 (627e6e7), stacked on #19099, #19096 and #19156 - #19158

Closed
mergify[bot] wants to merge 13 commits into
release/v3.8.53from
mergify/merge-queue/29cea6e9c0
Closed

mergify[bot] wants to merge 13 commits into
release/v3.8.53from
mergify/merge-queue/29cea6e9c0

Conversation

@mergify

@mergify mergify Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

Note

This is a merge queue draft opened by Mergify. Nobody needs to act on it.
Mergify opened it for batch binding-marron-2xgtkn of the release queue, to test #19155 before it merges into release/v3.8.53. Pushing to this branch or closing this pull request removes #19155 from the queue.

What this draft tests

Mergify checks that #19155 still passes CI once combined with everything queued ahead of it. CI runs on this draft's code, built in this order:

  1. release/v3.8.53 at 627e6e7
  2. the 3 pull requests queued ahead of this batch, listed below, which bring the tip to 8bec876
  3. #19155, the pull request of this batch

The check is speculative: it assumes the pull requests ahead will merge, so it starts without waiting for them.

⏳ Where it stands: being checked

CI is running on this draft.

Waiting for

  • #check-success>=1
  • check-success=Gate / CI
  • check-success=Gate / Quality
  • check-success=Merge integrity (changelog + generated skills)

Follow the release queue in the dashboard

What happens next

  • Once the checks pass, every merge condition is met and the pull requests ahead have merged, Mergify merges #19155 into release/v3.8.53 and closes this draft.
  • If a check fails, Mergify removes #19155 from the queue and closes this draft.
  • If the checks have not finished after 4 hours (checks_timeout), Mergify removes #19155 from the queue and closes this draft.
  • If a pull request ahead fails or leaves the queue without merging, this batch is requeued and checked again on a new draft: these checks assumed it would merge.

Tip

A red check is not necessarily caused by this batch. These checks run on a tip that also carries the commits of the 3 pull requests ahead, so a failure here can come from them as much as from #19155. See only this batch's changes.

Queued ahead of this batch

These pull requests entered the queue before this batch and are not part of it.

Metadata for CI tooling, read by mergify ci
---
all_scopes: false
checking_base_sha: 8bec8767e1de18da5c653446f39a0bb2c2b670ed
previous_check_retries: []
previous_failed_batches: []
pull_requests:
  - number: 19155
    scopes: []
scopes: []
...
Required conditions of queue rule release for merge
Required conditions to stay in the queue

serenity-X and others added 13 commits November 5, 2026 00:49
Provider dispatch let fetch follow redirects automatically. The SSRF
string guard and the connect-time DNS-rebinding guard saw only the first
URL, so a provider host (or a base URL an actor controls) could answer
with a 3xx to loopback or cloud metadata. On 307/308 the POST body and
the provider API key went to that target too.

dispatchGuarded now dispatches with redirect "manual" and follows up to
5 hops itself. Each Location is resolved against the current URL and
passes the same string guard and connect-time guard as the first
request. Credential headers are dropped when the origin changes. Method
rules follow the Fetch standard. Callers that pin a redirect mode
(strict model validation uses "error") keep it. The wreq TLS transport
now honours a caller redirect mode instead of always following.
assertDispatchUrlAllowed returned early for local and self-hosted
providers, before any check. The guard policy says cloud metadata stays
blocked in every mode, and the webhook guard does block it. A local
provider with a base URL on the link-local metadata address therefore
sent its POST and stored key there.

Exempt providers now still run the non-metadata check. Loopback and LAN
base URLs stay allowed for them.
Dedup shares one upstream call and its response object between every
request landing on the same hash, so the hash must answer not only "who
is asking" but "which connection was selected to answer". It carried the
API key id only: two identical non-streaming requests from the same key,
pinned to different accounts, joined the first request's in-flight call,
so the second pin was silently ignored and its response header still
named a connection that never served it.

Add the selected connection id to the hash namespace, alongside the API
key id. Identical requests that select the same connection still join;
requests pinned to different connections each reach their own account.
Rotation inside the pipeline remains excluded from dedup through the
existing first-attempt-only allowDedup gate.
The API reference documents x-omniroute-connection as a strict pin: the
pinned connection is used exclusively and a failure records its cooldown
without rotating to a sibling. The outer retry loop honours that, but the
in-pipeline account rotation (Codex 429, Antigravity 422) re-selected any
sibling account, because the forced connection id never reached the
response-leg policy builders.

chatCore now passes forcedConnectionId to both builders and
allowAccountRotation is false when a pin is present. Unpinned requests
still rotate.
GitHub fills started_at while a job still waits in the queue, so an
amd64 job stuck for 13 h read as 1,596 spent minutes.
At 40 ms a loaded runner misses the budget before the job starts and the
limiter correctly times it out, which dequeued an unrelated PR.
@mergify mergify Bot closed this Nov 5, 2026
@mergify
mergify Bot deleted the mergify/merge-queue/29cea6e9c0 branch November 5, 2026 13:46
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