v0.35.0 Phase 6 Qualification and Final Review
Result: complete with no open release-blocking finding (2026-09-05). Release-content commit 97147821a0b8ae78f525768bf705074e75fd0254 passed the complete qualification contract. No tag, push, upload, or public latest-release change is authorized by this review.
End-to-End Responsibility Review
The final review followed one immutable static from source to native bytes:
- syntax recognizes
staticand preserves its initializer tree without assigning a value; - declaration lowering validates the closed initializer contract and creates one static identity;
- constant evaluation evaluates that initializer once and publishes one typed frozen value;
- checking exposes a readonly place with static provenance and rejects mutation, movement, destruction, mutable borrowing, and allocation-context use;
ExecutableProgramcomputes the reachable static closure once and assigns dense executable identities only to retained values;- MIR transports those executable identities without reopening declarations or initializer syntax;
MachineLayoutStoreowns concrete size and alignment, while the machine data plan owns bytes and relocations derived from the already evaluated value;- ARM64 transports addresses selected by the machine program, and Mach-O places the supplied data in readonly mapped storage without knowing Nocter static syntax.
No later layer re-evaluates an initializer, repeats reachability, or infers layout from source. The test with distinct LIVE and DEAD arrays proves that the executable closure retains only LIVE. MIR and machine construction consume exactly that closed arena, so the omitted identity has no path into the native image.
The Unicode path has the same authority shape. The versioned input manifest owns the selected Unicode release and input digests. The development-only generator parses and validates those inputs, and committed std/internal/unicode/tables.nct is the sole normal-build table source. Ordinary standard-library lookup, char properties, borrowed trimming, casing, and String suffix mutation consume those tables through source contracts. The compiler contains no Unicode property or casing table and packaging performs no network fetch.
Boundary and Adversarial Review
Repository-wide searches and direct inspection found no alternate static evaluator, Unicode property table, casing decision tree, UTF-8 mutation shortcut, legacy mutable-static path, or presentation string used as semantic identity. Static data uses the existing typed-ID arenas and the existing target and machine validation boundaries rather than parallel lookup maps. Every one of the 47 compiler crates documents its owned responsibility and forbidden knowledge in its local README.
The review also checked the failure-oriented boundaries introduced by the release:
- invalid static forms stop before executable construction;
- equal-valued statics retain distinct addressable identities;
- unreachable functions cannot retain otherwise dead statics;
- readonly data relocations must target machine-owned data identities;
- Unicode trimming returns only scalar-aligned views into the original input;
String.truncaterejects a split UTF-8 encoding before changing length;- recoverable casing preserves allocator provenance and does not publish partial output;
- generated tables reproduce exactly from the pinned local inputs;
- standard-library and compiler content are both covered by the installed manifest digest.
No active compiler or standard source contains a TODO, FIXME, HACK, todo!, or unimplemented! escape hatch. Historical rejection tests that name a legacy spelling prove its removal; they do not retain a compatibility implementation.
Qualification
The exact release-content commit passed:
- two independent
development/verification/verify-compiler.shruns, each using a fresh external Cargo target; - warnings-denied all-target Clippy, all enabled locked workspace tests, no-default-features checking, and warnings-denied Rust documentation in both runs;
- Unicode manifest mutation testing and exact Unicode 17.0.0 table reproduction;
- the ignored public-HTTPS Git acquisition test explicitly, without an external Git executable;
- two independent optimized package builds with byte-identical archives and recursively identical installed homes;
- safe archive layout, ARM64 Mach-O identity, version, doctor, help, initialization, locked/offline check and test, every public example, deterministic graph output, exact native process contracts, direct execution, and framed LSP analysis from a fresh extraction;
- installed-home immutability and rejection of independently tampered compiler and standard library copies;
- deterministic generated documentation, repository metadata, formatting, and whitespace checks.
The retained local candidate is:
- archive:
dist/nocter-v0.35.0-arm64-darwin.tar.gz; - size: 8,484,621 bytes;
- archive SHA-256:
62b30603177fc05ed9e2e50d6051ec59eeae5fbf634c05cea9467661f3dd820e; - compiler SHA-256:
9883a98e26ddf4ce2b92bd748107eb73823ba9109cbd3682e76c3d4c2de6fa9c; - standard-library tree SHA-256:
0e89cdd1a706f5ef583c297a52e3c8f572ba75adfd11523735459e67ad905052; - standard-library regular files: 162.
The candidate is ready for a separately authorized publication operation. Publication must reuse this retained archive without rebuilding it.