Status: Superseded by ADR-305 — its D1-D3 are D1-D3 there
Date: September 26, 2026
Target Version: Nikaia 0.0.200
Answers: the owner’s the minimum has to be in the manifests and the
README, after ref-or-box declared 1.84 where nikaia-std had needed it
without saying so
Supersedes: ADR-288 D27’s number (1.75); its mechanism stays
Related: ADR-001 D1 (the channel, which stays
rust-toolchain.toml’s), ADR-218 (the crates that declare it too)
ADR-288 D27 derived the floor from one feature: -> impl Trait in a trait
method, stable in 1.75. Nothing checked it afterwards, and it went stale four
times over. Building and testing with each version in turn found:
| needs | since | where |
|---|---|---|
NonNull::map_addr |
1.84 | nikaia-std’s error tail (now ref-or-box) |
impl AsyncFn, async closures |
1.85 | the emitted code for a parameter the callee only runs (ADR-277) |
std::io::pipe |
1.87 | nikaia-std’s socket tests |
the dependency home 0.5.12 |
1.88 | the compiler’s build |
With Rust 1.84 or 1.85, cargo refused or rustc failed on the generated
file — the class Part III C.1 forbids — while the
README and Part III promised 1.75.
The compiler, std, the crates under crates/unsafe/, and the programs the
compiler generates. One number because one installation holds all of them:
the toolchain that builds Nikaia is the one that builds what it emits.
scripts/check-floor.sh reads the number from the emitter’s RUST_FLOOR,
installs exactly that toolchain, and runs the whole test suite on it — which
compiles every program the tests emit with it, against a std built with it —
and the tests of every crate under crates/unsafe/. It also checks that every
manifest says the same rust-version. CI runs it as a job of its own. A floor
that rises without this passing is not raised; a feature that needs a newer
Rust fails the job.
rust-version = "1.88" in crates/nikaia, crates/nikaia-std,
crates/orchestrator and every crate under crates/unsafe/; RUST_FLOOR in
the emitter, which ADR-288 D27 writes into every generated Cargo.toml and
compares with rustc --version before cargo runs; the README’s Getting
started; Part III 13’s prerequisites; the comment in rust-toolchain.toml.
All of it, in 0.0.200. Measured: the whole suite (141 test targets) and all six
crates/unsafe/ crates pass on 1.88.0; 1.84 cannot compile the emitted
AsyncFn, and 1.85 cannot build the compiler.