Status: Superseded by ADR-290 — its D1-D2 are D20-D21 there Date: September 27, 2026 Target Version: Nikaia 0.0.222 Answers: #194, the boundary translation for a hand-edited hash — ADR-100 D6, the only part of that record left Related: ADR-104 D1, D5 (a crate is described before it is called, and the description is reviewed), Part III C.1
ADR-100 D6: where rustc says, at a call across a boundary, that a value is
not a future or that a Result was not expected, the driver says the ledger of
that package does not match its sources. The entry waited for a ledger the build
cannot re-derive, because a path package’s ledger is rewritten by its own build
in the same run. A described crate is one: its description is written once
and edited by hand (ADR-104 D5).
Probing it found the defect under it. A described function that can fail —
nikaia describe writes throws = ["?"] for one returning Result — was a
place that can fail to the checker and a plain call to the emitter, which reads
std’s ledger alone. So every described fallible call failed to compile:
the crate’s Result reached the rest of the line, and rustc said so.
throws.The described crates’ ledger reaches the emitter beside the program’s, and a
call into one that the description says can fail gets its ?. It is read for
that question only and not merged into std’s ledger: a described sync =
false means may block, and a std entry’s means await it.
A program never meets a Result or a future — both are this compiler’s lowering
of throws and of a pause, written off a ledger. So where the backend says
is not a future, the ? operator can only be applied to values that
implement Try, or names a Result, the lowering believed a ledger the code
below does not match. The build names the boundary: the one the line calls, else
a described crate whose sources moved, else the only one the file calls.
fremd does not match the crate —
run nikaia describe fremd again and review the diff.util does not match its sources — build it again.The backend’s words are kept as a note: this is a translation, and whoever checks it needs what it was translated from. Where no boundary answers, the message is left as the backend said it: it is then this compiler’s defect.
A crate whose sources moved since it was described is refused before the
build (NK2505, ADR-104 D5); D2 is for the case that check cannot see — a
description edited to say something the crate does not do.
All of it, in 0.0.222: modules::Program::described, the emitter’s
described and can_fail, diagnostics::a_stale_boundary and the primary
label it reads, the report’s boundaries; project.rs’s
a_described_call_that_can_fail_is_propagated and
a_boundary_mismatch_names_the_description_to_redo, and the unit tests in
diagnostics.