Skip to content

Add NVX phase 0 feasibility workflow - #8718

Merged
lpcox merged 1 commit into
mainfrom
nvx-phase-0-feasibility
Sep 17, 2026
Merged

lpcox merged 1 commit into
mainfrom
nvx-phase-0-feasibility

Conversation

@lpcox

@lpcox lpcox commented Sep 17, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a manually triggered gh-aw workflow that executes the first feasibility stage for evaluating Microsoft NVX as an AWF primary-agent sandbox backend.

The workflow pins NVX prerelease v0.1.0-dev.441f45568e65 and commit 441f45568e65f66eced419ff9d289e2627a58f0f, verifies the Linux/KVM archive and packaged checksums, runs selected upstream KVM/security scenarios independently, captures a cold-start benchmark, and publishes one superseding evidence-based feasibility issue.

Delivery plan

  1. Phase 0 — feasibility: validate pinned release integrity, KVM boot, managed lifecycle, filesystem sharing and denial, deny-by-default networking, L3/L4 policy, host-loopback/proxy behavior, workload identity, sandbox blocks, structured outcomes, and cold-start performance. Record AWF-specific requirements that remain unproven.
  2. Phase 1 — security design: specify artifact provenance, immutable artifact snapshots, a dedicated per-run VMM identity, scoped KVM access, cgroup limits, non-shell launch, post-launch confinement verification, bounded diagnostics, and durable cleanup.
  3. Phase 2 — filesystem and execution: build deterministic EROFS/ext4 artifacts, stage approved host paths beneath NVX's single virtio-fs root, enforce credential-deny paths, adapt the managed control protocol, and reject unsupported TTY behavior.
  4. Phase 3 — opt-in backend: register nvx as an external microVM backend behind mandatory --nvx-preview, add configuration and CLI surfaces, and cover it with unit and live-KVM tests without changing existing runtimes.
  5. Phase 4 — promotion: retain preview status until NVX has a stable release channel, verified provenance, egress and credential-isolation parity, crash-safe cleanup, resource parity, and a measured advantage over Cloud Hypervisor.

Phase 0 exit policy

The generated report may recommend proceeding to Phase 1 only when every deterministic scenario passes and all remaining AWF-specific gaps have bounded follow-up experiments. Host, integrity, KVM, network-denial, filesystem-denial, managed-lifecycle, workload-identity, or cleanup failures classify the evaluation as blocked.

Passing upstream tests is explicitly not treated as proof of AWF topology security. Squid/API-proxy routing, release provenance, host OpenVMM confinement, Cloud Hypervisor comparison, and a representative agent workload remain named evidence gaps until directly measured.

Workflow behavior

  • Trigger: manual workflow_dispatch
  • Runner workload: deterministic pre-agent probes against the pinned Linux/KVM release
  • Evidence: structured summaries, per-scenario logs, upstream result artifacts, and benchmark output under /tmp/gh-aw/agent/nvx-phase-0/
  • Output: one [NVX Phase 0] issue, replacing the previous open report
  • Failure handling: probe failures are preserved as report evidence rather than preventing analysis
  • Security: read-only agent permissions; repository writes only through create-issue

Validation

  • gh aw compile nvx-phase-0-feasibility --strict --validate --actionlint --shellcheck
  • Repository commit hooks: ESLint, TypeScript build, and commitlint

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 6b7bb21d-a74b-4061-b1d0-ae2a18df7a8c
Copilot AI balanced review requested due to automatic review settings September 17, 2026 21:38
Comment on lines +128 to +149
elif printf '%s %s\n' "$NVX_ARCHIVE_SHA256" "$RELEASE_DIR/$NVX_ARCHIVE" \
| sha256sum --check --status; then
record release-download PASS "Pinned archive SHA-256 matched"
else
record release-download FAIL "Pinned archive SHA-256 mismatched"
fi

if [ "$download_exit" -eq 0 ]; then
tar -xzf "$RELEASE_DIR/$NVX_ARCHIVE" -C "$RELEASE_DIR" \
> "$DATA_DIR/logs/release-extract.log" 2>&1
extract_exit=$?
else
extract_exit=1
fi
PACKAGE_DIR="$RELEASE_DIR/nvx-0.1.0-linux-kvm"
if [ "$extract_exit" -eq 0 ] && (
cd "$PACKAGE_DIR" && sha256sum --check SHA256SUMS
) > "$DATA_DIR/logs/package-checksums.log" 2>&1; then
record package-integrity PASS "All packaged NVX artifact checksums matched"
else
record package-integrity FAIL "NVX package extraction or internal checksum verification failed"
fi
@github-actions

Copy link
Copy Markdown
Contributor

✅ Coverage Check Passed

Overall Coverage

Metric Base PR Delta
Lines 94.26% 94.28% 📈 +0.02%
Statements 92.96% 92.97% 📈 +0.01%
Functions 93.56% 93.56% ➡️ +0.00%
Branches 86.92% 86.93% 📈 +0.01%
📁 Per-file Coverage Changes (1 files)
File Lines (Before → After) Statements (Before → After)
src/log-directory-setup.ts 96.2% → 100.0% (+3.78%) 96.3% → 100.0% (+3.71%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Critical token-exposure and artifact-integrity findings, along with workflow gating and cleanup issues, must be resolved before approval.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite (auto)
Findings: 2 High severity · 4 Medium severity

Note

Copilot is running an experiment and ran this review at Lite.

Open (6)
What changed in this PR

Adds a manually triggered gh-aw workflow to evaluate pinned NVX Linux/KVM feasibility and publish evidence in a superseding GitHub issue.

Changes:

  • Pins and verifies NVX release artifacts and source.
  • Runs host, security, lifecycle, filesystem, networking, and benchmark probes.
  • Generates structured evidence and a compiled workflow for issue reporting.
File Summary and review findings
.github/​workflows/​nvx-phase-0-feasibility.md Defines NVX probes and reporting. Findings include critical token exposure (3 votes), critical checksum-gating failure (1 vote), moderate checksum strictness (3 votes), moderate scenario gating (3 votes), moderate stale host evidence (2 votes), moderate cleanup gaps (2 votes), moderate shell error handling (1 vote), moderate KVM device validation (1 vote), and a nit regarding missing evidence artifact upload (1 vote).
.github/​workflows/​nvx-phase-0-feasibility.lock.yml Generated workflow lock. A moderate finding (1 vote) requires running the postprocessor so the workflow uses the required local AWF build form.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

--pattern "$NVX_ARCHIVE" \
--dir "$RELEASE_DIR" \
> "$DATA_DIR/logs/release-download.log" 2>&1
download_exit=$?
Comment on lines +126 to +141
if [ "$download_exit" -ne 0 ]; then
record release-download FAIL "Pinned Linux KVM archive download failed"
elif printf '%s %s\n' "$NVX_ARCHIVE_SHA256" "$RELEASE_DIR/$NVX_ARCHIVE" \
| sha256sum --check --status; then
record release-download PASS "Pinned archive SHA-256 matched"
else
record release-download FAIL "Pinned archive SHA-256 mismatched"
fi

if [ "$download_exit" -eq 0 ]; then
tar -xzf "$RELEASE_DIR/$NVX_ARCHIVE" -C "$RELEASE_DIR" \
> "$DATA_DIR/logs/release-extract.log" 2>&1
extract_exit=$?
else
extract_exit=1
fi
Comment on lines +97 to +104
if [ "$kvm_readable" != true ] || [ "$kvm_writable" != true ]; then
sudo setfacl -m "u:$(id -u):rw" /dev/kvm 2>&1 \
| tee "$DATA_DIR/logs/kvm-acl.log" >/dev/null
acl_exit=${PIPESTATUS[0]}
if [ "$acl_exit" -ne 0 ]; then
record host-preflight BLOCKED "Unable to grant the runner user scoped access to /dev/kvm"
else
record host-preflight PASS "Linux x86_64 KVM host is available"
fi
PACKAGE_DIR="$RELEASE_DIR/nvx-0.1.0-linux-kvm"
if [ "$extract_exit" -eq 0 ] && (
cd "$PACKAGE_DIR" && sha256sum --check SHA256SUMS
Comment on lines +162 to +163
if [ -x "$PACKAGE_DIR/bin/openvmm" ] && [ -d "$SOURCE_DIR/scripts" ]; then
mkdir -p "$SOURCE_DIR/build" "$SOURCE_DIR/openvmm/target/release"
Comment on lines +181 to +185
for scenario in "${scenarios[@]}"; do
started=$(date +%s)
(
cd "$SOURCE_DIR" &&
timeout 180s python3 scripts/nvx.py test-microvm \
@lpcox
lpcox merged commit 5f42703 into main Sep 17, 2026
27 of 28 checks passed
@lpcox
lpcox deleted the nvx-phase-0-feasibility branch September 17, 2026 21:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants