v0.23.0 Phase 3 Qualification and Full Review
Status: complete (2026-08-31). Phases 0 through 3 are qualified. Release preparation and publication are outside this review.
Behavioral Qualification
The native std/num target executes eight ordinary standard tests. They cover every integer surface, exact signed and unsigned grammar, all destination extrema, the adjacent rejected values, canonical text, parse/format round trips, and successful explicit allocation. A separate source overlay supplies a deliberately failing allocator through the std/mem contract and proves that try_to_string returns the allocator failure instead of aborting or reporting success.
Every runnable example checks against an isolated current compiler home. The four applications migrated to receiver-owned integer formatting also build and run natively. Dedicated language server requests verify constructor and member completion, normalized hover text, and definition navigation to std/num/index.nct for representative signed and unsigned types.
Responsibility Review
std/num/index.nctis the sole public integer-text contract. No type-named free-function alias remains in standard source, compiler fixtures, or examples.std/num/decimal.nctowns the only signed and unsigned lexical scans. Narrow destinations perform range checks but do not rescan or reproduce decimal grammar.- Private primitive roles have exact source and result types. The runtime contract, selected standard declaration, semantic primitive contract, and arm64 lowering agree; no generic unchecked narrowing operation exists.
std/fmtremains the sole decimal digit generator.std/num/text.nctowns only allocation policy and destination construction, and depends on public formatter append contracts.std/fmtdoes not depend onstd/num.- Native tests consume discovered standard contracts and compiled test cases. Editor tests query the same semantic standard declarations; neither reconstructs an API from source spelling.
Residue and Contract Audit
The full review searched for old declarations, duplicate scans, copied digit generation, dependency reversal, unchecked conversion exposure, and caller-discipline assumptions. It found and removed three concrete residues during qualification:
- 1. an older completion test still required
i32to have an empty construction surface; - the allocator-failure test initially rewrote an import by exact source text;
- integer hover assertions had been added to a generic method-normalization test until that test mixed unrelated editor responsibilities.
The first now checks the real i32.parse semantic result. The second now adds an independent virtual test source through an explicit see edge, so it does not depend on the spelling or formatting of num/tests.nct. The third moved integer queries into their dedicated end-to-end test instead of suppressing the workspace line-count rule. No remaining finding has current user impact or an evident near-term failure mode. Mechanical per-type allocation adapters remain intentional: they publish distinct static method contracts while delegating all spelling decisions to std/fmt.
Repository Gates
Qualification includes locked workspace tests, warnings-denied Clippy, formatter verification, generated documentation, package-manifest validation, whitespace integrity, isolated-home example checks, and representative native example execution. The working tree specifies a qualified v0.23.0 candidate; v0.22.0 remains the latest published release.