Repository navigation
Update NVX and adapt direct OpenVMM launches to the current boot contract - #11006
Conversation
Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Documentation PreviewDocumentation has been built for this PR. To view locally:
Built from commit f0689bd |
✅ Coverage Check PassedOverall Coverage
📁 Per-file Coverage Changes (8 files)
Coverage comparison generated by |
There was a problem hiding this comment.
🟡 Changes recommended
The live-KVM tests lack required package files, restrictive /home permissions block non-root tool-state seeding, and stale process matching can falsely report successful VMM cleanup.
3 open issues
What changed in this PR
Updates AWF’s NVX microVM backend to the current release and boot contract, addressing the compatibility changes described in #10999.
Changes:
- Merges toolchain and guest configuration into one immutable distro image with a format-qualified boot token.
- Adapts aggregate shares, strengthens launch validation, and passes checked image descriptors to OpenVMM.
- Synchronizes release pins, workflows, promotion baselines, documentation, and contract coverage.
| File | Description |
|---|---|
src/nvx/runtime-lifecycle.ts |
Uses shared launch validation, kernel tokens, and image descriptor paths. |
src/nvx/runtime-lifecycle.test.ts |
Checks aggregate shares, formatted root tokens, and descriptor arguments. |
src/nvx/runtime-backend.ts |
Updates comments to describe merged guest configuration. |
src/nvx/one-shot-adapter.ts |
Migrates to nvx-rs and implements the updated launch contract. |
src/nvx/one-shot-adapter.test.ts |
Covers share rendering, command-line budgets, and validation. |
src/nvx/manager.ts |
Clarifies that configuration is a merge source, not a guest layer. |
src/nvx/manager.test.ts |
Checks configuration-source handoff and single-image launches. |
src/nvx/live-mount-policy.ts |
Adds a file-share marker. |
src/nvx/launch-executor.ts |
Verifies image descriptors and manages their handoff and closure. |
src/nvx/launch-executor.test.ts |
Tests descriptor validation, inheritance, and failure cleanup. |
src/nvx/guest-config-layer.ts |
Documents configuration as an ownership-preserving overlay. |
src/nvx/guest-config-layer.test.ts |
Checks ownership calls and relocates temporary fixtures. |
src/nvx/filesystem-builder.ts |
Merges sources into one distro image and strengthens staging checks. |
src/nvx/filesystem-builder.test.ts |
Covers deterministic merges, ownership, conflicts, and source changes. |
src/nvx/confinement.ts |
Preserves checked image descriptors through the exec trampoline. |
src/nvx/confinement.test.ts |
Checks descriptor-preservation setup. |
src/nvx/artifact-manifest.ts |
Updates upstream pins and raises the OpenVMM ceiling to 1 GiB. |
src/nvx/artifact-manifest.test.ts |
Checks synchronized pins, launcher migration, and artifact limits. |
scripts/ci/nvx-release-contract.test.ts |
Adds comparisons against the pinned package’s real dry-run output. |
scripts/ci/nvx-phase4-provision-nvx.sh |
Updates provisioning checksums and source identities. |
docs/nvx-security-design.md |
Documents the revised contract and validation boundaries. |
docs/nvx-promotion-thresholds.json |
Updates the promotion baseline’s NVX pin. |
docs/nvx-promotion-evaluation.md |
Updates the documented NVX baseline. |
.gitignore |
Adds NVX temporary-directory exclusions. |
.github/workflows/smoke-verify-release-nvx-assets.md |
Updates expected release-manifest identities. |
.github/workflows/smoke-verify-release-nvx-assets.lock.yml |
Synchronizes generated release-verification checks. |
.github/workflows/smoke-nvx-copilot.md |
Updates Copilot smoke artifact pins and checksums. |
.github/workflows/smoke-nvx-copilot.lock.yml |
Synchronizes the generated Copilot smoke workflow. |
.github/workflows/smoke-nvx-build-test.md |
Updates build-smoke artifact pins and checksums. |
.github/workflows/smoke-nvx-build-test.lock.yml |
Synchronizes the generated build-smoke workflow. |
.github/workflows/release.yml |
Publishes artifacts using the updated upstream identity. |
.github/workflows/nvx-phase-4-canary.yml |
Updates canary provisioning and campaign metadata. |
.github/workflows/nvx-phase-4-benchmark.yml |
Updates benchmark baseline checks and campaign metadata. |
.github/workflows/nvx-phase-3b-live-kvm.yml |
Updates pins, probes Rust sources, and enables release-contract tests. |
.github/workflows/nvx-phase-0-feasibility.md |
Updates pins and migrates one-shot probes to packaged nvx-rs. |
.github/workflows/nvx-phase-0-feasibility.lock.yml |
Synchronizes generated feasibility probes and release metadata. |
Review effort: Max (auto)
| - name: Run focused NVX Phase 3d tests | ||
| env: | ||
| AWF_NVX_PACKAGE_ROOT: ${{ runner.temp }}/nvx-package/nvx-0.1.0-linux-kvm |
| await prepareDestination(destination, true); | ||
| await fs.chmod(destination, mode); | ||
| const ownership = await applyOwnership(destination, stat, false); |
| cd "$SOURCE_DIR" && | ||
| run_with_kvm_group timeout 180s python3 scripts/nvx.py \ | ||
| run_with_kvm_group timeout 180s \ | ||
| "$RUNNER_TEMP/nvx-release/nvx-0.1.0-linux-kvm/bin/nvx-rs" \ |
|
@copilot address all review feedback |
|
✅ Copilot review passed with no inline comments. @copilot Add the |
|
@copilot fix the failing ci check https://github.com/github/gh-aw-firewall/actions/runs/41503778588/job/125488268521?pr=11006 |
Fixed in |
|
🔌 Smoke Services — All services reachable! ✅
|
|
🚀 Security Guard has started processing this pull request |
|
✅ Smoke Copilot BYOK AOAI (api-key) completed. Copilot AOAI BYOK (api-key) mode operational. 🔓
|
|
🛡️ Smoke Copilot Network Isolation confirmed the egress allowlist is enforced. ✅
|
|
✅ Smoke Claude passed
|
Running in direct BYOK mode (AWF_AUTH_TYPE=github-oidc + AWF_AUTH_AZURE_* + COPILOT_PROVIDER_BASE_URL) via api-proxy → Azure OpenAI (Foundry, o4-mini-aw) authenticated via Microsoft Entra
|
|
Cloud Hypervisor + Copilot smoke test
Overall: PASS
|
Copilot BYOK Smoke Test Results✅ GitHub MCP connectivity — last 2 merged PRs verified Status: PASS Running in direct BYOK mode (COPILOT_PROVIDER_API_KEY) via api-proxy → api.githubcopilot.com
|
Services smoke test
Overall: FAIL
|
Smoke Test: Claude Engine Validation
Overall result: PASS
|
Smoke Test: Gemini Engine Validation❌ GitHub MCP Testing: tools unavailable (PR #11000: fix: preserve Sous Chef non-comment outcomes)
|
|
fix: avoid false routed-run failures after recovery or cancellation
|
Smoke Test
|
🏗️ Build Test Suite Results
Overall: 7/8 ecosystems passed — FAIL Failure detailsJava (gson, caffeine): .NET note: the first
|
|
Smoke Copilot
|
|
EGRESS_RESULT allow=pass deny=pass
Overall: PASS
|
Chroot version comparison
Node.js differs between host and chroot, so not all tests passed and the
|


Newer NVX guests reject AWF’s unformatted layer tokens and separate configuration layer; OpenVMM also rejects repeated direct mounts. This updates to the newer verified release
v0.1.0-dev.8fb0f1d64f2fand adapts AWF’s launch contract.Immutable root
distro.erofs, preserving root/workload ownership.Shares and launch safety
--mountfor one directory; use aggregate children andnvx_sharetokens for multiple shares or files.Artifacts and workflows
nvx-rs; update the Rust-source probe, generated locks, and documentation.Contract coverage