Repository navigation
Description
Parent: #1090, in #1076. Needs: #1091, #1112, #1119, #1120, #1123, #1126, #1127, #1129, #1130, #1131. Unblocks: —. No PR of this group merges before the API-ready commit.
Goal. The breaking release is published: the changelog of its breaking changes, and nvx at the next prerelease number that crates.io hasn't used.
PRs, in order. Each PR has one goal, leaves dev green, and names in its description each old test of its area as kept, rewritten or retired, with each change that check_test_changes.py reports. Its tests follow the repository's test layout: a module's unit tests, and the code that only they use, sit in its tests.rs or tests/ and move with it. The estimates count core lines (code, not comments, docs or tests) and counted files; each PR records its measured values. Each PR does what its Scope says and no more: a case, input or layout that its Scope doesn't name, and whatever "Not in this PR" lists, is out of scope. Address every review comment within the scope, and ask before acting on one that asks for more. A PR whose measured core lines pass the stop that its Estimate names (twice the estimate, at most 600) stops and asks before continuing.
- SL8.1: The breaking release is published.
- Objective: The breaking release is declared, checked and published as
nvx. Consumers can verify its exact planned public surface, including one hiddenmainper binary, and install and runnvx-ingressindependently with the guest profile. - Contents: The changelog of the breaking changes, and the package's declared version set to the release's: the next prerelease number that crates.io hasn't used. CI checks the package's contents and that its API snapshot holds exactly the planned public surface and one hidden
mainper binary, and publishesnvxalone. It installsnvx-ingressfrom the package outside the repository withcargo install nvx --no-default-features --features guest --profile guest --bin nvx-ingress, and runs it. - Scope:
- Add one root
CHANGELOG.mdwith a single entry for this release, listing its breaking changes and linkingdoc/migrate-from-alpha.7.md; add no other release document. - Set the package's declared version to the next unused prerelease number.
- Check
nvx's packaged contents and that its API snapshot has exactly the planned public surface and one hiddenmainper binary. - Publish
nvxalone at that version. - Outside the repository, run
cargo install nvx --no-default-features --features guest --profile guest --bin nvx-ingress, then runnvx-ingress.
- Add one root
- Not in this PR:
- Publishing any package other than
nvx: NVX's programs are code of that package. - Choosing a prerelease number already used on crates.io.
- Changing package contents, public API or guest-profile design; fix failures in those areas separately rather than expanding the release PR.
- Adding another publisher or release channel; use the repository's existing release tooling and CI.
- Backward-compatible state conversion or old-snapshot support: the migration guide requires fresh state.
- Publishing any package other than
- Approach: After the nightly versions are known, select the next unused prerelease number and set it on the package. Reuse the existing package and publishing tools to check contents and the final API snapshot, then publish
nvxalone. Outside the checkout, installnvx-ingressfrom that package with the guest feature and profile, and run it; do not build a general release system. - Done when:
- The new root
CHANGELOG.mdhas one release entry listing the breaking changes and linking the migration guide, and the package declares the next unused prerelease version. - Release CI validates
nvx's contents and its exact planned API snapshot, including one hiddenmainper binary. nvxalone is published at that version.- A standalone guest-profile install from
nvxrunsnvx-ingresssuccessfully.
- The new root
- Needs: SL1.5, in nvx-rs slimming 1.1.1: the public API is checked, and NVX's programs are hidden from it #1091; SL3.11a, in nvx-rs slimming 3.1.7: the CLI uses only the new interface #1112; SL4.4d, in nvx-rs slimming 5.1.2: NVXC v1 and FEATURES are gone #1129; SL5.2, in nvx-rs slimming 4.1.2: the test adapter is gone #1119; SL6.8c, in nvx-rs slimming 4.3.3: the error codes are private #1126; SL6.10h, in nvx-rs slimming 5.2.2: the CLI, developer, CI and rustdoc docs, and the migration guide #1131; SL6.11b, in nvx-rs slimming 4.2.4: the exec engine, the process modules and the old layered init are gone #1123; SL6.11c, in nvx-rs slimming 4.2.1: the code that stays stops using what leaves #1120; SL6.12, in nvx-rs slimming 4.3.4: NVXC, the host's platform layer and the guest's space are private #1127; SL6.13b, in nvx-rs slimming 4.3.4: NVXC, the host's platform layer and the guest's space are private #1127; SL6.13c, in nvx-rs slimming 4.2.1: the code that stays stops using what leaves #1120; SL6.14, in nvx-rs slimming 4.3.4: NVXC, the host's platform layer and the guest's space are private #1127; SL7.8b, in nvx-rs slimming 4.2.4: the exec engine, the process modules and the old layered init are gone #1123; SL7.9, in nvx-rs slimming 5.2.1: the library's guide, its design and the guest-agent guidelines #1130.
- Estimate: 80 core lines, 5 counted files. Past 160 core lines, stop and ask before continuing.
- Objective: The breaking release is declared, checked and published as
Tests. Release CI checks the package's contents and that the API snapshot holds exactly the planned surface and one hidden main per binary, publishes nvx, installs the guest tools from the package outside the repository with --no-default-features --features guest --profile guest, and runs nvx-ingress.
Done when: nvx is published at the release version, and release CI passes.
Activity
esaurez commentedon Nov 10, 2026
Workstream source/progress checkpoint - 2026-11-10 UTC
Checked boxes below mean merged scope, not merely an implemented first iteration. Implementation branches are source checkpoints, not automatic qualification, Ready or merge approval. Some starting inputs are frozen/anonymous commits rather than standalone branches; their exact SHAs and known merged producer refs are recorded explicitly.
The original technical scope remains authoritative, supplemented only by any portable technical clarification in this issue. No machine-specific execution policy is part of this checkpoint.
scripts: install nvx-ingress from the crate's package before publishing
nvx-rs: declare 0.2.0-alpha.1, the breaking release, and its changelog
scripts: check that the public API hides one main per binary
scripts: install nvx-ingress from the crate's package before publishing
nvx-rs: declare 0.2.0-alpha.1, the breaking release, and its changelog
ppenna commentedon Nov 13, 2026
SL8.1 version decision:
0.2.0-alpha.1, a new pre-release series (made for Pedro Henrique Penna (@ppenna)).#1132 asks for "the next prerelease number that crates.io hasn't used". crates.io holds
nvx0.1.0-alpha.1throughalpha.16, anddev's nightly CI publishes the next0.1.0-alpha.Nmost nights. So the next free0.1.0-alpha.Nchanges until this branch reachesdev, and a changelog or guide that named one would likely name a number that a nightly has already taken. Two more reasons favour a new series:nvx = "0.1.0-alpha.7"would resolve to a breaking0.1.0-alpha.Noncargo update, but never to0.2.0-alpha.1.doc/distribution.mdalready describes starting another series by changing the declared version. CI then publishes exactly that version at the first full run ofdevafter the merge, with no change to the publishing jobs.0.2.0-alpha.1is unused on crates.io. SL8.1 (#1561) declares it,CHANGELOG.mdnames it, and the migration guide (SL6.10h, #1559) pins it. Nightlies after the release publish0.2.0-alpha.N.Publication itself happens when
feature/nvx-refactorreachesdev, throughdev's full CI run, as the repository requires. That merge is a maintainer's decision, outside these pull requests.doc: tell users of alpha.7 what the release breaks
doc: tell users of alpha.7 what the release breaks
scripts: check that the public API hides one main per binary
scripts: install nvx-ingress from the crate's package before publishing
nvx-rs: declare 0.2.0-alpha.1, the breaking release, and its changelog
2 remaining items
scripts: check that the public API hides one main per binary
scripts: install nvx-ingress from the crate's package before publishing
nvx-rs: declare 0.2.0-alpha.1, the breaking release, and its changelog
scripts: check that the public API hides one main per binary
scripts: install nvx-ingress from the crate's package before publishing
nvx-rs: declare 0.2.0-alpha.1, the breaking release, and its changelog
ppenna commentedon Nov 13, 2026
Status: SL8.1 has merged into
feature/nvx-refactor, and publication waits fordev.SL8.1, #1561, merged as
2e0228a05cc,26880bf41a6and05cb371d6be:public_api.pyfails unless the only hidden items are onemainper binary and the modules that hold them. Each platform's listing is checked on its own.nvx-ingressfrom the unpacked package with--no-default-features --features guest --profile guest, outside the checkout, runs it, and checks its output.nvx-rs/Cargo.tomldeclares0.2.0-alpha.1, as decided above, and its description no longer names removed components. The rootCHANGELOG.mdhas one entry that lists the breaking changes and linksdoc/migrate-from-alpha.7.md.Validation:
cargo publish --dry-run --lockedpasses; nothing was published.0.2.0-alpha.1, then built, installed and rannvx-ingress.05cb371d6bepassed: https://github.com/microsoft/nvx/actions/runs/43361567805This issue stays open. Its Done-when needs
nvxpublished at0.2.0-alpha.1, and the repository publishes only fromdev's full CI runs. That happens oncefeature/nvx-refactormerges intodev, which is a maintainer's decision. The first full run ofdevafter that merge publishes exactly0.2.0-alpha.1.doc: tell users of alpha.7 what the release breaks
scripts: check that the public API hides one main per binary
scripts: install nvx-ingress from the crate's package before publishing
nvx-rs: declare 0.2.0-alpha.1, the breaking release, and its changelog
doc: tell users of alpha.7 what the release breaks
scripts: check that the public API hides one main per binary
scripts: install nvx-ingress from the crate's package before publishing
nvx-rs: declare 0.2.0-alpha.1, the breaking release, and its changelog