Repository navigation
Conversation
… without a retry A provider 4xx is never retried, whatever its body says (finding 1601). A content-filter stop, a rejected certificate and a host name that does not resolve are held at once (1602). Wrapper status servers answer 400 to a request target that is not a path instead of crashing (1605). Docs: the Gateway logs only the 503 status (1603), and the -attempt2 suffix is documented in the reference, contract and OpenAPI (1604).
Contributor
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review blockedAutomated review did not run, so no review verdict was produced. Reason: The input-safety check rejected material in this revision. No detected value, path, or scanner output is reproduced here. Automatic review is on hold, including after source changes. Request a fresh re-review after resolving the failure; maintainers can also release the hold through an intentional scanner-policy update. Next step: If this is a genuine credential, remove and rotate it. If it is an intentional test fixture, a maintainer must review and qualify it. |
freeqaz
had a problem deploying
to
integration-qa-pr
October 16, 2026 22:33 — with
GitHub Actions
Error
freeqaz
temporarily deployed
to
integration-qa-pr
October 16, 2026 22:33 — with
GitHub Actions
Inactive
freeqaz
had a problem deploying
to
integration-qa-pr
October 16, 2026 22:33 — with
GitHub Actions
Error
… messages Internal review: Codex prints a 400 as its bare body, so the 4xx guard never saw one; hold an invalid_request_error body. The shipped Codex is built against musl, whose resolver says "Name does not resolve" and "Name has no usable address", not glibc's text. Fixtures now use the messages the pinned build printed against local fake providers. The reference says any Codex detail may end -attempt2.
freeqaz
had a problem deploying
to
integration-qa-pr
October 16, 2026 22:57 — with
GitHub Actions
Error
freeqaz
had a problem deploying
to
integration-qa-pr
October 16, 2026 22:57 — with
GitHub Actions
Error
freeqaz
had a problem deploying
to
integration-qa-pr
October 16, 2026 22:57 — with
GitHub Actions
Error
…a malformed request Second internal review nits: the certificate fixture now carries the text the pinned Codex printed over WebSocket for a self-signed provider, and the reference says the provider rejected the malformed request again.
freeqaz
had a problem deploying
to
integration-qa-pr
October 16, 2026 23:02 — with
GitHub Actions
Failure
freeqaz
temporarily deployed
to
integration-qa-pr
October 16, 2026 23:02 — with
GitHub Actions
Inactive
freeqaz
temporarily deployed
to
integration-qa-pr
October 16, 2026 23:02 — with
GitHub Actions
Inactive
This was referenced Oct 17, 2026
This was referenced Oct 23, 2026
This branch was previously deployed
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.
Problem
Follow-ups to #2639 (startup model probe retry), found in a bug hunt:
codexTransientFailureretried any provider 4xx whose text held a transient word, such asunexpected status 404 Not Found: overloadedor a 402 with aserver_errorbody. A 400 is worse: Codex prints it as its bare body with no status, so a 400 body sayingoverloadedorserver_errorwas retried too. That cost a second, possibly billed, model call and up to about 31 s before the failure was held asturn-failed-attempt2.stream disconnected before completion: …, so they also got the retry, though they fail the same way again.agent-deployment-diagnostics.mdimplied the Agent Gateway sees the held code. Itswsclient never reads the 503 body and logs onlyUnexpected server response: 503.detail === "rate_limit"missedrate_limit-attempt2.runtime-entrypoints.ts(the native worker readiness server, the held-failure server and the plugin/runtime status server) callednew URL(request.url, base)unguarded. A request target of//threw, which ends the wrapper; the container restarts and runs a new startup model probe. Only peers the NetworkPolicy allows can reach these ports, and the HTTPRoute replaces the path.Change
codexTransientFailurereturns false for any provider 4xx status before the 5xx/marker test, and for aninvalid_request_errorbody (how a 400 reaches the probe).content_filter,certificate, and the musl resolver'sName does not resolveandName has no usable address(the shipped Codex is the musl build). Codex's HTTP client prints a failed connection asConnection failed: error sending requestwithout its cause, so a DNS or TLS failure reported only that way cannot be told from a dropped connection: it keeps its retry, and a code comment says why. musl'sTry again(EAI_AGAIN) also stays retried.runtimeRequestPathnamehelper answers400 {"error":"bad_request"}(no-store) when the target does not parse; all three handlers use it. The held-failure server still checks the bearer token first.detaildescription and the regenerated OpenAPI say any Codexdetailmay end in the single-attempt2suffix. The reference page stays under the word limit (a few words trimmed in the same section).No change to how credentials reach the probe, the retry budget, the cause vocabulary or the schema.
Verification
Internal review: first pass requested changes (400 shape, musl resolver text, suffix scope), applied in the second commit; second pass approved with nits (captured certificate text, doc wording), applied in the third.
.invalidhost, over HTTPS Responses and WebSocket, with and without Codex's own retries. It printed a 400 as the bare body, a 402/404 asunexpected status 404 Not Found: overloaded, url: …, a WebSocket DNS failure asstream disconnected before completion: failed to lookup address information: Name does not resolve, a self-signed certificate over WebSocket as… invalid peer certificate: Other(OtherError(CaUsedAsEndEntity)), and every HTTPS connect failure (DNS, TLS, refused) as the sameConnection failed: error sending request. The fixtures use those shapes.codex-native-startup.test.mjs(404 overloaded, 402server_error, 400 bare body, content filter, certificate, two DNS forms) and 4 cases inopenshell-harness-status.test.mjs(held server, Compute status port, native worker readiness port, and a rawGET //request line over a real socket that leaves the wrapper serving).Connection failed: error sending requestand aTry againDNS lookup still recover on the second attempt.codex-native-startup105/105,openshell-harness-status23/23;kubernetes-compute,plugin-compute,kubernetes-runtime-credentials,runtime-model-probe-settlement,runtime-probe-cpu-counter,workspace-node-supervisorpass.tsc, eslint and prettier on touched files clean;openapi:checkcurrent.Risks
error sending requeststill gets one retry, as before.