Repository navigation
arm64: add native cold-boot foundation - #1509
Gautam Ahuja (ahuja-gautam) wants to merge 3 commits into
Conversation
This pull request changes existing testsIt 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
... and 288 more, which the job's summary lists. End-to-end tests
Test policy
Relocated unchanged: 0; added: 195. Compared the merge base |
There was a problem hiding this comment.
🟡 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
There was a problem hiding this comment.
🟡 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
There was a problem hiding this comment.
🔵 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
fd15f07 to
f925fcd
Compare
There was a problem hiding this comment.
🔵 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>
f925fcd to
3103f24
Compare
There was a problem hiding this comment.
🔵 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


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 featurecommits were replayed onto frozen
devc9817ae73263a0c32498dd43ebeb089164af8cbe(the merged #1567 v6.1baseline); each has one parent, with zero new merge commits above that base.
The earlier
c5fdc8b8baseline andf925fcd3head are historical, not current.Later live
devat1ad73759022f2ded66cfc93197288064cb02ad6aand its09cd771c061aa1d1b406b41eaf2eda851db87c15pin were observed only, notintaken or qualified by this source pair. No latest-
devqualification is claimed.Historical frozen Phase 1 boundary, preserved in backups rather than the
current head/base:
791efdd345d0f888f3db8e63d9398ce60e382f92.13398004d6dd696950f34b90649fbb463cd4799e.1c25bb4837d244bb0ebbf7f6049f2533bc46fbba.The original publication appended review fixes
d06bf47f89eddf2fa68edeb99caf3fd697d35f45andfd15f07b16e63b17d80fb2794a717f6eca99e8d4to 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 featurecommits) and
24bdced0(#1516, nine feature commits); the whole stack has16 single-parent feature commits above
c9817ae7, with zero new merges.The current lower-layer OpenVMM gitlink is
73cf403574a8907ee94dab0ab9d648152b832b05, inherited unchanged from thefrozen
c9817ae7baseline. The original boundary's61cdd639and theearlier C5 baseline's
5d656d85pins remain historical evidence, not current.Phase 3 separately selects ARM feature pin
b09c58843ae310dfff9ae68e9e822f9c5846b914from microsoft/openvmm#5045,superseding its historical
38016f66and6036d7eeselections. NeitherPhase 3's ARM feature pin nor later live-mainline
09cd771cis this lowerPR'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
3103f24cSaved checks of this exact Phase 1 head on Windows ARM64:
python -m unittest scripts.test_guest_binaries.GuestBinaryArchitectureTests scripts.test_time_abi.MonitorTests -vpython -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_kernel_config scripts.test_nvx_tools.CliTests scripts.test_microvm_tests.GuestConsoleEchoTests -vpython scripts/local_gates.py --base c9817ae73263a0c32498dd43ebeb089164af8cbe --only test-changes markdown-links test-layout nvx-rs-format --runcargo +1.97.1 fmt --all --check --manifest-path nvx-rs/Cargo.tomlpython -m ruff check scripts .github/speculapython -m ruff format --check scripts .github/speculapython -m pyright --pythonplatform Linux/python -m pyright --pythonplatform Windowspython scripts/nvx.py check-kernel-config/python scripts/nvx.py check-kernel-config --architecture aarch64python scripts/check_test_changes.py --base c9817ae73263a0c32498dd43ebeb089164af8cbeAll 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
fd15f07bfailure andf925fcd3skipped coverage run beloware 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
2000aa078713467add77565acdae688a6d6ecfcfwith OpenVMMb09c58843ae310dfff9ae68e9e822f9c5846b914; the clean normal ARM64OpenVMM 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
24bdced073a24418c1ebbf1d0775bb5ba42266baappends onlytwo test files/three expectation methods to
2000aa07. All 1,032 othermode/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 1314error records in 2 baseline Ubuntumethods, 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 1314failure, and doctor H4 (free-running UTC) andH7 (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-
b09CI and native ARM NVX CI remainunqualified; 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
f925fcd3These are saved results from preparation of the exact published head on
Windows ARM64, not a new test campaign or fresh Linux execution:
python -m unittest scripts.test_guest_binaries.GuestBinaryArchitectureTests scripts.test_time_abi.MonitorTests -vpython -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_kernel_config scripts.test_nvx_tools.CliTests scripts.test_microvm_tests.GuestConsoleEchoTests -vpython scripts/local_gates.py --base c5fdc8b850c63dcb0dddb1a1a6ede5a42a20d692 --only test-changes markdown-links test-layout nvx-rs-format --runcargo +1.97.1 fmt --all --check --manifest-path nvx-rs/Cargo.tomlpython -m ruff check scripts .github/speculapython -m ruff format --check scripts .github/speculapython -m pyright --pythonplatform Linuxpython -m pyright --pythonplatform Windowspython scripts/check_test_changes.py --base c5fdc8b850c63dcb0dddb1a1a6ede5a42a20d692The 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
headenlarging 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 andthe upstream/control investigation are historical evidence, not a test result
for this rewritten head.
The exact-head coverage run
43320823030
at
f925fcd32110a280ae89b515af4da51521c3b02dcompleted 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 owningworktree.
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 andexplicit 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/devwas not run in thispublication-only session. The frozen parent-to-head Git diff was used to
inventory the existing test/data changes below; the PR requires the
tests-modifiedlabel.Existing test and test-data changes in the frozen commit:
scripts/test_guest_binaries.pyscripts/test_kernel_config.pyscripts/test_microvm_tests.pyscripts/test_nvx_tools.pyscripts/test_time_abi.pyscripts/test-layout-allowlist.jsonnvx-rs/public-api/linux.txt,nvx-rs/public-api/windows.txtArchitectureenum and architecture-qualifiedArtifactDirAPI.nvx-rs/src/guest/entry/tests.rsnvx-rs/src/guest/exit/tests.rs,nvx-rs/src/guest/mappings/mapper/tests.rs,nvx-rs/src/guest/reseed/tests.rsnvx-rs/src/guest/init/tests.rsnvx-rs/src/guest/managed_agent/tests.rsnvx-rs/src/guest/root/tests.rsnvx-rs/src/guest/sys/fd/tests.rsnvx-rs/src/guest/sys/kernel/tests.rsnvx-rs/src/guest/sys/process/tests.rsnvx-rs/src/guest/sys/signal/tests.rsnvx-rs/src/guest/sys/spawn/tests.rsnvx-rs/src/guest/sys/tests.rsnvx-rs/src/guest/time/api/tests.rsnvx-rs/src/guest/time/checks/tests.rs,nvx-rs/src/guest/time/decoders/tests.rs,nvx-rs/src/guest/time/system/tests.rsnvx-rs/src/guest/time/daemon/tests.rs, newnvx-rs/src/guest/time/daemon/tests/x86.rsnvx-rs/src/guest/time/events/tests.rsnvx-rs/src/guest/time/state/tests.rsnvx-rs/src/guest/time/tests.rsnvx-rs/src/host/cli/download/tests.rsnvx-rs/src/host/cli/run/tests.rsnvx-rs/tests/cli.rsnvx-rs/tests/cli/download.rsnvx-rs/tests/cli/harness.rsnvx-rs/tests/cli/one_shot.rsnvx-rs/tests/guest_tools.rsNew 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
d06bf47f89eddf2fa68edeb99caf3fd697d35f45fixes both reviewedarchitecture-routing defects without changing the historical OpenVMM pin.
Linux source export now forwards
NVX_ARCHITECTURE, uses the selectedarchitecture's patch set, and defaults to that same kernel producer's
generated
.config. Explicit--configoverrides and the x86 defaultremain supported. The time-ABI command reader accepts both
--option VALUEand
--option=VALUE, including a final attached token, so explicit guestarchitecture 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.txtdependencies. No Dockerimage/kernel build, VM, benchmark, or manual CI dispatch was performed.
python -m unittest scripts.test_guest_binaries.GuestBinaryArchitectureTests scripts.test_time_abi.MonitorTests -vpython -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_nvx_tools.CliTests -vpython -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_nvx_tools.BuildTests scripts.test_nvx_tools.CliTests -vWinError 1314(missing symlink privilege); an independentPath.symlink_toprobe 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/speculapython -m ruff format --check scripts .github/speculapython -m pyright --pythonplatform Linuxpython -m pyright --pythonplatform Windowspython -m compileall -q scripts .github/speculapython scripts/check_markdown_links.pypython scripts/check_test_layout.pypython scripts/nvx.py create-linux-source-archive --helppython scripts/local_gates.py --base 791efdd345d0f888f3db8e63d9398ce60e382f92python scripts/check_test_changes.py --base 791efdd345d0f888f3db8e63d9398ce60e382f92git diff --checkThe 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_exportto 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-modifiedlabel 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
fd15f07b16e63b17d80fb2794a717f6eca99e8d4is appended directly tod06bf47f89eddf2fa68edeb99caf3fd697d35f45; the original foundation,first review-fix commit, historical OpenVMM pin, and prior validation
disclosures remain preserved.
Both existing Docker download-cache mounts (
kernelandkernel-config)now use
sharing=locked. These producers share the same upstream Linuxarchive and fixed
.partstaging path, so the existing default sharedmount 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 snapshotand--restore-snapshot=snapshotfollow thesame restore-validation path. A saved valid boot record no longer masks
a missing or invalid latest restore record.
python -m unittest scripts.test_guest_binaries.GuestBinaryArchitectureTests scripts.test_time_abi.MonitorTests -vpython -m unittest scripts.test_guest_binaries scripts.test_time_abi scripts.test_nvx_tools.CliTests -vpython -m ruff check scripts .github/speculapython -m ruff format --check scripts .github/speculapython -m pyright --pythonplatform Linuxpython -m pyright --pythonplatform Windowspython scripts/check_test_layout.pypython scripts/check_markdown_links.pypython scripts/local_gates.py --base d06bf47f89eddf2fa68edeb99caf3fd697d35f45python scripts/check_test_changes.py --base d06bf47f89eddf2fa68edeb99caf3fd697d35f45git diff --checkTwo new regression methods were added without changing existing tests:
GuestBinaryArchitectureTests.test_kernel_producers_lock_the_shared_docker_download_cachechecks both actual producer-stage cache mounts, and
MonitorTests.test_restore_option_spellings_require_valid_latest_restore_statusfeeds real boot/restore/status records for raw OpenVMM and
nvx-rsusingboth 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-modifiedlabel remains justified by the earlierfoundation 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.