Repository navigation
Gateway readiness rejects tagged OpenShell v0.0.101 process identity #8755
Description
Investigation summary
- Reproduced on CPU-only Ubuntu with NemoClaw
cae757ed...and OpenShell v0.0.101; latestmainatbafcad8480...has the same readiness implementation. - NemoClaw started the expected v0.0.101 gateway, which returned HTTP 200 and listened on both expected addresses.
- Readiness still marked
gateway.version.compatibleandgateway.port.uncontestedunknown because the trusted-binary check rejected OpenShell's tagged process identity. - The target matcher accepted that same identity, and
/proc/<pid>/exeresolved to the expected gateway binary. - This blocks onboarding before Model Context Protocol (MCP) configuration and is distinct from Investigate trusted-private MCP tool discovery returning zero tools on OpenShell v0.0.101 #8746.
Description
The onboarding readiness check does not recognize a gateway that NemoClaw has just started when OpenShell v0.0.101 uses this tagged process identity:
openshell-gateway[nemoclaw=nemoclaw;port=8080]
The gateway is the expected executable, returns HTTP 200, and owns the expected listeners. The target-bound gateway matcher accepts the tag, but the trusted-binary gate rejects it. Onboarding therefore stops before sandbox or MCP configuration. The retained diagnostic does not record the specific Docker-driver environment-marker values, so this issue does not claim that those values were observed.
Expected result: readiness attributes the tagged listener to the trusted OpenShell gateway and continues onboarding.
Actual result:
System readiness could not confirm required capabilities: gateway.version.compatible, gateway.port.uncontested.
Gateway port 8080 could not be observed completely. Inspect port 8080 and stop only its owning process before retrying.
PR #8738 introduced the affected readiness path after two trusted OpenClaw MCP runs had passed on OpenShell v0.0.101. PR #8751 improves MCP failure diagnostics but does not change this onboarding behavior.
Reproduction steps
-
Check out NemoClaw
cae757edca1e9996dba57d1d6b85f2d0ab1b23bb. -
Install the exact OpenShell v0.0.101 CLI.
-
Place the verified cloudflared 2026.6.1 binary at
/home/ubuntu/p014-main-cae757ed/bin/cloudflared, add that directory toPATH, and verify it before the run:export PATH="/home/ubuntu/p014-main-cae757ed/bin:${PATH}" cloudflared --version printf '%s %s\n' \ '5861a10a438fe8ddcfebb3b830f83966cbf193edafce0fe2eeb198fbae1f7a22' \ '/home/ubuntu/p014-main-cae757ed/bin/cloudflared' | sha256sum --check
-
Generate the one-run TLS fixture in its owner-only directory and load the three paths written by the repository setup script:
export RUNNER_TEMP=/home/ubuntu/p014-main-cae757ed/tmp export GITHUB_ENV="${RUNNER_TEMP}/mcp-tls.env" install -d -m 700 "${RUNNER_TEMP}" install -m 600 /dev/null "${GITHUB_ENV}" bash test/e2e/setup-mcp-test-tls.sh chmod 600 \ "${RUNNER_TEMP}/nemoclaw-mcp-tls/ca.key" \ "${RUNNER_TEMP}/nemoclaw-mcp-tls/server.key" set -a source "${GITHUB_ENV}" set +a
This exports
NEMOCLAW_MCP_TLS_CA_CERT,NEMOCLAW_MCP_TLS_CERT, andNEMOCLAW_MCP_TLS_KEY. Remove${RUNNER_TEMP}after the run; this deletes both private keys and the environment file. -
On the CPU-only Ubuntu 24.04 host, run the OpenClaw MCP live E2E in full-lifecycle mode:
NEMOCLAW_MCP_BRIDGE_AGENT=openclaw \ NEMOCLAW_OPENSHELL_EXACT_MAIN_PROOF=1 \ NEMOCLAW_RUN_LIVE_E2E=1 \ npx tsx tools/e2e/live-vitest-invocation.mts run \ --test-path test/e2e/live/mcp-bridge.test.ts -
Phase 1 starts the compatible inference and MCP endpoints.
-
During phase 2, observe that the gateway starts and returns HTTP 200, but onboarding exits with the readiness error above.
-
Inspect the gateway process and listeners. The observed process identity is
openshell-gateway[nemoclaw=nemoclaw;port=8080], while/proc/<pid>/exeresolves to the expected v0.0.101 gateway binary.
The latest main commit inspected before filing was bafcad84803995793a85a9b9fdd3a49ef3c51145. Its only intervening commit is #8753, which does not change gateway listener attribution. The defect was not rerun at that SHA; the affected implementation is unchanged from the reproduced SHA.
Environment
- Host: CPU-only Brev
nc-trialrun-aug5(brev-babe6wwn7) - OS: Ubuntu 24.04 x86_64
- CPU: 4 vCPUs
- GPU: none
- Docker: client and server 29.7.1
- Node.js: v22.23.2
- Reproduced NemoClaw commit:
cae757edca1e9996dba57d1d6b85f2d0ab1b23bb - Latest inspected NemoClaw commit:
bafcad84803995793a85a9b9fdd3a49ef3c51145 - OpenShell: v0.0.101
- OpenShell CLI SHA-256:
1ad48efd5e1de8f3f017a81b3a7177872f350343a1a8d8074c7e844bca4801e9 - cloudflared: 2026.6.1
- E2E shard: OpenClaw MCP bridge
- Runtime preflight: full lifecycle
- Run time: 75.689 seconds
Debug output
The gateway evidence showed:
- HTTP health response: 200
- listeners:
127.0.0.1:8080and172.18.0.1:8080 - process identity:
openshell-gateway[nemoclaw=nemoclaw;port=8080] /proc/<pid>/exe: expected v0.0.101 gateway binary- trusted-binary gate: rejected
- target-bound gateway matcher: accepted
The run stopped before MCP bridge configuration or tool discovery. It therefore does not reproduce #8746 and does not establish an OpenShell MCP defect.
The run stored ephemeral MCP TLS private keys at /home/ubuntu/p014-main-cae757ed/tmp/nemoclaw-mcp-tls/{ca.key,server.key} with mode 0600. The test process used them for this one run.
NemoClaw stored the gateway JWT signing key at /home/ubuntu/p014-main-cae757ed/home/.local/state/nemoclaw/openshell-docker-gateway/jwt/signing.pem and the gateway TLS CA private key at /home/ubuntu/p014-main-cae757ed/home/.local/state/nemoclaw/openshell-docker-gateway/tls/ca.key. Both had mode 0600. The gateway used them for this one run. Only the ubuntu account and privileged host processes could access these private keys and the MCP TLS keys.
MCP fixture credentials never entered an OpenShell provider because onboarding stopped first. Cleanup stopped the verified gateway process and removed the isolated home, gateway state, all named private keys, runner temporary directory, and isolated cloudflared binary. No test container or gateway listener remained, and the before/after UFW records were identical.
Acceptance criteria
- Treat
openshell-gateway[nemoclaw=nemoclaw;port=8080]as the expected target only when the kernel-backed executable path matches the trusted gateway binary, the existing Docker-driver environment predicate passes, and the Linux process start-time and/proc/<pid>/exesamples remain stable before and after classification. - Preserve fail-closed behavior for an executable mismatch, missing required environment evidence, a different gateway target, and an unowned port listener.
- Add focused regression coverage for the exact tagged identity observed on OpenShell v0.0.101.
- Run the complete OpenClaw MCP live E2E on current
mainwith OpenShell v0.0.101. - Pass trusted-private discovery, later DNS-rebinding denial, WebSocket coverage, remaining network assertions, redacted diagnostic persistence, secret scans, and cleanup.
Checklist
- I confirmed this bug is reproducible.
- I searched existing issues and this is not a duplicate.
Duplicate boundary: #8746 reached MCP tool discovery and returned zero tools. This issue stops in NemoClaw onboarding before MCP configuration. Searches of open and closed issues found no match for the exact readiness error or tagged gateway identity.
Activity
fix(cli): accept tagged trusted gateway identity (#8757)
wangericnv commentedon Aug 12, 2026
@senthilr-nv The same two capabilities still resolve to
unknownon v0.0.107, which was tagged about 27 hours after this issue was closed — so the fix should be in the build I tested. Reporting here rather than opening a new issue because the symptom string is identical, but the shape of my repro differs from yours in one way that may matter.Difference from the original report: yours had a gateway that NemoClaw had just started, returning HTTP 200 and owning the listeners, and the trusted-binary gate rejected its tagged identity. In mine there is no gateway at all — no registration, no process, nothing listening on the port — and readiness still cannot decide.
Probe result on that host
The guidance is unactionable in this state — there is no owning process to stop.
Onboarding is blocked by it
The fix does appear to be present in the build
lib/readiness/gateway-production.jshasownedHostGatewayTarget()and thegatewayProcessSamplesMatchTrustedBinary()path, so this does not look like a build that predates the change.Platform contrast
Three hosts, all NemoClaw v0.0.107 (
v0.0.107-0-g03ccdd74), all with zero gateways at probe time:host.os.wslgateway.version.compatiblegateway.port.uncontestednemoclaw onboardEnvironment of the failing host: Ubuntu 24.04.4 (WSL2), x86_64, Docker 29.5.3 via Docker Desktop integration (
host.platform.wsl_docker_desktop = present,host.platform.wsl_native_docker = absent), OpenShell 0.0.101, no systemd (systemctl --user is-system-running→offline). The same host onboarded normally on v0.0.103, which has no readiness admission gate.Happy to open a separate issue if you consider the no-gateway WSL path distinct from what was fixed here — I did not want to file a duplicate given the identical failure text.