D103 - The builder checks identifiers, not validity

Status: decided Date: 2026-09-26

Builder::check verifies before a module leaves the crate that every identifier used is defined, that nothing is defined twice, and that the declarations section defines before it uses. Function bodies are checked only for "defined somewhere". Anything else is left to the authoritative validator.

Why: the builder hands out every identifier, so it alone can say which never got a meaning, and it turns a driver fault into a named error. Control flow names labels before they exist, so ordering cannot apply inside a function.

Rejected: