-
-
Notifications
You must be signed in to change notification settings - Fork 69.2k
Bug: local loopback gateway diagnostics show contradictory unreachable/missing-scope results in 2026.3.13 #46100
Description
OpenClaw 2026.3.13 local loopback gateway diagnostic inconsistency report
Date: 2026-03-14
Environment: local gateway on Linux, bind=loopback, gateway.auth.mode=token
Summary
After upgrading to OpenClaw 2026.3.13, the gateway appears operational for real usage (Feishu chat works, Web UI via SSH tunnel works, CLI is usable), but local diagnostic commands report contradictory results.
The most visible symptom is:
Gateway │ local · ws://127.0.0.1:18789 (local loopback) · unreachable (missing scope: operator.read)
At the same time:
- the gateway service is running
- gateway status shows RPC probe: ok
- some gateway RPC calls succeed
- normal product functionality continues to work
This strongly suggests a regression or inconsistency in the local loopback diagnostic / auth / aggregation path, rather than a true reachability failure.
Version / Environment
- OpenClaw version: 2026.3.13
- Commit shown by CLI: 61d171a
- OS: Linux 6.6.117-45.1.oc9.x86_64 (x64)
- Node: 22.22.0
- Gateway mode: local
- Gateway bind: loopback
- Gateway auth mode: token
- Gateway URL: ws://127.0.0.1:18789
- Dashboard URL: http://127.0.0.1:18789/
Observed Behavior
-
openclaw gateway statusreports the gateway is healthy:- Runtime: running
- Listening: 127.0.0.1:18789
- RPC probe: ok
-
openclaw statusstill reports:- Gateway ... unreachable (missing scope: operator.read)
-
openclaw gateway probe --jsonreports:- ok: false
- degraded: false
- target localLoopback connect.error: timeout
- rpcOk: false
-
Gateway functionality is still available in practice:
- Feishu messaging works
- Web UI via SSH tunnel works
- local CLI works for many operations
-
RPC behavior is inconsistent across methods:
openclaw gateway call system-presence --jsonsucceeded and returned JSONopenclaw gateway call health --jsonfailed with:
gateway closed (1000 normal closure): no close reason
-
Gateway logs show mixed failure modes for local probe traffic:
missing scope: operator.readon some RPC methodshandshake timeouton some loopback probe connectionsclosed before connecton others
Why this looks incorrect
If the gateway were truly unreachable, all related diagnostics should fail consistently.
Instead, the following all happen in the same environment:
- service is running
- RPC probe says ok
- system-presence succeeds
- probe JSON says timeout
- overview says unreachable / missing scope
- real user-facing functionality works
This suggests the issue is not real gateway unreachability, but an inconsistency between multiple internal diagnostic/auth paths.
Investigation performed
The following checks were performed:
-
Confirmed config state:
- gateway.mode = local
- gateway.bind = loopback
- gateway.auth.mode = token
- shared token exists in config
-
Confirmed the local CLI device is paired and has full operator scopes.
The local CLI device has operator token scopes including:- operator.read
- operator.write
- operator.admin
- operator.approvals
- operator.pairing
This means the problem is not simply that the local CLI device lacks operator.read.
-
Rotated the local CLI device operator token with the same full scopes.
Result: no change.openclaw statusstill showed missing scope / unreachableopenclaw gateway probe --jsonstill timed out
-
Restarted the gateway service.
Result: no change.openclaw gateway statusstill showed RPC probe: okopenclaw statusstill showed unreachable (missing scope: operator.read)openclaw gateway probe --jsonstill timed outopenclaw gateway call system-presence --jsonstill succeededopenclaw gateway call health --jsonstill failed with close code 1000
Code-path clues found locally
Inspection of the installed 2026.3.13 code suggests multiple auth/diagnostic paths are involved.
Relevant observations from local code inspection:
- For local loopback probe targets, device identity is intentionally disabled in probe logic.
- For gateway calls on loopback with explicit token/password, device identity is also not attached.
- Docs and code indicate that
missing scope: operator.readis treated as a degraded diagnostic state, not necessarily a true connection failure.
This may explain why different code paths produce different outcomes:
- one path can successfully identify / use an operator role
- another path becomes scope-limited or times out
- the overview then aggregates this into an incorrect
unreachablestatus
Most likely root cause
A regression or inconsistency in OpenClaw 2026.3.13 local loopback gateway diagnostics, likely involving one or more of:
- Probe auth selection on loopback not consistently using the local paired CLI device token
- Divergent behavior between probe/status aggregation and direct gateway call paths
- Incorrect summary aggregation that marks the gateway as
unreachablewhen at least some local RPC paths are working - Method-specific auth / handshake behavior differences (for example
system-presencesucceeds whilehealthfails)
Minimal reproduction pattern
- Run a local loopback gateway with:
- gateway.mode=local
- gateway.bind=loopback
- gateway.auth.mode=token
- Upgrade to 2026.3.13
- Run:
openclaw gateway statusopenclaw statusopenclaw gateway probe --jsonopenclaw gateway call health --jsonopenclaw gateway call system-presence --json
- Observe contradictory results across the commands above.
Representative command outputs
A. openclaw gateway status
Expected/Observed key lines:
- Runtime: running
- RPC probe: ok
- Listening: 127.0.0.1:18789
B. openclaw status
Observed key line:
- Gateway: local · ws://127.0.0.1:18789 (local loopback) · unreachable (missing scope: operator.read)
C. openclaw gateway probe --json
Observed key fields:
- ok: false
- degraded: false
- targets[0].connect.ok: false
- targets[0].connect.rpcOk: false
- targets[0].connect.error: "timeout"
D. openclaw gateway call health --json
Observed failure:
- gateway closed (1000 normal closure): no close reason
E. openclaw gateway call system-presence --json
Observed success:
- returns presence JSON successfully
- includes probe-related CLI entries with operator role
Practical impact
- Misleading status reporting after upgrade
- False indication that gateway reachability is broken
- Confusing operator guidance (
Fix reachability first) even though the product still works - Makes debugging much harder because diagnostics contradict each other
What would likely be the correct behavior
One of the following should happen consistently:
Option A:
- local loopback diagnostics should consistently use the proper local auth path and succeed
Option B:
- if scope is actually limited, status should report a degraded/partial state rather than
unreachable
But the current combination of:
- RPC probe ok
- system-presence success
- probe timeout
- health close 1000
- status says unreachable / missing scope
is internally inconsistent.
Suggested areas to inspect
- loopback probe auth selection logic
- interaction between shared token vs paired device token on loopback
- status overview aggregation logic for probe results
- why
healthandsystem-presencediverge under the same environment - whether loopback probe incorrectly disables the auth mechanism that would otherwise work
Short conclusion
This appears to be an OpenClaw 2026.3.13 local loopback diagnostic/auth regression or aggregation bug, not a genuine gateway outage.
The gateway is operational enough for real use, but the diagnostic layer reports contradictory failures and likely misclassifies the gateway as unreachable.