ADR-219: The Oldest Rust Nikaia Works With Is Measured — 1.88

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)

1. Context

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.

2. Decisions

D1 — The floor is 1.88, and it is one number for everything.

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.

D2 — It is measured, and CI measures it again.

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.

D3 — Where it is written.

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.

3. What is built

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.

This site is open source. Improve this page.