Skip to content

perf(e2e): move recovery repetition into integration tests - #7942

Merged
senthilr-nv merged 25 commits into
mainfrom
codex/7919-recovery-wiring
Jul 31, 2026
Merged

perf(e2e): move recovery repetition into integration tests#7942
senthilr-nv merged 25 commits into
mainfrom
codex/7919-recovery-wiring

Conversation

@apurvvkumaria

@apurvvkumaria apurvvkumaria commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

The existing recovery live E2E now identity-checks and terminates one production gateway, recovers it through connect --probe-only, then verifies the recovered process identity for 15 seconds, while five repeated preparations run in a deterministic integration test.
The removed phases consumed a median 8 minutes 49 seconds across five scheduled runs, so the 13-minute-50-second job is expected to complete in about five minutes.
The recovery result preserves the managed controller's exact ok versus already-running disposition so PID 1 auto-respawn cannot be credited as connect-driven recovery.
Legacy recovery proves OpenShell transport before state restoration, then exact-container-restarts the restored gateway and requires an authenticated ok result plus settle proof before commit. It preserves the OpenClaw configuration's required sandbox:sandbox 0660 mutable posture.
The workflow job, schedule, selector, cleanup, and artifact upload remain unchanged.

Related Issue

Fixes #7919

Changes

  • Reduce issue-2478-crash-loop-recovery from five live crash cycles, two proxy-state transitions, and a 300-second soak to one production connect --probe-only recovery.
  • Identity-check and terminate the exact gateway process before the production recovery command, then require a replacement process identity.
  • Require the live command to report the explicit connect-driven recovery result.
  • Preserve and strictly validate the managed controller completion grammar and PID binding, so already-running produces the ordinary running result rather than the recovered result.
  • Retain live replacement-identity, guard-chain, inference.local, cleanup, diagnostics, and 15-second process-identity stability assertions.
  • Run the extracted production recovery preparation five times against the same fixture and verify identical steps, read-only files, fixed proxy environment content, one restoration warning, and no unguarded-launch marker.
  • Inspect the restored runtime environment through one no-follow file descriptor so the mode and content checks do not race a path replacement.
  • Gate state restoration on OpenShell re-registration of the exact replacement, rolling back on readiness failure.
  • After state restoration, restart the gateway through exact-container-pinned managed control, require the strict authenticated ok completion, rerun settle proof, and roll back on failure.
  • Keep the pinned-action integration fixture linear so the codebase-growth guard passes without weakening unexpected-action rejection.
  • Restore OpenClaw configuration state with the guard-required 0660 mutable posture while retaining 0640 for generic state files.
  • Update the checked-in OpenClaw dependency evidence to describe the retained live and deterministic boundaries.

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)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • 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: Nine-category security review PASS with no findings at exact head b26876998d16004b72fedafaf087b05b94ad1982, commit-range diff SHA-256 ccd137338bd2b510fb27c2701fd62c58d64000d45e3eb3ec4086dc4848d28258. The exact follow-up changes only the live acceptance test and checked-in evidence; it identity-checks the internally resolved PID/start identity before SIGTERM and adds no product runtime, credential, network, permission, dependency, or logging surface.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer reviewed the completed changes
  • Result: docs-updated; the prior docs-writer review is retained, and this exact test/docs-only follow-up was reviewed serially at the user's request. The security evidence now states that the retained live lane terminates an identity-checked gateway before production recovery; the full documentation build passed.
  • Evidence: docs/manage-sandboxes/recover-rebuild-sandboxes.mdx; docs/reference/commands.mdx; docs/security/openclaw-2026.6.10-dependency-review.md
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • 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
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — At exact current-main head b26876998d, all 180 focused recovery tests passed with 4 intentional skips; npm run build:cli, npm run validate:pr, the full docs build, and normal pre-push CLI/type/version gates passed.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — not run because this change narrows one live test and has focused integration, source, phase, type, docs, and hook evidence.
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only) — passed with 0 errors and two pre-existing Fern warnings.
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Apurv Kumaria akumaria@nvidia.com

Summary by CodeRabbit

  • Bug Fixes

    • Improved gateway recovery validation and probe messaging, distinguishing “already running” from “recovered” outcomes.
    • Enhanced process-stability checks to detect process identity changes, including PID reuse.
    • Added managed health verification before completing restored gateway recovery, with rollback on failure.
    • Updated restored configuration file permissions for improved compatibility and security.
  • Tests

    • Expanded recovery coverage with structured completion parsing, bounded retries, and stronger environment checks.
  • Documentation

    • Clarified recovery test coverage and limitations.

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria apurvvkumaria self-assigned this Jul 30, 2026
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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

The PR adds structured managed-gateway completion parsing, post-restore health validation, PID-plus-start-identity recovery checks, disposition-aware probe output, deterministic repeated recovery tests, and updated Issue 2478 evidence wording.

Changes

Gateway recovery validation

Layer / File(s) Summary
Structured managed recovery completion
src/lib/actions/sandbox/gateway-restart.ts, src/lib/actions/sandbox/process-recovery.ts, src/lib/actions/sandbox/mcp-bridge-adapter-hermes.ts, related tests
Managed controller output is parsed into typed ok or already-running results and propagated through recovery APIs and Hermes capability checks.
Post-restore managed health validation
src/lib/actions/sandbox/supervisor-relaunch.ts, src/lib/actions/sandbox/process-recovery.ts, related tests, src/lib/state/state-file-restore.ts
Supervisor relaunch confirms restored managed health before commit, rolls back failed relaunches, and applies conditional restore-file permissions.
Probe-only completion reporting
src/lib/actions/sandbox/connect.ts, src/lib/actions/sandbox/connect-flow.test.ts, test/cli/connect-recovery.test.ts, test/support/connect-flow-test-harness.ts
Probe-only recovery reports distinct recovered and already-running outcomes, with parameterized controller and CLI coverage.
Process identity stability checks
test/e2e/fixtures/clients/gateway.ts, test/e2e/live/issue-2478-crash-loop-recovery.test.ts, test/e2e/support/e2e-recovery-helpers.test.ts, test/e2e/live/gateway-guard-recovery.test.ts
E2E helpers track PID and /proc start identity, detect PID reuse, pause the expected identity, and verify replacement stability.
Deterministic repeated recovery coverage
test/nemoclaw-start-guard-recovery.test.ts, docs/security/openclaw-2026.6.10-dependency-review.md
Recovery preparation runs through configurable repeated attempts, validates event repetition and runtime-file protection, and documents that inbound agent-runtime and messaging-channel restart behavior is not proven.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant RecoveryTest
  participant ConnectProbeOnly
  participant ProcessRecovery
  participant GatewayController
  RecoveryTest->>GatewayController: pause expected process identity
  RecoveryTest->>ConnectProbeOnly: run probe-only recovery
  ConnectProbeOnly->>ProcessRecovery: check and recover sandbox processes
  ProcessRecovery->>GatewayController: execute managed gateway control
  GatewayController-->>ProcessRecovery: return structured completion and new PID
  ProcessRecovery-->>ConnectProbeOnly: return managedControlCompletion
  ConnectProbeOnly-->>RecoveryTest: report recovered or already-running gateway
Loading

Possibly related PRs

  • NVIDIA/NemoClaw#7933: Modifies the same Issue 2478 live recovery test with a different recovery boundary.
  • NVIDIA/NemoClaw#7849: Overlaps Hermes MCP lifecycle recovery handling and related gateway recovery logic.
  • NVIDIA/NemoClaw#7848: Overlaps sandbox gateway recovery and process-recovery outcome handling.

Suggested labels: area: e2e, area: ci, refactor

Suggested reviewers: cv, cjagwani, jyaunches

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Production changes to supervisor health validation and restore-file permissions appear unrelated to #7919's performance-focused scope. Move supervisor relaunch and restore-permission changes to separate issues or document their direct necessity for the recovery-test refactor.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes satisfy #7919 by retaining one live recovery path and moving five repeated preparations into deterministic tests.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: moving repeated recovery preparation from the live E2E test into integration tests.
✨ 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 codex/7919-recovery-wiring

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 b268769 in the codex/7919-recovery-... branch remains at 96%, unchanged from commit 57f73a5 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit b268769 in the codex/7919-recovery-... branch remains at 81%, unchanged from commit 57f73a5 in the main branch.

Show a code coverage summary of the most impacted files.
File main 57f73a5 codex/7919-recovery-... b268769 +/-
src/lib/actions...dbox/connect.ts 77% 77% 0%
src/lib/actions...eway-restart.ts 94% 94% 0%
src/lib/actions...apter-hermes.ts 76% 76% 0%
src/lib/sandbox...rce-identity.ts 88% 88% 0%
src/lib/actions...ess-recovery.ts 81% 82% +1%
src/lib/actions...sor-relaunch.ts 85% 92% +7%
src/lib/domain/.../connect-env.ts 89% 97% +8%

Updated July 31, 2026 16:46 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: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings match; normalized E2E selections differ; severity counts match.

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: cloud-inference, cloud-onboard, security-posture, full-e2e, gateway-guard-recovery, hermes-e2e, issue-2478-crash-loop-recovery, onboard-repair, onboard-resume

Workflow run details

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

Comment thread test/nemoclaw-start-guard-recovery.test.ts Fixed

@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.

The deterministic refactor is aligned with #7919, and the focused integration test, semantic E2E phase validation, and docs build passed locally. One live-evidence gap remains: the retained check can pass without exercising the connect-driven recovery branch.

Comment thread test/e2e/live/issue-2478-crash-loop-recovery.test.ts
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

@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.

Re-reviewed the fixes through 0d8cf66. Commit 76e761c closes the blocking live-evidence gap by requiring the exact connect-driven recovery result, making SIGKILL failure visible, and removing the delay that allowed PID 1 auto-respawn to satisfy the test. The descriptor-based runtime-env assertion also clears the CodeQL path race, and the documentation now states the remaining evidence boundary precisely.

Focused local verification passed: 12 recovery integration tests, 18 production connect-flow tests, semantic E2E phase coverage for 116 tests across 73 files, docs validation, and diff checks. All required GitHub checks are green, including the live issue-2478 recovery job; CodeRabbit and PR Review Advisor report no actionable findings.

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria

Copy link
Copy Markdown
Collaborator Author

Maintainer disposition for PRA-1: no source change is warranted on head 457218170. The SIGSTOP is synchronization for the approved P1 recovery-ownership fix, not the terminal recovery action. connect --probe-only enters the production controller path, which calls stop_openclaw_supervised_gateway and then gateway_control_stop_tracked_pid for the exact (pid,startIdentity); that helper sends TERM, escalates to KILL if necessary, and the caller refuses to relaunch unless the tracked PID is absent. The live assertion then requires the recovered (pid,startIdentity) to differ from the paused identity and verifies that recovered identity remains unchanged for 15 seconds, after guard-chain and inference.local recovery. Killing before the probe would reopen the exact PID 1 auto-respawn race identified in the human P1 and could let ordinary supervisor respawn satisfy the test. The current path therefore retains a real termination performed by production recovery while deterministically proving that connect --probe-only owns the replacement; it intentionally does not claim separate coverage of PID 1’s exit-driven respawn path.

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
…iring

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

@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

🧹 Nitpick comments (1)
test/process-recovery-supervisor-relaunch.test.ts (1)

254-262: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Prefer container-ID matching over positional call count for detecting the post-restore probe.

Using pinnedProbeCount === 3 to mark the post-restore-health probe is fragile — it silently depends on exactly how many other pinned probes fire before it (from confirmMissingSupervisor, or any caller-side readiness check). The mock already knows the container ID that confirmRestoredManagedHealth targets ("replacement-container-id", verified separately at line 288-293); keying off that instead makes the test resilient to unrelated changes in probe-call ordering/count.

♻️ Proposed refactor
-    let pinnedProbeCount = 0;
-    const requestPinnedGatewaySupervisorAction = vi.fn(() => {
-      pinnedProbeCount += 1;
-      if (pinnedProbeCount === 1) {
-        return { status: 1, stdout: "", stderr: "SUPERVISOR_NOT_RUNNING" };
-      }
-      if (pinnedProbeCount === 3) order.push("post-restore-health");
-      return acceptedProbe;
-    });
+    const requestPinnedGatewaySupervisorAction = vi.fn(
+      (_name: string, _action: string, _timeoutMs: number, containerId: string) => {
+        if (containerId !== "replacement-container-id") {
+          return { status: 1, stdout: "", stderr: "SUPERVISOR_NOT_RUNNING" };
+        }
+        order.push("post-restore-health");
+        return acceptedProbe;
+      },
+    );

Since I can't fully trace checkAndRecoverSandboxProcesses (not part of this review batch) to confirm the exact call count this relies on, please double-check this against that implementation.

Also applies to: 315-326

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/process-recovery-supervisor-relaunch.test.ts` around lines 254 - 262,
Replace the positional pinnedProbeCount === 3 check in
requestPinnedGatewaySupervisorAction with matching on the probe request’s
container ID, recording post-restore-health when it targets
"replacement-container-id". Apply the same container-ID-based detection to the
related mock logic at the additional occurrence, while preserving the existing
first-probe failure and acceptedProbe behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/lib/actions/sandbox/supervisor-relaunch.ts`:
- Around line 255-273: Extract the repeated failure-outcome sequence from the
current branch into a small local helper near the surrounding supervisor
relaunch logic, including finalize with supervisorReady false,
stateBackupRemoved handling, completed assignment, and returning the outcome.
Replace this block and the existing equivalent branches around the other failure
paths with the helper, preserving each branch’s stateRestored value and existing
rollback behavior.

---

Nitpick comments:
In `@test/process-recovery-supervisor-relaunch.test.ts`:
- Around line 254-262: Replace the positional pinnedProbeCount === 3 check in
requestPinnedGatewaySupervisorAction with matching on the probe request’s
container ID, recording post-restore-health when it targets
"replacement-container-id". Apply the same container-ID-based detection to the
related mock logic at the additional occurrence, while preserving the existing
first-probe failure and acceptedProbe behavior.
🪄 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: 7bbc5964-2892-4254-bee0-5911d32b531d

📥 Commits

Reviewing files that changed from the base of the PR and between 4572181 and e277700.

📒 Files selected for processing (6)
  • src/lib/actions/sandbox/process-recovery.ts
  • src/lib/actions/sandbox/supervisor-relaunch.test.ts
  • src/lib/actions/sandbox/supervisor-relaunch.ts
  • src/lib/state/state-file-restore.ts
  • test/process-recovery-supervisor-relaunch.test.ts
  • test/state-file-restore-command.test.ts

Comment thread src/lib/actions/sandbox/supervisor-relaunch.ts Outdated

@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.

🧹 Nitpick comments (1)
test/process-recovery-supervisor-relaunch.test.ts (1)

111-135: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Make the failure fixture terminal

Zero polling currently prevents the fallback from converting failure into success, but .mockReturnValue(acceptedProbe) still masks unexpected extra probes. Return the failing probe persistently in this case and reject further calls.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/process-recovery-supervisor-relaunch.test.ts` around lines 111 - 135,
Update scriptedPinnedGatewayProbes so the failure scenario keeps returning
postRestoreProbe instead of falling back to acceptedProbe, and make any
unexpected additional probe invocation fail explicitly. Preserve the existing
unavailable, accepted, and post-restore-health call sequence while removing the
terminal success masking.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@test/process-recovery-supervisor-relaunch.test.ts`:
- Around line 111-135: Update scriptedPinnedGatewayProbes so the failure
scenario keeps returning postRestoreProbe instead of falling back to
acceptedProbe, and make any unexpected additional probe invocation fail
explicitly. Preserve the existing unavailable, accepted, and post-restore-health
call sequence while removing the terminal success masking.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1d95c0e2-226d-496e-84d0-c0f58cf804d4

📥 Commits

Reviewing files that changed from the base of the PR and between e277700 and 347ed35.

📒 Files selected for processing (1)
  • test/process-recovery-supervisor-relaunch.test.ts

…iring

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria

Copy link
Copy Markdown
Collaborator Author

Current-head PRA-1 disposition: no code change. A terminating signal lets PID 1 take the exit-driven auto-respawn path before connect, which can turn this into an already-running false pass. The retained test instead pins the PID and start identity, pauses that exact process, verifies its /proc state is T, requires the authenticated complete-ok disposition and exact recovered CLI result, then proves replacement identity and 15-second stability. This synchronization proves that connect drives recovery; the human P1 thread is addressed and the PR is approved. The partial advisor model failure did not identify a new implementation defect.

@copy-pr-bot

copy-pr-bot Bot commented Jul 31, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@wscurran wscurran added area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure chore Build, CI, dependency, or tooling maintenance labels Jul 31, 2026
@senthilr-nv
senthilr-nv merged commit 2aeb47a into main Jul 31, 2026
70 of 72 checks passed
@senthilr-nv
senthilr-nv deleted the codex/7919-recovery-wiring branch July 31, 2026 17:51
@senthilr-nv senthilr-nv mentioned this pull request Aug 1, 2026
23 tasks
senthilr-nv added a commit that referenced this pull request Aug 1, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Adds the canonical dated changelog entry for `v0.0.100` so the
maintainer release plan can verify the pre-tag documentation
prerequisite. The entry summarizes the user-facing changes merged since
`v0.0.99` and links to the relevant guides.

## Changes

- Add `docs/changelog/2026-07-31.mdx` with the exact `## v0.0.100`
heading.
- Cover restored OpenClaw pairing, transactional replacement, Deep
Agents Code, onboarding recovery, lifecycle cleanup, Hermes builds, host
provenance, documentation, and trusted E2E evidence.
- Distinguish active Docker and Kubernetes runtime-bundle enforcement
from the still-inactive managed shared-state transaction foundation.

## Source Coverage

The release entry maps the doc-impacting merged PRs in the
`v0.0.99..main` release range to `docs/changelog/2026-07-31.mdx`: #8021,
#8024, #7973, #8028, #7947, #7788, #7884, #8023, #7969, #8020, #7989,
#8000, #7907, #7942, #7567, #8013, #7955, #8017, #8014, #8015, #7629,
#7644, #7821, #7971, and #7991.

PR #7974 was reviewed after the final rebase and excluded because it
changes internal maintainer-skill attribution policy and tests only; it
does not change a user-facing product or documentation surface.

## 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: the
changelog contract test validates the dated entry, version heading, SPDX
form, and route constraints.
- [ ] 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-31.mdx`; exact-head review passed
for `6093f44f`; writing rules and documentation style reviewed; `npx
vitest run test/changelog-docs.test.ts` passed 6/6; `npm run docs`
passed with zero Fern errors and two generic Fern upgrade notices.
- Agent: Codex Desktop
<!-- docs-review-head-sha: 6093f44 -->
<!-- docs-review-agents-blob-sha: 3dd7c24 -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: Not applicable; no DGX Station host script changed.
- Station profile/scenario: Not applicable.
- Result: Not applicable.
- Supporting evidence: Not applicable.

## 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 at `6093f44f`.
- [ ] 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 a dated
prose-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) —
validation passed with zero errors; Fern emitted two generic upgrade
notices.
- [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)
— the changelog entry has the required parser-safe MDX SPDX header;
dated changelog entries intentionally do not use page frontmatter.

---

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
  * Added release notes for v0.0.100.
* Documented improvements to restore pairing, sandbox replacement,
onboarding recovery, lifecycle cleanup, runtime handling, build support,
host readiness, and end-to-end validation.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, checks, release automation, or GitHub Actions area: e2e End-to-end tests, nightly failures, or validation infrastructure chore Build, CI, dependency, or tooling maintenance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

perf(e2e): move recovery repetition into deterministic tests

5 participants