Repository navigation
Conversation
…broker at save and admission Agent save, provisioning and deploy admission now apply the Codex network proxy rule Kubernetes Compute preparation used for repository bindings (disabled proxy, unknown mode, non-boolean allowLocalBinding, malformed domains), through one shared rule in contracts, so a dedicated deploy no longer stops its predecessors before refusing. Preparation keeps the check as the backstop and for a deny of the broker host, which only the prepared material names. Finding 2350.
…d a breaking-change notice Adds a Kubernetes Compute failure condition naming the refused networkProxy settings, a flow step at deploy admission, and a 2026-10-26 notice. Moves the two oldest 2026-10-24 notices to the earlier page to keep the notices page under the word limit.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. What this changesThis PR rejects incompatible Codex repository-proxy settings during Agent save, provisioning, and deployment admission instead of waiting for preparation. Example: A dedicated Codex Agent has repository bindings and networkProxy.enabled is false.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep this PR open: it addresses a source-confirmed deployment failure with a focused shared check, and no concrete introduced defect was found. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherOCC validates Agent configuration and repository bindings before queueing revisions; Kubernetes Compute repeats the shared proxy check when preparing runtime material. flowchart TB
A[Agent request] --> B[OCC admission]
B -->|Invalid proxy| C[400 refusal]
B -->|Accepted| D[Revision queue]
D --> E[Worker and Compute]
E -->|Preparation backstop| C
E -->|Valid material| F[Codex runtime]
Technical reviewBest possible solution: Use the existing admission owners and one shared parser, retaining preparation checks for broker-host-specific denies. Do we have a high-confidence way to reproduce the issue? Current-main source shows admission lacks this check while exclusive replacement stops predecessors before the preparation check; no failing run was performed during this review. Is this the best way to solve the issue? The shared parser is a focused solution that preserves preparation semantics and the Sandbox repository-path exemption; exact broker-host denies deliberately remain preparation-only. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 5632162a3197. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Likely related people:
LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 26, 2026, 1:41 AM ET / 05:41 UTC. |
The worker drops a whole worker.compute-prepare-failed line when the message is over 256 characters. With the broker host in the text, a Namespace name over 19 characters pushed the deny refusal past that, in the one case only preparation catches. The conformance case now uses a 63-character Namespace host and checks the diagnostic message fits.
…he broker The worker and retry repeat the broker proxy check for a stored provisioning record; no test covered it. The record is admitted while a Sandbox Driver with its own repository path is selected, then the Installation drops it and the worker refuses the record before it creates the Agent; retry answers the setting's 400.
# Conflicts: # docs/guides/deploy/breaking-changes.md # tests/integration/repository-credentials-admission.test.mjs
…er the word limit
Problem
An Agent with repository bindings on a dedicated Codex Harness (or on embedded OpenClaw with the Codex Plugin Driver and plugins) can have a Configuration whose
plugins.entries.codex.config.appServer.networkProxyblocks the repository credential broker:enabled: false, an unknownmode, a non-booleanallowLocalBinding, malformeddomains, or a deny of the broker host. That Agent passed Configuration save, Agent save and deploy admission. Kubernetes Compute refused it only in preparation (codexRepositoryBrokerNetworkPolicy). By then a dedicated deploy had already stopped its predecessors, so the Agent went offline because of a configuration error. Board finding 2350; sibling of #3517 (finding 2348).Change
packages/contracts:codexRepositoryBrokerNetworkProxyparses the setting, andcodexProxiesRepositoryBrokersays which Harness sends broker traffic through Codex. Kubernetes Compute preparation now calls that rule, so there is no second parser, and keeps its refusal as the backstop.admitRepositoryCredentials. It runs when the Agent has repository bindings, its Harness sends broker traffic through Codex, and no Sandbox with its own repository path is selected. The refusal is400 INVALID_REQUEST. It names the dotted setting and what to change, and preparation uses the same text, for example:Configuration setting plugins.entries.codex.config.appServer.networkProxy.enabled is false, so Codex cannot reach the repository credential broker. Set it to true or delete it, or remove the repository bindings.worker.compute-prepare-failedline whose message is over 256 characters, and a long Namespace name made the host long enough to cross it.Verification
d7fe9676e5: all six shapes passed Configuration save, Agent save and admission, and were refused only in preparation.tests/integration/repository-credentials-admission.test.mjs(new tests):tests/helpers/refusal-text.mjs.running, so the worker has nothing to stop it for.tests/conformance/repository-runtime-material.test.mjs: the preparation backstop now asserts the shared text. The broker-host deny case uses the host of a 63-character Namespace (the Kubernetes maximum) and checks the Compute diagnostic message fits the worker's 256-character cap; it fails on the previous head (the old text was over the cap).tests/integration/postgres-agent-provisioning.test.mjs(new test): a provisioning request admitted while a Sandbox Driver with its own repository path is selected, after which the Installation drops that Sandbox Driver. The worker refuses the stored record before it creates the Agent, and retry answers the setting's400. With the stored-record check disabled (if (false && ...)) the worker creates the Agent and the test fails.Risks