fix(hermes): preserve managed gateway restart recovery#7489
Conversation
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
📝 WalkthroughWalkthroughHermes recovery restores dashboard log streaming and tolerates missing optional child PIDs. Managed control emits staged, bounded diagnostics from trusted start logs, while gateway restart sanitizes evidence and classifies supervisor-unavailable failures separately. ChangesHermes restart recovery
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Client
participant restartSandboxGateway
participant managed_gateway_control
participant HermesSupervisor
participant StartLog
Client->>restartSandboxGateway: request managed gateway restart
restartSandboxGateway->>managed_gateway_control: invoke restart control
managed_gateway_control->>HermesSupervisor: replace gateway and await health
HermesSupervisor-->>managed_gateway_control: health timeout or supervisor-unavailable error
managed_gateway_control->>StartLog: read bounded trusted diagnostic tail
StartLog-->>managed_gateway_control: sanitized evidence
managed_gateway_control-->>restartSandboxGateway: staged failure output
restartSandboxGateway-->>Client: classified failure and redacted detail
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in commit 5e2dd06 in the TypeScript / code-coverage/cliThe overall coverage in commit 5e2dd06 in the Show a code coverage summary of the most impacted files.
Updated |
PR Review Advisor — InformationalAdvisor assessment: Informational / high confidence Model lanes
Nemotron output stays in workflow artifacts and does not change the assessment above. E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
…alth-timeout-7484 Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Exact-head follow-up is now published at The follow-up adds explanatory comments to the intentionally best-effort diagnostic fallback, resolving the duplicate empty-handler findings without changing behavior. Independent nine-category security review is GO with no findings. Fresh validation passed: 53/53 focused integration tests, 18/18 focused CLI tests, Python compile, ShellCheck, CLI typecheck, and full Fresh exact-head CI/E2E is now running; this note records local/review evidence, not a claim that remote gates have completed. |
…alth-timeout-7484 Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Fresh exact head The prior selected E2E run was terminal on Independent security review is GO with all nine categories passing. Fresh local validation passed: 53/53 focused integration tests, 18/18 focused CLI tests, Python compile, ShellCheck, CLI typecheck, and full |
|
Exact-head E2E completed on The sole failure was the systemic #6660 The existing layer-collapse fix #7486 reduces x86 layer export to 7.4s, but its prior gate did not select |
<!-- markdownlint-disable MD041 --> ## Summary Adds the canonical pre-tag `## v0.0.95` release entry to `docs/changelog/2026-07-24.mdx`, before the existing v0.0.94 entry. The entry summarizes approved user-visible changes merged since v0.0.94 and excludes internal-only prerequisites. ## Changes - Adds the v0.0.95 summary and detailed bullets for gateway lifecycle, recovery, state transfer, inference compatibility, sandbox security, Discord policy, and E2E evidence. - Links each user-facing theme to the most specific published documentation. - Records the release entry in the shared native changelog used by the OpenClaw, Hermes, and Deep Agents guides. Source summary: - [#7246](#7246), [#7228](#7228), [#7267](#7267), [#7489](#7489), [#7509](#7509), [#7351](#7351), and [#7290](#7290) -> `docs/changelog/2026-07-24.mdx`: Gateway authority, forward teardown and retry, managed recovery, Hermes restart recovery, scoped uninstall, and orphan-aware backup behavior. - [#7344](#7344) and [#7416](#7416) -> `docs/changelog/2026-07-24.mdx`: Atomic SQLite restore and host download verification. - [#7476](#7476), [#7347](#7347), [#7281](#7281), [#7485](#7485), [#7491](#7491), and [#7422](#7422) -> `docs/changelog/2026-07-24.mdx`: Windows Ollama reuse, CDI fallback, bounded OpenRouter connection setup, Nemotron-3 request compatibility, and managed Deep Agents retry and provider-error behavior. - [#6884](#6884), [#7481](#7481), [#6878](#6878), [#7467](#7467), [#7502](#7502), [#7503](#7503), [#7504](#7504), and [#7486](#7486) -> `docs/changelog/2026-07-24.mdx`: Trusted base-image overrides, local rebuild images, runtime validation, config preservation, reviewed package updates, and fewer final-image payload layers. - [#7303](#7303) -> `docs/changelog/2026-07-24.mdx`: Scoped Discord application-command management. - [#7488](#7488), [#7465](#7465), [#7497](#7497), [#7464](#7464), [#7501](#7501), [#7494](#7494), and [#7493](#7493) -> `docs/changelog/2026-07-24.mdx`: Selected-test risk signals, retry cleanup, full root-image validation, direct-main Hermes setup, executed PR-gate evidence, nightly history, and runner wait reporting. - [#7447](#7447) is an internal pinned-runtime prerequisite and is intentionally excluded from canonical supported-integration documentation. - [#7370](#7370) adds maintainer-only advisory reconciliation tooling and does not change supported user behavior. - [#7495](#7495) updates existing documentation and does not add a new v0.0.95 behavior claim. ## 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 structure, heading uniqueness, and published links. - [ ] 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-24.mdx`; writing rules, documentation style, factual release meaning, and published links reviewed at exact head `58b02f2bf`. - Agent: Codex documentation writer reviewer <!-- docs-review-head-sha: 58b02f2 --> <!-- docs-review-agents-blob-sha: 9c9b36d --> ## 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 check:diff` passed 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 tests. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) — the build passed with 0 errors and 2 Fern 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: Senthil Ravichandran <senthilr@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a new v0.0.95 changelog entry above v0.0.94. * Documented improved externally supervised gateway lifecycle ownership. * Improved snapshot restore reliability and SQLite state handling. * Tightened CLI `backup-all` behavior and host artifact verification. * Updated Windows onboarding guidance (including Ollama service reuse and CDI directory fallback). * Noted inference compatibility fixes, deeper agent failure classification, stricter base-image validation, updated Discord bot command permissions, and refined E2E release automation evidence handling. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Summary
A managed Hermes restart could lose the replacement path when optional tracked children were absent under
set -e, while the host reported only a generic health timeout for later launch, health, or auxiliary failures. This change keeps supervised recovery running, repairs both log streams, and returns bounded stage, PID, and fixed lifecycle evidence without trusting sandbox-writable diagnostics.Related Issue
Fixes #7484
Changes
refresh_hermes_supervised_child_pidsa total bookkeeping operation so a missing optional child cannot abort replacement launch underset -e, and repair both dashboard and gateway log streams with the other supervised auxiliaries.GATEWAY_HEALTH_TIMEOUTand supervisor-loss diagnostics to the privileged helper while preserving the exact one-lineSUPERVISOR_BUSYandSUPERVISOR_NOT_RUNNINGcontracts.set -erecovery, auxiliary repair, marker compatibility, and host classification.Type of Change
Quality Gates
SUPERVISOR_UNAVAILABLEhandling. The new bounded diagnostic fields add no command, flag, configuration, API, policy schema, or recovery action.5e2dd0603passed with no open findings; evidence is recorded at fix(hermes): preserve managed gateway restart recovery #7489 (comment). Exact-head CI/E2E remains required before merge.Documentation Writer Review
no-docs-neededSUPERVISOR_UNAVAILABLEactions. The exact-head follow-up adds only explanatory code comments and integrates current main; it changes no documentation contract or recovery action.Codex DesktopDGX Station Hardware Evidence
Verification
Signed-off-by:line and every commit appears asVerifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpx vitest run --project integration test/managed-gateway-control.test.ts test/hermes-gateway-supervisor-recovery.test.ts test/hermes-gateway-auxiliary-retry.test.ts— 53 tests passed;npx vitest run --project cli src/lib/actions/sandbox/gateway-restart.test.ts— 18 tests passed.npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result:npm run docsbuilds without warnings (doc changes only)Signed-off-by: Aaron Erickson aerickson@nvidia.com
Summary by CodeRabbit