Skip to content

fix(runtime): harden overrides and gateway recovery - #2874

Merged
ericksoa merged 11 commits into
mainfrom
fix/runtime-e2e-regressions
May 2, 2026
Merged

fix(runtime): harden overrides and gateway recovery#2874
ericksoa merged 11 commits into
mainfrom
fix/runtime-e2e-regressions

Conversation

@ericksoa

@ericksoa ericksoa commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

  • make invalid supplemental runtime overrides atomic no-ops before config chmod/write/hash updates
  • stop stale gateway launcher/processes during recovery before relaunching
  • source restored proxy env immediately before relaunch and fail when an existing env file does not install required guards
  • derive stale custom-gateway cleanup patterns from the full configured command prefix
  • fix the Hermes post-create binary availability check so sandbox-exec noise or alternate PATH resolution does not report a running Hermes gateway as missing

Follow-up

Validation

Notes

  • Original runtime scope covered runtime-overrides-e2e and issue-2478-crash-loop-recovery-e2e fallout from run 25203658554.
  • docs-validation-e2e and WSL fallout are intentionally left to separate follow-ups.

Summary by CodeRabbit

  • Bug Fixes

    • Validation now requires positive integers for context window and max tokens; invalid overrides are rejected without mutating config
    • Recovery now aggressively terminates stale gateway processes with bounded retries and fails if they persist
    • Stricter guard verification: when an env file is present but safety preloads are missing, startup aborts with an error
  • New Features

    • Clear, structured agent binary availability checks with explicit status reasons
  • Tests

    • Expanded and hardened tests for overrides, recovery ordering/failure paths, onboarding checks, and config-permission behavior

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@coderabbitai

coderabbitai Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Tightens model-override numeric validation to require positive integers; constructs a shell-safe gateway process-match pattern; regenerates recovery scripts to TERM/KILL stale gateway processes with bounded retries and hard-fail if persistent; strengthens guard verification to abort when required NODE_OPTIONS preloads are missing.

Changes

Gateway Safety Hardening

Layer / File(s) Summary
Data / Helpers
src/lib/agent-runtime.ts
Adds escapeEre, escapeCharClass, and selfSafeGatewayProcessPattern(command) to derive a shell-safe _GATEWAY_PROC_PATTERN from gateway_command.
Recovery Script Generation
src/lib/agent-runtime.ts
Computes configuredGatewayCommand, usesValidatedBinary, and staleGatewayPattern; embeds _GATEWAY_PROC_PATTERN into the generated recovery script and restructures the script to initialize /tmp/gateway.log, kill stale gateway processes with bounded pkill -TERM/pkill -KILL retry loops, and exit with GATEWAY_STALE_PROCESSES if any remain.
Sandbox Recovery Wiring
src/nemoclaw.ts
Updates recoverSandboxProcesses() script block to include TERM/KILL retry loops for stale gateways, source ~/.bashrc when present, track presence of /tmp/nemoclaw-proxy-env.sh, and treat persistent stale processes as a hard failure.
Guard Verification & Ordering
src/lib/agent-runtime.ts, src/nemoclaw.ts
Reorders steps so stale-process termination occurs before sourcing /tmp/nemoclaw-proxy-env.sh; when the env file exists but required NODE_OPTIONS preload guards are missing, the script writes an ERROR and exits instead of merely warning.
Tests / Coverage
src/lib/agent-runtime.test.ts
Adds helpers to extract/convert _GATEWAY_PROC_PATTERN; asserts pattern correctness, presence of pkill -TERM / pkill -KILL, ordering (pkill before sourcing and sourcing before nohup), and a regression test for refusing relaunch when guards are missing.

Model Override Validation

Layer / File(s) Summary
Validation Tightening
scripts/nemoclaw-start.sh
apply_model_override now requires NEMOCLAW_CONTEXT_WINDOW and NEMOCLAW_MAX_TOKENS to match ^[1-9][0-9]*$ (positive integers, disallowing 0); invalid values emit a SECURITY message and return early (return 0) so overrides are skipped.
Tests / Coverage
test/nemoclaw-start.test.ts
Replaces single-case numeric-override test with a parameterized test covering invalid/zero context window, invalid/zero max tokens, invalid reasoning values, and unexpected inference API; each case asserts exit status 0, expected validation text, and that config fields and .config-hash remain unchanged.

Agent Onboarding Guarding

Layer / File(s) Summary
Protocol Markers
src/lib/agent-onboard.ts
Adds AGENT_BINARY_CHECK_PREFIX = "NEMOCLAW_AGENT_BINARY_CHECK:" and changes the sandbox availability check to emit prefixed markers: ok, not_found, not_executable, and path_mismatch:<resolved>.
Parsing / Result Handling
src/lib/agent-onboard.ts
Parses the prefixed marker line to derive checkStatus, returns { available: true } only for ok, extracts resolvedPath for path_mismatch, and uses explicit status matches for not_executable / not_found.
Tests / Coverage
src/lib/agent-onboard.test.ts
Updates the onboarding test to expect the AGENT_BINARY_CHECK_PREFIX marker and the exact if [ -x ${shellQuote(binaryPath)} ]; then / early-exit bash flow instead of older command -v/string-equality assertions.

Shields / Permissions

Layer / File(s) Summary
Documentation
src/lib/shields.ts, test/e2e/test-shields-config.sh
Updates comments and E2E test expectations to reflect OpenClaw mutable-default config permissions (sandbox:sandbox 0660/2770) and shields-down behavior.
Locking Behavior
src/lib/shields.ts
After applying locks, clears setgid on the root config directory (chmod g-s target.configDir) and enforces chmod 755 target.configDir so verification expects 755.
Tests / Coverage
test/repro-2681-group-writable.test.ts
Adds a unit test that verifies lockAgentConfig emits lock-verification commands first, then strips setgid via chmod g-s, and finally normalizes to chmod 755.

Sequence Diagram

sequenceDiagram
    participant User
    participant ValidatorScript as Validator Script
    participant RecoveryGen as Recovery Script<br/>Generator
    participant ProcessMgr as Process Manager<br/>(pkill/pgrep)
    participant EnvFile as Env File<br/>(/tmp/nemoclaw-proxy-env.sh)
    participant Guards as Guard Verifier
    participant GatewayBin as Gateway Binary

    User->>ValidatorScript: apply_model_override(CONTEXT_WINDOW, MAX_TOKENS)
    ValidatorScript->>ValidatorScript: Validate positive integers
    alt Invalid
        ValidatorScript->>User: SECURITY error / return 0
    else Valid
        ValidatorScript->>RecoveryGen: Regenerate recovery script
        RecoveryGen->>RecoveryGen: Compute safe _GATEWAY_PROC_PATTERN from gateway_command
        RecoveryGen->>User: Write recovery script (includes pattern)
        RecoveryGen->>ProcessMgr: Recovery script runs -> pkill -TERM matching pattern
        ProcessMgr->>ProcessMgr: Retry TERM, then pkill -KILL if needed
        alt Stale processes persist
            ProcessMgr->>User: Exit with GATEWAY_STALE_PROCESSES
        else Stale processes gone
            ProcessMgr->>EnvFile: Source /tmp/nemoclaw-proxy-env.sh
            EnvFile->>Guards: Provide NODE_OPTIONS
            Guards->>Guards: Verify preload guard patterns present
            alt Guards missing
                Guards->>User: ERROR and exit 1 (refuse relaunch)
            else Guards present
                Guards->>GatewayBin: Allow launch (nohup ...)
            end
        end
    end
Loading

Estimated Code Review Effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I sniff the logs, I stitch a rule,

I build a pattern, safe and cool.
I TERM, I KILL, then check the gate,
No unguarded jump will meet my fate.
—Hops secure, the sandbox waits.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 41.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix(runtime): harden overrides and gateway recovery' accurately reflects the main changes: tightening validation for runtime overrides and hardening gateway recovery logic across multiple files.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/runtime-e2e-regressions

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 25240057471
Branch: fix/runtime-e2e-regressions
Requested jobs: runtime-overrides-e2e,issue-2478-crash-loop-recovery-e2e
Summary: 0 passed, 0 failed, 22 skipped

Job Result
cloud-e2e ⏭️ skipped
cloud-inference-e2e ⏭️ skipped
cloud-onboard-e2e ⏭️ skipped
deployment-services-e2e ⏭️ skipped
diagnostics-e2e ⏭️ skipped
docs-validation-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-e2e ⏭️ skipped
inference-routing-e2e ⏭️ skipped
messaging-compatible-endpoint-e2e ⏭️ skipped
messaging-providers-e2e ⏭️ skipped
network-policy-e2e ⏭️ skipped
overlayfs-autofix-e2e ⏭️ skipped
rebuild-hermes-e2e ⏭️ skipped
rebuild-openclaw-e2e ⏭️ skipped
sandbox-operations-e2e ⏭️ skipped
sandbox-survival-e2e ⏭️ skipped
shields-config-e2e ⏭️ skipped
skill-agent-e2e ⏭️ skipped
snapshot-commands-e2e ⏭️ skipped
token-rotation-e2e ⏭️ skipped
upgrade-stale-sandbox-e2e ⏭️ skipped

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/lib/agent-runtime.ts`:
- Around line 79-82: The stale-process regex is built from just the executable
name (gatewayExecutableName) which assumes the literal token "gateway" follows
the binary; for custom gateway_command strings with arguments this produces a
non-matching pattern. Update the logic that computes staleGatewayPattern (and
calls selfSafeGatewayProcessPattern) to derive the pattern from the full custom
command string (customGatewayExecutable) rather than only the basename: parse
the custom command into executable + remaining args and pass the full command
shape (or at least the executable plus a pattern that allows arbitrary
intervening args/flags) into selfSafeGatewayProcessPattern so it matches the
actual launched process (e.g., allow any args between the executable and
eventual tokens or end-of-line). Modify selfSafeGatewayProcessPattern or its
caller accordingly (referencing gatewayExecutableName, customGatewayExecutable,
and selfSafeGatewayProcessPattern) so pkill/pgrep can correctly find stale
custom-launch processes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 64f8c0e8-add5-49fc-86be-bf4eae6127fb

📥 Commits

Reviewing files that changed from the base of the PR and between 19b1b4f and 26b05a1.

📒 Files selected for processing (5)
  • scripts/nemoclaw-start.sh
  • src/lib/agent-runtime.test.ts
  • src/lib/agent-runtime.ts
  • src/nemoclaw.ts
  • test/nemoclaw-start.test.ts

Comment thread src/lib/agent-runtime.ts Outdated
@ericksoa ericksoa changed the title Fix runtime E2E regressions after PR 2781 fix(runtime): harden overrides and gateway recovery May 2, 2026
ericksoa added 2 commits May 1, 2026 18:48
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 25241511224
Branch: fix/runtime-e2e-regressions
Requested jobs: all (no filter)
Summary: 4 passed, 1 failed, 1 skipped

Job Result
cloud-e2e ⚠️ cancelled
cloud-inference-e2e ✅ success
cloud-onboard-e2e ⚠️ cancelled
deployment-services-e2e ⚠️ cancelled
diagnostics-e2e ⚠️ cancelled
docs-validation-e2e ✅ success
gpu-e2e ⏭️ skipped
hermes-e2e ❌ failure
inference-routing-e2e ⚠️ cancelled
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
overlayfs-autofix-e2e ⚠️ cancelled
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled
shields-config-e2e ⚠️ cancelled
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ⚠️ cancelled
token-rotation-e2e ⚠️ cancelled
upgrade-stale-sandbox-e2e ⚠️ cancelled

Failed jobs: hermes-e2e. Check run artifacts for logs.

@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 25241683621
Branch: fix/runtime-e2e-regressions
Requested jobs: hermes-e2e
Summary: 1 passed, 0 failed, 21 skipped

Job Result
cloud-e2e ⏭️ skipped
cloud-inference-e2e ⏭️ skipped
cloud-onboard-e2e ⏭️ skipped
deployment-services-e2e ⏭️ skipped
diagnostics-e2e ⏭️ skipped
docs-validation-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-e2e ✅ success
inference-routing-e2e ⏭️ skipped
messaging-compatible-endpoint-e2e ⏭️ skipped
messaging-providers-e2e ⏭️ skipped
network-policy-e2e ⏭️ skipped
overlayfs-autofix-e2e ⏭️ skipped
rebuild-hermes-e2e ⏭️ skipped
rebuild-openclaw-e2e ⏭️ skipped
sandbox-operations-e2e ⏭️ skipped
sandbox-survival-e2e ⏭️ skipped
shields-config-e2e ⏭️ skipped
skill-agent-e2e ⏭️ skipped
snapshot-commands-e2e ⏭️ skipped
token-rotation-e2e ⏭️ skipped
upgrade-stale-sandbox-e2e ⏭️ skipped

@ericksoa ericksoa self-assigned this May 2, 2026
@ericksoa ericksoa added dependencies Pull requests that update a dependency file integration: hermes Hermes integration behavior v0.0.33 labels May 2, 2026
@ericksoa

ericksoa commented May 2, 2026

Copy link
Copy Markdown
Contributor Author

Automated PR review summary

Reviewed PR #2874: fix(runtime): harden overrides and gateway recovery

Recommendation

  • Recommendation: PASS
  • Highest observed severity: low
  • Block merge: no
  • Why: The main PR risks were incomplete stale gateway cleanup and unsafe recovery relaunch with missing guards. In sandbox-backed probes, the derived regex matched a custom launcher process shape and the recovery logic refused relaunch when NODE_OPTIONS guards were absent. A host-level extraction of apply_model_override also preserved config and hash under invalid context window input. Remaining uncertainty is low because the most failure-sensitive claims were exercised directly or near-directly.
  • Reviewer summary: Reviewed PR fix(runtime): harden overrides and gateway recovery #2874 with targeted adversarial probes in the installed OpenShell environment. The highest-risk runtime claims I could exercise held: full-command stale-process matching worked for a custom gateway launcher, guard verification refused relaunch when a present proxy env file lacked required preloads, and a constrained host-level probe showed invalid supplemental overrides remained no-ops instead of mutating config. I did not find a PR-specific regression that should block merge.

Installation and setup findings

  • Local-checkout Nemoclaw install succeeded closely following the real installer path. I used ./install.sh with NEMOCLAW_REPO_ROOT pointed at /workspace/nemoclaw plus non-interactive build-provider auth, then verified the resulting NemoClaw-managed sandbox 'my-assistant' with nemoclaw list/status, openshell sandbox ssh-config, SSH exec (2+2=4), and an in-sandbox OpenClaw query that returned 4. The run timed out late in onboarding’s final policy step, so the recorded onboarding session remains in_progress despite the working installed state.

What was validated

  • The PR revision was checked out in an isolated review environment.
  • The local checkout was installed using the repository installer flow as closely as the environment allowed.
  • Adversarial, PR-specific probes were then run against the installed environment and relevant repository context.
  • Diff summary:
 scripts/nemoclaw-start.sh     |  7 +++---
 src/lib/agent-onboard.test.ts |  8 +++---
 src/lib/agent-onboard.ts      | 30 ++++++++++++++--------
 src/lib/agent-runtime.test.ts | 42 ++++++++++++++++++++++++++++---
 src/lib/agent-runtime.ts      | 52 ++++++++++++++++++++++----------------
 src/nemoclaw.ts               | 20 ++++-----------
 test/nemoclaw-start.test.ts   | 58 ++++++++++++++++++++++++++++++++++---------
 7 files changed, 147 insertions(+), 70 deletions(-)

Failing tests and unresolved impact

  • No failing adversarial tests were captured.

Passing tests and why they mattered

Passing test 1: Custom gateway stale-process pattern matches real full command and TERM alone does not clear a resistant stale process

  • What was tested: The PR’s new full-command stale-process pattern for custom gateway_command values will actually match a running custom launcher process, enabling the recovery pkill/pgrep block to detect it instead of missing it.
  • Why it mattered: If false, recovery can leave duplicate or stale custom gateway processes alive, causing crash loops, duplicate listeners, or misleading 'recovered' state.
  • Observed result: End-to-end in OpenShell sandbox. Spawned /tmp/pr2874bin/custom-launch --mode recovery --port 19000; pgrep -af '[c]ustom-launch[[:space:]]+--mode[[:space:]]+recovery([[:space:]]|$)' matched PID 780 before kill. After pkill -TERM, process still ran because script trapped TERM, proving the pattern matched a real stale process and the PR’s later KILL/escalation path is meaningful.
  • Command: scp /tmp/pr2874-sandbox-stale-setup.sh; ssh sandbox 'bash /tmp/pr2874-sandbox-stale-setup.sh' ; ssh sandbox 'pgrep/pkill with derived pattern'
  • Recommended follow-up coverage: Add/keep an integration regression test that launches a real custom gateway_command with extra args and asserts the generated stale-process regex matches the actual process argv, not just a synthetic string.

Passing test 2: Recovery refuses relaunch when proxy env exists but required NODE_OPTIONS guards are missing

  • What was tested: If /tmp/nemoclaw-proxy-env.sh exists but omits the required safety-net and ciao preloads, the hardened recovery path aborts instead of relaunching an unguarded gateway.
  • Why it mattered: If false, the PR would still permit unsafe recovery relaunches that bypass the claimed guard enforcement, reopening the runtime protection regression from [DGX Spark] Gateway crash loop on startup: @homebridge/ciao networkInterfaces() returns EPERM in OpenShell sandbox #2478.
  • Observed result: Sandbox-backed probe using the PR’s shell logic. With a present env file containing NODE_OPTIONS="", the guard check returned non-zero, wrote [gateway-recovery] ERROR: ... refusing unguarded gateway relaunch (#2478) to /tmp/gateway.log, and no launch marker file was created.
  • Command: ssh sandbox 'write empty /tmp/nemoclaw-proxy-env.sh; run extracted recovery-guard block'
  • Recommended follow-up coverage: This should remain an integration/regression test because correctness depends on shell ordering, env sourcing, and launch suppression rather than pure helper logic.

Passing test 3: Invalid supplemental overrides remain atomic no-ops without config or hash mutation

  • What was tested: The tightened override validation returns early before relaxing/writing config when supplemental fields are invalid, so model/config/hash state remains unchanged.
  • Why it mattered: If false, malformed runtime override input could still partially mutate config or integrity metadata, undermining the PR’s core safety claim.
  • Observed result: Weaker host-level evidence (function extraction, not full sandbox entrypoint): with NEMOCLAW_MODEL_OVERRIDE=adversarial-model and NEMOCLAW_CONTEXT_WINDOW=0, config SHA stayed e17a48... before/after, hash file content stayed identical, primary model remained old-model, and contextWindow remained 1024.
  • Command: bash /tmp/pr2874-host-override-probe.sh
  • Recommended follow-up coverage: Keep as a regression test close to the shell entrypoint because the safety property is about early-return ordering relative to chmod/write/hash operations.

Bottom line

  • Based on the install evidence and adversarial probes, this PR looks reasonable to approve.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@test/repro-2681-group-writable.test.ts`:
- Around line 204-210: The test currently checks commands contains
["chmod","755","/sandbox/.openclaw"] which may match an earlier chmod; change it
to locate the index of that exact chmod (e.g. findIndex over commands comparing
command.join("\0") to ["chmod","755","/sandbox/.openclaw"].join("\0")) and
assert that this chmod755Index is greater than stripSetgidIndex (and still
greater than stateDirLockIndex if needed) so the post-strip ordering is
enforced; use the existing commands array and the
stripSetgidIndex/stateDirLockIndex symbols to implement this assertion.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: b60d4344-6aff-4fab-8ef6-2fb6f9dec0c0

📥 Commits

Reviewing files that changed from the base of the PR and between b4381bd and 5bad2cc.

📒 Files selected for processing (3)
  • src/lib/shields.ts
  • test/e2e/test-shields-config.sh
  • test/repro-2681-group-writable.test.ts

Comment thread test/repro-2681-group-writable.test.ts
@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 25241876578
Branch: fix/runtime-e2e-regressions
Requested jobs: all (no filter)
Summary: 20 passed, 1 failed, 1 skipped

Job Result
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
deployment-services-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
gpu-e2e ⏭️ skipped
hermes-e2e ✅ success
inference-routing-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
shields-config-e2e ❌ failure
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
token-rotation-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success

Failed jobs: shields-config-e2e. Check run artifacts for logs.

@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 25242649869
Branch: fix/runtime-e2e-regressions
Requested jobs: shields-config-e2e
Summary: 1 passed, 0 failed, 21 skipped

Job Result
cloud-e2e ⏭️ skipped
cloud-inference-e2e ⏭️ skipped
cloud-onboard-e2e ⏭️ skipped
deployment-services-e2e ⏭️ skipped
diagnostics-e2e ⏭️ skipped
docs-validation-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-e2e ⏭️ skipped
inference-routing-e2e ⏭️ skipped
messaging-compatible-endpoint-e2e ⏭️ skipped
messaging-providers-e2e ⏭️ skipped
network-policy-e2e ⏭️ skipped
overlayfs-autofix-e2e ⏭️ skipped
rebuild-hermes-e2e ⏭️ skipped
rebuild-openclaw-e2e ⏭️ skipped
sandbox-operations-e2e ⏭️ skipped
sandbox-survival-e2e ⏭️ skipped
shields-config-e2e ✅ success
skill-agent-e2e ⏭️ skipped
snapshot-commands-e2e ⏭️ skipped
token-rotation-e2e ⏭️ skipped
upgrade-stale-sandbox-e2e ⏭️ skipped

…ssions

# Conflicts:
#	src/lib/agent-onboard.test.ts
#	src/lib/agent-onboard.ts
#	src/lib/agent-runtime.test.ts
#	src/lib/agent-runtime.ts
#	src/nemoclaw.ts
#	test/e2e/test-shields-config.sh
@ericksoa ericksoa added the fix label May 2, 2026
@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 25243698352
Branch: fix/runtime-e2e-regressions
Requested jobs: all (no filter)
Summary: 16 passed, 5 failed, 1 skipped

Job Result
cloud-e2e ❌ failure
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
deployment-services-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
gpu-e2e ⏭️ skipped
hermes-e2e ✅ success
inference-routing-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ❌ failure
sandbox-operations-e2e ❌ failure
sandbox-survival-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ❌ failure
snapshot-commands-e2e ✅ success
token-rotation-e2e ✅ success
upgrade-stale-sandbox-e2e ❌ failure

Failed jobs: cloud-e2e, skill-agent-e2e, sandbox-operations-e2e, rebuild-openclaw-e2e, upgrade-stale-sandbox-e2e. Check run artifacts for logs.

@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 25244507003
Branch: fix/runtime-e2e-regressions
Requested jobs: skill-agent-e2e,cloud-e2e,rebuild-openclaw-e2e,sandbox-operations-e2e,launchable-smoke-e2e,issue-2478-crash-loop-recovery-e2e,runtime-overrides-e2e,upgrade-stale-sandbox-e2e
Summary: 5 passed, 0 failed, 17 skipped

Job Result
cloud-e2e ✅ success
cloud-inference-e2e ⏭️ skipped
cloud-onboard-e2e ⏭️ skipped
deployment-services-e2e ⏭️ skipped
diagnostics-e2e ⏭️ skipped
docs-validation-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-e2e ⏭️ skipped
inference-routing-e2e ⏭️ skipped
messaging-compatible-endpoint-e2e ⏭️ skipped
messaging-providers-e2e ⏭️ skipped
network-policy-e2e ⏭️ skipped
overlayfs-autofix-e2e ⏭️ skipped
rebuild-hermes-e2e ⏭️ skipped
rebuild-openclaw-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ⏭️ skipped
shields-config-e2e ⏭️ skipped
skill-agent-e2e ✅ success
snapshot-commands-e2e ⏭️ skipped
token-rotation-e2e ⏭️ skipped
upgrade-stale-sandbox-e2e ✅ success

@ericksoa
ericksoa merged commit 32d3ab3 into main May 2, 2026
13 checks passed
@wscurran wscurran added the bug-fix PR fixes a bug or regression label Jun 3, 2026
@wscurran wscurran added chore Build, CI, dependency, or tooling maintenance and removed fix chore Build, CI, dependency, or tooling maintenance labels Jun 3, 2026
@cv
cv deleted the fix/runtime-e2e-regressions branch June 28, 2026 00:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug-fix PR fixes a bug or regression dependencies Pull requests that update a dependency file integration: hermes Hermes integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants