Repository navigation
build(runtime): bump openclaw to 97a1b4c0733 - #3860
Conversation
Select upstream main 97a1b4c0733, which keeps unused agent databases closed during standing-intent startup recovery (openclaw/openclaw#185833). - Refresh the six runtime patches against the new source. The Codex read-only-paths test hunk follows upstream's table-driven test; the terminated-namespace recovery follows upstream's canonical-environment recovery API. The Codex dependency pin now moves upstream's 0.164.0 back to 0.163.0-alpha.2, so the shipped Codex is unchanged. - Package the new root runtime modules upstream imports (node-sqlite-capabilities, runtime-process-* and standalone-runtime-profile). - Workspace defaults: the source version is now 2026.10.7; template content is unchanged. - Move the gateway tool policy source commit to the new pin.
The new source migrates agent databases to schema 37 and the shared state database to schema 35; the startup Doctor gate compares against these.
|
🦞👀 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. |
freeqaz
left a comment
There was a problem hiding this comment.
Internal review of b1679694a4 (OpenClaw cee236c9 -> 97a1b4c07336). Verdict: land once the pending image lanes and First Agent Smoke are green on this head. No blockers. One follow-up and three notes below.
Tool policy. I diffed the upstream enforcement between the two pins: src/agents/gateway-tool-policy.ts, tool-policy-shared.ts (aliases unchanged), tools/cron-tool*.ts, gateway/cron-creator-authority-grant.ts, tool-search-catalog.ts and the Codex dynamic-tool bridge.
- The new automations
bindaction (cron.bind, upstream #182561) is narrowed out byactions.automationsinGATEWAY_TOOL_BASELINE.applyGatewayToolPolicyandcreateGatewayToolPolicyAssertionare unchanged apart from the new helper below. The newprepareCronToolArgumentsonly parsesjob, so theactionvalue the assertion checks does not change. - Loopback browser previews (
isGatewayToolAllowedWithoutAction("exec"), upstream #165153) also need thebrowsertool. It is not in the baseline, and the image keeps only thecodexandslackplugins. If an operator does allowbrowser, the preview gets only the same-host reach that unrestrictedexecalready has. - Upstream adds no new or renamed core tool IDs.
codexDynamicToolsExcludeis still read, soGATEWAY_LOCAL_CODEX_DYNAMIC_TOOLSstill applies. The bridge's new exact-definition check only removes tools. GATEWAY_TOOL_POLICY_SOURCE_COMMITmatchesopenclaw-source.json.
Patch rebases. I compared each patch's added lines with its previous version. In codex-read-only-paths, codex-full-access-profile, control-ui-browser-reconnect and required-worker-authority-regression (test only), only context and hunk placement changed. The Codex dependency pin sets the same 0.163.0-alpha.2 integrity values; it now moves the version down from upstream's 0.164.0. terminated-gateway-namespace: the only caller, gateway recover-lock --terminated-namespace from embedded-gateway-owner.ts:47, never passed env. It always used the process environment through inspectGatewayLockRecovery, and spawnSync inherits it. So the same lock files and database are recovered. The image test "embedded Gateway restart recovers only its signed Pod owner" runs that CLI.
Schema versions. 37/35 match OPENCLAW_AGENT_SCHEMA_VERSION / OPENCLAW_STATE_SCHEMA_VERSION at the pin. The Doctor pass in openClawStateMigrationHelper runs for any database below those versions. runtime-image-state-migration.test.mjs migrates the released schema 19/23 fixture and the 2026.9.9 Harness fixture to the new values. A 31/31 volume from the previous pin takes the same path.
Follow-up (not blocking): the pin removes agents.defaults.compaction.memoryFlush.model (upstream #182208) and agents.defaults.embeddedAgent.cyberFailover.model. Both are now under strict schemas; Doctor drops them, but it cannot rewrite the read-only configuration. apps/controller/src/drivers/compute/kubernetes/configuration-rules.ts:178-179 still lists them as model settings "in the pinned OpenClaw Gateway's config schema". The Codex conformance fixture still renders memoryFlush.model (tests/conformance/kubernetes-compute.test.mjs:2387, :2451). An existing Configuration that sets either key passes save, then fails the Gateway's config validate after the upgrade. Suggest removing both entries and the fixture usage, and refusing the keys at save (or adding an upgrade notice).
Notes:
- Codex
0.163.0-alpha.2runs with source that upstream qualified on0.164.0. Upstream #181823 only widened the protocol validators and added anotherlogin statusline format, and the version floor is0.149.0, so this looks compatible. A real-model dedicated Codex run was not repeated, so that risk remains. openclaw setup --baselinenow sends its config change to a running Gateway instead of refusing (upstream #185109). OCE runs it in theinitialize-workspaceinit container and in the Harness before the node starts, with no Gateway on that state, so the offline path still applies.sessions_spawn(in the baseline) gainscyberAccessProgram(upstream #185230). The provider account gates it, and OCE has no policy for it. No action needed.
Checked CLI calls (config validate, doctor --fix --non-interactive, plugins install/inspect/registry, node run/identity, models status --probe, gateway recover-lock), the node command IDs, the codex/slack plugin IDs and the 71 OPENCLAW_* variables the controller and runtime files use: all present at the pin.
…tired The OpenClaw pin at 97a1b4c0733 removed agents.defaults.compaction.memoryFlush.model, agents.defaults.embeddedAgent.cyberFailover.model and the Codex plugin's appServer.cyberFailover.model. OpenClaw's config validation refuses them and its doctor --fix cannot rewrite the read-only Configuration, so a Configuration that set one saved fine and then left the Gateway unable to start. - Configuration and Preset save, Agent save and deploy admission refuse each one, naming the setting and what replaces it (refuseRetiredOpenClawSettings, beside the workspace bootstrap rule). - Kubernetes Compute no longer lists the two agents.defaults ones as model settings. - The runtime image test checks the image's config schema lacks them. - Breaking-change notice for 2026-10-27. Finding 2709.
|
Codex review: blocked before merge. What this changesThis PR updates the OpenClaw runtime source, rebases six patches, packages new runtime modules, and advances database schema gates. Example: A fresh Gateway starts with a one-CPU limit.
Review scores
ProductKind: Performance · Worth it: Yes · Fix scope: Complete Regression provenancePossible regression — probable (reviewed change; known regression link). No predecessor PR is attributed. Merge readiness⛔ Blocked before merge - 2 items remain Keep this PR open: the startup improvement is useful, but the new pin rejects settings OCE still accepts, creating an upgrade failure. Priority: P2 Before merge
Findings
Tests
Agent review detailsHow this fits togetherOCE builds its Agent runtime from pinned OpenClaw source; controller startup wrappers supply Configuration and migrate retained SQLite state before launching Gateway and Harness processes. flowchart TB
Source[OpenClaw source pin] --> Build[Runtime image assembly]
Patches[OCE runtime patches] --> Build
Build --> Startup[Controller startup wrappers]
Config[Saved Configuration] --> Startup
State[Retained SQLite state] --> Startup
Startup --> Runtime[Gateway and Harness]
Technical reviewBest possible solution: Land the startup optimization after OCE handles the retired settings before workload replacement and the required image and upgrade checks pass. Do we have a high-confidence way to reproduce the issue? The upgrade failure is source-reproducible with agents.defaults.compaction.memoryFlush.model set to openai/gpt-5: OCE retains it, the old schema accepts it, and the new strict schema rejects it; no target code was executed. Is this the best way to solve the issue? Using the upstream startup fix is appropriate, and the patch rebases preserve existing OCE behavior, but the pin cutover must reconcile the removed Configuration fields. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against bb7fa74e2d95. Provenance checked
TestingProof path: shipped entry point. SecurityNone. EvidenceAcceptance criteria:
What I checked:
Likely related people:
LabelsLabel changes:
Label justifications:
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 27, 2026, 8:53 AM ET / 12:53 UTC. |
…Codex catalog The custom-endpoint projection fixture no longer sets agents.defaults.compaction.memoryFlush.model, so the synthesized catalog has no flush row. Finding 2709.
…e retired model rows
Problem
Since the OpenClaw pin moved to
9cc4450e(#2982) and thencee236c9(#2633), an embedded Gateway uses about twice the CPU to reach/readyz, and its memory at ready went up by about 0.7 GiB. Image runtime tests now take 1.5–4x longer on CPU-limited CI runners. More than half of the extra cost came from memory-core's standing-intent startup sweep. That sweep opens and creates every configured agent's SQLite database before readiness. openclaw/openclaw#185833 skips the sweep when the agent database does not exist yet. It is merged as97a1b4c0733.Change
deploy/runtime/openclaw-source.jsonselects97a1b4c07336db0c2f0eb52901118983490b7b1e: upstream main with #185833, package version2026.10.7. The source archive SHA-256 and build timestamp are updated to match.openclaw-codex-read-only-paths.patch: only its test hunk changed, to follow upstream's new table-driven proxy-config test.openclaw-terminated-gateway-namespace.patch: upstream recovery now always reads the canonical environment (refactor: use canonical environment for explicit lock recovery openclaw#181751).recoverTerminatedGatewayNamespaceno longer takes anenvoption, and its tests stub the environment as upstream's do. Upstream's new PostgreSQL recovery and macOS machine identity are kept.stock-codex-0.163.0-alpha.2-dependency-pin.patch: upstream now ships Codex0.164.0. The patch sets it back to0.163.0-alpha.2, so the Codex binary in the image does not change. Moving to0.164.0needs its own review of the Codex sandbox seccomp profile, so it is a separate change.The Dockerfile,
build-runtime-assets.mjsprovenance and the runtime-image test expect the new patch hashes.node-sqlite-capabilities.mjs,runtime-process-bootstrap.generated.mjs,runtime-process-scripts.generated.mjsandstandalone-runtime-profile.mjs. The runtime assembly now packages them, as upstream's own image and packagefilesdo.runtime-startup.tsuses the new values. The image migration tests still migrate the released databases.2026.10.7. The template content andWORKSPACE_DEFAULTS_IDdo not change.GATEWAY_TOOL_POLICY_SOURCE_COMMITmoves to the new commit. Between the two pins, upstream's Gateway tool policy enforcement only addsisGatewayToolAllowedWithoutAction, which gates loopback browser previews onexec, and a new automationsbindaction. OCE's action allowlist deniesbind, andbrowseris not in OCE's baseline.agents.defaults.compaction.memoryFlush.model,agents.defaults.embeddedAgent.cyberFailover.modeland the Codex plugin'sappServer.cyberFailover.model. OpenClaw refuses a config that still sets one, anddoctor --fixcannot rewrite the read-only Configuration. Configuration and Preset save, Agent save and deploy admission now refuse each one, naming the setting and what replaces it. Kubernetes Compute no longer lists the first two as model settings. The runtime image test checks the image's schema no longer has them.docs/guides/deploy/breaking-changes.mdhas a 2026-10-27 notice.Verification
b1679694a4. 18 of 18 non-browser jobs passed, including images-runtime-startup 1/2/3, images-packaging, runtime-image-fixture, the k3d fixtures and First Agent Smoke. The image build ran the bridge tests: required-placement scopes, UI reconnect and gateway-lock recovery. The first round found the schema-version and patch-hash expectations, which are fixed. The browser lanes could not run on that VM because its Playwright browsers predate main's Playwright 1.64.1 bump. This PR does not touch the console, and GitHub CI covers those lanes.48a9339721). The new configuration-controller test refuses each setting at Configuration create and update, Preset save, Agent save and deploy, and fails when the rule is removed. Static, checks-baseline-1 and images-runtime-startup passed on the remote test VM, and the touched tests passed 20/20 at 2 CPUs.689860f209, OpenClawcee236c9) against this PR. Both used OCE runtime images built by the images-runtime-startup-2 prepare step. Each value is the median of 3, with Gateway containers pinned to 8 dedicated CPUs. CPU is the container cgroup'susage_usec; memory ismemory.current, withmemory.peakfor the peak.cee236c997a1b4c0733/readyzThe first chat turn's cost and peak memory are about the same. The startup savings come from Gateways whose agent database does not exist yet, which covers fresh Agents and the image tests.
Risks
cee236c9. The image lanes and First Agent Smoke exercise the Gateway, Harness, workspace node, state migration and recovery paths, but a real-model dedicated deployment was not repeated.0.163.0-alpha.2against an upstream bridge built for0.164.0. Upstream supports app-server0.149.0and later, and the image tests run the Codex plugin and the Dedicated command.