fix(installer): restore Station package preparation - #7183
Conversation
|
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 Station host installer now invokes its APT transaction hook through ChangesStation host preparation
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
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: None This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
493263a to
acc2aca
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (2)
test/install-station-package-transaction.test.ts (2)
402-404: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winVerify effective artifact permissions, not only chmod command text.
These assertions confirm the logged commands but do not prove the generated directory and files actually have the expected modes, ownership, and non-symlink properties. Add filesystem-level assertions against the generated guard artifacts while retaining command logging if useful.
As per path instructions, tests should focus on observable behavioral outcomes rather than implementation details.
🤖 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/install-station-package-transaction.test.ts` around lines 402 - 404, Extend the test around the generated guard artifacts to inspect the filesystem after installation, verifying the directory, verify-plan, and targets have the expected modes, ownership, and are not symlinks. Keep the existing command-output assertions if useful, but make the behavioral filesystem checks the primary verification.Source: Path instructions
92-92: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winAssert the quiescence gate’s contract, not only its presence.
The stub ignores its
$1argument, andtoContaindoes not verify that the gate runs before the package transaction. Emit the action in the stub and assert its marker appears before the transaction marker; otherwise a wrong action or late gate invocation could still pass.This protects the stated pre-transaction quiescence contract. As per path instructions, tests should provide behavioral confidence rather than lock onto incidental implementation details.
Also applies to: 133-133
🤖 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/install-station-package-transaction.test.ts` at line 92, Update the require_docker_restart_quiescence test stub to emit the action received through its $1 argument, then assert that the expected quiescence marker occurs before the package transaction marker. Replace the presence-only toContain check in the related assertions so the test validates both the requested action and pre-transaction ordering.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/install-station-package-transaction.test.ts`:
- Around line 402-404: Extend the test around the generated guard artifacts to
inspect the filesystem after installation, verifying the directory, verify-plan,
and targets have the expected modes, ownership, and are not symlinks. Keep the
existing command-output assertions if useful, but make the behavioral filesystem
checks the primary verification.
- Line 92: Update the require_docker_restart_quiescence test stub to emit the
action received through its $1 argument, then assert that the expected
quiescence marker occurs before the package transaction marker. Replace the
presence-only toContain check in the related assertions so the test validates
both the requested action and pre-transaction ordering.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 60a818bb-0674-40a5-959f-27732927e45b
📒 Files selected for processing (3)
scripts/prepare-dgx-station-host.shtest/install-station-host-preparation.test.tstest/install-station-package-transaction.test.ts
💤 Files with no reviewable changes (1)
- test/install-station-host-preparation.test.ts
ericksoa
left a comment
There was a problem hiding this comment.
Reviewed exact head acc2aca. The undefined production call is removed without weakening the existing fail-closed Docker restart-quiescence gate. The APT guard remains root-owned, non-symlinked, and non-writable outside root while becoming readable/executable by the APT sandbox. Focused installer validation passes (62/62). Sensitive-path review approved.
acc2aca to
2f1c539
Compare
ericksoa
left a comment
There was a problem hiding this comment.
Re-reviewed amended exact head 2f1c539. The amended APT hook command preserves the root-private 0700/0600 guard and invokes it through /bin/bash, matching APT pre-install hook command semantics while avoiding direct execution from a noexec runtime mount. The undefined call remains removed and restart-quiescence remains fail-closed before package installation. Focused installer validation passes (62/62). Sensitive-path review approved for this head.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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 `@test/install-station-package-transaction.test.ts`:
- Around line 130-133: Update the test assertions around the apt-get output and
RECHECK_DOCKER_RESTART marker to compare their positions, asserting that the
restart-quiescence marker appears before the non-simulation install command.
Retain the existing presence checks while validating this ordering at the public
output boundary.
🪄 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: 5add7c5e-0c4f-446d-9ba8-46dfa7bdcf57
📒 Files selected for processing (3)
scripts/prepare-dgx-station-host.shtest/install-station-host-preparation.test.tstest/install-station-package-transaction.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- test/install-station-host-preparation.test.ts
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
2f1c539 to
74b2849
Compare
ericksoa
left a comment
There was a problem hiding this comment.
Re-reviewed exact head 74b2849. The amended Version=3 option correctly keys protocol negotiation to /bin/bash, matching APT source behavior, which derives DPkg::Tools::Options from the first token of the configured hook command. The root-private noexec-safe hook, undefined-call removal, and restart-quiescence boundary remain sound. Focused installer validation passes (62/62). Sensitive-path review approved for this head.
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
ericksoa
left a comment
There was a problem hiding this comment.
Exact-head approval for 4ea0f4b. This head preserves the reviewed root-private noexec-safe APT hook and correct /bin/bash Version=3 key, and now behaviorally proves that the named restart-quiescence gate runs before the real package install. Focused installer validation passes (62/62); pre-commit and pre-push checks passed after generating the required local build artifacts. Sensitive-path review approved.
|
Post-merge hardware qualification completed on a clean generic Ubuntu 24.04 ARM64 DGX Station GB300. The live run used Result: PASS
This closes the physical confirmation requested for the clean generic-Ubuntu Station path. |
<!-- markdownlint-disable MD041 --> ## Summary Add the canonical dated changelog entry for NemoClaw `v0.0.89` before the release plan captures the tag commit. The entry summarizes the user-visible Station preparation, inference, recovery, policy-disclosure, and CLI-containment changes merged since `v0.0.88`. ## Changes - Add `docs/changelog/2026-07-20.mdx` with the exact `## v0.0.89` release heading, parser-safe SPDX comment, summary, and detailed bullets. - Link each shipped theme to the most specific published OpenClaw documentation routes. - Keep internal E2E, advisory-registry, and review-workflow refactors out of the user-facing release summary. Source summary: - #7214, #7241, #7237, #7223, #7204, #7202, #7183, and #7090 -> `docs/changelog/2026-07-20.mdx`: Summarize qualified DGX Station identity, package-state, PackageKit, DKMS, and reboot-handoff fixes. - #7242, #7221, #7186, #7164, and #6874 -> `docs/changelog/2026-07-20.mdx`: Summarize inference endpoint provenance, provider attachment, managed vLLM cleanup and progress, and Ollama selection guidance. - #7225, #7216, #7192, #7136, #7096, and #6910 -> `docs/changelog/2026-07-20.mdx`: Summarize sandbox readiness, recovery guidance, rebuilt model routing, durable Hermes state, and gateway restart behavior. - #7187 -> `docs/changelog/2026-07-20.mdx`: Summarize complete effective messaging-preset egress disclosure before policy mutation. - #7218, #7165, and #7184 -> `docs/changelog/2026-07-20.mdx`: Summarize structured output containment, terminal-safe route display, and Hermes forward cleanup. ## 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 PR adds release-history prose only; the focused changelog contract test validates its required structure and routes. - [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: ## 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 — `mise exec node@22.23.1 -- npx vitest run test/changelog-docs.test.ts` (6 passed). - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not applicable to this doc-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) — `mise exec node@22.23.1 -- npm run docs` completed with 0 errors and 2 existing site-wide 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) — the native changelog entry uses the required parser-safe MDX SPDX comment and does not use frontmatter. --- Signed-off-by: Aaron Erickson <aerickson@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Expanded DGX Station installation support for qualified GB300 and OTA-upgraded environments. * Preserved selected inference providers, endpoints, model pins, and tuning settings during sandbox creation and rebuilds. * Improved sandbox recovery by validating availability and stability before restarting services. * Added clearer policy output showing the complete effective messaging egress configuration. * **Bug Fixes** * Hardened status and inference route displays by sanitizing terminal control characters. * Improved Hermes uninstall behavior by stopping detached dashboard forwarding. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Summary
Fresh generic Ubuntu Station host preparation no longer exits after APT simulation. The installer now uses the existing Docker restart-quiescence gate and invokes its root-only APT pre-install guard through
/bin/bash, which works when/runis mountednoexec.Related Issue
Fixes #7182
Changes
check_no_workloadsinvocation added by fix(installer): retain valid DGX Station prerequisites #7090.require_docker_restart_quiescenceas the single fail-closed gate before the package transaction.0700/0600), invoke the hook through/bin/bashfor anoexec/runmount, and bind APT protocol Version 3 to that executable command token.check_no_workloadsdefinitions that masked the production failure and assert the real restart-quiescence call instead.Type of Change
Quality Gates
4ea0f4b59143000d69e6446d330f14d8c1981766at fix(installer): restore Station package preparation #7183 (review); the APT Version=3 key, root-privatenoexec-safe hook command, fail-closed restart-quiescence gate, and pre-install ordering assertion were reviewed.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 installer-integration test/install-station-package-transaction.test.ts test/install-station-host-preparation.test.ts --testTimeout=15000(62 passed)npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — not applicable: three-line production correction with focused installer coverage; normal hooks passed.npm run docsbuilds without warnings (doc changes only)Signed-off-by: Senthil Ravichandran senthilr@nvidia.com\nSigned-off-by: Aaron Erickson aerickson@nvidia.com
Summary by CodeRabbit
/bin/bashwrapper./bin/bash-prefixed guard hook behavior and adjusted related permission/cleanup expectations.