Skip to content

feat: add NVX Phase 3e live manager evidence - #8886

Merged
lpcox merged 21 commits into
mainfrom
nvx-phase-3e-live-evidence
Sep 22, 2026
Merged

lpcox merged 21 commits into
mainfrom
nvx-phase-3e-live-evidence

Conversation

@lpcox

@lpcox lpcox commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • publish an AWF release-attested three-artifact NVX bundle containing the pinned OpenVMM binary, kernel, and initramfs
  • allow preflight to trust only the protected release workflow or the exact opt-in NVX validation workflow, with no arbitrary signer or unsigned fallback
  • run the production NvxManager end to end on GitHub-hosted x86_64 KVM for a successful guest boot and a wall-clock timeout case
  • require structured outcomes, live confinement observations, and residue-free cleanup for both executions
  • document the Phase 3e boundary while keeping nvx unavailable through the runtime registry and CLI

Validation

  • npm test -- --runInBand — 380 suites passed, 6,105 tests passed, 4 skipped
  • npm run build
  • npm run type-check -- --pretty false
  • npm run lint -- --quiet
  • focused NVX lifecycle tests
  • workflow YAML parse validation
  • npx markdownlint-cli2 docs/nvx-security-design.md --no-globs
  • git diff --check

Remaining promotion evidence

Runtime registration remains blocked on reviewed Copilot API-proxy inference, adversarial network and filesystem denial, cancellation, stale-recovery, and concurrent-run isolation evidence.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings September 22, 2026 15:15
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Documentation Preview

Documentation has been built for this PR.

Download preview artifact

To view locally:

  1. Download the docs-preview-pr-8886 artifact from the workflow run
  2. Unzip and open index.html in your browser

Built from commit 9c7632a

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

Copy link
Copy Markdown
Contributor

⚠️ Coverage Regression Detected

This PR decreases test coverage. Please add tests to maintain coverage levels.

Overall Coverage

Metric Base PR Delta
Lines 92.02% 92.03% 📈 +0.01%
Statements 90.51% 90.52% ➡️ +0.01%
Functions 89.98% 89.96% 📉 -0.02%
Branches 83.85% 83.87% 📈 +0.02%
📁 Per-file Coverage Changes (3 files)
File Lines (Before → After) Statements (Before → After)
src/nvx/preflight.ts 64.6% → 64.9% (+0.31%) 63.5% → 63.8% (+0.32%)
src/nvx/artifact-manifest.ts 86.9% → 87.7% (+0.81%) 86.9% → 87.7% (+0.81%)
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

The workflow path filter omits the new evidence script, so script-only changes bypass live KVM validation.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
What changed in this PR

Adds release-attested NVX artifacts and live Phase 3e manager validation while keeping NVX unavailable through the runtime registry.

Changes:

  • Adds tightly allowlisted validation-workflow attestation support.
  • Publishes pinned NVX release artifacts.
  • Validates guest boot, timeout cleanup, confinement, and residue removal.
File Description
src/​nvx/​preflight.ts Supports an explicitly trusted signer workflow.
src/​nvx/​preflight.test.ts Tests signer selection and rejection.
src/​nvx/​index.ts Exports the validation signer constant.
src/​nvx/​artifact-manifest.ts Validates either trusted signer identity.
scripts/​ci/​nvx-manager-live-evidence.ts Runs live boot and timeout evidence cases.
docs/​nvx-security-design.md Documents the Phase 3e boundary.
.github/​workflows/​release.yml Builds and publishes attested NVX artifacts.
.github/​workflows/​nvx-phase-3b-live-kvm.yml Adds attested live-manager validation.

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

Comment thread .github/workflows/nvx-phase-3b-live-kvm.yml Outdated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Copilot review passed with no inline comments.

@lpcox Add the ready-for-aw label to this PR to trigger agentic CI smoke tests.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Coverage Regression Detected

This PR decreases test coverage. Please add tests to maintain coverage levels.

Overall Coverage

Metric Base PR Delta
Lines 92.02% 92.03% 📈 +0.01%
Statements 90.51% 90.52% ➡️ +0.01%
Functions 89.98% 89.96% 📉 -0.02%
Branches 83.85% 83.87% 📈 +0.02%
📁 Per-file Coverage Changes (3 files)
File Lines (Before → After) Statements (Before → After)
src/nvx/preflight.ts 64.6% → 64.9% (+0.31%) 63.5% → 63.8% (+0.32%)
src/nvx/artifact-manifest.ts 86.9% → 87.7% (+0.81%) 86.9% → 87.7% (+0.81%)
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

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Coverage Regression Detected

This PR decreases test coverage. Please add tests to maintain coverage levels.

Overall Coverage

Metric Base PR Delta
Lines 92.04% 92.08% 📈 +0.04%
Statements 90.52% 90.57% 📈 +0.05%
Functions 89.98% 89.96% 📉 -0.02%
Branches 83.87% 83.92% 📈 +0.05%
📁 Per-file Coverage Changes (7 files)
File Lines (Before → After) Statements (Before → After)
src/nvx/one-shot-adapter.ts 81.3% → 80.7% (-0.59%) 78.5% → 78.0% (-0.56%)
src/nvx/launch-executor.ts 85.8% → 85.4% (-0.42%) 79.7% → 79.4% (-0.33%)
src/nvx/filesystem-builder.ts 88.5% → 89.1% (+0.64%) 87.6% → 88.3% (+0.68%)
src/nvx/artifact-manifest.ts 86.9% → 87.7% (+0.81%) 86.9% → 87.7% (+0.81%)
src/nvx/manager.ts 82.1% → 82.9% (+0.81%) 82.0% → 82.8% (+0.73%)
src/log-directory-setup.ts 96.2% → 100.0% (+3.78%) 96.3% → 100.0% (+3.71%)
src/nvx/preflight.ts 64.6% → 72.0% (+7.43%) 63.5% → 70.8% (+7.36%)

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

lpcox and others added 7 commits September 22, 2026 08:26
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@lpcox

lpcox commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator Author

@copilot address review feedback

Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>

Copilot AI commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

@copilot address review feedback

Added scripts/ci/nvx-manager-live-evidence.ts to the workflow's pull_request.paths filter in 9c2185c so script-only changes trigger the live KVM validation run.

lpcox and others added 4 commits September 22, 2026 08:54
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@lpcox lpcox changed the title Add NVX Phase 3e live manager evidence feat: add NVX Phase 3e live manager evidence Sep 22, 2026
lpcox and others added 2 commits September 22, 2026 09:17
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

✅ Build Test Suite completed successfully!

Warning

Firewall blocked 8 domains

The following domains were blocked by the firewall during workflow execution:

  • api.nuget.org
  • bun.sh
  • dc.services.visualstudio.com
  • deno.land
  • dl.deno.land
  • github.com
  • releaseassets.githubusercontent.com
  • repo.maven.apache.org

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "api.nuget.org"
    - "bun.sh"
    - "dc.services.visualstudio.com"
    - "deno.land"
    - "dl.deno.land"
    - "github.com"
    - "releaseassets.githubusercontent.com"
    - "repo.maven.apache.org"

See Network Configuration for more information.

Generated by Build Test Suite for #8886

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

❌ Smoke Gemini reports failed. Facets need polishing...

💎 Faceted by Smoke Gemini

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Security Guard has started processing this pull request

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

✅ Smoke Claude passed

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • api.anthropic.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "api.anthropic.com"

See Network Configuration for more information.

Generated by Smoke Claude for #8886

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Chroot tests passed! Smoke Chroot - All security and functionality tests succeeded.

Tested by Smoke Chroot

@github-actions

Copy link
Copy Markdown
Contributor

smoke-copilot-byok Results

✅ GitHub MCP connectivity
✅ GitHub.com (HTTP 200)
✅ File write/read
✅ BYOK inference path (api-proxy → api.githubcopilot.com)

Status: PASS
Running in direct BYOK mode (COPILOT_PROVIDER_API_KEY) via api-proxy sidecar.

CC @app/copilot-swe-agent

🔑 BYOK report filed by Smoke Copilot BYOK
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Cloud Hypervisor + Copilot

  1. list_pull_requests (merged, limit 1): PASS — call succeeded (200)
  2. curl https://github.com: PASS — 200
  3. Write/read /tmp/gh-aw/agent/smoke-cloud-hypervisor-*.txt: PASS
  4. curl (example.com/redacted) (expect blocked): PASS — 000

Result: ALL CHECKS PASSED

Warning

Firewall blocked 2 domains

The following domains were blocked by the firewall during workflow execution:

  • example.com
  • github.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "example.com"
    - "github.com"

See Network Configuration for more information.

Cloud Hypervisor + Copilot smoke test by Smoke Cloud Hypervisor
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Copilot Engine — @lpcox

  • ✅ GitHub MCP connectivity (PR list ok)
  • ✅ github.com connectivity (HTTP 200)
  • ✅ File write/read test

Recent merged PRs: #8890, #8889

Overall: PASS

📰 BREAKING: Report filed by Smoke Copilot
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

EGRESS_RESULT allow=pass deny=pass

✅ Allowed domain (github.com) reachable — allowed=200
✅ Non-allowed domain (example.com) blocked — connection failed as expected

Overall: PASS

cc @lpcox

Warning

Firewall blocked 2 domains

The following domains were blocked by the firewall during workflow execution:

  • api.github.com
  • example.com

[!TIP]
api.github.com is blocked because GitHub API access uses the built-in GitHub tools by default. Instead of adding api.github.com to network.allowed, use tools.github.mode: gh-proxy for direct pre-authenticated GitHub CLI access without requiring network access to api.github.com:

tools:
  github:
    mode: gh-proxy

See GitHub Tools for more information on gh-proxy mode.

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "api.github.com"
    - "example.com"

See Network Configuration for more information.

🛡️ Egress verdict from Smoke Copilot Network Isolation
Add label ready-for-aw to run again

@github-actions github-actions Bot added smoke-copilot-network-isolation Copilot network-isolation egress smoke test smoke-copilot labels Sep 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Services Connectivity

  • Redis PING: ✅ PONG
  • PostgreSQL pg_isready: ✅ accepting connections
  • PostgreSQL SELECT 1: ✅ 1

Overall: PASS

🔌 Service connectivity validated by Smoke Services
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

📡 OTel Tracing Smoke Test Results

# Scenario Result
1 Module Loading ✅ otel.js loaded, isEnabled() → true, exports 15 functions/classes (startRequestSpan, setTokenAttributes, setBudgetAttributes, endSpan, endSpanError, shutdown, _ProxyAwareOtlpExporter, _FileSpanExporter, _FanOutSpanExporter, etc.)
2 Test Suite ✅ 68/68 tests passed (3 suites: otel.test.js, otel-fanout.test.js, otel-workload-identity.test.js)
3 Env Var Forwarding ✅ env-passthrough.ts forwards GITHUB_AW_OTEL_TRACE_ID/GITHUB_AW_OTEL_PARENT_SPAN_ID to agent; api-proxy-env-config.ts forwards GH_AW_OTLP_ENDPOINTS, OTEL_EXPORTER_OTLP_ENDPOINT, and both trace-context vars to api-proxy
4 Token Tracker Integration ✅ onUsage callback present in token-tracker-http.js (hook point for OTEL gen_ai.usage.* attributes)
5 OTEL Diagnostics ✅ Expected — real Sentry OTLP endpoint was configured this run, so spans export directly via OTLP (no local otel.jsonl fallback file is written by design). 11 token-usage records confirm the api-proxy sidecar was active and processing requests during the run.

Summary: All 5 scenarios pass. No regressions detected in the api-proxy OTEL tracing integration (module init, span creation, token attributes, context propagation, and graceful degradation all behave as expected).

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • o205451.ingest.us.sentry.io

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "o205451.ingest.us.sentry.io"

See Network Configuration for more information.

📡 OTel tracing validated by Smoke OTel Tracing
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

🏗️ Build Test Suite Results

Ecosystem Project Build/Install Tests Status
Bun elysia ✅ 1/1 passed ✅ PASS
Bun hono ✅ 1/1 passed ✅ PASS
C++ fmt ✅ N/A ✅ PASS
C++ json ✅ N/A ✅ PASS
Deno oak N/A 1/1 passed ✅ PASS
Deno std N/A 1/1 passed ✅ PASS
.NET hello-world ✅ N/A (run OK) ✅ PASS
.NET json-parse ✅ N/A (run OK) ✅ PASS
Go color ✅ ok ✅ PASS
Go env ✅ ok ✅ PASS
Go uuid ✅ ok ✅ PASS
Java gson ✅ 1/1 passed ✅ PASS
Java caffeine ✅ 1/1 passed ✅ PASS
Node.js clsx ✅ passed ✅ PASS
Node.js execa ✅ passed ✅ PASS
Node.js p-limit ✅ passed ✅ PASS
Rust fd ✅ 1/1 passed ✅ PASS
Rust zoxide ✅ 1/1 passed ✅ PASS

Overall: 8/8 ecosystems passed — PASS

Notes:

  • Java (mvn) initially failed with Could not create local repository at /home/runner/.m2/repository because ~/.m2 was root-owned in this environment. Worked around by setting <localRepository> in settings.xml to a writable path; the proxy config itself worked correctly through squid-proxy:3128. This is an environment quirk unrelated to the firewall and did not require code changes.
  • All other 16 projects across 7 ecosystems passed on the first attempt with no proxy/network issues.

Warning

Firewall blocked 8 domains

The following domains were blocked by the firewall during workflow execution:

  • api.nuget.org
  • bun.sh
  • dc.services.visualstudio.com
  • deno.land
  • dl.deno.land
  • github.com
  • releaseassets.githubusercontent.com
  • repo.maven.apache.org

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "api.nuget.org"
    - "bun.sh"
    - "dc.services.visualstudio.com"
    - "deno.land"
    - "dl.deno.land"
    - "github.com"
    - "releaseassets.githubusercontent.com"
    - "repo.maven.apache.org"

See Network Configuration for more information.

Generated by Build Test Suite for #8886 · copilot · auto · 51.4 AIC · ⊞ 11.8K · ◷
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test: Claude Engine Validation

Check Status
API ✅ PASS
gh CLI ✅ PASS
File ✅ PASS

Overall result: PASS

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • api.anthropic.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "api.anthropic.com"

See Network Configuration for more information.

Generated by Smoke Claude for #8886 · claude · haiku45 · 55.8 AIC · ⊞ 4.7K · ◷
Add label ready-for-aw to run again

@github-actions

Copy link
Copy Markdown
Contributor

Refactor finite disclosure into focused modules
Refactor Cloud Hypervisor preflight into focused modules
GitHub PR review/details: ✅
Playwright title check: ✅
File write/readback: ✅
AWF build (npm ci + npm run build): ✅
Overall: PASS

Warning

Firewall blocked 12 domains

The following domains were blocked by the firewall during workflow execution:

  • ab.chatgpt.com
  • accounts.google.com
  • api.github.com
  • clients2.google.com
  • collector.github.com
  • contentautofill.googleapis.com
  • github.com
  • github.githubassets.com
  • msfeed25.pkgs.visualstudio.com
  • update.googleapis.com
  • www.google.com
  • www.gstatic.com

[!TIP]
api.github.com is blocked because GitHub API access uses the built-in GitHub tools by default. Instead of adding api.github.com to network.allowed, use tools.github.mode: gh-proxy for direct pre-authenticated GitHub CLI access without requiring network access to api.github.com:

tools:
  github:
    mode: gh-proxy

See GitHub Tools for more information on gh-proxy mode.

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "ab.chatgpt.com"
    - "accounts.google.com"
    - "api.github.com"
    - "clients2.google.com"
    - "collector.github.com"
    - "contentautofill.googleapis.com"
    - "github.com"
    - "github.githubassets.com"
    - "msfeed25.pkgs.visualstudio.com"
    - "update.googleapis.com"
    - "www.google.com"
    - "www.gstatic.com"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex
Add label ready-for-aw to run again

Copilot AI commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

@copilot review

Re-checked the PR: the only outstanding review finding (missing scripts/ci/nvx-manager-live-evidence.ts in the live KVM workflow's pull_request.paths filter) was already fixed in 9c2185cb and is present on the branch. No new issues found — nothing further to change.

@github-actions

Copy link
Copy Markdown
Contributor

Chroot Version Comparison Results

Runtime Host Version Chroot Version Match?
Python Python 3.12.14 Python 3.12.14 ✅ YES
Node.js v24.21.0 v2.98.0 ❌ NO
Go go1.22.12 go1.22.12 ✅ YES

Overall: FAILED — Node.js version mismatch between host and chroot environments (v24.21.0 vs v2.98.0). Python and Go versions match. The smoke-chroot label was not added since not all tests passed.

Tested by Smoke Chroot
Add label ready-for-aw to run again

@lpcox
lpcox merged commit 8a3e2d9 into main Sep 22, 2026
158 of 161 checks passed
@lpcox
lpcox deleted the nvx-phase-3e-live-evidence branch September 22, 2026 20:50

This branch was successfully deployed

1 active deployment
aoai-model — 547c4952 Deployed Sep 22, 2026 by lpcox via conclusion #1739
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants