Skip to content

fix(sandbox): name the quarantined gateway relaunch and its repair - #7869

Merged
prekshivyas merged 1 commit into
mainfrom
fix/gateway-relaunch-quarantine-repair-7801
Jul 30, 2026
Merged

fix(sandbox): name the quarantined gateway relaunch and its repair#7869
prekshivyas merged 1 commit into
mainfrom
fix/gateway-relaunch-quarantine-repair-7801

Conversation

@yanyunl1991

@yanyunl1991 yanyunl1991 commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Supersedes #7816. That branch could not be rewritten (the No force push ruleset
covers every branch except main), so this is a fresh branch carrying the same change as
a single GitHub-Verified commit, rebased onto current main. #7816 had 68/68 CI green;
the only differences here are the signed history, the rebase, and the three commits
squashed into one.

Summary

An unsupported edit of a protected Hermes configuration file leaves the sandbox
in a state the CLI never names: the in-sandbox supervisor refuses every gateway
start and quarantines relaunch, but gateway restart reports the generic
health timeout layer and recover prints only "check /tmp/gateway.log". This
PR classifies the quarantine as its own failure layer and makes all three
restart/recovery surfaces print the supported repair command.

Closes #7801.

Reproduction

Run on our Ubuntu 24.04 x86_64 test host (no GPU), against a Hermes sandbox
onboarded from main in this run:

# 1. healthy Hermes sandbox with protected configuration integrity in effect
nemoclaw <name> gateway restart          # exit 0, gateway healthy

# 2. modify a protected Hermes configuration file outside a supported command
#    (as the ordinary sandbox user, the same shape as the shipped
#    phase-5 Hermes e2e drift step)
printf '\n# unsupported manual edit\n' >> /sandbox/.hermes/config.yaml

# 3. restart / recover the gateway
nemoclaw <name> gateway restart
nemoclaw <name> recover

Environment

  • Test machine: our Ubuntu 24.04 x86_64 test host (no GPU)
  • Linux 6.14 x86_64, Node v22.22.2, Docker 28.2.2, OpenShell 0.0.85
  • NemoClaw main HEAD eeab81cc5542902538c97db63c132c0fdbd4341c at repro time; this branch is rebased onto 376beb50b
  • Sandbox: Hermes Agent v0.18.0, provider ollama-local, model llama3.1:8b
  • The reporter is on the direct root-entrypoint topology (strict hash always
    enforced); this repro is the OpenShell-managed topology, where the same
    in-sandbox refusal arrives through the non-root startup guard. Both end in
    the same quarantined supervisor.

Observed on main (before fix)

nemoclaw <name> gateway restart — exit 1:

  Restarting Hermes Agent gateway in '<name>'...
  Failure layer: health timeout - gateway restart failed for '<name>'.
  GATEWAY_HEALTH_TIMEOUT
  NEMOCLAW_CONTROL_STAGE=await-replacement
  NEMOCLAW_SUPERVISOR_PID=42
  NEMOCLAW_GATEWAY_PID=0
  NEMOCLAW_START_LOG=[gateway] Hermes gateway respawned (pid 18424)
  NEMOCLAW_START_LOG=[SECURITY] Hermes automatic respawn is quarantined until MCP integrity is restored by rebuilding the sandbox

nemoclaw <name> recover — exit 1:

  Probe failed: Hermes Agent gateway is not running in '<name>' and automatic recovery failed.
  Check /tmp/gateway.log inside the sandbox for details.

The gateway did not time out — it was refused and the supervisor stopped
relaunching. The only surviving signal is a raw forwarded log line that
attributes the refusal to MCP integrity, and neither command names a repair.

Observed on fix/... (after fix)

nemoclaw <name> gateway restart — exit 1:

  Restarting Hermes Agent gateway in '<name>'...
  Failure layer: relaunch quarantined - gateway restart failed for '<name>'.
  GATEWAY_HEALTH_TIMEOUT
  NEMOCLAW_CONTROL_STAGE=await-replacement
  NEMOCLAW_SUPERVISOR_PID=42
  NEMOCLAW_GATEWAY_PID=0
  NEMOCLAW_START_LOG=[gateway] Hermes gateway respawned (pid 19396)
  NEMOCLAW_START_LOG=[SECURITY] Hermes automatic respawn is quarantined until MCP integrity is restored by rebuilding the sandbox
  The in-sandbox supervisor quarantined gateway relaunch after a startup refusal. Retrying the restart cannot clear it.
  Restore the registered configuration and refresh its integrity metadata with `nemoclaw <name> rebuild --yes`.
  Then make intended changes through supported commands such as `nemoclaw <name> config set` or `nemoclaw inference set --sandbox <name>`, which update the configuration and its hashes together.

nemoclaw <name> recover — exit 1:

  Probe failed: Hermes Agent gateway is not running in '<name>' and automatic recovery failed.
  The in-sandbox supervisor quarantined gateway relaunch after a startup refusal. Retrying the restart cannot clear it.
  Restore the registered configuration and refresh its integrity metadata with `nemoclaw <name> rebuild --yes`.
  Then make intended changes through supported commands such as `nemoclaw <name> config set` or `nemoclaw inference set --sandbox <name>`, which update the configuration and its hashes together.

The advertised repair was then executed end to end on the same sandbox to
confirm it is not just plausible advice:

nemoclaw <name> rebuild --yes            # exit 0
grep -c 'unsupported manual edit' /sandbox/.hermes/config.yaml   # 0 (drift gone)
nemoclaw <name> gateway restart          # exit 0, health passed
nemoclaw <name> recover                  # exit 0, probe complete

Analysis

classifyGatewayRestartFailure in src/lib/actions/sandbox/gateway-restart.ts
matched GATEWAY_HEALTH_TIMEOUT and stopped there. That marker is what the
managed controller emits whenever no replacement gateway appears within the
await-replacement stage, including when the supervisor deliberately stopped
launching one. In the OpenShell-managed topology, prepare_hermes_nonroot_runtime
in agents/hermes/start.sh reaches the drifted config through
inspect_hermes_mcp_integrity, so the refusal is reported as MCP drift, and
recover_hermes_gateway_current_user then calls
quarantine_hermes_managed_gateway_relaunch. The quarantine lines are
allowlisted for forwarding by scripts/managed-gateway-control.py, so the host
already receives the decisive evidence — it just never classified it.

Two consequences followed. printGatewayRestartFailure printed the layer plus
raw detail with no remediation (only the MCP reconciliation refusal layer had
any), and printHostManagedGatewayRecoveryHints in process-recovery.ts fell
into its generic branch, which tells the operator to retry
nemoclaw <name> gateway restart — a retry that re-reads the same drifted file
and cannot succeed. On the recover path the situation was worse: managed
recovery runs with quiet: true, so runSandboxConnectProbe in connect.ts
discarded the classified layer entirely and fell through to the generic
"check /tmp/gateway.log" wedge message.

Fix

  • New relaunch quarantined failure layer, matched on the four quarantine
    phrases the Hermes supervisor emits. It is classified before the MCP-drift
    and health-timeout branches because a quarantine is the strictly more specific
    and terminal fact: those two layers are how the quarantine surfaces, not what
    it is. Output without a quarantine line keeps its previous layer.
  • gatewayIntegrityRepairLines() is the single source of the repair text,
    shared by the new layer and the pre-existing config hash mismatch layer.
    Both are deterministic refusals of the same protected-configuration contract,
    and rebuild --yes is the documented command that restores the registered
    configuration, refreshes the integrity hashes, and returns the gateway in one
    transaction.
  • printGatewayRestartFailure emits it. The remediation block moved outside the
    empty-detail early return, so a controller result with no detail — exactly the
    case where the operator has nothing else — still gets the repair. This also
    makes the existing MCP remediation reachable on empty detail.
  • printHostManagedGatewayRecoveryHints returns early for both layers instead
    of advising a retry that cannot succeed.
  • checkAndRecoverSandboxProcesses now returns recoveryFailureLayer on its two
    terminal failure paths, and printGatewayIntegrityRepairGuidance (added next
    to the sibling exitOnSecretBoundaryRefusal / exitOnMcpReconciliationRefusal
    helpers) lets the quiet probe path behind recover report it. It returns
    false for retryable layers, so the #4710 wedge diagnostics stay in charge
    of everything else.
  • mcp-bridge-adapter-hermes.ts counts the new layer as a terminal integrity
    failure, so an MCP mutation against a quarantined sandbox still fails closed
    rather than falling through to the retry path.

No classification is weakened and no refusal is relaxed: the managed controller
still declines to treat a mutable compatibility hash as a trust anchor, which
is the intentional behavior documented in
docs/manage-sandboxes/gateway-lifecycle-control.mdx. The change is diagnostic
only — the same commands still fail with the same exit codes.

Whole-class review of the GatewayRestartFailureLayer consumers

Site Disposition
gateway-restart.ts printGatewayRestartFailure fixed
process-recovery.ts printHostManagedGatewayRecoveryHints fixed
connect.ts runSandboxConnectProbe terminal branch (recover, connect --probe-only) fixed
mcp-bridge-adapter-hermes.ts terminalIntegrityFailure fixed
inference-set-gateway-restart.ts not affected — uses the layer as an audit string, and its retry message is layer-independent
status-preflight.ts / status-snapshot.ts not affected — different SandboxStatusFailureLayer union with its own classifier; never sees restart output
adapters/openshell/restore-gateway-pairing.ts not affected — unrelated RestoreGatewayPairingFailureLayer union
doctor not changed — its serving-process check is documented as not implemented ([info] Serving process: not checked), so gateway-process health in doctor is a separate feature rather than a regression introduced here

Tests added (gateway-restart-quarantine-repair.test.ts) pin: every
quarantine line the supervisor can emit; the verbatim controller output captured
above classifying as a quarantine rather than a health timeout; quarantine
winning over a co-occurring MCP-drift marker; the regression lock that
health-timeout, MCP-drift, config-hash and supervisor-not-running output without
a quarantine line keep their existing layers; the repair text naming
rebuild --yes for both integrity layers; the repair surviving an empty
controller detail; retryable layers still getting no rebuild instruction; the
MCP remediation still emitted; and a contract check that the matched marker
substrings still exist verbatim in agents/hermes/start.sh and its forwarding
allowlist in scripts/managed-gateway-control.py.

Changes

  • src/lib/actions/sandbox/gateway-restart.ts: new relaunch quarantined layer, quarantine markers, shared repair lines, repair emitted outside the empty-detail guard
  • src/lib/actions/sandbox/process-recovery.ts: repair branch in the recovery hints; recoveryFailureLayer returned from the terminal failure paths
  • src/lib/actions/sandbox/connect-boundary-refusal.ts: printGatewayIntegrityRepairGuidance next to the sibling refusal helpers
  • src/lib/actions/sandbox/connect.ts: recover / probe path reports the repair instead of the generic gateway-log message
  • src/lib/actions/sandbox/mcp-bridge-adapter-hermes.ts: new layer treated as a terminal integrity failure
  • src/lib/actions/sandbox/gateway-restart-quarantine-repair.test.ts: new regression tests
  • docs/reference/commands.mdx: failure-layer list updated with the new layer
  • docs/reference/troubleshooting.mdx: new relaunch quarantined section with the repair

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Verification

  • npx prek run --all-files passes
  • npm test passes (touched files at minimum)
  • Tests added or updated for new or changed behavior
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes
  • make docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

AI Disclosure

  • AI-assisted — tool: Claude Code

Signed-off-by: Yanyun Liao yanyunl@nvidia.com

Summary by CodeRabbit

  • Bug Fixes

    • Improved detection of gateway relaunch quarantine failures during restart, recovery, and connection checks.
    • Displays clear repair guidance instead of suggesting repeated retries when recovery is deterministically blocked.
    • Recommends rebuilding the sandbox to restore managed configuration integrity.
    • Prevents MCP configuration changes when the gateway is in a terminal integrity failure state.
  • Documentation

    • Added troubleshooting guidance for relaunch quarantined failures.
    • Clarified when to use rebuild and how to apply future configuration changes safely.

An unsupported edit of a protected Hermes configuration file makes the
in-sandbox supervisor refuse every gateway start and then quarantine
relaunch. The managed controller only observes that no replacement
appeared, so `gateway restart` reported the generic `health timeout`
layer, `recover` printed nothing but "check /tmp/gateway.log", and the
one forwarded supervisor line blamed MCP integrity. None of the three
surfaces named the state that blocks recovery or the supported repair,
so the sandbox looked unrecoverable without administrator assistance.

Classify the supervisor's quarantine lines as a dedicated
`relaunch quarantined` failure layer ahead of the health-timeout and
MCP-drift branches they masquerade as, and give that layer plus the
existing `config hash mismatch` layer a shared repair block naming
`rebuild --yes` and the supported config commands. Report the classified
layer to the quiet probe path behind `recover` through an
`onRecoveryFailureLayer` callback, so it explains why recovery is not
retryable without changing the recovery result shape, and treat the new
layer as terminal for Hermes MCP mutation.

Fixes #7801

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a6673505-16f8-4f0b-8f78-1caa5a4518d8

📥 Commits

Reviewing files that changed from the base of the PR and between 376beb5 and 1f0b924.

📒 Files selected for processing (9)
  • docs/reference/commands.mdx
  • docs/reference/troubleshooting.mdx
  • src/lib/actions/sandbox/connect-boundary-refusal.ts
  • src/lib/actions/sandbox/connect-flow.test.ts
  • src/lib/actions/sandbox/connect.ts
  • src/lib/actions/sandbox/gateway-restart-quarantine-repair.test.ts
  • src/lib/actions/sandbox/gateway-restart.ts
  • src/lib/actions/sandbox/mcp-bridge-adapter-hermes.ts
  • src/lib/actions/sandbox/process-recovery.ts

📝 Walkthrough

Walkthrough

The gateway restart flow classifies supervisor relaunch quarantine failures, provides rebuild-based integrity repair guidance, propagates failure layers through recovery and connect flows, blocks Hermes MCP mutations for terminal integrity failures, and documents the new behavior.

Changes

Gateway integrity repair

Layer / File(s) Summary
Failure classification and remediation
src/lib/actions/sandbox/gateway-restart.ts, src/lib/actions/sandbox/gateway-restart-quarantine-repair.test.ts, docs/reference/commands.mdx, docs/reference/troubleshooting.mdx
Relaunch quarantine markers classify a terminal failure layer, restart diagnostics emit rebuild guidance, and tests and documentation cover the repair behavior.
Recovery and connect propagation
src/lib/actions/sandbox/process-recovery.ts, src/lib/actions/sandbox/connect-boundary-refusal.ts, src/lib/actions/sandbox/connect.ts, src/lib/actions/sandbox/connect-flow.test.ts
Recovery reports failure layers through a callback, while probe-only connect prints integrity repair guidance and exits before generic wedge diagnostics.
MCP mutation guard
src/lib/actions/sandbox/mcp-bridge-adapter-hermes.ts
Relaunch quarantine is treated as a terminal integrity failure that prevents Hermes MCP mutation.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant connectSandbox
  participant checkAndRecoverSandboxProcesses
  participant printGatewayIntegrityRepairGuidance
  connectSandbox->>checkAndRecoverSandboxProcesses: register recovery failure callback
  checkAndRecoverSandboxProcesses-->>connectSandbox: report relaunch quarantined
  connectSandbox->>printGatewayIntegrityRepairGuidance: print rebuild guidance
Loading

Possibly related issues

  • NVIDIA/NemoClaw issue 7865 — Covers the same Hermes relaunch-quarantine failure and related classification and rebuild guidance.

Possibly related PRs

  • NVIDIA/NemoClaw#7816 — Updates the same gateway restart classification, integrity guidance, recovery propagation, tests, and documentation paths.

Suggested labels: integration: hermes, area: sandbox, bug-fix

Suggested reviewers: cv, ericksoa, brandonpelfrey

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% 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 is specific and matches the main change: quarantined gateway relaunch handling and repair guidance.
Linked Issues check ✅ Passed The PR adds the quarantined failure path and a supported rebuild repair command, satisfying the safe diagnosis and recovery goal in #7801.
Out of Scope Changes check ✅ Passed The changes stay focused on quarantine classification, recovery guidance, tests, and docs, with no clear unrelated additions.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/gateway-relaunch-quarantine-repair-7801

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

@github-code-quality

github-code-quality Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 1f0b924 in the fix/gateway-relaunch... branch remains at 96%, unchanged from commit 376beb5 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 1f0b924 in the fix/gateway-relaunch... branch remains at 81%, unchanged from commit 376beb5 in the main branch.

Show a code coverage summary of the most impacted files.
File main 376beb5 fix/gateway-relaunch... 1f0b924 +/-
src/lib/onboard...box-prebuild.ts 92% 74% -18%
src/lib/actions...ocker-health.ts 82% 65% -17%
src/lib/actions...confirmation.ts 79% 69% -10%
src/lib/domain/.../connect-env.ts 97% 89% -8%
src/lib/onboard...box-gpu-mode.ts 97% 92% -5%
src/lib/actions...light-guards.ts 90% 86% -4%
src/lib/actions...ess-recovery.ts 81% 79% -2%
src/lib/onboard/preflight.ts 80% 80% 0%
src/lib/onboard...host-anchors.ts 90% 94% +4%
src/lib/onboard/docker-cdi.ts 70% 80% +10%

Updated July 30, 2026 02:52 UTC

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: Review the warnings below.
Findings: 0 blockers · 1 warning · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 1 warning · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized E2E selections differ; Nemotron reported the same number of blockers, 1 fewer warning, the same number of suggestions.

Nemotron output stays in workflow artifacts and does not change the assessment above.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: full-e2e, hermes-e2e, onboard-repair, onboard-resume

1 optional E2E recommendation
  • rebuild-hermes
1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Cover recovery failure-layer callback propagation

  • Location: src/lib/actions/sandbox/process-recovery.ts:1300
  • Category: tests
  • Problem: The changed recovery code reports the classified failure layer through an optional callback when managed recovery returns no result, but no checked-in process-recovery test verifies that a quarantined controller result reaches that callback.
  • Impact: A future refactor can drop or misclassify the callback while connect --probe-only falls back to generic wedge diagnostics instead of showing the deterministic rebuild repair.
  • Recommendation: Add a mocked-boundary test for a controller response classified as `relaunch quarantined` when managed recovery returns no result. Assert that the callback receives `relaunch quarantined` and the process result remains failed.
  • Verification: Inspect a new test in `src/lib/actions/sandbox/process-recovery.test.ts` that calls `checkAndRecoverSandboxProcesses` with a quarantined supervisor response and asserts callback delivery.
  • Test coverage: Mock `checkAndRecoverSandboxProcesses` dependencies with allowlisted quarantine output that makes managed recovery return no result, then assert `onRecoveryFailureLayer` receives `relaunch quarantined` and recovery returns `recovered: false`.
  • Evidence: `src/lib/actions/sandbox/process-recovery.ts:1298-1303` invokes `onRecoveryFailureLayer` when post-recovery gateway health fails. `src/lib/actions/sandbox/process-recovery.ts:1401-1404` invokes `onRecoveryFailureLayer` when managed recovery returns no result. `src/lib/actions/sandbox/process-recovery.test.ts` covers recovery settling but has no test of `checkAndRecoverSandboxProcesses` callback delivery. `src/lib/actions/sandbox/connect-flow.test.ts:501-505` only simulates callback delivery by mocking the callee. `src/lib/actions/sandbox/process-recovery.ts:491-492` classifies the failed controller response and invokes `onFailureLayer` before `recoverSandboxProcesses` returns null. `src/lib/actions/sandbox/process-recovery.ts:1298-1303` forwards `managedRecoveryFailureLayer` after post-recovery health failure, but the layer remains null after an authenticated recovery marker. `src/lib/actions/sandbox/process-recovery.ts:1401-1404` forwards the classified layer when managed recovery returns null.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Exact-head maintainer security review for 1f0b9248f424efa7242f5f09142feb8d8589844c: PASS.

  1. Secrets and credentials: PASS — no credential material or logging changes.
  2. Input validation: PASS — classification matches fixed, allowlisted supervisor quarantine phrases and preserves sanitization.
  3. Authentication and authorization: PASS — no trust rule is relaxed; quarantined Hermes MCP mutation now fails closed.
  4. Dependencies: PASS — no dependency or supply-chain change.
  5. Error handling and logging: PASS — the terminal state is classified ahead of its generic timeout/MCP symptoms and emits supported repair guidance.
  6. Cryptography and data protection: PASS — no cryptographic or protected-data path changes.
  7. Configuration and defaults: PASS — commands and exit behavior are unchanged; guidance points to the existing transactional rebuild path and preserves shell quoting.
  8. Security testing: PASS with a non-blocking depth warning — marker coverage, precedence, retained legacy layers, remediation, empty-detail output, and probe-only behavior are covered. A direct process-recovery callback test would improve locality, but the production callback is a straight handoff from the tested classifier.
  9. System security: PASS — the change remains diagnostic and makes the terminal integrity boundary stricter for MCP mutation.

The deterministic gate reports allPass: true: 54 current checks green, current base, one GitHub-Verified commit, and no unresolved major/critical finding. No waiver is required.

@cjagwani

Copy link
Copy Markdown
Collaborator

Current-base handoff after main advanced to da1b103: exact head 1f0b924 remains approved with a PASS security review, but maintainer edits are disabled and the deterministic gate needs current-base evidence. Please refresh it; I will re-gate the next head after one hour of quiet. This is a plain status comment, not Changes Requested.

@cjagwani

Copy link
Copy Markdown
Collaborator

Correction to my prior handoff: conflict-free base refreshes are explicitly waived. Please do not merge main solely for base currency; preserving exact-head CI/E2E and documentation receipts is preferred unless GitHub reports a real conflict or reviewed behavior requires a change. The existing approval/review evidence remains in force, and I will continue monitoring mergeability. This is a plain coordination comment, not Changes Requested.

@github-actions github-actions Bot added v0.0.99 and removed v0.0.98 labels Jul 30, 2026
@prekshivyas
prekshivyas merged commit b57f4d2 into main Jul 30, 2026
76 of 77 checks passed
@prekshivyas
prekshivyas deleted the fix/gateway-relaunch-quarantine-repair-7801 branch July 30, 2026 17:25
@sandl99 sandl99 mentioned this pull request Jul 31, 2026
23 tasks
sandl99 added a commit that referenced this pull request Jul 31, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Adds the canonical July 30 release entry for `v0.0.99` before the
release tag is captured.
The entry covers all 37 merged PRs since `v0.0.98` and bounds
experimental or dormant work without presenting it as supported
behavior.

## Changes

- Adds `docs/changelog/2026-07-30.mdx` with the exact `## v0.0.99`
heading, parser-safe MDX SPDX comment, summary, detailed release
bullets, and published documentation routes.
- Records user-visible recovery, snapshot, shared-route, Hermes,
readiness, inference, image, documentation, and release E2E changes.
- States that the managed-image selection and startup-profile contracts
remain dormant and do not activate buildless onboarding.

Source summary:

- [#7972](#7972) ->
`docs/changelog/2026-07-30.mdx`: Records restored managed OpenClaw
configuration modes during recovery.
- [#7834](#7834) ->
`docs/changelog/2026-07-30.mdx`: Records clone-bound pairing
verification after snapshot restore.
- [#7975](#7975) ->
`docs/changelog/2026-07-30.mdx`: Records managed startup recovery
coverage.
- [#7960](#7960) ->
`docs/changelog/2026-07-30.mdx`: Records dormant startup-profile
coordination without activating a supported surface.
- [#7856](#7856) ->
`docs/changelog/2026-07-30.mdx`: Records persistence of the
credential-free OpenClaw startup command.
- [#7959](#7959) ->
`docs/changelog/2026-07-30.mdx`: Records dormant startup-profile
construction without changing onboarding.
- [#7946](#7946) ->
`docs/changelog/2026-07-30.mdx`: Records the internal startup-profile
schema and transport contract.
- [#7951](#7951) ->
`docs/changelog/2026-07-30.mdx`: Records platform-pull cleanup before
managed-image validation.
- [#7949](#7949) ->
`docs/changelog/2026-07-30.mdx`: Records rejection of retained Hermes
`uv` build cache metadata.
- [#7597](#7597) ->
`docs/changelog/2026-07-30.mdx`: Records separate command and agent
first-turn latency evidence.
- [#7931](#7931) ->
`docs/changelog/2026-07-30.mdx`: Records focused E2E replacement
evidence for retired selectors.
- [#7950](#7950) ->
`docs/changelog/2026-07-30.mdx`: Records exclusion of build-only
BuildKit telemetry from the Deep Agents Code probe.
- [#7665](#7665) ->
`docs/changelog/2026-07-30.mdx`: Records consolidated priority 2 E2E
coverage.
- [#7911](#7911) ->
`docs/changelog/2026-07-30.mdx`: Records the corrected NVIDIA DORI
installation pin.
- [#7934](#7934) ->
`docs/changelog/2026-07-30.mdx`: Records the staging image-family wait
before Brev Launchable deployment.
- [#7772](#7772) ->
`docs/changelog/2026-07-30.mdx`: Records dormant managed-image selection
contracts without activating buildless onboarding.
- [#7941](#7941) ->
`docs/changelog/2026-07-30.mdx`: Records corrected agent-specific
provider and policy guidance.
- [#7819](#7819) ->
`docs/changelog/2026-07-30.mdx`: Records removal of empty Deep Agents
Code provider-switch sections.
- [#7932](#7932) ->
`docs/changelog/2026-07-30.mdx`: Records independent
credential-generation E2E execution.
- [#7840](#7840) ->
`docs/changelog/2026-07-30.mdx`: Records shared-route preservation and
pre-delete peer validation during upgrades.
- [#7874](#7874) ->
`docs/changelog/2026-07-30.mdx`: Records the split between pre-tag
release entries and post-tag Announcements.
- [#7876](#7876) ->
`docs/changelog/2026-07-30.mdx`: Records the writable Hermes runtime
root within lockdown.
- [#7756](#7756) ->
`docs/changelog/2026-07-30.mdx`: Records validated multi-platform
managed-image publication.
- [#7914](#7914) ->
`docs/changelog/2026-07-30.mdx`: Records accepted `uv` version metadata
in Hermes image validation.
- [#7686](#7686) ->
`docs/changelog/2026-07-30.mdx`: Records the explicitly experimental
Microsoft Entra runtime identity reference.
- [#7869](#7869) ->
`docs/changelog/2026-07-30.mdx`: Records classified gateway relaunch
quarantine and rebuild guidance.
- [#7814](#7814) ->
`docs/changelog/2026-07-30.mdx`: Records state restore into replacement
sandboxes and SQLite write verification.
- [#7839](#7839) ->
`docs/changelog/2026-07-30.mdx`: Records quieter onboarding test
execution without a user-facing behavior claim.
- [#7854](#7854) ->
`docs/changelog/2026-07-30.mdx`: Records generalized agent-selection
guidance.
- [#7845](#7845) ->
`docs/changelog/2026-07-30.mdx`: Records isolated CDI test evidence
without a user-facing behavior claim.
- [#7843](#7843) ->
`docs/changelog/2026-07-30.mdx`: Records the corrected Omni sub-agent
model ID.
- [#7908](#7908) ->
`docs/changelog/2026-07-30.mdx`: Records reviewed Hermes and Deep Agents
Code dependency pins.
- [#7887](#7887) ->
`docs/changelog/2026-07-30.mdx`: Records rejection of a symlinked DGX
Station release marker.
- [#7747](#7747) ->
`docs/changelog/2026-07-30.mdx`: Records the internal compute-driver
separation without a user-facing behavior claim.
- [#7660](#7660) ->
`docs/changelog/2026-07-30.mdx`: Records atomic publication of rebuild
recovery manifests.
- [#7661](#7661) ->
`docs/changelog/2026-07-30.mdx`: Records bounded local inference
health-response retention.
- [#7654](#7654) ->
`docs/changelog/2026-07-30.mdx`: Records state preservation across
supervisor relaunch recovery.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [x] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates

- [ ] Tests added or updated for changed behavior
- [x] Existing tests cover changed behavior — justification:
`test/changelog-docs.test.ts` validates the dated changelog contract,
SPDX comment, version heading, and published routes.
- [ ] Tests not applicable — justification:
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `docs-updated`
- Evidence: `docs/changelog/2026-07-30.mdx`; the documentation-only diff
passed review against `WRITING.md`, the controlled word list, and
`docs/CONTRIBUTING.md`. The review covered terminology, structure,
active voice, release meaning, product-scope boundaries, and link and
code presentation. Changelog tests passed 6/6, and the docs build
reported 0 errors with 2 pre-existing warnings.
- Agent: Codex CLI
<!-- docs-review-head-sha: 200940f -->
<!-- docs-review-agents-blob-sha: c052d60 -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit:
- Station profile/scenario:
- Result:
- Supporting evidence:

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run validate:pr` passed after refreshing `origin/main` when hooks
were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — command/result or justification: `npx
vitest run test/changelog-docs.test.ts` passed 6/6 tests.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: Not applicable to this
documentation-only release entry.
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) —
result: Build passed with 0 errors and 2 pre-existing warnings.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
Signed-off-by: San Dang <sdang@nvidia.com>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Added release notes for v0.0.99 covering snapshot restoration, sandbox
recovery, gateway route upgrades, and Hermes security updates.
* Documented experimental Microsoft Entra runtime identity support and
enhanced readiness checks.
* Added details on managed image validation, trusted CI image promotion,
and end-to-end release evidence.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@wscurran wscurran added area: cli Command line interface, flags, terminal UX, or output area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior labels Aug 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli Command line interface, flags, terminal UX, or output area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Ubuntu 24.04][CLI&UX] configuration hash drift quarantines the sandbox without a supported repair command

4 participants