From 32802e3704b57f0a8b5217bda66e7fccf692b0b7 Mon Sep 17 00:00:00 2001 From: japabu Date: Sun, 4 Oct 2026 13:16:46 +0200 Subject: [PATCH 1/4] Align the root and kernel locks to the per-range maxima of the five main locks The owner ruled for one Cargo workspace. One lock holds one version per semver range, so the versions the current locks disagree on are aligned first, inside today's workspaces, and the workspace step itself moves none. This is the root group, the first of the three: libc 0.2.183 -> 0.2.189, semver 1.0.27 -> 1.0.28 and typenum 1.19.0 -> 1.20.1 in the root lock, and the kernel lock's one pair, libc 0.2.183 -> 0.2.189. Each new version is the one `bootloader/Cargo.lock` already carries, with the same checksum. Every pair was moved with `cargo update -p --precise `, which moved nothing else. The root's registry getrandom 0.2/0.3/0.4 becoming the fork is not here: no version moves, only the source, and that is the workspace-wide `[patch]`'s consequence, which lands with the root `[patch]` it follows from. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WcU2Dsw6mDYtwYfzVHPzM8 --- Cargo.lock | 12 ++++++------ kernel/Cargo.lock | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 459db388e8b..e7ddbe78de5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -611,9 +611,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.183" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "log" @@ -912,9 +912,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" @@ -1518,9 +1518,9 @@ checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index 20a78b0a455..b498aff6e56 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -64,9 +64,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.183" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "rustc-demangle" From 309c29e35bef284299b9a5d3431023fa7bf9021c Mon Sep 17 00:00:00 2001 From: japabu Date: Sun, 4 Oct 2026 14:30:22 +0200 Subject: [PATCH 2/4] File the one-workspace track, with the owner's ruling and this pull request as its first stage The owner ruled on 2026-10-04 for one Cargo workspace. The track quotes the question and the option he chose verbatim, names the orchestrator as owner, and sets an exit a build can read: one root lock whose pairs are the union of the aligned locks, with kernel and loader bytes unchanged by the merge. It carries the measured constraints of the layout survey that a later stage would otherwise re-derive: the 35 alignments by lock, the loader's missing strip, the fork patches that keep the rust-tests and the ssh judge outside, and the per-triple flags. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WcU2Dsw6mDYtwYfzVHPzM8 --- ...ee-resolves-in-five-cargo-locks-not-one.md | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 issues/the-tree-resolves-in-five-cargo-locks-not-one.md diff --git a/issues/the-tree-resolves-in-five-cargo-locks-not-one.md b/issues/the-tree-resolves-in-five-cargo-locks-not-one.md new file mode 100644 index 00000000000..70971302a89 --- /dev/null +++ b/issues/the-tree-resolves-in-five-cargo-locks-not-one.md @@ -0,0 +1,54 @@ +--- +status: assigned +kind: track +opened: 2026-10-04 +--- + +# The tree resolves in five Cargo locks, not one + +The root, `kernel/`, `bootloader/`, `userland/` and `toyos/` are five +Cargo resolutions with five locks, and four of them declare their own +`[profile.toyos]`. A +crate two of them share is tested on the host against the root's lock and +shipped from another's, and the locks disagree on versions: on `main` before +pull request #724, 29 registry pairs sat below the highest version another of +the five locks carries in the same semver range. + +**The owner ruled on 2026-10-04.** Asked "Merge everything into one Cargo +workspace (after small version-alignment steps; proven by byte-identical +kernel and loader)?", he chose "Yes, one workspace (Recommended)": "One +lockfile, one profile, shared crates tested as shipped; about 35 version +alignments land first." + +**Owner:** the orchestrator. Everything below is the orchestrator's plan and +its measurements, not the ruling. + +**Exit:** one workspace and one lock at the root replace the five. The step +that merges them moves no version: its lock's name and version pairs are the +union of the aligned locks, and the kernel and the loader, both arches, are +byte-identical to the build of the last alignment before it. The alignments +land first, each in today's workspace; pull request #724, the root and +kernel locks, is the first. + +**Constraints, measured** on a scratch workspace seeded from the five locks +at `8b4f88446`, by type-check and one loader link, with no boot: + +- One lock holds one version per semver range, so every pair below its + range's maximum moves up to it. The 35: the 29 below the maximum (userland + 18, loader 7, root 3, kernel 1), the 3 that userland's moves pull with them + (`ureq-proto`, `utf-8`, `zeroize_derive`), and the root's registry + `getrandom` 0.2, 0.3 and 0.4, which become the forks userland patches in at + the same versions. Those three move no version: they follow from the root + `[patch]` and land with it. +- Every fork commit the five locks pin stays pinned, and the crypto + pre-releases (`ed25519-dalek 3.0.0-pre.6`, `pkcs5 0.8.0-rc.13`) are only in + `userland/Cargo.lock` and stay. +- The loader's `[profile.toyos]` has no `strip = "debuginfo"`; a loader built + with and without it differs in 247,720 of 328,192 bytes. One profile is a + loader byte change, made before the merge. +- `[patch]` is workspace-wide. `tests/toyos-rust-tests` patches memmap2 and + target-lexicon and `tests/ssh-client-host` takes upstream tokio, so both + stay outside the workspace. +- The guest triples' flags stay per triple: with no + `[target.x86_64-unknown-uefi]` table, `curve25519-dalek-derive` enters the + x86_64 loader's graph. From 05e7e041e8a7289eaf36767f810561da86ec8faf Mon Sep 17 00:00:00 2001 From: japabu Date: Sun, 4 Oct 2026 14:57:28 +0200 Subject: [PATCH 3/4] Name the crate that carries each test patch in the one-workspace track tests/toyos-rust-tests patches only toyos-abi, toyos and memmap2; target-lexicon is patched by tests/toyos-rust-tests/tls-cranelift, a resolution with its own Cargo.lock. The track said the first carried both. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WcU2Dsw6mDYtwYfzVHPzM8 --- issues/the-tree-resolves-in-five-cargo-locks-not-one.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/issues/the-tree-resolves-in-five-cargo-locks-not-one.md b/issues/the-tree-resolves-in-five-cargo-locks-not-one.md index 70971302a89..71c435bab75 100644 --- a/issues/the-tree-resolves-in-five-cargo-locks-not-one.md +++ b/issues/the-tree-resolves-in-five-cargo-locks-not-one.md @@ -46,9 +46,10 @@ at `8b4f88446`, by type-check and one loader link, with no boot: - The loader's `[profile.toyos]` has no `strip = "debuginfo"`; a loader built with and without it differs in 247,720 of 328,192 bytes. One profile is a loader byte change, made before the merge. -- `[patch]` is workspace-wide. `tests/toyos-rust-tests` patches memmap2 and - target-lexicon and `tests/ssh-client-host` takes upstream tokio, so both - stay outside the workspace. +- `[patch]` is workspace-wide. `tests/toyos-rust-tests` patches memmap2, + `tests/toyos-rust-tests/tls-cranelift`, a resolution with its own lock, + patches target-lexicon, and `tests/ssh-client-host` takes upstream tokio, + so all three stay outside the workspace. - The guest triples' flags stay per triple: with no `[target.x86_64-unknown-uefi]` table, `curve25519-dalek-derive` enters the x86_64 loader's graph. From 11280b5c922c6f3914c85ea5c425c69e5695a408 Mon Sep 17 00:00:00 2001 From: japabu Date: Sun, 4 Oct 2026 15:44:53 +0200 Subject: [PATCH 4/4] The one-workspace track counts its pairs on main as it now stands After #722, pairs.sh prints 35 pairs on origin/main at c4ab2b1e1 (userland 24, loader 8, root 2, kernel 1). The scratch-workspace count of 35 moves stays dated to 8b4f88446, and what the 7 pairs added since then pull with them is recorded as not measured. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WcU2Dsw6mDYtwYfzVHPzM8 --- ...ee-resolves-in-five-cargo-locks-not-one.md | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/issues/the-tree-resolves-in-five-cargo-locks-not-one.md b/issues/the-tree-resolves-in-five-cargo-locks-not-one.md index 71c435bab75..2c7255852e8 100644 --- a/issues/the-tree-resolves-in-five-cargo-locks-not-one.md +++ b/issues/the-tree-resolves-in-five-cargo-locks-not-one.md @@ -10,9 +10,10 @@ The root, `kernel/`, `bootloader/`, `userland/` and `toyos/` are five Cargo resolutions with five locks, and four of them declare their own `[profile.toyos]`. A crate two of them share is tested on the host against the root's lock and -shipped from another's, and the locks disagree on versions: on `main` before -pull request #724, 29 registry pairs sat below the highest version another of -the five locks carries in the same semver range. +shipped from another's, and the locks disagree on versions: on `main` at +`c4ab2b1e1`, 35 registry pairs sit below the highest version another of the +five locks carries in the same semver range (userland 24, loader 8, root 2, +kernel 1). **The owner ruled on 2026-10-04.** Asked "Merge everything into one Cargo workspace (after small version-alignment steps; proven by byte-identical @@ -34,12 +35,15 @@ kernel locks, is the first. at `8b4f88446`, by type-check and one loader link, with no boot: - One lock holds one version per semver range, so every pair below its - range's maximum moves up to it. The 35: the 29 below the maximum (userland - 18, loader 7, root 3, kernel 1), the 3 that userland's moves pull with them - (`ureq-proto`, `utf-8`, `zeroize_derive`), and the root's registry - `getrandom` 0.2, 0.3 and 0.4, which become the forks userland patches in at - the same versions. Those three move no version: they follow from the root - `[patch]` and land with it. + range's maximum moves up to it. At `8b4f88446` that was 35: the 29 below + the maximum then (userland 18, loader 7, root 3, kernel 1), the 3 that + userland's moves pull with them (`ureq-proto`, `utf-8`, `zeroize_derive`), + and the root's registry `getrandom` 0.2, 0.3 and 0.4, which become the forks + userland patches in at the same versions. Those three move no version: they + follow from the root `[patch]` and land with it. What the pairs added since + (userland's `autocfg`, `crossbeam-utils`, `defmt`, `defmt-macros`, + `once_cell` and `rustix`, and the loader's `libc`) pull with them is not + measured. - Every fork commit the five locks pin stays pinned, and the crypto pre-releases (`ed25519-dalek 3.0.0-pre.6`, `pkcs5 0.8.0-rc.13`) are only in `userland/Cargo.lock` and stay.