Skip to content

fix(security): repair runtimes for 64 GB Spark qualification - #12780

Merged
ericksoa merged 17 commits into
mainfrom
codex/spark-64gb-docs-20261007
Oct 26, 2026
Merged

ericksoa merged 17 commits into
mainfrom
codex/spark-64gb-docs-20261007

Conversation

@miyoungc

@miyoungc miyoungc commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Outcome

Promote the QA-verified 64 GB DGX Spark Qwen profile to supported and repair the admission, image-build and security-audit failures blocking its CI.

Reason

The original branch predates the admission helper and current dependency repairs. This update incorporates main b60c91f7b762dbfc4c86385172783bc45efa0119, retains the profile and serving settings, and patches the managed Node runtime for the October security release.

Changes

  • Pin active managed images, CI and build/audit tooling to Node 24.22.1, with matching image digests, archive checksums and assertions. The base-image security probe also requires the configured Node version. Reviewed npm stays 12.0.2.
  • Migrate Discord embedded SDK 2.5.0 runtime modules and declarations to Zod 4.6.6, with original-output and replacement-tree checks. Verify the complete publisher UUID 14.0.2 tree before permitting npm's exact relative SDK launcher link; preserve that link through verified staging and atomic replacement. Other SDK symlinks and hard links remain rejected.
  • Replace the verified native Teams project's MSAL Node/Common tree atomically with 7.1.0 / 16.14.2, and its shared Zod with 4.6.6. Both SDK consumers must resolve the project-owned MSAL path. Original project manifests and locks remain installation provenance.
  • Retain the reviewed body-parser 2.4.0 / qs 6.16.1 and Undici 8.12.2 / 7.30.1 targets, complete archive fingerprints and offline inputs. Integrate main's shared Slack parser and recovery checks. Audit thresholds and advisory exceptions are unchanged.
  • Keep the reviewed npm tar, brace-expansion and ip-address package directories readable by the sandbox user on both installation and repeat runs. Only the installed package directories become 0755; private transaction directories stay private, and file modes, ownership and package bytes remain unchanged.
  • Bind the Brev bootstrap to the official Node 24.22.1 gzip checksums and approved operational-template hash 7be38b490c3f83e1062ec0b7a110b41bc178a67471b786a39e6f0524caffe03a. Retain existing OpenShell artifact identities and the 0.1.3 registry record. Update the immutable E2E preparation action pin and content checksums for the same approved Node version.
  • Preserve automatic Express selection, the detected-capacity and available-memory checks, and the original 64 GB profile's model, image, context, concurrency and serving arguments.

Verification

Publication candidate: c9b2e3ba3c02fff51e8cd89afc099a155c17e16f.

  • Main CI passes on this commit, including all 12 CLI test shards, static checks and coverage aggregation.
  • Managed-image qualification passes: all six native OpenClaw/Hermes/Deep Agents image build/publication/startup jobs, both Pi qualifications, and all-agent activation on AMD64, ARM64 and rootless Podman. Retained target results identify this commit and record 108 agent turns, zero build commands during activation, and successful public-image rebuild and retention checks.
  • The hosted production npm audit passes all six graphs with zero high or critical findings. Node 24.22.1 is checked separately from npm's package audit; reviewed npm remains 12.0.2.
  • Self-hosted PR qualification passes on attempt 2, including the real llama.cpp GPU target, authenticated inference, an OpenClaw turn and owned cleanup. Attempt 1 expired while waiting for managed-image qualification. The failed-job retry ran after that prerequisite succeeded; no image rebuild or deadline change was required. This generic GPU target does not replace the separate 64 GB Qwen hardware evidence below.
  • 147 focused tests across seven files pass, covering Pi receipts, MCP workflow boundaries and compatibility, and the Brev bootstrap. Checksum mismatch rejection and every existing assertion remain intact.
  • The strict production Pi receipt checker passes. Both receipts are unchanged artifact bytes from successful run 40123781968, attempt 1, source 9e8d4a90c9265a7304f86ae49dfb850d8a772fa0; all 38 Pi image inputs match this publication.
  • Actual Discord CJS/ESM, Slack parser and Teams authentication-constructor compatibility probes pass on the retained repair. Authentication probes use fabricated credentials; no live Teams authentication result is claimed.
  • Normal isolated commit and actual pre-push hooks pass, including the CLI compiler. GitHub reports this commit's signature Verified. The diff includes no secrets, API keys or credentials.

All triggered PR CI workflows and the refreshed Advisor blocker gate pass on this commit.

Review notes

Security-sensitive paths include managed/base images, CI runtime pins, archive remediation, audit inputs and base-image admission. Local self-review covered credential isolation, source/replacement integrity, native project containment, failure recovery and the approved launcher exception. The human-authorized commit-bound test-admission record is 6389075902; it does not authorize merging.

All nine Advisor specialists completed successfully on this commit. Every refreshed machine-readable ledger is clear, with zero P0/P1 findings and zero unresolved additional E2E recommendations. All nine artifact digests, source/base identities and complete specialist contexts were verified. The blocker gate and review-coordinator shadow evaluation both pass.

The maintainer product-acceptance record for the supported 64 GB profile is 6405822312, published as ericksoa with MEMBER association. Its body matches the human-approved statement and remains unedited. It establishes the reason, placement, owner, lifecycle, compatibility, security and validation contract. The customer specialist's prose repeats the earlier missing-authority claim; this verified public decision resolves that claim. No profile behavior or policy gate was weakened.

Current main bbdd0bcf8913a537a1126a40a144bac4def5986f adds the Hermes credential-restore repair. It adds no newer vulnerability repair and has no merge conflicts with this branch; the only overlapping path, the E2E README, merges automatically. No security patch replacement or branch update was needed.

CodeRabbit skipped its incremental review and preserved checkpoint 07f358da472edde5ec4d3cec81ec54e7d1c7e7ed. That historical documentation review does not cover the runtime repair. No merge has been performed.

Accepted status decision

  • Decision: Accept, explicitly authorized by Miyoung Choi on October 23, 2026, after confirming the preset change together with the documentation update.
  • Reason: Aaron Erickson confirmed that QA has since verified the 64 GB profile. Miyoung supplied that confirmation and requested removal of its Experimental status.
  • Placement: the existing 64 GB DGX Spark Qwen ServingPreset and the three documentation pages already changed by this PR.
  • Accountable maintainer for this change: Miyoung Choi.
  • Validation plan: serving-catalog and profile-selection tests, catalog compilation and drift checks, the documentation build and variant checks, normal commit/push hooks, independent documentation review, required CI, and automated review.

PR #12633 records physical 64 GB Spark startup, automatic onboarding, chat, file/exec tools, a bounded long-context request, and a restart on the same model and recipe settings. It identifies the tested source and hardware. Aaron's later QA confirmation is a human-provided status decision; this PR does not claim a new hardware run or an independently generated qualification receipt.


Signed-off-by: Aaron Erickson aerickson@nvidia.com
Signed-off-by: Miyoung Choi miyoungc@nvidia.com

@miyoungc miyoungc self-assigned this Oct 7, 2026
@copy-pr-bot

copy-pr-bot Bot commented Oct 7, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Important

Review skipped

We couldn't safely recover the incremental review. No full review was started, and the last reviewed checkpoint was preserved. Retry later, or explicitly request a full review by commenting @coderabbitai full review.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review.

ℹ️ Recent review info
⚙️ Run configuration
📥 Commits

Reviewing files that changed from the base of the PR and between 5241468 and 07f358d.

📒 Files selected for processing: 4
  • docs/changelog/2026-10-06.mdx
  • docs/get-started/prerequisites.mdx
  • docs/inference/set-up-vllm.mdx
  • managed-inference/presets/vllm.dgx-spark-gb10.single-64gb.qwen3-6-35b-a3b-nvfp4.yaml

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 10 remain after this review.

Walkthrough

The DGX Spark Qwen preset is now marked supported and hardware-validated. Documentation describes detected-capacity admission, a separate available-memory preflight, and automatic profile selection for Express installation on nominal 64 GB hardware.

Changes: DGX Spark Qwen support

Layer / File(s) Summary
Preset support and memory guidance
managed-inference/presets/vllm.dgx-spark-gb10.single-64gb.qwen3-6-35b-a3b-nvfp4.yaml, docs/inference/set-up-vllm.mdx, docs/get-started/prerequisites.mdx, docs/changelog/2026-10-06.mdx
The preset changes from experimental to supported, with hardware validation evidence. The documentation distinguishes detected total memory from available-memory preflight, describes Express profile selection, and removes the pending-qualification statement.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~8 minutes

Change: Other

Possibly related issues

  • Issue 7127 concerns cold-start memory failures and MTP speculative decoding in the same profile. This change updates the profile’s support status but does not change its MTP settings.

Suggested reviewers: ericksoa, sandl99

Merge Risk: Minimal · up to 07f35

No actionable merge-blocking risk was identified.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Title check Passed The title references 64 GB Spark qualification, which is a real aspect of the changes. However, it inaccurately describes the work as repairing runtimes; the main change promotes the inference profile…
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (4 skipped: 4 unsupported.)

Full details: Title check

Explanation

The title references 64 GB Spark qualification, which is a real aspect of the changes. However, it inaccurately describes the work as repairing runtimes; the main change promotes the inference profile to supported status and updates related documentation.

✨ Finishing Touches: 💡 1
🛠️ Fix failing CI checks: 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>
@miyoungc miyoungc changed the title docs(inference): clarify 64 GB DGX Spark evaluation and releases docs(inference): clarify 64 GB DGX Spark standard installation Oct 13, 2026
@wscurran wscurran added area: docs Documentation, examples, guides, or docs build area: providers Inference provider integrations and provider behavior platform: dgx-spark Affects DGX Spark hardware or workflows provider: vllm vLLM local or hosted provider behavior labels Oct 14, 2026
@miyoungc miyoungc added chore Build, CI, dependency, or tooling maintenance v0.0.136 labels Oct 16, 2026
rsliter and others added 2 commits October 23, 2026 14:12
Signed-off-by: Rebecca Sliter <571084+rsliter@users.noreply.github.com>
Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>
@miyoungc miyoungc changed the title docs(inference): clarify 64 GB DGX Spark standard installation docs(inference): promote verified 64 GB DGX Spark profile Oct 23, 2026
@github-code-quality

github-code-quality Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Code coverage overview

Languages: TypeScript

TypeScript / code-coverage/plugin

main 63002cd codex/spark-64gb-doc... c9b2e3b +/-
96% 97% +1%
View coverage of the 10 most impacted files.
File main 63002cd codex/spark-64gb-doc... c9b2e3b +/-
nemoclaw/src/onboard/config.ts 98% 96% -2%
nemoclaw/src/index.ts 94% 93% -1%
nemoclaw/src/bl...print/runner.ts 95% 95% 0%
nemoclaw/src/bl...ime-identity.ts 97% 97% 0%
nemoclaw/src/bl...t-management.ts 100% 100% 0%
nemoclaw/src/co.../config-show.ts 100% 100% 0%
nemoclaw/src/commands/slash.ts 100% 100% 0%
nemoclaw/src/ru...time-context.ts 100% 100% 0%
nemoclaw/src/sh...er-boundary.cts 100% 100% 0%
nemoclaw/src/on...native-route.ts 0% 100% +100%

TypeScript / code-coverage/cli

main 63002cd codex/spark-64gb-doc... c9b2e3b +/-
84% 86% +2%
View coverage of the 10 most impacted files.
File main 63002cd codex/spark-64gb-doc... c9b2e3b +/-
src/lib/onboard.ts 62% 50% -12%
src/lib/actions...ess-recovery.ts 65% 81% +16%
src/lib/state/l...diness-lease.ts 66% 83% +17%
src/lib/inferen...ollama/proxy.ts 41% 61% +20%
src/lib/onboard.../application.ts 55% 84% +29%
src/lib/domain/...y/dimensions.ts 0% 72% +72%
src/lib/inferen...er/lifecycle.ts 0% 73% +73%
src/lib/actions...ry/operation.ts 0% 76% +76%
src/lib/actions...try/snapshot.ts 0% 81% +81%
src/lib/inferen...ovider/index.ts 0% 88% +88%

ℹ️ Calculations represent line coverage. Results may change as calculations are updated.


Updated October 24, 2026 20:39 UTC

@miyoungc
miyoungc marked this pull request as ready for review October 23, 2026 21:36
rsliter and others added 6 commits October 23, 2026 14:51
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Merge b60c91f while retaining atomic Teams
replacement, Node 24.22.1 admission, and the 64 GB profile.
Verify and preserve only the approved native Discord UUID launcher link.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa ericksoa changed the title docs(inference): promote verified 64 GB DGX Spark profile fix(security): repair runtimes for 64 GB Spark qualification Oct 24, 2026
@ericksoa

Copy link
Copy Markdown
Member

NemoClaw-Upgrade-E2E: approve 9e8d4a9 b60c91f

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa

Copy link
Copy Markdown
Member

NemoClaw-Upgrade-E2E: approve c9b2e3b b60c91f

@ericksoa

Copy link
Copy Markdown
Member

Decision: Accept promotion of the existing 64 GB DGX Spark Qwen profile to supported in PR #12780, commit c9b2e3ba3c02fff51e8cd89afc099a155c17e16f, against base b60c91f7b762dbfc4c86385172783bc45efa0119.

  • Reason: QA has verified the existing 64 GB profile. The physical startup, onboarding, chat, tools, long-context request and restart evidence is recorded in PR fix(inference): load 64 GB Spark weights lazily #12633. That evidence identifies its tested source and hardware; this acceptance does not claim a new hardware run.
  • Placement: The existing vllm.dgx-spark-gb10.single-64gb.qwen3-6-35b-a3b-nvfp4 preset and the three documentation pages already changed by this PR.
  • Accountable maintainer: Miyoung Choi, as recorded in this PR's accepted status decision.
  • Lifecycle: Retain the existing managed vLLM onboarding, start, stop, rebuild and removal paths. This status promotion adds no separate runtime or lifecycle owner.
  • Compatibility: Retain the profile's DGX Spark GB10, nominal 64 GB, Linux ARM64, Docker, NVIDIA GPU/CDI and driver requirements. Preserve automatic Express selection, detected-capacity admission and available-memory preflight. Keep the existing model, image, context, concurrency and serving arguments.
  • Security: Retain existing OpenShell isolation, network-policy and credential boundaries. The status promotion grants no security exception. The separately approved runtime and dependency repairs remain in scope.
  • Validation: Retain the recorded physical hardware evidence, serving-catalog and profile-selection checks, catalog compilation/parity, documentation validation, normal publication hooks, required CI and independent automated review. Main CI is green on this commit; remaining image/runtime qualification must finish. No additional live deployment or manual full E2E dispatch is authorized by this record.

This is the maintainer product-acceptance record for the existing profile's status promotion. It does not authorize merging PR #12780.

@github-actions

Copy link
Copy Markdown
Contributor

PR Review Advisor finished for commit c9b2e3b. Include the Advisor findings in the complete PR feedback collection. Verify and group valid findings before repair.

Request review only when Require no Advisor blockers is green.

All previous runs

@ericksoa
ericksoa merged commit 3c6d991 into main Oct 26, 2026
175 of 176 checks passed
@ericksoa
ericksoa deleted the codex/spark-64gb-docs-20261007 branch October 26, 2026 01:40
sandl99 added a commit that referenced this pull request Oct 26, 2026
## Outcome
E2E jobs that restore the exact-commit CLI artifact now run a restore
helper that accepts Node 24.22.1. Before this change, 72 jobs in [E2E
run
40255364836](https://github.com/NVIDIA/NemoClaw/actions/runs/40255364836)
on `3c6d991640` downloaded the artifact successfully and then failed
with `consumer must restore the CLI under the pinned Node 24.18.1
toolchain`.

## Reason
#12780 moved E2E setup to Node 24.22.1 and updated
`scripts/e2e/restore-cli-artifact.sh`. The workflows still call
`restore-e2e-cli-artifact@b1494a0`, and that action runs its own helper
copy through `GITHUB_ACTION_PATH`. That copy still requires Node
24.18.1.

### Related issues
Refs #12780

## Changes
- Repin all 13 restore steps (12 in `.github/workflows/e2e.yaml`, 1 in
`.github/workflows/e2e-standard-profile.yaml`) and
`E2E_ACTION_PROVENANCE.restoreCliArtifact` in
`tools/e2e/workflow-boundary-policy.mts` to
`restore-e2e-cli-artifact@3c6d991`.
Between `b1494a08` and `3c6d991640`, the action file is unchanged. The
restore helper changes only its consumer-runtime and manifest-toolchain
checks, both from 24.18.1 to 24.22.1.
- Recompute `MCP_DEV_POST_INSTALL_TRANSITION_CONTENT_SHA256` in
`tools/e2e/mcp-dev-workflow-boundary-digests.mts` because it hashes the
`mcp-bridge-dev` restore step.

## Verification
- `npx vitest run --project e2e-support` on the 30 restore,
CLI-artifact, and workflow-boundary test files: 903 passed.
- `npx vitest run test/mcp/mcp-openshell-workflow.test.ts`: passed.
- Offline replay on artifact `12622272733` from the failing run: the
`b1494a08` helper reproduces the CI error. The `3c6d991640` helper
passes every provenance, digest, archive, and identity check and
restores `dist/`.
- The pre-commit and pre-push hooks passed.
- Live E2E: pending. A manual PR E2E run takes `e2e.yaml` from `main`,
which still has the old pin, so live evidence requires a run of this
branch's workflow or a post-merge `main` run.
- The diff contains no secrets, API keys, or credentials.

## Review notes
This PR changes sensitive paths `.github/**` and `tools/e2e/**`. No
pre-publication review exists; these paths await independent review.

The Hermes base-image failure and the bootstrap sudo-environment failure
from the same run are outside this change.

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


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

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Tests**
* Updated the automated end-to-end test workflows to use a revised CLI
artifact restoration step.

* **Chores**
* Updated workflow boundary validation data to reflect the current
configuration.

These changes affect automated testing and validation; no user-facing
product behavior is noted.

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

---------

Signed-off-by: San Dang <sdang@nvidia.com>
sandl99 pushed a commit that referenced this pull request Oct 26, 2026
<!-- markdownlint-disable MD041 -->
## Outcome

Update the reviewed Hermes base pin to the published image containing
Node 24.22.1. Protected image builds currently select a base containing
Node 24.18.1 and stop at the completed-image security check.

## Reason

[PR #12780](#12780) raised the
Node requirement without updating this base selector. Both protected
architecture jobs in [E2E run
40268185522](https://github.com/NVIDIA/NemoClaw/actions/runs/40268185522)
fail at that check. The compatible base was already published by [run
40255364854](https://github.com/NVIDIA/NemoClaw/actions/runs/40255364854).

## Changes

Replace only `agents/hermes/Dockerfile`'s base index with
`sha256:4574777698fa65e270f53ee4c6fca90640cc89867e7dcc726c2ca03429d4ed8b`.
Keep Hermes 0.21.3, security requirements and test assertions unchanged.

## Verification

Local validation used `639670dd3a73a0686a682426058d840d962d900b` plus
this one-line patch on macOS arm64, Node 24.14.1.

```bash
node node_modules/vitest/vitest.mjs run --project cli --project integration \
  src/lib/agent/base-image-hermes.test.ts \
  src/lib/agent/base-image-hermes-resolution.test.ts \
  test/runtime/sandbox/sandbox-base-security-packages.test.ts \
  --maxWorkers=1 --fileParallelism=false --coverage=false --reporter=verbose
```

All 160 tests passed across three files. The command ran with an
isolated environment and live E2E disabled. Existing tests cover stale
Node rejection, security inventory and pinned-base provenance; no new
test is needed for the selector change.

The replacement index and both native manifests match the
checksum-verified publication contract from
`3c6d991640414a2d78f95f629d67194d44829554`. Producer builds and the
ACP/direct startup-hold checks passed on both architectures. That
historical evidence does not establish a model turn or a new protected
E2E pass for this repair.

`git diff --check` passed. The diff contains no secrets, API keys or
credentials.

## Review notes

Source review covered NVIDIA/NemoClaw at `639670dd3a73` plus the
one-line change to the sensitive path `agents/hermes/Dockerfile`,
including both complete failed-job logs, image identities and downstream
gates. Independent agent review found no actionable finding; maintainer
approval remains pending.

Keep this PR draft until its commit passes required CI and review. For
Hermes image qualification, verify the recorded base references against
the native manifests of the new pin; a source-built base or an unchecked
`latest` alias alone does not verify this selector.

---
Signed-off-by: Hung Le <hple@nvidia.com>


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

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Chores**
* Updated the underlying sandbox image. No user-facing behavior changes
are expected.

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

Signed-off-by: Hung Le <hple@nvidia.com>
@wscurran wscurran added area: packaging Packages, images, registries, installers, or distribution area: security Security controls, permissions, secrets, or hardening integration: discord Discord integration or channel behavior integration: openclaw OpenClaw integration behavior labels Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: docs Documentation, examples, guides, or docs build area: packaging Packages, images, registries, installers, or distribution area: providers Inference provider integrations and provider behavior area: security Security controls, permissions, secrets, or hardening chore Build, CI, dependency, or tooling maintenance integration: discord Discord integration or channel behavior integration: openclaw OpenClaw integration behavior platform: dgx-spark Affects DGX Spark hardware or workflows provider: vllm vLLM local or hosted provider behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants