Repository navigation
build(runtime): bump openclaw to 8e328edad39 - #3903
Conversation
Moves the OpenClaw pin to 8e328edad39 (upstream #186274: Doctor contract loaders skip the unused state-operation copy). Five runtime patches apply unchanged. The Control UI reconnect patch is rebased onto upstream's early-gateway store, and it now also updates the page-activation recovery caller that upstream #186325 added: that caller read probeGatewayReachability() as a boolean, which the patch's three-valued result would make always true. The image build now runs that caller's tests with the other bridge tests.
|
🦞👀 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 real behavior proof before merge. What this changesThis PR updates the bundled OpenClaw source and adapts the reconnect patch to its new page-activation caller. Example: Page-activation recovery receives HTTP 401 from the Gateway health probe.
Review scores
ProductKind: Performance · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Blocked before merge - 4 items remain Keep this maintainer-authored draft open: the Doctor optimization is useful, but adoption of the upstream security defaults remains explicitly undecided. Priority: P2 Decision needed
Before merge
FindingsNone. Provenance
Tests
Agent review detailsHow this fits togetherThe runtime build combines pinned OpenClaw source with OCE patches; deployed Gateways consume Agent configuration and persistent state to serve conversations and execute tools. flowchart TB
A[Pinned OpenClaw source] --> C[Runtime image build]
B[OCE runtime patches] --> C
C --> D[Embedded or dedicated Gateway]
E[Agent configuration and state] --> D
D --> F[Conversation and tool execution]
Technical reviewBest possible solution: Keep the Doctor optimization while preserving OCE's earlier defaults through existing composition owners in both topologies, retaining explicit authored overrides. Do we have a high-confidence way to reproduce the issue? The upstream diff identifies the unused Doctor capture and the preset materialization path; upstream records runtime measurements, while this review ran no target code. Is this the best way to solve the issue? The reconnect adaptation is focused, but a broad source update needs an explicit OCE default policy rather than implicitly absorbing the personal preset. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against f23078f220f8. Merge-risk optionsMaintainer options:
Provenance checked
TestingProof path: unit tests only. SecurityNeeds attention: The source bump changes steering authority and filesystem defaults without a settled OCE adoption decision. 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 27, 2026, 7:12 PM ET / 23:12 UTC. |
…curity preset OpenClaw's new security.preset (default personal, openclaw/openclaw#185477) fills messages.queue.allowCollaborativeSteering with true and tools.exec.applyPatch.workspaceOnly with false when a configuration leaves them unset. Deployment admission now sets the earlier values, false and true, in the AgentRevision document every Compute Driver renders, for embedded and dedicated Gateways alike. An explicit value in the Configuration is kept; a non-boolean value or a non-object on the path is refused with the setting's name. collaborativeSteeringFallback stays unset (upstream's default with steering off is queue). Revisions deployed before this change keep their immutable document until the Agent is deployed again; the breaking-change notice says so.
Review of the first cut on the k3d state lane: a stored Configuration with a non-object tools (a synthetic fixture value) now failed Agent save, because admission refused a non-object on the setting's path. Admission composition does not otherwise interpret native values, and OpenClaw's own preset (mergeMissing) keeps such a value. Fill only unset settings and keep any other value; the Gateway refuses a non-boolean value or a non-object there at startup, so neither can loosen the setting. Docs: keep docs/reference/configuration.md under the 2,500-word limit (drop the status-code list the failure section repeats and a reserved-kinds sentence) and the revision flow under the review threshold.
…visions The first-agent helper reconstructs the revision snapshot it expects and refused the one deployment admission now produces, because admission fills messages.queue.allowCollaborativeSteering and tools.exec.applyPatch.workspaceOnly when the Configuration leaves them unset. Move admitGatewaySecurityDefaults into a dependency-free module so the host-run helper can apply the same fill without installed workspace packages, and expect it in every new revision. A saved revision the helper identified may predate the fill and is still accepted there only.
|
Free's clanker here (an AI agent working on Free's behalf). Independent review of head ebecc73: no blocking issues.
|
Problem
OpenClaw's Doctor (
openclaw doctor --fix) copied memory-core's state-operation code into a private generation directory every time it loaded a plugin doctor contract, four times per run, and could never use the copy. Doctor runs before a Gateway starts on migrated state and takes about a quarter of the images-runtime-startup-3 lane. openclaw/openclaw#186274 skips the copy for the doctor-contract loaders. It is merged as8e328edad39.Change
deploy/runtime/openclaw-source.jsonselects8e328edad391017cca518fc32084a4064f3cbd2b, upstream main at the #186274 merge (350 commits after97a1b4c0733; the only later upstream commit is a Control UI test). The package version stays2026.10.7. The source archive SHA-256 and build timestamp are updated to match.0.163.0-alpha.2.openclaw-control-ui-browser-reconnect.patchneeded two changes:probeGatewayReachability(): page-activation recovery, which replaces a stalled transport when the probe finds the Gateway. It reads the result as a boolean. The patch changes the result to"live" | "access-denied" | "unavailable", and every value is truthy. Unchanged, the page would replace its connection every 2-3 seconds during an outage. The patch now compares the result with"live"there too and adds a test that a refused probe (401) does not count as a live Gateway.gateway-page-activation.test.tswith the other bridge tests, so a later caller like this one fails the build.GATEWAY_TOOL_POLICY_SOURCE_COMMIT, the workspace defaults source comment and the upstream Dockerfile link move to the new commit. Between the two pins, upstream's tool-policy enforcement code changes only in ways OCE's policy does not depend on (listed under Risks). The OpenClaw schema versions (agent 37, shared state 35), the workspace templates and the files the runtime assembly packages do not change.Security preset defaults: OCE keeps the earlier values
openclaw/openclaw#185477 adds
security.preset(personal, the default, orcorporate). The preset fills settings a configuration leaves unset, and an explicit setting overrides it (mergeMissinginsrc/config/security-presets.ts, applied bymaterializeRuntimeConfig). OCE set none of these settings, so two defaults would have changed for every OCE Gateway:messages.queue.allowCollaborativeSteeringfalse: another participant's message during a running turn is refusedtrue: it steers the running turn, which keeps the first requester's authorityfalsetools.exec.applyPatch.workspaceOnlytruefalsetruemessages.queue.collaborativeSteeringFallback(new)queue: with steering off, the message runs as its own turn under its senderqueueagentRuntimeConfigurationinpackages/occ) now runsadmitGatewaySecurityDefaultsafter the Sandbox Driver'sconfigureAgentand before logging admission. It fills each setting only when it is unset. Every Compute Driver (Kubernetes, Docker, SSH) renders the Gateway document for both embedded and dedicated Gateways from this AgentRevision snapshot, and dedicated composition (managedGatewayConfiguration) keeps both settings. So one helper (packages/occ/src/gateway-security-defaults.ts) covers every path; no Driver has a copy. The first-Agent helper uses the same function to check the revision it deployed.security.preset(OCE keepspersonal;corporateneeds per-session Docker sandboxing, which OCE Gateways do not have) andcollaborativeSteeringFallback(with steering off, upstream's default isqueue; the earlier behaviour was a refusal, which"reject"restores). The other preset values match the earlier defaults.docs/guides/deploy/breaking-changes.mdhas the notice and the step (deploy each Agent again). The Configuration reference and the revision flow say what admission adds.Verification
ebecc731c5, with no cached results: CI Required, the browser lanes, images-runtime-startup 1/2/3, images-packaging, runtime-image-fixture, the k3d lanes and First Agent Smoke. The image build ran the bridge tests, including the four Control UI files (98 tests).configuration-occtest deploys embedded OpenClaw and dedicated Codex Agents through real OCC admission: with both settings unset, the revision holdsallowCollaborativeSteering: falseandworkspaceOnly: true; explicittrue/falsein either combination are kept; a non-boolean value and a non-objecttoolsare kept as written. The admission expectations in the conformance, integration and Postgres helpers now include the two settings,plugin-runtime-policychecks that dedicated composition keeps both, andfirst-agent-startupchecks that the first-Agent helper expects them. With the fill removed, 10 tests fail.openclaw config getinside the container read the effective values:allowCollaborativeSteeringcollaborativeSteeringFallbackapplyPatch.workspaceOnlysecurity.presetfalsequeuetruepersonaltruequeuefalsepersonaltrue/falsetruequeuefalsepersonaloxfmt --checkand the two UI type-check graphs pass. Without the page-activation hunk, four page-activation tests fail: three upstream tests and the new 401 test.97a1b4c0733against8e328edad39. These used upstream images built from each commit's verified archive with upstream's Dockerfile.openclaw doctor --fixran on the released-state fixture on 4 dedicated CPUs, with old and new interleaved. Each value is the median of 3. CPU is the container cgroup'susage_usec.mainat this PR's base (3669dc9890) against this PR. Both used OCE runtime images built by the images-runtime-startup-2 prepare step. They ran at the same time on separate sets of 8 CPUs. Each value is the median of 3./readyzGateway startup cost does not change. After ready, the Gateway's worker threads use about 1.5 CPU-s more in the first 30 s, in all 3 runs. The 1-CPU ready time and the first turn are slightly slower, but the runs overlap (first turn 22.1-24.9 s before, 24.3-27.6 s after).
Risks
97a1b4c0733. The image lanes and First Agent Smoke exercise the Gateway, Harness, workspace node, state migration and recovery paths. A real-model dedicated deployment was not repeated.processsessions are scoped to the session that started them. A spawned child session can also manage its ancestor sessions' processes in the same agent; unrelated session trees cannot (fix: child sessions cannot access ancestor process handles openclaw#185832).tools.invokecalls no longer run agent loop detection (fix(gateway): prevent tools.invoke calls from creating false agent loop warnings openclaw#186104).security.preset.