fix(items): bump openclaw to 2026.8.1 and correct the gateway probe and bind - #3
Merged
Merged
Conversation
…nd bind
Pin ghcr.io/openclaw/openclaw:2026.8.1 (released 2026-08-31, multi-arch
amd64/arm64, index digest sha256:e7849cb6c1ef1ead39ab4be7d85edb2df89611f4
86e283284c7cf35ce39a20d4), and fix two defects found while re-checking the
component against upstream's container contract.
Readiness moves from /readyz to /startupz. Upstream defines /readyz as
startup plus deep per-channel readiness, and /startupz as startup only with
channel health not consulted — the latter being what it designates for
orchestrator traffic admission. On /readyz a single lapsed Telegram or
Discord credential returns 503 and pulls an otherwise healthy Control UI
out of service. The comment defending the old choice was also wrong:
/healthz is a dedicated probe answering {"ok":true,"status":"live"}, not
the Control UI shell.
The gateway exec now passes --bind lan --port 18789, as upstream's own
docker-compose.yml does. gateway.bind defaults to loopback, so the listener
was reachable only because `config set` wrote bind=lan to the persisted
volume — a load-bearing step sitting behind a comment claiming the default
bind was already routable and that OPENCLAW_GATEWAY_BIND was being left
alone deliberately. Neither was true: OPENCLAW_GATEWAY_BIND is a
Compose-level variable the runtime never reads.
Also pin the container-side paths upstream pins (HOME, OPENCLAW_HOME,
OPENCLAW_STATE_DIR, OPENCLAW_CONFIG_DIR, OPENCLAW_CONFIG_PATH,
OPENCLAW_WORKSPACE_DIR, OPENCLAW_GATEWAY_PORT). These already resolved
correctly via the image's node passwd entry, but stating them makes the
mountPath values and the paths the runtime uses the same by construction.
Listing picks up the version string, the note that tools installed into the
container home rather than the state dir do not survive a redeploy, and the
note that 2026.8.1 consolidates memory and learns skills in the background
by default, so an idle deployment can still bill the user's model provider.
Verified: typecheck, item suite 25/25, full corpus 377/377; the folded
command scalar resolves to one well-formed shell string whose --batch-json
argument parses as valid JSON with the three intended ops and the trailing
slash stripped from OPENCLAW_PUBLIC_ORIGIN. Not verified — no container
runtime in the devcontainer: the live smoke test, the bind negative
control, and the 2026.7.1 -> 2026.8.1 in-place upgrade across the two
breaking migrations in this release.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PB8wsC93YQxG8XKNscdY2D
This was referenced Sep 1, 2026
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.
Bumps the OpenClaw item to the current stable release and fixes two defects found while re-checking the component against upstream's container contract.
Version
ghcr.io/openclaw/openclaw:2026.7.1→2026.8.1(released 2026-08-31; multi-arch linux/amd64 + linux/arm64; index digestsha256:e7849cb6c1ef1ead39ab4be7d85edb2df89611f486e283284c7cf35ce39a20d4).2026.9.1-beta.1exists but betas stay unpinned, per the comment already onref.Defects fixed
Readiness was on the wrong probe. Upstream defines the three probes precisely:
/healthz/startupz/readyzThe component gated readiness on
/readyz, so once a user connects a messaging channel and its credentials lapse, the platform would pull a perfectly healthy Control UI out of service. Upstream is explicit: "A broken Telegram or other channel account can make/readyzreturn 503 without taking a healthy Control UI out of service through/startupz." The comment defending the old choice was also wrong —/healthzis a dedicated probe answering{"ok":true,"status":"live"}, not the Control UI shell.The bind was load-bearing but documented as incidental. The
envVarscomment claimedOPENCLAW_GATEWAY_BINDwas "deliberately left at its default (routable) bind". Both halves are false:gateway.binddefaults toloopback(upstream carries a dedicated Docker note that bridge networking is unreachable withoutbind: "lan"), andOPENCLAW_GATEWAY_BINDis a Compose-level variable the runtime never reads. The deployment was reachable only becauseconfig setwritesbind: lanto the persisted volume — a single point of failure sitting behind a comment telling the next maintainer it was redundant.The exec line now carries
--bind lan --port 18789, exactly as upstream's owndocker-compose.ymldoes, so the listener no longer depends solely on persisted state. The comment is corrected.Hardening
Pins the container-side paths upstream pins on its gateway service (
HOME,OPENCLAW_HOME,OPENCLAW_STATE_DIR,OPENCLAW_CONFIG_DIR,OPENCLAW_CONFIG_PATH,OPENCLAW_WORKSPACE_DIR,OPENCLAW_GATEWAY_PORT). These already resolved correctly via the image'snodepasswd entry, but they resolved implicitly; stating them makes themountPathvalues and the paths the runtime actually uses the same thing by construction.Listing
/home/node/.openclawis not enough." Documented rather than restructured; widening theconfigclaim to/home/nodewould nestauth-secretsinside it and deserves its own change.Verified
npm run typecheckclean;task test:item -- openclaw25/25; full corpus 377/377 (also on pre-push).nodewith and without a trailing slash onOPENCLAW_PUBLIC_ORIGIN: the%/strip works,--batch-jsonreceives a single argument that parses as valid JSON with exactly the three intended ops, and--bind lan --port 18789lands on the gateway exec.gateway.controlUi.allowedOriginsre-confirmed as still config-file-only at v2026.8.1 and still required for a non-loopback Control UI, so theconfig setapproach stands.Not verified — needs a host with Docker
No container runtime in the devcontainer, so these did not run and are worth doing before this ships:
2026.8.1— in particular thatconfig setstill exits 0, which the renewed "re-verified against 2026.8.1" comment currently asserts on research rather than an observed run.gateway.bind, drop--bind lan, confirm the port is unreachable).2026.7.1→2026.8.1in-place upgrade on a shared volume. This release carries two breaking migrations (OpenProse plugin removal,codex/*→openai/*model refs). Upstream states routine image upgrades run startup-safe migrations automatically and should not need a separatedoctor --fix; if startup cannot repair safely the gateway exits rather than reporting healthy, and recovery is one run of the same image withdoctor --fixagainst the same mounts.Note for reviewers
The working tree in this devcontainer is CRLF throughout with no
.gitattributes, sogit statusshows every tracked file modified. Only the two files in this PR were staged, and both were converted back to LF to matchHEAD— the diff here is purely semantic. The repo-wide line-ending churn is pre-existing and untouched; it likely wants a separate.gitattributesnormalisation pass.🤖 Generated with Claude Code
https://claude.ai/code/session_01PB8wsC93YQxG8XKNscdY2D