fix(sandbox): report gateway authority migration instead of crashing - #8118
Conversation
Authority revalidation refuses gateway effects when the recorded owner no longer matches the live one. Three callers let that refusal escape as an uncaught exception: rebuild, `onboard --recreate-sandbox`, and the final-sandbox gateway cleanup. Operators saw a raw Node stack trace, and because rebuild and destroy both hit it, a sandbox recorded against the packaged gateway service could not be rebuilt or removed after the managed gateway migrated to the standalone service. Raise the refusal as a typed `GatewayAuthorityError` so command boundaries recognise it without matching message text, and reuse the wording `credentialsGatewayAuthorityFailureLines` already used for the same refusal. Rebuild now bails with that message through its existing `bail` channel. Shared gateway cleanup reports it and leaves the gateway running: the sandbox and its registry entry are already gone by then, so refusing the optional last step must not undo the removal. The #6576 guarantee is unchanged. Nothing touches the gateway before authority is proven, and any failure that is not an authority refusal still aborts outright. Refs #8103 Signed-off-by: yanyunl1991 <yanyunl@nvidia.com>
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe change adds typed gateway authority refusals and standardized failure formatting. Sandbox teardown now skips cleanup when authority changes. Rebuild and onboarding flows report authority refusals before aborting. Tests cover migration, validation, formatting, teardown, and CLI behavior. ChangesGateway authority lifecycle handling
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant OnboardCommand
participant RebuildJournal
participant AuthorityResolver
participant RebuildPipeline
OnboardCommand->>RebuildJournal: open rebuild journal
RebuildJournal->>AuthorityResolver: resolve gateway authority
AuthorityResolver-->>RebuildJournal: GatewayAuthorityError
RebuildJournal->>RebuildPipeline: pass formatted refusal lines
RebuildPipeline->>RebuildPipeline: call bail
RebuildJournal-->>OnboardCommand: rethrow authority refusal
OnboardCommand->>OnboardCommand: emit clean nonzero CLI failure
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in commit db07335 in the TypeScript / code-coverage/cliThe overall coverage in commit db07335 in the Show a code coverage summary of the most impacted files.
Updated |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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/onboard/gateway-authority-migration.test.ts`:
- Around line 138-148: Strengthen the assertion in the malformed-declaration
test for resolveGatewayTeardownAuthority to verify that the call actually
throws, while still confirming it is not a GatewayAuthorityError. Assert the
specific error type or message produced by
invalidGatewayManagementDeclarationError when available, rather than relying
only on not.toThrow(GatewayAuthorityError).
In `@src/lib/onboard/gateway-teardown-authority.ts`:
- Around line 71-76: Update runOnboardCommand to catch GatewayAuthorityError
thrown by openOnboardRecreateJournal before journaling, and report
gatewayAuthorityFailureLines(error, "sandbox recreate") at the onboard command
boundary. Add public-command coverage verifying the recreate-sandbox failure is
reported cleanly without escaping as an unhandled error.
🪄 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: 8774f243-5626-40f8-a59c-49e91bce7872
📒 Files selected for processing (6)
src/lib/actions/sandbox/destroy-gateway.test.tssrc/lib/actions/sandbox/destroy-gateway.tssrc/lib/actions/sandbox/rebuild-pipeline.tssrc/lib/actions/sandbox/rebuild-recreate-journal.tssrc/lib/onboard/gateway-authority-migration.test.tssrc/lib/onboard/gateway-teardown-authority.ts
PR Review Advisor — InformationalAdvisor assessment: Informational / low confidence Model lanes
Second-opinion terminology and E2E selections are advisory. They do not change the primary assessment or E2E / PR Gate. 3 semantic terminology decisionsTerminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.
E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: 1 warning · 0 suggestionsWarningsWarnings do not block.
|
cv
left a comment
There was a problem hiding this comment.
Security review for commit 0584acf566eac972d25fc776d3e8e6112a0c2a86 — FAIL
The accepted design in #6576 authorizes fail-closed gateway-authority revalidation and supports this limited reporting remediation. Issue #8103 is not accepted as authority to rebind ownership automatically, and this PR explicitly does not complete its remaining managed MCP destroy scope.
- Secrets and credentials — PASS. No secret values or credential material are added or exposed.
- Input validation and data sanitization — PASS. Gateway identity and recorded authority remain validated before gateway effects.
- Authentication and authorization — PASS. Authority drift remains fail closed; the patch changes reporting, not authorization.
- Dependencies and third-party libraries — PASS. No dependency, package, image, or download changes.
- Error handling and logging — FAIL.
onboard --recreate-sandboxstill reachesrunOnboardCommandwithout a command-boundary handler forGatewayAuthorityError, so that path can still emit the raw stack trace this PR claims to replace. This matches current unresolved thread r3703127950. Add the command-boundary handling and a public-command regression. - Cryptography and data protection — PASS. No cryptographic or persisted-secret behavior changes.
- Configuration and security headers — PASS. Gateway authority records retain their existing schema and fail-closed semantics; browser headers are outside this change.
- Security testing — FAIL. The malformed-declaration test uses
not.toThrow(GatewayAuthorityError), which also passes if the call stops throwing entirely. Assert the expected non-authority error or message so the failure boundary is protected. This matches current unresolved thread r3703127942. - System security — PASS. Rebuild and optional final gateway cleanup preserve the #6576 invariant that no gateway effect runs before authority is proven.
Required before approval: cover onboard --recreate-sandbox at the public command boundary; make the malformed-declaration assertion prove that a non-authority error still propagates; resolve both review threads; add current documentation writer and sensitive-path security review receipts. GitHub also lists this PR as closing #8103 even though the PR says it does not complete that issue. Remove that closing relationship unless the remaining accepted issue scope is implemented.
apurvvkumaria
left a comment
There was a problem hiding this comment.
Blocking at current head deda597: the supported onboard --recreate-sandbox path still crashes instead of reporting gateway authority migration, so the PR does not fulfill its stated purpose at all three public boundaries. openOnboardRecreateJournal calls resolveGatewayTeardownAuthority before journaling; packaged-service to standalone drift throws GatewayAuthorityError there. runOnboardCommand catches only GatewayManagementDeclarationError and prompt cancellation, then rethrows every other error, and src/lib/actions/onboard.ts only awaits it. Reproduction: invoke onboard --recreate-sandbox with persisted packaged-service authority while current discovery resolves standalone; the command emits an uncaught stack before destructive work. Catch GatewayAuthorityError at the onboard command boundary, render gatewayAuthorityFailureLines(error, "sandbox recreate") through the clean failure path, and add a public-command regression proving bounded guidance, no stack, and no destructive action. The mainline merge did not change this feature code; focused tests pass because they omit this public-command case.
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
apurvvkumaria
left a comment
There was a problem hiding this comment.
Blocking at current head 27a3a1f: the explicit --recreate-sandbox case is fixed, but the documented environment-driven recreation path still crashes, so the PR does not yet fulfill its stated purpose. Reproduction: call runOnboardCommand with no recreate flag, env containing NEMOCLAW_RECREATE_SANDBOX=1, and a runOnboard dependency that throws GatewayAuthorityError. resolveOnboardOptions records recreateSandbox from the flag only in src/lib/onboard/command.ts, while runOnboard independently honors the environment request in src/lib/onboard.ts and can reach openOnboardRecreateJournal. The new catch guard is therefore false and rethrows the typed refusal into the raw stack path. Automatic drift-triggered recreation reaches the same journal without the flag as well. Please handle GatewayAuthorityError at the onboard command boundary regardless of how recreation was selected, or propagate the effective recreation intent to that boundary, and add a no-flag environment-path regression that asserts exit 1, recovery guidance, and no stack. The focused command and migration suites pass 52/52; the new test currently covers only the explicit flag case.
`handleOnboardCommandError` reported a `GatewayAuthorityError` only when `options.recreateSandbox` was set, but that flag records the explicit `--recreate-sandbox` selection alone. `runOnboard` independently honours NEMOCLAW_RECREATE_SANDBOX and also enters the recreate journal when it detects sandbox drift mid-run. Both of those selections left the guard false, so the typed refusal was rethrown and surfaced as a raw Node stack trace — the exact failure this PR set out to remove. Drop the flag guard. Within onboarding the recreate journal's authority revalidation is the only source of this typed error, so reporting it unconditionally keeps the "sandbox recreate" label accurate however recreation was selected, and reclassifies no other onboarding failure. Cover all three selections with a table-driven regression asserting exit 1, the bounded recovery guidance, and no stack frames. Mutation check: restoring the flag guard fails the environment-request and drift cases while the explicit-flag case still passes. Refs #8103 Signed-off-by: yanyunl1991 <yanyunl@nvidia.com>
apurvvkumaria
left a comment
There was a problem hiding this comment.
Approve — re-reviewed exact head a5c60e4. The prior blocking environment-driven and drift-driven recreation crash is resolved: GatewayAuthorityError is now rendered at the onboard command boundary regardless of how recreation was selected, while unrelated errors still propagate. The table-driven regression covers the explicit flag, environment request, and drift paths with exit 1, bounded recovery guidance, and no stack. Exact-head build/typecheck, static checks, installer integration, security scans, and the completed test shards pass. The advisor’s request for an additional rebuild-journal callback test is a non-blocking coverage fast follow because the typed refusal is already caught before journal mutation and the existing resolver/command tests preserve that boundary. No blocking correctness, security, compatibility, or regression defect remains.
<!-- markdownlint-disable MD041 --> ## Summary Prepares the canonical v0.0.102 release documentation from the current release-labeled scope. The change adds a dated changelog for all 38 user-facing shipping PRs and corrects the OpenClaw agent command reference for the behavior delivered by #8191. ## Changes - Add `docs/changelog/2026-08-04.mdx` with the v0.0.102 release summary, detailed behavior changes, support boundaries, security evidence links, and links to durable documentation. - Update `docs/reference/commands.mdx` to describe non-JSON OpenClaw output capture, its combined limit, marker handling, stream suppression, recovery guidance, and exit behavior. - [#8167](#8167) -> `docs/changelog/2026-08-04.mdx`: Records authenticated attachment of operator-managed llama.cpp servers. - [#8129](#8129) -> `docs/changelog/2026-08-04.mdx`: Records the Experimental managed vLLM profile for two DGX Spark systems. - [#7983](#7983) -> `docs/changelog/2026-08-04.mdx`: Records qualification of the May 2026 GB300WS factory image. - [#8207](#8207) -> `docs/changelog/2026-08-04.mdx`: Records the qualified DGX Station driver transaction. - [#8208](#8208) -> `docs/changelog/2026-08-04.mdx`: Records mode-bound Express resume state. - [#8158](#8158) -> `docs/changelog/2026-08-04.mdx`: Records recovery of host-global dual-Station runtime ownership. - [#8145](#8145) -> `docs/changelog/2026-08-04.mdx`: Records Windows-host Ollama validation from Docker Desktop's network context. - [#8190](#8190) -> `docs/changelog/2026-08-04.mdx`: Records HTTP model pulls when WSL has no local Ollama executable. - [#8195](#8195) -> `docs/changelog/2026-08-04.mdx`: Records reuse of a healthy installer-managed CLI. - [#8053](#8053) -> `docs/changelog/2026-08-04.mdx`: Records early rejection of incompatible OpenShell gateway versions. - [#8098](#8098) -> `docs/changelog/2026-08-04.mdx`: Records the bounded package-service-to-standalone gateway recovery transition. - [#8216](#8216) -> `docs/changelog/2026-08-04.mdx`: Records the final dashboard port selected during multi-sandbox onboarding. - [#8146](#8146) -> `docs/changelog/2026-08-04.mdx`: Records managed startup-state restoration for stopped sandboxes. - [#8092](#8092) -> `docs/changelog/2026-08-04.mdx`: Records gateway watchdog recovery for classified not-serving states. - [#8182](#8182) -> `docs/changelog/2026-08-04.mdx`: Records consistent managed-recovery wait configuration. - [#8040](#8040) -> `docs/changelog/2026-08-04.mdx`: Records Docker sandbox rollback authority through late validation. - [#8130](#8130) -> `docs/changelog/2026-08-04.mdx`: Records bounded Shields deadline recovery and durable containment. - [#8086](#8086) -> `docs/changelog/2026-08-04.mdx`: Records repair of narrowly validated permission-only configuration drift. - [#8122](#8122) -> `docs/changelog/2026-08-04.mdx`: Records prompt failure and guidance for corrupt transition locks. - [#8124](#8124) -> `docs/changelog/2026-08-04.mdx`: Records policy restoration flags, previews, and target revalidation. - [#7886](#7886) -> `docs/changelog/2026-08-04.mdx`: Records explicit destruction after pre-delete Shields hardening failures while preserving recovery authority. - [#7901](#7901) -> `docs/changelog/2026-08-04.mdx`: Records multi-port uninstall behavior and shared-resource preservation. - [#7984](#7984) -> `docs/changelog/2026-08-04.mdx`: Records one classified transient remote MCP startup retry. - [#7954](#7954) -> `docs/changelog/2026-08-04.mdx`: Records bounded hosted-inference probe replies. - [#7574](#7574) -> `docs/changelog/2026-08-04.mdx`: Records preservation of validated reasoning capabilities through onboarding. - [#8089](#8089) -> `docs/changelog/2026-08-04.mdx`: Records proxy routing for Hermes WhatsApp pairing and media traffic. - [#7682](#7682) -> `docs/changelog/2026-08-04.mdx`: Records native Hermes session deletion and identifier validation. - [#8150](#8150) -> `docs/changelog/2026-08-04.mdx`: Records corporate CA trust for LangChain Deep Agents Code image builds. - [#8156](#8156) -> `docs/changelog/2026-08-04.mdx`: Records reviewed managed runtime dependency remediation. - [#8180](#8180) -> `docs/changelog/2026-08-04.mdx`: Records reviewed MCP discovery runtime dependency updates. - [#8196](#8196) -> `docs/changelog/2026-08-04.mdx`: Records private npm dependency remediation across managed images. - [#8203](#8203) -> `docs/changelog/2026-08-04.mdx`: Records reviewed Hermes and LangChain Deep Agents Code Python dependency updates. - [#8125](#8125) -> `docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for invalid enumerated CLI values. - [#8193](#8193) -> `docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for unresolved sandbox base images. - [#8118](#8118) -> `docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for changed gateway authority. - [#8191](#8191) -> `docs/changelog/2026-08-04.mdx`, `docs/reference/commands.mdx`: Records output capture, marker handling, recovery guidance, and exit behavior for non-JSON OpenClaw agent commands. - [#8187](#8187) -> `docs/changelog/2026-08-04.mdx`: Records the aligned interactive-installation start across supported agents. - [#8153](#8153) -> `docs/changelog/2026-08-04.mdx`: Records current product capabilities and support boundaries. ## 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 - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: This documentation-only release preparation does not change executable behavior. Existing changelog and published-route tests pass. - [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: Independently reviewed `docs/changelog/2026-08-04.mdx` and `docs/reference/commands.mdx` at commit `b89913780`. All 38 user-facing v0.0.102 PRs are represented, #8191 behavior matches the implementation, and the writing rules, documentation style, controlled terminology, route structure, and skip policy pass review. Targeted tests pass 36/36 and the documentation build completes with 0 errors. - Agent: Codex Desktop independent documentation writer <!-- docs-review-head-sha: b899137 --> <!-- docs-review-agents-blob-sha: 3dd7c24 --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable - 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 — `npx vitest run --project integration test/changelog-docs.test.ts test/check-docs-published-routes.test.ts` passed 36/36. - [x] Applicable broad gate passed — not applicable to documentation-only changes; `npm run docs` completed successfully with 0 errors. - [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) — completed with 0 errors and 2 existing Fern warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [x] New doc pages include SPDX header and frontmatter (new pages only) — the native dated changelog uses the required parser-safe MDX SPDX comment and intentionally has no frontmatter. --- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Documentation** - Added release notes for v0.0.102, covering authentication, hardware setup, WSL, installer recovery, sandbox resilience, policy management, inference reliability, CLI improvements, and unified quickstarts. - Updated command documentation to explain how non-JSON agent output is collected, replayed, and reported. - **Bug Fixes** - Improved command-output recovery guidance when output exceeds limits or contains unsupported fallback markers. - Preserved accurate command exit-status reporting after output processing. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Summary
resolveGatewayEffectAuthorityrefuses gateway effects when a sandbox's recorded gateway owner no longer matches the live one. Three callers let that refusal escape as an uncaught exception, so the CLI crashed with a raw Node stack trace instead of naming the migration. This PR raises the refusal as a typed error and reports it at those boundaries.Related report: issue 8103. This PR implements only the accepted reporting subset and does not close the remaining managed MCP recovery scope.
Reproduction
Executed on our DGX Spark aarch64 test host (GB10 GPU), Ubuntu 24.04, against
mainat4cd4d64fe.How the drift was produced. The reporter's sandbox was onboarded while the packaged
openshell-gateway.servicewas authoritative, then the managed gateway migrated to standalone. On our test host the packaged gateway service cannot start at all for an unrelated reason (itsEnvironmentFilesupplies a quotedDOCKER_HOST, so the value reaches the process with the quotes and the socket URL is invalid), so onboarding against it is not possible here. The recorded authority was therefore set topackaged-servicedirectly in the onboarding checkpoint after a normal onboard, which reproduces the recorded-vs-live drift this issue is about while leaving the sandbox, gateway, and registry real.Observed on
main(before fix)rebuild --yes:destroy --yes --cleanup-gatewaycrashed the same way fromcleanupGatewayAfterLastSandbox. Both exited1.Observed on
fix/...(after fix) — same host, same commit, same drifted staterebuild --yes(exit1, zero stack-trace lines):destroy --yes --cleanup-gateway(exit0, zero stack-trace lines, registry empty afterwards):The verification script asserts the built
dist/actually contains the change before running, because an earlier attempt silently tested an unpatched build.Analysis
resolveGatewayEffectAuthority(src/lib/onboard/gateway-teardown-authority.ts) threw plainErrors.credentials/command-support.tswas the only caller that caught them, socredentials add/resetalready reported the refusal cleanly. The remaining callers did not:rebuild-recreate-journal.ts— reached fromrebuild --yesonboard-recreate-journal.ts— reached fromonboard --recreate-sandboxdestroy-gateway.ts— reached from the final-sandbox gateway cleanupThere is no process-level error boundary in the CLI entry, so each of those escaped as an uncaught exception and printed a Node stack trace.
Fix
GatewayAuthorityErroris a distinct type, so boundaries recognise the refusal without matching message text. All four refusal sites in the resolver raise it; an invalid management declaration deliberately keeps its own type because it is a different failure class.gatewayAuthorityFailureLinesis the single source of the wordingcredentialsGatewayAuthorityFailureLinesalready used. The remedy line is binary-agnostic so this module takes no branding dependency, which the source-architecture budget counts against every consumer.rebuild-recreate-journalhands the lines back through a newonAuthorityRefusalcallback and the pipeline routes it to its existingbail.The #6576 contract is preserved. The catch sits at the resolver call, before any gateway effect, so nothing touches the gateway before authority is proven — the existing test asserting no side effects still passes unchanged, and a new case pins the same guarantee for the typed refusal. Any failure that is not an authority refusal still aborts outright.
Scope
This does not close issue 8103. The report also describes
destroy --yesfailing in MCP-bridge teardown with managed MCP servers present; that path raisesMcpBridgeError, a different root cause this PR does not touch. Our repro had no managed MCP servers anddestroy --yeswithout--cleanup-gatewayalready succeeded onmain, so that half is unverified here and left for a separate change.Interaction with #8098
#8098 makes NemoClaw decline a packaged gateway service whose binary is outside the blueprint version window, moving the resolved owner from
packaged-servicetostandalone. That is exactly the drift this PR reports on, so landing this first (or together) keeps existing sandboxes on a working path.Changes
src/lib/onboard/gateway-teardown-authority.ts: addGatewayAuthorityErrorandgatewayAuthorityFailureLines; raise the typed error from every refusal site.src/lib/actions/sandbox/destroy-gateway.ts: report an authority refusal and skip cleanup instead of throwing.src/lib/actions/sandbox/rebuild-recreate-journal.ts: surface the refusal through anonAuthorityRefusalcallback.src/lib/actions/sandbox/rebuild-pipeline.ts: route that callback to the existingbail.Type of Change
Quality Gates
27a3a1f13c7be9b6a7ab87a73585b99ec6de11e4against basee9fb170a2e3e4c4dcfa19e398232f71b8f2bace6: PASS with no findings. Typed refusals remain fail closed, unrelated and malformed-declaration errors still propagate, diagnostics contain no credential material, and no gateway effect runs before authority is proven. Base commit fix(onboard): validate Windows Ollama from Docker #8145 changes separate Docker-context inference validation and does not interact with these typed errors.Documentation Writer Review
no-docs-needed27a3a1f13against basee9fb170a2e3e4c4dcfa19e398232f71b8f2bace6, stable patch ID2a1a9ce90bda5c03abf2788d381656fb42c301da, and the NemoClaw writing guide, controlled word list, documentation contributor guide, and shared documentation-writing review contract. The change replaces raw Node.js stack traces with existing-pattern operator guidance when gateway lifecycle authority cannot be revalidated during rebuild,onboard --recreate-sandbox, or final shared-gateway cleanup. It adds no command, flag, default, configuration, schema, workflow, or supported product surface. Existing documentation already states that authority drift requires fresh onboarding and prevents gateway effects, while command documentation describes final shared-gateway cleanup after sandbox and registry deletion. Base commit fix(onboard): validate Windows Ollama from Docker #8145 adds credential-free Windows Ollama validation from Docker's network context in separate adapter and inference-selection files. It does not throw or consumeGatewayAuthorityErrorand does not interact with the changed command-boundary handling. Exact-head validation passed: CLI and plugin builds; 6 focused files and 104 tests;npm run validate:pr; andgit diff --check. No blocking findings.Verification
Exact-head maintainer validation at
27a3a1f13: 6 focused files / 104 tests passed; CLI and plugin builds passed;npm run validate:prpassed;git diff --checkpassed.PR description includes a
Signed-off-by:line and every current commit appears asVerifiedin GitHub.npx prek runpasses on the changed filesnpm testpasses (640 files / 7228 tests undersrc/lib/onboard,src/lib/actions,src/lib/credentials)Tests added or updated for new or changed behavior
No secrets, API keys, or credentials committed
Docs updated for user-facing behavior changes
make docsbuilds 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)
Platform scope: reproduced and verified on aarch64 (DGX Spark), matching the reporter's environment. The changed code is platform-independent; x86_64 was not exercised.
AI Disclosure
Signed-off-by: Yanyun Liao yanyunl@nvidia.com
Summary by CodeRabbit