Skip to content

Commit efbccbb

Browse files
committed
merge(main): incorporate current workflow prerequisites
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
2 parents f088f28 + 7689b4a commit efbccbb

61 files changed

Lines changed: 2130 additions & 324 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/podman-cpu-proof.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ jobs:
8080
- name: Build shared sandbox-name contract
8181
run: npm run build:policy-boundary
8282

83+
- name: Compile managed inference catalog
84+
run: npm run catalog:compile
85+
8386
- name: Prepare system and app slice CPU settings without service delegation
8487
shell: bash
8588
run: node --experimental-strip-types scripts/checks/run-portable-cpu-delegation-proof.mts prepare

.github/workflows/portable-profile-e2e.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ jobs:
5454
- name: Install root dependencies
5555
run: npm ci --ignore-scripts
5656

57+
- name: Compile managed inference catalogue
58+
run: npm run catalog:compile
59+
5760
- name: Build shared policy boundary
5861
run: npm run build:policy-boundary
5962

.github/workflows/pr-self-hosted.yaml

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,7 @@ concurrency:
2828
cancel-in-progress: true
2929

3030
jobs:
31-
get-pr-info:
32-
runs-on: ubuntu-latest
33-
timeout-minutes: 5
34-
outputs:
35-
pr-info: ${{ steps.get-pr-info.outputs.pr-info }}
36-
steps:
37-
- id: get-pr-info
38-
uses: nv-gha-runners/get-pr-info@090577647b8ddc4e06e809e264f7881650ecdccf # main
39-
4031
select-llama-cpp-generic-gpu:
41-
needs: get-pr-info
4232
runs-on: ubuntu-latest
4333
timeout-minutes: 5
4434
outputs:
@@ -48,12 +38,16 @@ jobs:
4838
name: Select llama.cpp generic GPU E2E from PR files
4939
env:
5040
GH_TOKEN: ${{ github.token }}
51-
PR_INFO: ${{ needs.get-pr-info.outputs.pr-info }}
5241
shell: bash
5342
run: |
5443
set -euo pipefail
55-
pr_number="$(jq -er '.number | select(type == "number" and . > 0)' <<<"$PR_INFO")"
56-
head_sha="$(jq -er '.head.sha | select(test("^[a-f0-9]{40}$"))' <<<"$PR_INFO")"
44+
[[ "$GITHUB_REF_NAME" =~ ^pull-request/([0-9]+)$ ]] || {
45+
echo "::error::Copied branch name does not identify a PR" >&2
46+
exit 1
47+
}
48+
pr_number="${BASH_REMATCH[1]}"
49+
pr_json="$(gh api "repos/$GITHUB_REPOSITORY/pulls/$pr_number")"
50+
head_sha="$(jq -er '.head.sha | select(test("^[a-f0-9]{40}$"))' <<<"$pr_json")"
5751
[[ "$head_sha" == "$GITHUB_SHA" ]] || {
5852
echo "::error::Copied PR branch SHA does not match the current PR head" >&2
5953
exit 1
@@ -89,9 +83,7 @@ jobs:
8983
9084
llama-cpp-generic-gpu:
9185
name: llama.cpp on generic NVIDIA GPU
92-
needs:
93-
- get-pr-info
94-
- select-llama-cpp-generic-gpu
86+
needs: select-llama-cpp-generic-gpu
9587
if: ${{ needs.select-llama-cpp-generic-gpu.outputs.selected == 'true' }}
9688
runs-on: linux-amd64-gpu-rtxpro6000-latest-1
9789
timeout-minutes: 120
@@ -101,9 +93,9 @@ jobs:
10193
E2E_TARGET_ID: llama-cpp-generic-gpu
10294
NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE: "1"
10395
NEMOCLAW_CLI_BIN: ${{ github.workspace }}/bin/nemoclaw.js
104-
NEMOCLAW_E2E_EXPECTED_SHA: ${{ fromJSON(needs.get-pr-info.outputs.pr-info).head.sha }}
96+
NEMOCLAW_E2E_EXPECTED_SHA: ${{ github.sha }}
10597
NEMOCLAW_E2E_SHARD: default
106-
NEMOCLAW_LLAMA_CPP_QUALIFICATION_HEAD_SHA: ${{ fromJSON(needs.get-pr-info.outputs.pr-info).head.sha }}
98+
NEMOCLAW_LLAMA_CPP_QUALIFICATION_HEAD_SHA: ${{ github.sha }}
10799
NEMOCLAW_LLAMACPP_RECIPE: llama-cpp.nemotron-3-nano-30b-a3b.spark-single.v1
108100
NEMOCLAW_NON_INTERACTIVE: "1"
109101
NEMOCLAW_PROVIDER: install-llama-cpp
@@ -115,7 +107,7 @@ jobs:
115107
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
116108
with:
117109
persist-credentials: false
118-
ref: ${{ fromJSON(needs.get-pr-info.outputs.pr-info).head.sha }}
110+
ref: ${{ github.sha }}
119111

120112
- name: Prepare E2E workspace
121113
uses: NVIDIA/NemoClaw/.github/actions/prepare-e2e@f6304bc25fc35bfaa441c8c2fbfee38f72805a75

ci/source-shape-test-budget.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@
6161
"test": "routes only the measured heavy lanes on trusted main (#7145)",
6262
"category": "security"
6363
},
64+
{
65+
"file": "test/e2e/support/portable-profile-rootless-runtime-workflow.test.ts",
66+
"test": "compiles the managed inference catalogue after dependency installation and before the live E2E test (#9680)",
67+
"category": "compatibility"
68+
},
6469
{
6570
"file": "test/growth-guardrails-workflow-boundary.test.ts",
6671
"test": "runs the trusted Vitest guardrails against pull request data",
@@ -76,6 +81,11 @@
7681
"test": "restores exact locked posture after root-separated repair and later failure (#7033)",
7782
"category": "security"
7883
},
84+
{
85+
"file": "test/muse-glimmer-vllm-image-provenance.test.ts",
86+
"test": "binds the checked-in provenance to the selected runtime",
87+
"category": "security"
88+
},
7989
{
8090
"file": "test/muse-glimmer-vllm-image-provenance.test.ts",
8191
"test": "rejects %s",

docs/inference/set-up-vllm.mdx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,9 @@ Managed profiles and model-specific recipes use immutable image digests:
158158

159159
- DGX Spark and DGX Station models without a model-specific runtime use the `linux/arm64` digest `sha256:9204569b17ee4c0eff75194b8e6e458479c8aee18953b5ab9cf359fcdac659e2` with a compressed layer size of `9.60 GB` under `nvcr.io/nvidia/vllm:26.05.post1-py3`.
160160
N1x uses the same image.
161-
- The DGX Spark Muse Glimmer recipe uses the `linux/arm64` post-merge vLLM nightly digest `sha256:677afd5bf3b4bb9881f91e107af7098f8410726b4c05b25cb4a815900b398204` with a compressed layer size of `9.70 GB` under `vllm/vllm-openai`.
162-
The image was built from vLLM commit `ac7509e2b1db40fec2f03dde1ed4e9dfdc2338c9`, which contains merged Muse Glimmer support commit `6adad08767583f52eb4d2122111af0bf638ed5e6`.
161+
- The DGX Spark Muse Glimmer recipe uses the `linux/arm64` post-fix vLLM nightly digest `sha256:b0e84e5f2b00a7268e4fdda332790ebd4bfb166b64757e166914753afaeee965` with a compressed layer size of `9.71 GB` under `vllm/vllm-openai`.
162+
The image was built from vLLM commit `5a4c8d99242e9e069b604d0e9b969e77f7dd501d`, which contains merged Muse Glimmer support commit `6adad08767583f52eb4d2122111af0bf638ed5e6` and the vLLM dependency fix from commit `90984ddbed27a09409506d6d6c0eea87f54b04b5`.
163+
The image includes `huggingface_hub` `1.28.0`, which preserves the pinned model revision when vLLM transfers configuration to the engine process.
163164
It pins Hugging Face revision `d35cb79050f419c457611b1cee5c5d15b176f285` for the approximately `25.45 GB` model download.
164165
- The DGX Spark Nemotron 3.5 Lightning recipe uses the `linux/arm64` digest `sha256:3af90144a0926e5c5fe46ee16e5201e763dd854538b9d7ce433755f11dadaf78` with a compressed layer size of approximately `12.69 GB` under `vllm/vllm-openai`.
165166
It pins Hugging Face revision `0dcd680e5585c791728c83342b311d0a0026dbeb` for the approximately `21.56 GB` model download.

docs/manage-sandboxes/uninstall-nemoclaw.mdx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ The legacy `default` namespace is not isolated across gateways, so it cannot sat
155155
Scoped uninstall stops before it deletes a sandbox, registry row, or gateway registration and preserves the selected gateway's runtime evidence and local state.
156156
Because the supported OpenShell Podman schema does not expose `sandbox_namespace`, scoped Podman uninstall fails closed before signaling and preserves the gateway runtime evidence and local state.
157157
A full uninstall for the portable experimental profile detects ownership only from durable lifecycle state.
158+
When no Portable lifecycle receipt or retirement record exists, uninstall runs ordinary cleanup and removes any abandoned Portable configuration directory.
159+
This path covers an incomplete or absent onboarding session and an absent state directory.
160+
Uninstall still stops before cleanup for an unknown Portable uninstall artifact or a completed Portable onboarding session whose lifecycle receipt is missing.
158161
It records the initial lifecycle receipts and sandbox registry state for comparison.
159162
NemoClaw first acquires the process-bound portable host lock at `~/.nemoclaw-portable-host.lock`.
160163
This host-wide fence coordinates portable onboarding, rebuild, and uninstall.

internal/security-reviews/muse-glimmer-vllm-image-provenance-v1.json

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,51 +11,64 @@
1111
"repository": "vllm/vllm-openai"
1212
},
1313
"image": {
14-
"reference": "vllm/vllm-openai@sha256:677afd5bf3b4bb9881f91e107af7098f8410726b4c05b25cb4a815900b398204",
15-
"manifestDigest": "sha256:677afd5bf3b4bb9881f91e107af7098f8410726b4c05b25cb4a815900b398204",
14+
"reference": "vllm/vllm-openai@sha256:b0e84e5f2b00a7268e4fdda332790ebd4bfb166b64757e166914753afaeee965",
15+
"manifestDigest": "sha256:b0e84e5f2b00a7268e4fdda332790ebd4bfb166b64757e166914753afaeee965",
1616
"manifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
17-
"manifestUrl": "https://registry-1.docker.io/v2/vllm/vllm-openai/manifests/sha256:677afd5bf3b4bb9881f91e107af7098f8410726b4c05b25cb4a815900b398204",
18-
"configDigest": "sha256:c3f199e54a26d2d7a9a41115cd07ce9d90a6488c5a4e75b17129e1006ce533fd",
17+
"manifestUrl": "https://registry-1.docker.io/v2/vllm/vllm-openai/manifests/sha256:b0e84e5f2b00a7268e4fdda332790ebd4bfb166b64757e166914753afaeee965",
18+
"configDigest": "sha256:49d2eb65dc2a8dea24e43c27b226f650481ac97d4ba9c567b6e1ca08bc472303",
1919
"configMediaType": "application/vnd.docker.container.image.v1+json",
20-
"configSizeBytes": 34762,
21-
"configUrl": "https://registry-1.docker.io/v2/vllm/vllm-openai/blobs/sha256:c3f199e54a26d2d7a9a41115cd07ce9d90a6488c5a4e75b17129e1006ce533fd",
20+
"configSizeBytes": 34738,
21+
"configUrl": "https://registry-1.docker.io/v2/vllm/vllm-openai/blobs/sha256:49d2eb65dc2a8dea24e43c27b226f650481ac97d4ba9c567b6e1ca08bc472303",
2222
"layerCount": 32,
23-
"compressedLayerSizeBytes": 9699710136,
24-
"createdAt": "2026-08-14T05:33:50.528328374Z",
23+
"compressedLayerSizeBytes": 9706339423,
24+
"createdAt": "2026-08-19T05:34:00.562836767Z",
2525
"platform": {
2626
"os": "linux",
2727
"architecture": "arm64"
2828
}
2929
},
3030
"build": {
31-
"sourceRepository": "https://github.com/vllm-project/vllm",
32-
"sourceRevision": "ac7509e2b1db40fec2f03dde1ed4e9dfdc2338c9",
33-
"sourceRevisionUrl": "https://github.com/vllm-project/vllm/commit/ac7509e2b1db40fec2f03dde1ed4e9dfdc2338c9",
34-
"imageTag": "vllm/vllm-openai:nightly-ac7509e2b1db40fec2f03dde1ed4e9dfdc2338c9",
35-
"pipelineId": "019d130e-464e-4ff7-b84b-492992c0c06b",
36-
"pipelineUrl": "https://buildkite.com/vllm/release-v2/builds/5174"
31+
"sourceRevision": "5a4c8d99242e9e069b604d0e9b969e77f7dd501d",
32+
"imageTag": "vllm/vllm-openai:nightly-5a4c8d99242e9e069b604d0e9b969e77f7dd501d",
33+
"pipelineId": "019d130e-464e-4ff7-b84b-492992c0c06b"
3734
},
3835
"upstreamSupport": {
3936
"museMergeCommit": "6adad08767583f52eb4d2122111af0bf638ed5e6",
40-
"museMergeCommitUrl": "https://github.com/vllm-project/vllm/commit/6adad08767583f52eb4d2122111af0bf638ed5e6",
41-
"comparisonUrl": "https://github.com/vllm-project/vllm/compare/6adad08767583f52eb4d2122111af0bf638ed5e6...ac7509e2b1db40fec2f03dde1ed4e9dfdc2338c9",
42-
"relationship": "direct-descendant",
43-
"aheadBy": 1
37+
"relationship": "descendant",
38+
"aheadBy": 173,
39+
"revisionFixCommit": "90984ddbed27a09409506d6d6c0eea87f54b04b5",
40+
"revisionFixRelationship": "descendant",
41+
"revisionFixAheadBy": 33
4442
},
4543
"reportedLabels": {
46-
"ai.vllm.build.commit": "ac7509e2b1db40fec2f03dde1ed4e9dfdc2338c9",
44+
"ai.vllm.build.commit": "5a4c8d99242e9e069b604d0e9b969e77f7dd501d",
4745
"ai.vllm.build.pipeline": "019d130e-464e-4ff7-b84b-492992c0c06b",
48-
"ai.vllm.build.url": "https://buildkite.com/vllm/release-v2/builds/5174",
49-
"ai.vllm.image.tag": "vllm/vllm-openai:nightly-ac7509e2b1db40fec2f03dde1ed4e9dfdc2338c9",
50-
"org.opencontainers.image.revision": "ac7509e2b1db40fec2f03dde1ed4e9dfdc2338c9",
51-
"org.opencontainers.image.source": "https://github.com/vllm-project/vllm"
46+
"ai.vllm.image.tag": "vllm/vllm-openai:nightly-5a4c8d99242e9e069b604d0e9b969e77f7dd501d",
47+
"org.opencontainers.image.revision": "5a4c8d99242e9e069b604d0e9b969e77f7dd501d"
48+
},
49+
"runtimeDependencies": {
50+
"vllmVersion": "0.26.1rc1.dev942+g5a4c8d992",
51+
"huggingfaceHubVersion": "1.28.0",
52+
"sentencepieceVersion": "0.2.2",
53+
"tiktokenVersion": "0.14.0"
54+
},
55+
"revisionSerialization": {
56+
"model": "Inferact/Muse-Glimmer-30B-NVFP4-W4A4",
57+
"requestedRevision": "d35cb79050f419c457611b1cee5c5d15b176f285",
58+
"resolvedRevisionBeforePickle": "d35cb79050f419c457611b1cee5c5d15b176f285",
59+
"resolvedRevisionAfterPickle": "d35cb79050f419c457611b1cee5c5d15b176f285",
60+
"preserved": true
5261
},
5362
"verification": {
54-
"observedAt": "2026-08-14T16:33:50Z",
63+
"observedAt": "2026-08-19T22:53:46Z",
5564
"methods": [
5665
"docker-buildx-imagetools-inspect-raw",
5766
"docker-image-inspect",
58-
"github.qkg1.toppare-api"
67+
"github.qkg1.toppare-api",
68+
"container-package-imports",
69+
"resolved-revision-pickle-round-trip",
70+
"dgx-spark-cold-cache-startup",
71+
"vllm-openai-api-validation"
5972
],
6073
"signedProvenanceAttestation": "not-available"
6174
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
apiVersion: nemoclaw.nvidia.com/managed-inference/v1
5+
kind: ServingPreset
6+
7+
metadata:
8+
id: vllm.linux-amd64-nvidia.single.muse-glimmer-30b-nvfp4-w4a4
9+
displayName: Muse Glimmer 30B NVFP4 W4A4 on one Linux x86_64 NVIDIA GPU
10+
supportState: experimental
11+
validation:
12+
level: hardware
13+
evidence: brev-rtx-pro-server-6000-2026-08-18
14+
15+
spec:
16+
selection: explicit-only
17+
priority: 310
18+
19+
requirements:
20+
all:
21+
- readiness:
22+
scope: everyNode
23+
kind: capability
24+
id: host.platform.supported
25+
state: present
26+
- readiness:
27+
scope: everyNode
28+
kind: capability
29+
id: host.docker.available
30+
state: present
31+
- readiness:
32+
scope: everyNode
33+
kind: capability
34+
id: host.docker.daemon_reachable
35+
state: present
36+
- readiness:
37+
scope: everyNode
38+
kind: capability
39+
id: host.docker.runtime_supported
40+
state: present
41+
- readiness:
42+
scope: everyNode
43+
kind: capability
44+
id: host.docker.storage_compatible
45+
state: present
46+
- readiness:
47+
scope: everyNode
48+
kind: capability
49+
id: host.gpu.nvidia_available
50+
state: present
51+
- readiness:
52+
scope: everyNode
53+
kind: capability
54+
id: host.gpu.container_toolkit_available
55+
state: present
56+
- readiness:
57+
scope: everyNode
58+
kind: capability
59+
id: host.gpu.cdi_healthy
60+
state: present
61+
- readiness:
62+
scope: everyNode
63+
kind: observation
64+
id: host.os.platform
65+
comparison:
66+
operator: equals
67+
value: linux
68+
- readiness:
69+
scope: everyNode
70+
kind: observation
71+
id: host.os.architecture
72+
comparison:
73+
operator: equals
74+
value: x64
75+
- readiness:
76+
scope: everyNode
77+
kind: observation
78+
id: host.docker.runtime
79+
comparison:
80+
operator: equals
81+
value: docker
82+
- readiness:
83+
scope: everyNode
84+
kind: observation
85+
id: host.gpu.count
86+
comparison:
87+
operator: at-least
88+
value: 1
89+
- readiness:
90+
scope: everyNode
91+
kind: observation
92+
id: host.gpu.driver_version
93+
comparison:
94+
operator: version-at-least
95+
value: 580.65.06
96+
97+
plan:
98+
backend: vllm
99+
platform: linux
100+
interactive: false
101+
recipeRef: vllm.muse-glimmer-30b-nvfp4-w4a4.linux-amd64-single.v1

0 commit comments

Comments
 (0)