Repository navigation
build(runtime): bump openclaw to 762a2fe60cc - #3963
Conversation
Pins embedded OpenClaw to upstream main at 762a2fe60cc (102 commits past a3b12ef66cb), which includes ff7c37bed64 (openclaw/openclaw#186461): a write-scoped run's native approval wait no longer fails with missing scope operator.approvals (finding 2774). Package 2026.10.8, agent schema 38 and shared state schema 35 are unchanged; all six runtime patches apply unchanged.
…e reviewer The packaged Gateway and Codex plugin run against a fixture Codex peer that asks to run one escalated command during a turn started by the write-scoped Gateway CLI caller. A real approval client allows it once; the peer must get accept. On the previous pin the wait failed with missing scope operator.approvals and the peer got decline (finding 2774).
|
🦞👀 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 changes before merge. What this changesUpdates the bundled OpenClaw source to restore approval verdicts for write-scoped Codex runs and adds a packaged Gateway regression case. Example: A write-scoped Codex run requests approval for /bin/bash -c 'touch /etc/oce-approval-probe', and the reviewer selects Allow Once.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Needs changes before merge - 1 item remains Keep open: this maintainer-authored PR fixes a concrete approval failure still present on main; review found one small test-fixture defect and no production correctness defect. Priority: P1 Before merge
Findings
Tests
Agent review detailsHow this fits togetherOCE packages OpenClaw into its runtime image; the Gateway host bridge connects native Harness approval requests to authorized reviewers and returns verdicts to the originating live run. flowchart LR
A[Write-scoped run] --> B[Host approval bridge]
B --> C[Gateway approval owner]
D[Authorized reviewer] --> C
C --> E[Ownership and live authority checks]
E --> F[Codex peer verdict]
Technical reviewBest possible solution: Use the pinned upstream repair through the existing host approval bridge and retain the packaged Gateway regression. Do we have a high-confidence way to reproduce the issue? The old pin's request-only scope exception explains the failure, and the PR reports the matching decline on the pre-fix image and accept after the update; this review ran no target code. Is this the best way to solve the issue? Updating the dependency fixes the shared host bridge rather than adding an OCE workaround, and the integration case exercises the real packaged approval path. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against e42edb966655. Provenance checked
TestingProof path: shipped entry point. 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 28, 2026, 12:39 PM ET / 16:39 UTC. |
Problem
On a dedicated Codex Agent, a model turn started by an ordinary CLI or channel caller cannot get approval for an escalated command. The run's operator authority has
operator.writebut notoperator.approvals. The Codex approval bridge creates the plugin approval, and the reviewer sees it. Then the bridge'splugin.approval.waitDecisioncall fails with "missing scope: operator.approvals". Codex then getsdecline, whatever the reviewer chooses: when no verdict has arrived yet, the Gateway closes the approval as denied (approval-scope-closed) about 5 ms later. The model then tells the user that they rejected the command. Fixed upstream by openclaw/openclaw#186461, merged asff7c37bed64.Change
deploy/runtime/openclaw-source.jsonselects762a2fe60cc37cf6b8c9d05e61c329866e0d3f6f, upstream main 102 commits aftera3b12ef66cb. It includes #186461. The source archive SHA-256 is296288aa…e5f6(two downloads matched; the archive's file list equals the commit's tree) and the build timestamp is the commit time,2026-10-28T10:45:30Z.d1c8d42588a(refactor: rename Claws to Templates throughout OpenClaw openclaw#186457) moves the shared state schema from 35 to 36. OCE's startup migration constant and the dedicated Codex workspace-node program must move with it, with a breaking-changes entry for existing OpenShell Sandboxes (as for the agent schema in build(runtime): bump openclaw to b0961419e46 #3914).fef5e6bfc48(fix: remove personal and corporate security presets openclaw#186381) removes the unreleasedsecurity.presetsetting. The Gateway then refuses a configuration that still sets it. OCE's console, docs and tests still describepersonalandcorporate, so the follow-up must refuse the setting at save and remove that text.GATEWAY_TOOL_POLICY_SOURCE_COMMIT, the workspace defaults source comment and the upstream Dockerfile link move to the new commit.runtime-image-gateway-workspace.test.mjsgets a case for this: the packaged Gateway and Codex plugin, with a dedicated Agent's app-server policy (OPENSHELL_CODEX_APP_SERVER_POLICY,approvalPolicy: on-request), run against a fixture Codex peer. The peer asks to run/bin/bash -c 'touch /etc/oce-approval-probe'during a turn started by the Gateway CLI caller, which is write-scoped. A real approval client connected to the Gateway allows it once. The test checks that the reviewer receives the Codex request with that command, that the approval resolves asallow-once, that the peer getsaccept, and that the run endsok. Only the external Codex peer is a fixture. It runs in the container as onenode -eprogram like the other Codex peer fixtures, so it does not import shared files. The test file uses the shared runtime-image helpers.2026.10.8. The agent and shared state schemas stay at 38 and 35, so there is no OpenShell Sandbox adoption change and no breaking-changes entry.WORKSPACE_DEFAULTS_IDstays.probeGatewayReachability. The locked Codex and Matrix crypto versions did not change.Verification
main(a3b12ef66cb) with only the new test added, it fails: the reviewer receives the request and allows it once (plugin.approval.resolved,allow-once, by the approval client), but the Codex peer gets{"decision":"decline"}. The other five files of the lane pass.02b5149b0a(the later head changes only a test comment), with no cached results: static, baseline-2, the browser, Postgres and Keycloak lanes, images-runtime-startup 1/2/3, images-packaging, runtime-image-fixture, the k3d lanes, logging-collector and First Agent Smoke. checks-baseline-1 failed once inlist-summaries.test.mjs("Preset and revision lists return summaries"), an OCE-only in-memory test that does not use the runtime image; it then passed 10 of 10 runs at 2 CPUs on the same head. GitHub CI is the authority.762a2fe60cc, unchanged.Risks
plugin.approval.waitDecisionas well asplugin.approval.request. It sees only its own run's approval: another run's wait still gets "approval expired or not found". The bridge still never gets reviewer scope orplugin.approval.resolve, and revoking the run's authority during the wait ends the wait with no decision. Runs withoperator.approvalsor admin scope are not affected.bash -ccommands (with;&|<>) are still refused before review by the approval bridge's command binding check, with no reason shown. That is a separate upstream issue.security.presetand defaults.security-presets.tsandmerge-missing.tsdid not change between the pins. The preset fills the same keys, and OCE's admission fills still apply. No change to exec, sandbox orapply_patchdefaults.tools.gatewayPolicydid not change between the pins, and no core tool or action was added.ff2d7187a57). No setting OCE writes changed meaning.OPENCLAW_NO_AUTO_UPDATE=1, which stops the daily check, so it sends neither. The Docker Compute Driver's Gateway wrapper does not set it: a Docker Gateway with internet access already sent the daily update check, and can now also send this count.telemetry.enabled: falseorDO_NOT_TRACK=1suppresses the count.>=24.16.0); the runtime image's Node is unchanged.