Skip to content

arm64: add native cold-boot foundation - #1509

Draft
Gautam Ahuja (ahuja-gautam) wants to merge 3 commits into
devfrom
gautamahuja-microsoft-nvx-phase-1-pr
Draft

Gautam Ahuja (ahuja-gautam) wants to merge 3 commits into
devfrom
gautamahuja-microsoft-nvx-phase-1-pr

Conversation

@ahuja-gautam

@ahuja-gautam Gautam Ahuja (ahuja-gautam) commented Nov 12, 2026 •

Copy link
Copy Markdown

No linked issue. Layer 1 of the three-phase ARM64 integration stack.

What and why

Current published head: 3103f24c292f82907c77dda5cd9d8c105b608971,
tree 67ffe811d69e43771ea6d924a79f31b7a040eff4. The three Phase 1 feature
commits were replayed onto frozen dev
c9817ae73263a0c32498dd43ebeb089164af8cbe (the merged #1567 v6.1
baseline); each has one parent, with zero new merge commits above that base.
The earlier c5fdc8b8 baseline and f925fcd3 head are historical, not current.
Later live dev at 1ad73759022f2ded66cfc93197288064cb02ad6a and its
09cd771c061aa1d1b406b41eaf2eda851db87c15 pin were observed only, not
intaken or qualified by this source pair. No latest-dev qualification is claimed.

Historical frozen Phase 1 boundary, preserved in backups rather than the
current head/base:

  • Commit: 791efdd345d0f888f3db8e63d9398ce60e382f92.
  • Tree: 13398004d6dd696950f34b90649fbb463cd4799e.
  • Sole parent and selected source base:
    1c25bb4837d244bb0ebbf7f6049f2533bc46fbba.

The original publication appended review fixes
d06bf47f89eddf2fa68edeb99caf3fd697d35f45 and
fd15f07b16e63b17d80fb2794a717f6eca99e8d4 to that boundary.
Those historical identities and their evidence are retained below;
both fixes remain in the rebased current source.

Add architecture-qualified ARM64 kernel and guest producers, native artifact
admission, platform/device-tree bindings, and architected-counter support to
the shared guest binaries and cold-boot CLI. Preserve the existing x86
defaults and behavior. ARM64 snapshot/restore and other out-of-scope modes
remain explicitly rejected at this boundary.

This is the bottom PR, targeting dev, in native stack #1517:
#1509 -> #1510 -> #1516. Phase 2 builds directly on this branch and adds
managed artifact admission; its original frozen boundary was
cb017cf8aee13e5e7276236d1b0ab328e1b52e7f, not its current rebased head.
Phase 3 builds on Phase 2 and completes layered sandbox and final combined
ARM integration. Published upper heads are aacccd99 (#1510, four feature
commits) and 24bdced0 (#1516, nine feature commits); the whole stack has
16 single-parent feature commits above c9817ae7, with zero new merges.

The current lower-layer OpenVMM gitlink is
73cf403574a8907ee94dab0ab9d648152b832b05, inherited unchanged from the
frozen c9817ae7 baseline. The original boundary's 61cdd639 and the
earlier C5 baseline's 5d656d85 pins remain historical evidence, not current.
Phase 3 separately selects ARM feature pin
b09c58843ae310dfff9ae68e9e822f9c5846b914 from microsoft/openvmm#5045,
superseding its historical 38016f66 and 6036d7ee selections. Neither
Phase 3's ARM feature pin nor later live-mainline 09cd771c is this lower
PR's pin. Phase 1 alone does not
claim the combined ARM VMM product's CI/backend qualification; final
combined integration evidence belongs to Phase 3.

Validation

Current source validation at 3103f24c

Saved checks of this exact Phase 1 head on Windows ARM64:

Command Result
python -m unittest scripts.test_guest_binaries.GuestBinaryArchitectureTests scripts.test_time_abi.MonitorTests -v Passed: 30 tests.
python -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_kernel_config scripts.test_nvx_tools.CliTests scripts.test_microvm_tests.GuestConsoleEchoTests -v Passed: 191 tests, 4 existing skips (3 require the uninitialized OpenVMM submodule; 1 requires POSIX SIGTERM). This is a subset, not whole-Python qualification.
python scripts/local_gates.py --base c9817ae73263a0c32498dd43ebeb089164af8cbe --only test-changes markdown-links test-layout nvx-rs-format --run Passed: all 4 selected lightweight gates, not the full gate suite.
cargo +1.97.1 fmt --all --check --manifest-path nvx-rs/Cargo.toml Passed: formatting only, not Rust compilation or guest execution.
python -m ruff check scripts .github/specula Passed.
python -m ruff format --check scripts .github/specula Passed: 127 files already formatted.
python -m pyright --pythonplatform Linux / python -m pyright --pythonplatform Windows Both passed: 0 errors, 0 warnings; static checking on Windows.
python scripts/nvx.py check-kernel-config / python scripts/nvx.py check-kernel-config --architecture aarch64 Both static inventory checks passed: 769 x86 symbols and 616 ARM symbols; no kernel build.
python scripts/check_test_changes.py --base c9817ae73263a0c32498dd43ebeb089164af8cbe Passed accounting: 357 existing-test changes, 195 additions, 0 relocated across the full Phase 1 slice.

All three replayed commits are patch-equivalent to their earlier versions;
authors, coauthor trailers, review fixes, and source/config/ISA/argument/cache
guards are retained. #1554's corrected 4 MiB execution and 3 MiB output-cap
fixtures are inherited from the baseline, not duplicate backports. The affected
fixture files and coverage workflow/script are byte-identical to c9817ae7.
The historical fd15f07b failure and f925fcd3 skipped coverage run below
are not results for this current head.

Combined Phase 3 requalification: scoped passes and retained limits

These are the coordinated Phase 3 owner's results, not a fresh Phase 1
test run or an overall-green claim. Actual runtime execution used NVX
2000aa078713467add77565acdae688a6d6ecfcf with OpenVMM
b09c58843ae310dfff9ae68e9e822f9c5846b914; the clean normal ARM64
OpenVMM product was 0.5.0, optimization level 0, SHA-256
f171f776a76c7aeef5faae7221e7a508d4d3de48f7e62f227bc7fbc372eb7653.
Passed: 173 native CLI commands (45 cold/53 scenario records and 128
repetition/135 records), 115 adapter cases across 9 targets, 833 real
guest tests, 8 ARM debug cells, and 8 explicit AUTO/HOST 1/2/4/8-VP
profile cells. Exactly 12 guest tests were ignored and 46 adapter
snapshot cases excluded; neither is counted passed.

Final NVX 24bdced073a24418c1ebbf1d0775bb5ba42266ba appends only
two test files/three expectation methods to 2000aa07. All 1,032 other
mode/type/blob/path rows and runtime producer inputs are identical.
The runtime results apply by that verified production-input identity,
not by claiming the runtime matrix was executed again at 24bd.
Its actual 37-module Python run recorded 2,255 methods: 0 assertion
failures, 3 Windows WinError 1314 error records in 2 baseline Ubuntu
methods, 107 skip records (104 whole-method and 3 subcases), and 2,147
complete successes. Six targeted methods and static checks passed;
this does not erase the setup errors or skipped subcases.

Overall qualification is not green: the Windows adapter library has
57 passes/1 WinError 1314 failure, and doctor H4 (free-running UTC) and
H7 (W32Time off) fail; H1/H2/H3/H5/H6 pass. No host/service/security or
threshold waiver was made. Actual ARM restore-refusal and bounded active
VP0/AP-latch overlap are not proven; ARM restore remains cold-only and
unsupported. Cross-checks/emulated x86 results are not physical-x86
qualification. Trusted exact-b09 CI and native ARM NVX CI remain
unqualified; publication is not a gate waiver.

Preserved source receipts: final-phase3-refresh-qualification-handoff.json
(SHA-256 4877476782c70b72978e7060b41f249429341c49246e32e1e5cb05d2c4d9f83a)
and 24bd-testonly-source-and-runtime-applicability.json
(SHA-256 7787029762c5560e2420c41a8986bc9c2839d27078cd5ab484c395d58cc4c3b0).
All three PRs remain actual Drafts; no Ready transition, CI dispatch, or
new test campaign was performed for this description update.

Historical C5 validation at f925fcd3

These are saved results from preparation of the exact published head on
Windows ARM64, not a new test campaign or fresh Linux execution:

Command Result
python -m unittest scripts.test_guest_binaries.GuestBinaryArchitectureTests scripts.test_time_abi.MonitorTests -v Passed: 30 tests.
python -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_kernel_config scripts.test_nvx_tools.CliTests scripts.test_microvm_tests.GuestConsoleEchoTests -v Passed: 191 tests, 4 skipped (3 require the uninitialized OpenVMM submodule; 1 requires POSIX SIGTERM).
python scripts/local_gates.py --base c5fdc8b850c63dcb0dddb1a1a6ede5a42a20d692 --only test-changes markdown-links test-layout nvx-rs-format --run Passed: all 4 selected gates. This is not the full gate suite.
cargo +1.97.1 fmt --all --check --manifest-path nvx-rs/Cargo.toml Passed; formatting only, not Rust compilation or guest execution.
python -m ruff check scripts .github/specula Passed.
python -m ruff format --check scripts .github/specula Passed: 127 files already formatted.
python -m pyright --pythonplatform Linux Passed: 0 errors, 0 warnings; static checking on Windows.
python -m pyright --pythonplatform Windows Passed: 0 errors, 0 warnings.
python scripts/check_test_changes.py --base c5fdc8b850c63dcb0dddb1a1a6ede5a42a20d692 Passed accounting: 357 changes to existing tests, 195 additions, 0 relocated, across the full rebased Phase 1 slice; the historical slice reports below use their original bases.

The captured baseline includes #1554's fixture correction: stalled/cancellation
producers write 4 MiB, and the managed-agent output-cap fixture writes 3 MiB,
so uutils head enlarging a pipe no longer defeats their intended blocking.
Both test files and the coverage workflow/measurement script are byte-identical
to the captured baseline. The failed Linux coverage run
43303253885
tested historical fd15f07b; its unchanged 256 KiB fixture assumption and
the upstream/control investigation are historical evidence, not a test result
for this rewritten head.

The exact-head coverage run
43320823030
at f925fcd32110a280ae89b515af4da51521c3b02d completed skipped,
not passed. All three PRs are actual Drafts. No new dispatch or Ready
transition was requested here. Full Rust/guest execution, LLVM coverage,
MSRV/public-API/runtime-adapter and VM/backend qualification of this head
remain unclaimed; source publication does not waive normal CI gates.

Historical initial publication

Initial publication-only session: no builds, tests, VMs, Docker, dependency
installations, host operations, or manual CI dispatches were run. The source
owner reports preserved prior native Phase 1 cold-boot qualification; this
publication does not rerun or expand that scope, independently certify its
historical commands/results, or claim all-platform-green.

Read-only publication checks:

  • git show -s --format="%H%n%T%n%P" HEAD: passed; exact frozen commit,
    tree, and sole parent above.
  • git status --porcelain=v1 --untracked-files=all: passed; clean owning
    worktree.
  • git ls-tree HEAD -- openvmm: passed; historical gitlink unchanged.
  • git ls-remote --heads origin refs/heads/gautamahuja-microsoft-nvx-phase-1-pr:
    passed after push; remote branch exactly
    791efdd345d0f888f3db8e63d9398ce60e382f92.

The documented quality, Python CLI, Rust feature/MSRV/public-API/runtime-adapter,
and applicable guest/backend gates were not run in this publication session.
Their definitions were inspected in .github/actions/check-quality/action.yml,
.github/actions/validate-nvx/action.yml, and
.github/actions/check-nvx-rs/action.yml. Final combined ARM evidence and
explicit CI testing/triggering are reserved for the Phase 3 owner. This PR
was initially an actual Draft, was Ready during the historical review fixes,
and is now an actual Draft again by the user's choice. No automatic check
result is represented as passing here.

python scripts\check_test_changes.py --base origin/dev was not run in this
publication-only session. The frozen parent-to-head Git diff was used to
inventory the existing test/data changes below; the PR requires the
tests-modified label.

Existing test and test-data changes in the frozen commit:

Files Reason for the change
scripts/test_guest_binaries.py Cover explicit architecture routing, separate ARM producer inputs/package locks, image ISA admission, and preservation of legacy x86 defaults.
scripts/test_kernel_config.py Cover ARM inventory/config attribution, architecture-separated patch sets, and strict ARM Image-header bounds/flags.
scripts/test_microvm_tests.py Extend the simulated console with native time-status records and preserve exact expected workload exit status.
scripts/test_nvx_tools.py Extend producer mocks and regression cases for fixed control-ISA loading, ARM named-role discovery/error handling, and exact exit/time-status enforcement.
scripts/test_time_abi.py Cover native ARM architected-counter selection rather than x86 frequency/LAPIC probes and adapt the doctor fixture.
scripts/test-layout-allowlist.json Record test-only hooks needed by the architecture-neutral platform, syscall, root, and time seams.
nvx-rs/public-api/linux.txt, nvx-rs/public-api/windows.txt Record the new Architecture enum and architecture-qualified ArtifactDir API.
nvx-rs/src/guest/entry/tests.rs Distinguish genuinely absent kernel interfaces from read errors and require no manufactured mounts for absent interfaces.
nvx-rs/src/guest/exit/tests.rs, nvx-rs/src/guest/mappings/mapper/tests.rs, nvx-rs/src/guest/reseed/tests.rs Keep x86-specific port/architecture tests on x86 instead of executing them on ARM.
nvx-rs/src/guest/init/tests.rs Cover read-only named-role queries, absence versus errors, and output failures.
nvx-rs/src/guest/managed_agent/tests.rs Reject successful subprocesses that executed zero tests, preventing false-positive process-isolation coverage.
nvx-rs/src/guest/root/tests.rs Supply ARM device-tree/fixed-role fixtures and architecture-correct expected MMIO addresses.
nvx-rs/src/guest/sys/fd/tests.rs Cover daemon-file ownership without reserving the root runtime directory.
nvx-rs/src/guest/sys/kernel/tests.rs Make the shared scheduling-priority helper available on ARM as well as x86.
nvx-rs/src/guest/sys/process/tests.rs Cover ARM console diagnostics without x86 port offsets.
nvx-rs/src/guest/sys/signal/tests.rs Gate x86-only child-process helpers to match their consumers.
nvx-rs/src/guest/sys/spawn/tests.rs Share capability constants across architectures and use an isolated nonexistent executable path in the report-writer regression.
nvx-rs/src/guest/sys/tests.rs Re-export shared helpers on ARM while retaining x86-only signal helpers behind architecture guards.
nvx-rs/src/guest/time/api/tests.rs Assert missing deferred checks and preservation of the actual cold-boot violation count.
nvx-rs/src/guest/time/checks/tests.rs, nvx-rs/src/guest/time/decoders/tests.rs, nvx-rs/src/guest/time/system/tests.rs Follow the shared deferred/sample/state helper extraction without dropping existing assertions.
nvx-rs/src/guest/time/daemon/tests.rs, new nvx-rs/src/guest/time/daemon/tests/x86.rs Retain x86 daemon regressions in a separate architecture-specific file; add common watcher/state and ARM adjustment-policy coverage.
nvx-rs/src/guest/time/events/tests.rs Expand event-name checks to every conformance and repair code.
nvx-rs/src/guest/time/state/tests.rs Cover accurate failure counts when publishing report-only state.
nvx-rs/src/guest/time/tests.rs Cover shared watchdog requirements and early ARM rejection of snapshot/restore commands.
nvx-rs/src/host/cli/download/tests.rs Preserve OS/backend-based release selection and reject falling back from missing ARM artifacts to x86 downloads.
nvx-rs/src/host/cli/run/tests.rs Cover native architecture defaults, ARM profile forwarding, the RAM bound, and early rejection of out-of-scope modes.
nvx-rs/tests/cli.rs Add native ARM default-routing coverage and avoid interpreting absent x86 CPUID data as an unsupported ARM host.
nvx-rs/tests/cli/download.rs Check that explicit x86 dry runs still reach download history on any host ISA.
nvx-rs/tests/cli/harness.rs Explicitly select x86 for existing x86 artifact fixtures unless a test selects another architecture.
nvx-rs/tests/cli/one_shot.rs Apply unsupported-x86-CPU expectations only when x86 CPU data exists.
nvx-rs/tests/guest_tools.rs Gate x86-only behavior and cover the real ARM cold-boot time entry point and rejection of snapshot/restore commands.

New dedicated test modules additionally cover fixed-role device-tree discovery,
ARM counter reads, strict platform identity/MMIO transactions, ARM timer
conformance, shared sampling and discipline, and architecture-qualified artifact
admission. No CI workflow wiring changes are part of this layer.

Historical first-pass validation at d06bf47f (2026-11-12)

Commit d06bf47f89eddf2fa68edeb99caf3fd697d35f45 fixes both reviewed
architecture-routing defects without changing the historical OpenVMM pin.
Linux source export now forwards NVX_ARCHITECTURE, uses the selected
architecture's patch set, and defaults to that same kernel producer's
generated .config. Explicit --config overrides and the x86 default
remain supported. The time-ABI command reader accepts both --option VALUE
and --option=VALUE, including a final attached token, so explicit guest
architecture and backend values do not fall back to the Python host ISA.

Commands below ran on Windows ARM64 using a session-local Python environment
with the repository-pinned requirements-dev.txt dependencies. No Docker
image/kernel build, VM, benchmark, or manual CI dispatch was performed.

Command Result
python -m unittest scripts.test_guest_binaries.GuestBinaryArchitectureTests scripts.test_time_abi.MonitorTests -v Passed: 28 tests, including the new regressions.
python -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_nvx_tools.CliTests -v Passed: 146 tests, 4 skipped (3 require the uninitialized OpenVMM submodule; 1 requires POSIX SIGTERM).
python -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_nvx_tools.BuildTests scripts.test_nvx_tools.CliTests -v Not all passing: 254 tests, 3 errors in unchanged Ubuntu symlink tests and 5 skips. Each error is Windows WinError 1314 (missing symlink privilege); an independent Path.symlink_to probe reproduced it, and both test/production source files are unchanged from the original boundary. No privilege settings or unrelated tests were changed.
python -m ruff check scripts .github/specula Passed.
python -m ruff format --check scripts .github/specula Passed: 127 files already formatted.
python -m pyright --pythonplatform Linux Passed: 0 errors, 0 warnings, with the session environment first on the process PATH.
python -m pyright --pythonplatform Windows Passed: 0 errors, 0 warnings, using the same environment.
python -m compileall -q scripts .github/specula Passed.
python scripts/check_markdown_links.py Passed.
python scripts/check_test_layout.py Passed.
python scripts/nvx.py create-linux-source-archive --help Passed; documents architecture selection and optional config override.
python scripts/local_gates.py --base 791efdd345d0f888f3db8e63d9398ce60e382f92 Passed gate discovery for the actual six-file fix slice; this did not execute all selected gates.
python scripts/check_test_changes.py --base 791efdd345d0f888f3db8e63d9398ce60e382f92 Passed: 1 modified existing test, 3 added tests, 0 relocated.
git diff --check Passed; owning worktree clean after the commit and normal push.

The four new/extended focused regression methods were also run before the
production fix and failed on the original code (5 assertion failures and
3 argument-parsing errors across subtests), then passed after it. Missing
Ruff/PyYAML were resolved by installing declared dependencies only in the
session environment. Initial Pyright import warnings were eliminated by
selecting that environment explicitly; detailed failure and final logs are
preserved with the publication session.

Actual-slice test accounting extends the existing
GuestBinaryArchitectureTests.test_docker_architecture_input_reuses_the_shared_producer_and_export
to check Linux source-export architecture forwarding and removal of the
x86-only config path. Three new tests cover matching source/config selection
for default x86 and explicit ARM with default/custom config paths, both
option spellings on opposite native ISAs with backend/counter rejection
preserved, and exact option-name matching/defaults. No existing test was
removed or weakened; the tests-modified label remains applied.

The OpenVMM vector/profile comparison gates require the uninitialized
submodule and were not run. Full CLI/CI, Linux execution, Docker source
export, and hardware/backend qualification remain unclaimed and deferred
to the stack's integration validation.

Historical second-pass validation at fd15f07b (2026-11-12)

Commit fd15f07b16e63b17d80fb2794a717f6eca99e8d4 is appended directly to
d06bf47f89eddf2fa68edeb99caf3fd697d35f45; the original foundation,
first review-fix commit, historical OpenVMM pin, and prior validation
disclosures remain preserved.

Both existing Docker download-cache mounts (kernel and kernel-config)
now use sharing=locked. These producers share the same upstream Linux
archive and fixed .part staging path, so the existing default shared
mount policy could race even though each response stream was hashed. The
fix serializes cache users without changing the cache location,
architecture routing, or x86 default.

Both restore-detection sites now reuse _command_option, so
--restore-snapshot snapshot and --restore-snapshot=snapshot follow the
same restore-validation path. A saved valid boot record no longer masks
a missing or invalid latest restore record.

Command Result
python -m unittest scripts.test_guest_binaries.GuestBinaryArchitectureTests scripts.test_time_abi.MonitorTests -v Passed: 30 tests, including a final precommit rerun on the unchanged validated patch.
python -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_nvx_tools.CliTests -v Passed: 148 tests, 4 skipped (3 require the uninitialized OpenVMM submodule; 1 requires POSIX SIGTERM).
python -m ruff check scripts .github/specula Passed.
python -m ruff format --check scripts .github/specula Passed: 127 files already formatted after applying the pinned formatter to the 2 initially flagged files.
python -m pyright --pythonplatform Linux Passed: 0 errors, 0 warnings, with the session environment first on the process PATH.
python -m pyright --pythonplatform Windows Passed: 0 errors, 0 warnings, using the same environment.
python scripts/check_test_layout.py Passed.
python scripts/check_markdown_links.py Passed.
python scripts/local_gates.py --base d06bf47f89eddf2fa68edeb99caf3fd697d35f45 Passed gate discovery for the actual four-file fix slice; did not execute all selected gates.
python scripts/check_test_changes.py --base d06bf47f89eddf2fa68edeb99caf3fd697d35f45 Passed against the committed fix: 0 modified existing tests, 2 added tests, 0 relocated.
git diff --check Passed; owning worktree clean after the ordinary commit and normal nonforce push.

Two new regression methods were added without changing existing tests:
GuestBinaryArchitectureTests.test_kernel_producers_lock_the_shared_docker_download_cache
checks both actual producer-stage cache mounts, and
MonitorTests.test_restore_option_spellings_require_valid_latest_restore_status
feeds real boot/restore/status records for raw OpenVMM and nvx-rs using
both option spellings. The latter requires rejection at status-query
completion of missing restore markers, generation zero, wrong backend
LAPIC rates, and out-of-range TSC rates despite a valid saved boot record.
The existing tests-modified label remains justified by the earlier
foundation and first-pass changes.

The two regression methods were run before the production fixes and
failed as expected with 12 assertions across subtests, then passed after
the fixes. Missing Ruff was addressed using the repository-declared
development dependencies in a temporary session-local environment; the
environment was removed after validation and all logs were retained.

The Docker cache change was checked by focused wiring regressions, not a
concurrent Docker build. No new Docker/kernel build, VM/backend campaign,
benchmark, manual CI dispatch, or full all-platform qualification is
claimed. The earlier prerequisite limitations and deferred integration
gates above remain applicable.

@ahuja-gautam Gautam Ahuja (ahuja-gautam) added the tests-modified Changes existing tests, test data, or test wiring label Nov 12, 2026
Copilot AI balanced review requested due to automatic review settings November 12, 2026 01:32
@github-actions

github-actions Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

This pull request changes existing tests

It modifies or removes 357 existing test asset(s), listed below. Review each with care: a change to a test can hide a regression that the test caught. See doc/contribute.md#changes-to-existing-tests.

Test code

Change What Before After
modified attributes the inner attributes of guest::exit::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/exit/tests.rs:1 nvx-rs/src/guest/exit/tests.rs:1
modified attributes the inner attributes of guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:1 nvx-rs/src/guest/init/tests.rs:1
modified attributes the inner attributes of guest::kernel_text::tests (it now compiles where feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/kernel_text/tests.rs:1 nvx-rs/src/guest/kernel_text/tests.rs:1
modified attributes the inner attributes of guest::sys::port::tests (it now compiles where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test hold, not where feature = "guest" and target_os = "linux" and test did) nvx-rs/src/guest/sys/port/tests.rs:1 nvx-rs/src/guest/sys/port/tests.rs:1
modified attributes the inner attributes of guest::time::api::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/api/tests.rs:1 nvx-rs/src/guest/time/api/tests.rs:1
modified attributes the inner attributes of guest::time::checks::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/checks/tests.rs:1 nvx-rs/src/guest/time/checks/tests.rs:1
modified attributes the inner attributes of guest::time::commands::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/commands/tests.rs:1 nvx-rs/src/guest/time/commands/tests.rs:1
modified attributes the inner attributes of guest::time::cpu_mask::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/cpu_mask/tests.rs:1 nvx-rs/src/guest/time/cpu_mask/tests.rs:1
modified attributes the inner attributes of guest::time::daemon::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/daemon/tests.rs:1 nvx-rs/src/guest/time/daemon/tests.rs:1
modified attributes the inner attributes of guest::time::decoders::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/decoders/tests.rs:1 nvx-rs/src/guest/time/decoders/tests.rs:1
modified attributes the inner attributes of guest::time::events::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/events/tests.rs:1 nvx-rs/src/guest/time/events/tests.rs:1
modified attributes the inner attributes of guest::time::state::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/state/tests.rs:1 nvx-rs/src/guest/time/state/tests.rs:1
modified attributes the inner attributes of guest::time::system::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/system/tests.rs:1 nvx-rs/src/guest/time/system/tests.rs:1
modified attributes the inner attributes of guest::time::test_mode::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/test_mode/tests.rs:1 nvx-rs/src/guest/time/test_mode/tests.rs:1
modified attributes the inner attributes of guest::time::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/time/tests.rs:1 nvx-rs/src/guest/time/tests.rs:1
modified helper fn args in guest::exit::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/exit/tests.rs:9 nvx-rs/src/guest/exit/tests.rs:13
modified helper enum Call in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:23 nvx-rs/src/guest/init/tests.rs:125
modified helper struct Fake in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:42 nvx-rs/src/guest/init/tests.rs:144
modified helper impl System for Fake in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:59 nvx-rs/src/guest/init/tests.rs:161
modified helper fn listen in guest::init::tests, impl System for Fake`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:60 nvx-rs/src/guest/init/tests.rs:162
modified helper fn raise_priority in guest::init::tests, impl System for Fake`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:65 nvx-rs/src/guest/init/tests.rs:167
modified helper fn adopt in guest::init::tests, impl System for Fake`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:74 nvx-rs/src/guest/init/tests.rs:176
modified helper fn reap in guest::init::tests, impl System for Fake`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:82 nvx-rs/src/guest/init/tests.rs:184
modified helper fn wait_signal in guest::init::tests, impl System for Fake`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:88 nvx-rs/src/guest/init/tests.rs:190
modified helper fn report in guest::init::tests, impl System for Fake`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:97 nvx-rs/src/guest/init/tests.rs:199
modified helper fn shut_down in guest::init::tests, impl System for Fake`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:102 nvx-rs/src/guest/init/tests.rs:204
modified helper struct Subreaper in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:110 nvx-rs/src/guest/init/tests.rs:212
modified helper impl Subreaper in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:125 nvx-rs/src/guest/init/tests.rs:227
modified helper fn new in guest::init::tests, impl Subreaper`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:128 nvx-rs/src/guest/init/tests.rs:230
modified helper impl System for Subreaper in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:141 nvx-rs/src/guest/init/tests.rs:243
modified helper fn listen in guest::init::tests, impl System for Subreaper`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:142 nvx-rs/src/guest/init/tests.rs:244
modified helper fn raise_priority in guest::init::tests, impl System for Subreaper`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:146 nvx-rs/src/guest/init/tests.rs:248
modified helper fn adopt in guest::init::tests, impl System for Subreaper`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:150 nvx-rs/src/guest/init/tests.rs:252
modified helper fn reap in guest::init::tests, impl System for Subreaper`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:154 nvx-rs/src/guest/init/tests.rs:256
modified helper fn wait_signal in guest::init::tests, impl System for Subreaper`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:160 nvx-rs/src/guest/init/tests.rs:262
modified helper fn report in guest::init::tests, impl System for Subreaper`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:169 nvx-rs/src/guest/init/tests.rs:271
modified helper fn shut_down in guest::init::tests, impl System for Subreaper`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:173 nvx-rs/src/guest/init/tests.rs:275
modified helper struct Observer in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:181 nvx-rs/src/guest/init/tests.rs:283
modified helper impl System for Observer in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:194 nvx-rs/src/guest/init/tests.rs:296
modified helper fn listen in guest::init::tests, impl System for Observer`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:195 nvx-rs/src/guest/init/tests.rs:297
modified helper fn raise_priority in guest::init::tests, impl System for Observer`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:199 nvx-rs/src/guest/init/tests.rs:301
modified helper fn adopt in guest::init::tests, impl System for Observer`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:203 nvx-rs/src/guest/init/tests.rs:305
modified helper fn reap in guest::init::tests, impl System for Observer`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:207 nvx-rs/src/guest/init/tests.rs:309
modified helper fn wait_signal in guest::init::tests, impl System for Observer`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:211 nvx-rs/src/guest/init/tests.rs:313
modified helper fn report in guest::init::tests, impl System for Observer`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:223 nvx-rs/src/guest/init/tests.rs:325
modified helper fn shut_down in guest::init::tests, impl System for Observer`` (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and `feature = "guest"` and `target_os = "linux"` and `test` hold, not where `feature = "guest"` and `target_arch = "x86_64"` and `target_os = "linux"` and `test` did) nvx-rs/src/guest/init/tests.rs:227 nvx-rs/src/guest/init/tests.rs:329
modified helper fn pid in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:233 nvx-rs/src/guest/init/tests.rs:335
modified helper fn arguments in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:238 nvx-rs/src/guest/init/tests.rs:340
modified helper fn calls in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:246 nvx-rs/src/guest/init/tests.rs:348
modified helper fn takeover in guest::init::tests (it now compiles where any ( target_arch = "x86_64" , target_arch = "aarch64" ) and feature = "guest" and target_os = "linux" and test hold, not where feature = "guest" and target_arch = "x86_64" and target_os = "linux" and test did) nvx-rs/src/guest/init/tests.rs:253 nvx-rs/src/guest/init/tests.rs:355

... and 288 more, which the job's summary lists.

End-to-end tests

Change What Before After
modified helper def run_guest_script in scripts/nvx_tools/microvm_tests.py scripts/nvx_tools/microvm_tests.py:863 scripts/nvx_tools/microvm_tests.py:863

Test policy

Change What Before After
loosened allowlist entry nvx-rs/src/guest/kernel_text.rs (the seams allow 4 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/parse.rs (the seams allow 4 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/root/block.rs (the seams allow 1 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/root/kernel.rs (the seams allow 2 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/status.rs (the seams allow 9 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/clock.rs (the seams allow 6 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/discipline.rs (the seams allow 4 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/fd.rs (the seams allow 3 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/filesystem.rs (the seams allow 3 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/ioctl.rs (the seams allow 1 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/kernel.rs (the seams allow 5 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/mod.rs (the seams allow 5 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/poll.rs (the seams allow 3 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/process.rs (the seams allow 3 test hooks, up from 1) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/scheduler.rs (the seams allow 4 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/signal.rs (the seams allow 5 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/sys/socket.rs (the seams allow 1 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/guest/time/events.rs (the seams allow 7 test hooks) scripts/test-layout-allowlist.json

Relocated unchanged: 0; added: 195. Compared the merge base c9817ae73263 with 3103f24c292f.

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.

🟡 Changes recommended

Architecture handling still rejects valid ARM boot records when --architecture=VALUE is used and breaks ARM kernel source export through an incorrect config path and x86 patch selection.

2 open issues
What changed in this PR

Adds the first layer of NVX’s native ARM64 cold-boot support while retaining legacy x86 defaults. Managed integration and the OpenVMM pin update remain deferred to later layers.

Changes:

  • Adds architecture-qualified kernel and guest artifacts, validation, and CLI selection.
  • Extends guest initialization, platform access, device discovery, and time handling for ARM64.
  • Updates regression tests and public API records, with explicit rejection of unsupported ARM modes.
File Description
ubuntu/​packages-arm64.lock.json Pins ARM64 Ubuntu packages.
scripts/​test-layout-allowlist.json Records architecture-neutral test hooks.
scripts/​test_time_abi.py Tests ARM counter validation.
scripts/​test_microvm_tests.py Updates console and exit-status fixtures.
scripts/​nvx_tools/​time_abi.py Adds architecture-aware boot validation.
scripts/​nvx_tools/​microvm_tests.py Forwards expected guest exit status.
scripts/​nvx_tools/​kernel_features.py Defines ARM kernel feature bindings.
scripts/​nvx_tools/​elf.py Validates ARM Images and executable architecture.
scripts/​nvx_tools/​collect_ubuntu_sources.py Supports ARM package source manifests.
scripts/​nvx_tools/​build_constants.py Adds ARM producer inputs and paths.
scripts/​nvx_tools/​build_config.py Separates architecture-specific build outputs.
scripts/​nvx_tools/​benchmark.py Checks requested guest exit status.
nvx-rs/​tests/​guest_tools.rs Tests ARM time CLI boundaries.
nvx-rs/​tests/​cli/​one_shot.rs Avoids x86 CPU assumptions on ARM.
nvx-rs/​tests/​cli/​harness.rs Explicitly selects x86 fixture artifacts.
nvx-rs/​tests/​cli/​download.rs Tests explicit x86 download routing.
nvx-rs/​tests/​cli.rs Tests native ARM artifact selection.
nvx-rs/​src/​host/​cli/​run/​tests.rs Tests ARM defaults and restrictions.
nvx-rs/​src/​host/​cli/​run.rs Adds architecture selection and ARM bounds.
nvx-rs/​src/​host/​cli/​download/​tests.rs Tests refusal of ARM download fallback.
nvx-rs/​src/​host/​cli/​download.rs Rejects unqualified ARM release downloads.
nvx-rs/​src/​host/​artifacts/​mod.rs Exposes architecture-aware artifact support.
nvx-rs/​src/​host/​artifacts/​identity.rs Checks ARM kernel and Windows executable headers.
nvx-rs/​src/​host/​artifacts/​dir.rs Adds ARM paths and artifact admission.
nvx-rs/​src/​host/​artifacts/​architecture/​tests.rs Tests architecture-specific artifact validation.
nvx-rs/​src/​host/​artifacts/​architecture.rs Defines the artifact architecture enum.
nvx-rs/​src/​guest/​time/​tests.rs Tests watchdog policy and ARM command restrictions.
nvx-rs/​src/​guest/​time/​test_mode.rs Uses drop-based promotion cancellation.
nvx-rs/​src/​guest/​time/​system/​tests.rs Updates shared helper imports.
nvx-rs/​src/​guest/​time/​state/​tests.rs Tests report-only failure preservation.
nvx-rs/​src/​guest/​time/​state.rs Shares time-state publication and waiting.
nvx-rs/​src/​guest/​time/​sample/​tests.rs Tests shared sampling and clock discipline.
nvx-rs/​src/​guest/​time/​sample/​arm64/​tests.rs Tests ARM time conversion and generation checks.
nvx-rs/​src/​guest/​time/​events/​tests.rs Expands event-code coverage.
nvx-rs/​src/​guest/​time/​events.rs Shares kernel-log watcher rules.
nvx-rs/​src/​guest/​time/​deferred.rs Extracts deferred-check scheduling policy.
nvx-rs/​src/​guest/​time/​decoders/​tests.rs Updates shared sampling imports.
nvx-rs/​src/​guest/​time/​checks/​tests.rs Uses shared polling constants.
nvx-rs/​src/​guest/​time/​checks.rs Delegates shared state and watchdog handling.
nvx-rs/​src/​guest/​time/​checks_arm64/​tests.rs Tests ARM CPU and timer conformance.
nvx-rs/​src/​guest/​time/​api/​tests.rs Checks missing state and violation counts.
nvx-rs/​src/​guest/​sys/​tests.rs Shares architecture-neutral test helpers.
nvx-rs/​src/​guest/​sys/​spawn/​tests.rs Shares capabilities and isolates executable fixtures.
nvx-rs/​src/​guest/​sys/​spawn.rs Enforces released platform access on ARM.
nvx-rs/​src/​guest/​sys/​socket.rs Gates diagnostic-only socket functionality.
nvx-rs/​src/​guest/​sys/​signal/​tests.rs Gates x86-only child helpers.
nvx-rs/​src/​guest/​sys/​signal.rs Applies architecture guards to signal helpers.
nvx-rs/​src/​guest/​sys/​scheduler.rs Gates x86-only scheduling inspection.
nvx-rs/​src/​guest/​sys/​process/​tests.rs Tests ARM console diagnostics.
nvx-rs/​src/​guest/​sys/​process.rs Adds ARM process guards and console output.
nvx-rs/​src/​guest/​sys/​poll.rs Gates child-signal polling support.
nvx-rs/​src/​guest/​sys/​platform/​tests.rs Tests platform transactions and access lifetime.
nvx-rs/​src/​guest/​sys/​platform/​binding/​tests.rs Tests ARM identity-record validation.
nvx-rs/​src/​guest/​sys/​platform/​binding.rs Decodes ARM time-binding identity.
nvx-rs/​src/​guest/​sys/​mod.rs Wires architecture-specific system modules.
nvx-rs/​src/​guest/​sys/​mapping.rs Adds ordered ARM device-memory access.
nvx-rs/​src/​guest/​sys/​kernel/​tests.rs Makes priority inspection available on ARM.
nvx-rs/​src/​guest/​sys/​kernel.rs Separates shared and x86 kernel helpers.
nvx-rs/​src/​guest/​sys/​ioctl.rs Gates partition-reread functionality.
nvx-rs/​src/​guest/​sys/​filesystem.rs Gates architecture-specific filesystem helpers.
nvx-rs/​src/​guest/​sys/​fd/​tests.rs Tests independent daemon-file locking.
nvx-rs/​src/​guest/​sys/​fd.rs Adds nonblocking file locking.
nvx-rs/​src/​guest/​sys/​discipline.rs Gates x86-only clock adjustment support.
nvx-rs/​src/​guest/​sys/​clock.rs Gates diagnostic-only clock helpers.
nvx-rs/​src/​guest/​sys/​aarch64/​tests.rs Tests architected counter reads.
nvx-rs/​src/​guest/​sys/​aarch64.rs Implements ARM counter and frequency reads.
nvx-rs/​src/​guest/​status.rs Gates unused architecture-specific exit statuses.
nvx-rs/​src/​guest/​root/​tests.rs Adds ARM device-tree fixtures.
nvx-rs/​src/​guest/​root/​kernel.rs Gates partition-reread operations.
nvx-rs/​src/​guest/​root/​block/​platform.rs Discovers fixed ARM devices through device-tree properties.
nvx-rs/​src/​guest/​root/​block.rs Adds read-only role lookup and ARM routing.
nvx-rs/​src/​guest/​root.rs Exposes named block-role discovery.
nvx-rs/​src/​guest/​reseed/​tests.rs Gates x86-only seed inspection.
nvx-rs/​src/​guest/​parse.rs Gates unused parsing helpers.
nvx-rs/​src/​guest/​mod.rs Enables ARM init, exit, and time modules.
nvx-rs/​src/​guest/​mappings/​mapper/​tests.rs Gates x86-only teardown helper.
nvx-rs/​src/​guest/​managed_agent/​tests.rs Rejects isolated runs that execute no tests.
nvx-rs/​src/​guest/​managed_agent/​seam.rs Selects console diagnostics on ARM.
nvx-rs/​src/​guest/​kernel_text.rs Shares kernel-text parsing with architecture guards.
nvx-rs/​src/​guest/​init/​tests.rs Tests named-role queries and failures.
nvx-rs/​src/​guest/​init.rs Adds read-only root-device queries.
nvx-rs/​src/​guest/​exit/​tests.rs Gates x86 port-specific tests.
nvx-rs/​src/​guest/​exit.rs Supports ARM platform shutdown.
nvx-rs/​src/​guest/​entry/​tests.rs Handles genuinely absent kernel interfaces.
nvx-rs/​src/​bin/​nvx-time.rs Enables the Linux ARM time entry point.
nvx-rs/​src/​bin/​nvx-init.rs Enables the Linux ARM init entry point.
nvx-rs/​src/​bin/​nvx-exit.rs Enables the Linux ARM exit entry point.
nvx-rs/​public-api/​windows.txt Records architecture-aware artifact APIs.
nvx-rs/​public-api/​linux.txt Records architecture-aware artifact APIs.
nvx-rs/​build.rs Rejects unsupported ARM bundle staging.
kernel/​patches/​arm64/​0002-nvx-shared-status-of.patch Adds device-tree shared-status discovery.
guest/​common/​nvx-init-agent Uses named-role discovery on ARM.
guest/​alpine/​nvx-container-enter Selects the architecture-specific musl loader.
docker/​Dockerfile Adds ARM build routing and artifact exports.

Review effort: Balanced

Comment thread docker/Dockerfile Resolved
Comment thread scripts/nvx_tools/time_abi.py Resolved

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.

🟡 Changes recommended

Restore-option detection bypasses restore-specific validation for the equals spelling, while unlocked shared download caches can cause concurrent build failures or publish incomplete archives.

2 open issues
2 resolved since last review

Review effort: Balanced

Comment thread docker/Dockerfile Resolved
Comment thread scripts/nvx_tools/time_abi.py Resolved
Copilot AI balanced review requested due to automatic review settings November 12, 2026 20:44

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.

🔵 Needs a closer look

The ARM64 changes cross guest, kernel, and VMM contracts, while native execution, kernel builds, and backend qualification remain unverified and require maintainer review of integration evidence.

No open issues 🎉

2 resolved since last review

Review effort: Balanced

@ahuja-gautam
Gautam Ahuja (ahuja-gautam) marked this pull request as draft November 12, 2026 21:04
@ahuja-gautam
Gautam Ahuja (ahuja-gautam) force-pushed the gautamahuja-microsoft-nvx-phase-1-pr branch from fd15f07 to f925fcd Compare November 12, 2026 22:32
Copilot AI balanced review requested due to automatic review settings November 12, 2026 22:32

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.

🔵 Needs a closer look

The changes cross kernel, ARM64 MMIO, and hardware/VMM ABI boundaries, while native guest and cross-architecture integration qualification remains deferred and requires maintainer assessment.

No open issues 🎉

Review effort: Balanced

Add the ARM64 kernel, platform and counter bindings to the existing shared
guest binaries and cold-boot CLI. Reconcile the validated foundation with
the selected NVX baseline while retaining its upstream fixes.

Keep x86 defaults and behavior, architecture-qualified producer inputs,
native artifact admission, and the cold-boot-only ARM contract. Managed
artifact admission and layered sandbox enablement follow separately.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Route Linux corresponding-source packaging through the selected kernel architecture for both its patched sources and generated configuration. Keep the x86 default and explicit configuration override.

Recognize attached option values in the shared time-ABI command reader so an explicit guest architecture never falls back to the Python host ISA. Cover both spellings and retain counter validation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Serialize the two Docker kernel producers that share the fixed download staging path. Retain the shared cache and architecture defaults.

Use the shared option reader to classify split and attached restore options consistently. Validate the latest restore status rather than accepting a saved boot record, with regressions for missing records, generation, and counter rates.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@ahuja-gautam
Gautam Ahuja (ahuja-gautam) force-pushed the gautamahuja-microsoft-nvx-phase-1-pr branch from f925fcd to 3103f24 Compare November 13, 2026 21:20
Copilot AI balanced review requested due to automatic review settings November 13, 2026 21:20

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.

🔵 Needs a closer look

ARM64 MMIO, kernel, and cross-ISA runtime changes require platform review and native guest/backend validation that source inspection and the unavailable exact-head build and execution results cannot establish.

No open issues 🎉

Review effort: Balanced

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tests-modified Changes existing tests, test data, or test wiring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants