Skip to content

inputs: join published SL3.7b capture prerequisites - #1459

Closed
Enrique Saurez (esaurez) wants to merge 31 commits into
feature/nvx-refactorfrom
esaurez/issue1114-sl37b-inputs-20261110-c688b057
Closed

Enrique Saurez (esaurez) wants to merge 31 commits into
feature/nvx-refactorfrom
esaurez/issue1114-sl37b-inputs-20261110-c688b057

Conversation

@esaurez

@esaurez Enrique Saurez (esaurez) commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Supporting input integration for #1114 (SL3.7b), not the capture consumer. This updates the existing Draft input PR by adopting the already-published SL2.14 full-time-contract checkpoint. It adds no new capture command, transaction, producer fix or input PR, and does not close #1114.

Exact source and published inputs

Current head: d814df2e0358ce17f86c45f71a8b1b7f8048eff2; tree: 0562032829106a4ac9c0bb8a11de0a9ab3156bb9.

The original join remains intact at b70d7e98de7f2ef2cb14875e00075f7149d44803, tree 0abebe498db2d15472c9440dd82eb4b3ab208ddd. Its inputs and merge order are preserved:

Input Published branch Original pinned commit
#1455, SL2.14, original first parent esaurez/issue1102-sl214-20261110-b718df7e 2a0451d4ed1e27445bcd4615e7c0878c291edca5
#1445, SL3.7a named store esaurez/issue1114-sl37a-0c8e42ad-20261110 a81a6c8d874b00e57046b8fcd8657e2a2cbdd2fe
#1446, SL3.3b recovery private/simple-1108-02e4-sl33b-20261110 8921c45162e38761f1dc5beb51042ee2e7218803
#1453, SL7.8a boot route esaurez/sl78a-init-routing-fe1cbbee-20261110 d56d3d343977178fd15bbd526a77a97603edbbac

Original merge commits: 06e7f9ef2b85d8d66e3670bd98d1ef4b486e9e24, 94c8e4aa6905e4a757f6f5d20d8c42929e8b1688, then 19119013eb12a962527a6bc426f7024a54f0b868.

The new ordinary merge has exactly two parents: original b70d7e98 and the selected public #1455 checkpoint d4d89270d45945c7a88486f5f238922a5c6ed095, tree 371e3fc936d232cc55d79e029a2d230681cf1656. That checkpoint is a direct child of original 2a0451d4. No later parent, feature, named-store, recovery or private integration head was merged.

The inherited #1454 input remains 4ca3e62da07723368edec89ced8d02f2cd3fbae4, and the inherited feature input remains cf5f91467c050f1e9508403964b1b4546e2724ab. The OpenVMM gitlink is unchanged at 14dc4116ec7e57567633c4b7b07892aca3a58522.

The base ref remains esaurez/issue1102-sl214-20261110-b718df7e. The compiled source uses the immutable D4D checkpoint above, not any subsequent movement of that branch. No retarget, native-stack operation, ancestor rewrite, Ready transition or merge is part of this update.

Full time-contract adoption, without a new design

The answered choice B is now present through D4D, not pending implementation in this input:

  • The complete existing TimeContract persists and decodes in key.bin, and SnapshotKey::time exposes it.
  • Strict opening checks the complete key/manifest time agreement, including capture anchors, host clock and identities, lineage and cut-to-anchor interval.
  • KeyIdentity still hashes the unchanged compatibility prefix. Capture-specific time fields do not change that identity; declared rates and the time ABI remain compatibility inputs.
  • The single Fresh encoding changes in place: no version bump, backward decoder, optional time contract or reduced substitute.
  • D4D's snapshot-only privacy wrapper is retained without changing legacy template validation.

Actual merge inspection found zero conflicts and zero manual source edits. All five incoming production files, plus the incoming tests, vectors and API snapshots, have exactly D4D's Git modes and blob IDs: 12 entries exactly incoming. Only nvx-rs/README.md automatically combines non-overlapping documentation. All 1,008 unaffected entries exactly match original b70. The resulting tree also equals Git's independently computed ordinary merge tree.

There is no Snapshot::accepts/NIC API union or separate canonical reader/time integration here. Those independent producer changes are not needed by this bounded capture-input adoption.

The original join's selected Error/Result, Opened/Exited, bounded capture-preparation checks, restored-init activation/RESET handling, seventh init seam and ignored native-fixture API reconciliations remain unchanged. No native-fixture execution is claimed.

Size and ownership of the delta

This update versus b70 imports 13 files, 269 added / 81 removed physical lines, entirely from D4D apart from the automatic README combination. New hand-written production core: 0 lines / 0 counted files; new test bodies authored by this merge: 0.

Against the selected D4D checkpoint, the existing imported input integration remains 41 files, 3,552 added / 125 removed physical lines. Those producer changes are not a new consumer implementation. The original join's post-merge hand edits remain the same two test/policy files, 11 added / 5 removed physical lines, with no production-core addition.

Current-head verification

Both platforms compiled the exact current head and tree above, with real NVX Git metadata, the real initialized pinned OpenVMM source/Cargo manifest, private mutable targets/caches and Rust 1.95.0. Linux completed at 2026-11-10T21:47:05Z; Windows at 2026-11-10T22:09:28Z.

Current-source scope Linux Windows
Exact native source and scripts/nvx.py verify before Cargo Passed Passed
Formatting, nvx and runtime adapter Passed Passed
Actual CLI/library/binary build, cli,testing Passed Passed
Library, binary and integration-test compilation, NO-RUN Passed Passed
CLI/testing all-targets Clippy, warnings denied Passed Passed
Affected host adapter all-targets build and Clippy, warnings denied Passed Passed
Test layout and both exact-input existing-test inventories Passed Passed

Main Cargo commands, shown from each crate's directory; the receipts retain their explicit private target directories and complete arguments:

cargo +1.95.0 fmt --all --check
cargo +1.95.0 build --locked --lib --bins --features cli,testing
cargo +1.95.0 test --locked --no-run --lib --bins --tests --features cli,testing
cargo +1.95.0 clippy --locked --all-targets --features cli,testing -- -D warnings
cargo +1.95.0 build --locked --all-targets --features host
cargo +1.95.0 clippy --locked --all-targets --features host -- -D warnings

The final two commands are the runtime adapter's host configuration. Windows MSVC setup and each Cargo invocation ran in the same cmd.exe process. Inherited CARGO_TARGET_DIR and CARGO_BUILD_JOBS were removed; no fixed CPU/RAM/compiler-job caps were imposed. Windows compilation waited for a fresh safe physical/commit-capacity observation, not an inherited admission promise.

These are current-head compilation/lint receipts, not executed test or hardware results. The older b70 software matrix and producer D4D review/matrix remain historical, pinned evidence; they are not relabeled as runs on this merge. No extra VM, native, kernel, guest-binary, MSRV or full feature matrix, nor manual Copilot review request, was added solely for this unchanged-production adoption.

Existing tests: kept, not retired

The exact update inventory, check_test_changes.py --base b70d7e98de7f2ef2cb14875e00075f7149d44803, reports 4 existing-asset changes and 4 input-added test items:

Existing asset Accounting
finish_writes_matching_metadata_and_only_its_three_entries_are_published Keep all finalization/publication assertions; import D4D's explicit key/manifest time equality assertion.
keys_read_back_from_their_canonical_encoding Keep canonical round trips; hash the specified compatibility prefix rather than the longer persisted time suffix.
keys_of_machines_that_no_manifest_describes_are_refused Keep the invariant-order refusal; corrupt invariants before the new time suffix, not time accidentally.
snapshot-key-v1.txt Import D4D's complete time suffixes and malformed encodings; preserve compatibility identity values and CLASS vectors.

The added items are D4D's full-time round-trip/identity case, required-time/known-clock refusal case, strict-opening time-mismatch case, and independent suffix-length helper. They are imported and compiled, not newly authored or executed here.

Against the selected D4D checkpoint, not a subsequently advanced base tip, the original integration still reports 8 existing-asset changes and 137 input-added items:

Existing asset Accounting
Adapter initramfs::expected helper Keep archive checks; expect the published /sbin/nvx-init overlay.
APP_ACTIVATE test hook Keep the codec and published guest-feature gating.
decode_activate_payload test hook Keep the published gating and payload checks.
Interrupted-launch journal test Keep journal/capability and duplicate-launch assertions; inspect persisted files without acquiring the recovering lock.
Adapter launcher test Keep control-tty assertions; expect the published init path and ignored helper PID arguments.
Init seam allowance, 6 to 7 Keep the route input's existing restored-announcer hook.
CLI sandbox-state seam allowance, 1 Keep the published named-store input's single hook.
CLI named-snapshot seam allowance, 1 Keep the same input's single hook.

No existing test is retired, no CI test command is removed, and capture-timeout/restored-activation cases remain intact. The ancestry-wide origin/dev inventory is retained separately and is not attributed to this bounded update.

Remaining conformance and scope limits

  • The inherited host: prepare blockless capture launches #1454 pin's known selector-cardinality defect is not fixed or qualified here; later producer fixes are separate inputs.
  • The SL3.7b capture command/parser and orchestration remain a separate consumer change. This PR adds no second journal, capture transaction, restore ledger, running-layered capture, restore command or speculative future input.
  • Current-head tests were compiled NO-RUN. VM/native capture/restore, broad feature/docs/API/runtime qualification, full CI and hardware/manual conformance are not claimed. Draft CI skips are not passes.
  • The input update conveys no inherited consumer qualification and imposes no extra canonical-reader/API or QA merge hold. Eventual Ready/merge and broader qualification remain maintainer-owned.

Enrique Saurez and others added 30 commits November 10, 2026 01:05
Port the preserved SL2.10 implementation and coupled callers, API snapshots, docs and real-process tests onto feature c52c710 without changing legacy lifecycle policy.

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

Copilot-Session: 0c8e42ad-4102-451f-96f0-0a4ae0483d1a
Port the scoped SL3.2b donor cf485b7 onto verified feature c52c710 without its historical producer history. Persist prepared capability and outputs before spawn, the matching process before commit, and every SavedVm field in the private runtime record.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eb3cc7e0-f51e-45ed-b911-c7b214740e05
Add the rootless Fresh capture entry and handle snapshot outcomes on the shared control session. Refuse rooted capture before killing workloads and preserve the current helper supervision and nonblocking transport.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: dee059e7-7968-43d8-82d0-abd68b922eed
Use the existing PID and atomic create-directory retry to retain unique fixture directories without a long diagnostic prefix. Keep the scenario name in creation errors. Capture and restore control sockets now fit approved data-volume temp roots without changing production limits, assertions, timeouts or skipped tests.

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

Copilot-Session: 0c8e42ad-4102-451f-96f0-0a4ae0483d1a
Apply the pinned rustfmt wrapping requested by the final-head review; fixture semantics and production source remain unchanged.

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

Copilot-Session: 0c8e42ad-4102-451f-96f0-0a4ae0483d1a
Port only SL3.3a onto coordinator-qualified SL3.2b 99d0045. Retain the prepared log claim and identity, hold and recheck the endpoint owner, and require the Linux log match. Preserve Windows job/handle fallback primitives and the donor fork-race fix without adding recovery or signaling.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eb3cc7e0-f51e-45ed-b911-c7b214740e05
Return Running or opaque exit proof after checking the recorded identity.
Preserve indeterminate errors and current VM/transport verification policies.
Keep the existing exit-handle and recovery tests alongside opening proof cases.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0c8e42ad-4102-451f-96f0-0a4ae0483d1a
Validate the fixed snapshot layout, private regular files, bounded metadata and key/manifest agreement without reading snapshot.json. Retain the caller immutability contract and cover Linux/Windows refusal cases.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6789d491-7d13-4929-bc64-4edfec93ba60
Port only SL7.5d onto the qualified capture parent. Fork the fixed announcer before switching roots, preserving PID 1 priority and fatal helper supervision. Reset inherited signals without introducing a restore caller or lifecycle machinery.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: dee059e7-7968-43d8-82d0-abd68b922eed
Compose exact qualified13bb and92ac as preserved parents for issue1108 SL3.3b. No producer tree replay or manual resolution. Joint QA remains pending.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eb3cc7e0-f51e-45ed-b911-c7b214740e05
Preserve reader 797d300 as the first parent
and CLI store 99d0045 as the second.
The input merge has no conflicts. Its own joint qualification remains pending.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0c8e42ad-4102-451f-96f0-0a4ae0483d1a
Compose the existing CLI liveness contract with SL2.10b Opened results. Preserve held-running versus proved-exited distinction and propagate lookup failures. Update only its existing own-process test helper.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eb3cc7e0-f51e-45ed-b911-c7b214740e05
Port only SL3.7a commits 5a5cebc and
593a17d onto the actual preserved-parent
reader/CLI input join 4662351.

Validate and publish whole private snapshots without replacement, keep the
exclusive per-name lock outside each immutable entry, and record only the
restored sandbox's own source name. Reuse existing CLI privacy/locking helpers.
No capture, restore, index, shared-lock mode or blockless driver is added.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0c8e42ad-4102-451f-96f0-0a4ae0483d1a
Use verified endpoint and log claims for unrecorded launches and boot/PID/start identities for recorded processes. Require confirmed exit before removing capability and journal; retain indeterminate evidence and its refusal cause. Keep committed-runtime recovery separate and bounded claim rechecks intact.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eb3cc7e0-f51e-45ed-b911-c7b214740e05
Integrate only the restored activation caller on qualified capture and announcer inputs. Preserve bounded signal-aware control I/O, retain one activation across resets, and keep postactivation captures refused.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: dee059e7-7968-43d8-82d0-abd68b922eed
Port the required single-instance named-pipe disconnect helper and CLI-gated test re-exports. Repeated endpoint-owner verification must reconnect after each finished client; no production API or assertion changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eb3cc7e0-f51e-45ed-b911-c7b214740e05
Bind the established private restore-ready listener in a scoped in-crate live fixture. Keep production APIs and guards unchanged; exercise real activation, MAPS/EXEC, replay, helper publication and the original deadline under explicit host admission.

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

Copilot-Session: dee059e7-7968-43d8-82d0-abd68b922eed
Prepare Fresh captures through the existing VM creation path with private sparse disks, checked geometry, platform-only arguments and a caller-persisted capture context. Leave capture completion and snapshot publication to their separate operations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 095bfb08-a5d0-4331-b2b2-dd76d2fbadd8
Keep the OpenVMM source excerpt in a test-only module so its function definition is included in item context.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 095bfb08-a5d0-4331-b2b2-dd76d2fbadd8
Regenerate both platform snapshots for the opaque capture context and the prepared-launch accessor.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 095bfb08-a5d0-4331-b2b2-dd76d2fbadd8
The fixture directory is needed only for Linux physical-block metadata. Mark the parameter accordingly on the other supported hosts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 095bfb08-a5d0-4331-b2b2-dd76d2fbadd8
Install through the existing fixed guest-binary list and preserve the legacy-token and blockless routes. Pass the known helper PIDs and move the runtime adapter overlay to the new init path.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 10c9dff8-5c75-4c96-9739-3896adfb0c71
Validate the proved-exited capture outcome, strict OpenVMM artifacts and checked capture context. Write retryable private key and description files without moving or cleaning VM-directory entries.

The Draft keeps SnapshotKey::time and its encoding/identity semantics pending the explicit user decision.

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

Copilot-Session: b718df7e-13ad-474d-b3c5-b0f93a7e18e6
Preserve the current typed process proof and shared strict snapshot validation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: c688b057-b972-4b90-9ecd-91187b92311f
Keep capture configuration imports from the selected first parent.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: c688b057-b972-4b90-9ecd-91187b92311f
Preserve bounded capture preparation from the feature input while retaining the published restored-init activation and RESET handling.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: c688b057-b972-4b90-9ecd-91187b92311f
Retain the published route input's seventh init seam for its restored announcer test hook.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: c688b057-b972-4b90-9ecd-91187b92311f
Persist and strictly decode the complete per-snapshot time contract; hash only the unchanged compatibility prefix and reject key/manifest time mismatches. Keep the single Fresh encoding in place without a version bump or backward reader.

Apply owner-only artifact validation at the snapshot boundary while preserving the legacy template validator and its existing callers.

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

Copilot-Session: b718df7e-13ad-474d-b3c5-b0f93a7e18e6
Use verified-exit presence and propagate report parsing errors in the inherited ignored native fixture. Do not execute or qualify native restore here.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: c688b057-b972-4b90-9ecd-91187b92311f
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: c688b057-b972-4b90-9ecd-91187b92311f
@esaurez Enrique Saurez (esaurez) added tests-modified Changes existing tests, test data, or test wiring feat-nvx-refactor labels Nov 10, 2026
@github-actions

github-actions Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

This pull request changes existing tests

It modifies or removes 17 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 helper fn expected in initramfs (tests) tests/runtime-adapter/tests/initramfs.rs:83 tests/runtime-adapter/tests/initramfs.rs:83
modified hook the test hooks of const APP_ACTIVATE in protocol::app nvx-rs/src/protocol/app.rs:71 nvx-rs/src/protocol/app.rs:74
modified hook the test hooks of fn decode_activate_payload in protocol::app nvx-rs/src/protocol/app.rs:210 nvx-rs/src/protocol/app.rs:216
modified imports the imports of host::template::store::tests nvx-rs/src/host/template/store/tests.rs:5 nvx-rs/src/host/template/store/tests.rs:5
modified test fn an_interruption_keeps_the_journal_and_capability_without_publishing_runtime in host::cli::store::tests::launch nvx-rs/src/host/cli/store/tests/launch.rs:163 nvx-rs/src/host/cli/store/tests/launch.rs:166
modified test fn keys_read_back_from_their_canonical_encoding in host::snapshot::key::tests nvx-rs/src/host/snapshot/key/tests.rs:661 nvx-rs/src/host/snapshot/key/tests.rs:720
modified test fn keys_of_machines_that_no_manifest_describes_are_refused in host::snapshot::key::tests nvx-rs/src/host/snapshot/key/tests.rs:800 nvx-rs/src/host/snapshot/key/tests.rs:859
modified test fn cold_creation_is_inspectable_without_a_process_listener_or_capability_file in host::vm::tests nvx-rs/src/host/vm/tests.rs:458 nvx-rs/src/host/vm/tests.rs:878
modified test fn the_launchers_run_the_guest_agent_on_the_control_tty in initramfs (tests) tests/runtime-adapter/tests/initramfs.rs:145 tests/runtime-adapter/tests/initramfs.rs:145
removed hook the test hooks of const OPENVMM in host::vm nvx-rs/src/host/vm.rs:56
removed hook the test hooks of const CAPTURE_IMAGE in host::vm nvx-rs/src/host/vm.rs:74
removed hook the test hooks of const CAPTURE_SCRATCH in host::vm nvx-rs/src/host/vm.rs:80
removed test fn cold_boot_arguments_refuse_capture_configurations in host::config::tests nvx-rs/src/host/config/tests.rs:1123

Test data

Change What Before After
modified file nvx-rs/tests/vectors/snapshot-key-v1.txt nvx-rs/tests/vectors/snapshot-key-v1.txt nvx-rs/tests/vectors/snapshot-key-v1.txt

Test policy

Change What Before After
loosened allowlist entry nvx-rs/src/guest/init.rs (the seams allow 7 test hooks, up from 6) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/host/cli/sandbox/state.rs (the seams allow 1 test hooks) scripts/test-layout-allowlist.json
loosened allowlist entry nvx-rs/src/host/cli/snapshots.rs (the seams allow 1 test hooks) scripts/test-layout-allowlist.json

Relocated unchanged: 0; added: 182. Compared the merge base cf5f91467c05 with d814df2e0358.

Adopt only d4d8927 by ordinary merge. Preserve the original b70 input join, its source ancestry and native pin; no consumer implementation or production reconciliation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 422faec3-93ec-4bb6-8900-dfbd095c9ebe
@esaurez
Enrique Saurez (esaurez) force-pushed the esaurez/issue1102-sl214-20261110-b718df7e branch from d4d8927 to 1148a74 Compare November 10, 2026 22:04
@ppenna
Pedro Henrique Penna (ppenna) force-pushed the esaurez/issue1102-sl214-20261110-b718df7e branch from c6de1d8 to aa319d6 Compare November 11, 2026 01:23
Base automatically changed from esaurez/issue1102-sl214-20261110-b718df7e to feature/nvx-refactor November 11, 2026 01:39
@ppenna

Copy link
Copy Markdown
Contributor

Closing as superseded: everything that this pull request joined is in feature/nvx-refactor at 5947e4e8.

#1464, the SL3.7b capture that was stacked on this pull request, has also merged into feature/nvx-refactor. Reopen this pull request if anything is missing.

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

Labels

feat-nvx-refactor 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