Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/development/reviews/v0.34.0-phase-5.md

v0.34.0 Phase 5 Qualification and Final Review

Result: passed after corrective requalification (2026-09-04). The first candidate was invalidated after this review found source-generation, Unicode, and verification-cache authority defects. Release-content commit b876301201105e061000e2d48c8d18246d11814d removes those defects and passed the complete gate. No tag, push, upload, or public latest-release change is authorized.

End-to-End Responsibility Review

The final review followed a scalar through every participating responsibility:

  • syntax alone recognizes and decodes character spelling, escapes, scalar bounds, surrogate rejection, and exact source diagnostics;
  • declaration lowering and body checking consume the syntax decoder and publish the one ConstantValue::Character(u32) semantic value rather than interpreting quote text themselves;
  • BuiltinType::Char owns semantic type identity, while the closed runtime contract maps it once to the distinct RuntimePrimitive::Char representation;
  • checked ownership treats char as an ordinary copy scalar, and MIR transports the checked character constant without deciding validity or representation again;
  • MachineLayoutStore alone fixes the 32-bit unsigned machine layout; generic layout and calling convention consumers use that frozen result, while ARM64 selection only transports its one register word;
  • std/internal/utf8 alone owns UTF-8 scalar decode and encode algorithms. Validation and borrowed iteration share the decoder; JSON and String mutation share the encoder;
  • analysis renders checked scalar constants and consumes checked literal types. Source tooling preserves syntax tokens, and LSP only projects compiler-owned categories and byte ranges into protocol coordinates.

No later layer parses literal source, repeats Unicode validity, rebuilds scalar type identity, computes a competing layout, classifies ABI from syntax, or supplies an editor-only UTF-8 table. Each consumer depends on the preceding responsibility's exported value rather than its storage or implementation details.

The corrective review additionally followed every source byte from filesystem observation to the incremental query graph. SourceOverlay now freezes the first disk observation for one generation; package probing and discovery consume that observation; SourceFile supplies exact normalized text to the syntax query; declaration projection supplies the source-neutral fingerprint used by module queries. No query reopens a source path, and a body-only edit does not invalidate a module's declaration surface.

Adversarial Review

Repository-wide searches and direct inspection found no legacy byte-as-character fallback, integer alias for char, editor quote parser, duplicate UTF-8 leading-byte classifier, backend scalar validator, tuple/aggregate surrogate representation, or presentation string used as identity. Character constant rendering is deliberately separate from lexical decoding: it is a canonical presentation of an already valid semantic value and cannot admit source syntax.

The first warnings-denied qualification attempt found equal ARM64 register-contract match arms for character conversion and integer truncation. The release-content commit merges these roles into the existing one-register transport category instead of retaining a scalar-specific wrapper. The target program still owns each primitive's semantic signature; the ARM64 layer only validates the selected machine transport. Both independent final Clippy runs pass after that correction.

The installed standard package contains 153 source files, including the scalar declaration, shared UTF-8 implementation, iterator, String integration, and their tests. A copied isolated home compiled and executed Unicode iteration before packaging; fresh packaged-home qualification then repeated all public examples and framed editor analysis. There is no development-tree fallback that can conceal an omitted packaged source.

Performance Evidence

Measurements used separately extracted v0.33.0 and v0.34.0 release archives on the same arm64-darwin machine. They record observed medians and impose no stable timing contract.

Scenariov0.33.0 medianv0.34.0 medianChange
Seven alternating process-cold checks of examples/hello.nct0.83 s0.84 s+1.2%
Five samples of 100 sequential full-document edits plus checked hover23,294.533 ms23,352.154 ms+0.25%

The ordinary compiler and editor paths show no material regression. Since v0.33.0 has no Unicode scalar iteration, the new native path establishes its own baseline: a six-scalar string containing one-, two-, three-, and four-byte encodings was traversed one million times. Seven successful processes had a 0.49 s median wall time and 0.43 s median user time.

Qualification

Release-content commit b876301201105e061000e2d48c8d18246d11814d passed:

  • two independent cargo test --locked --workspace --all-targets runs in distinct external Cargo targets, with every enabled test passing;
  • warnings-denied all-target Clippy in both targets;
  • the ignored public-HTTPS Git acquisition test explicitly, without an external Git executable;
  • cargo check --locked --workspace --no-default-features;
  • formatter, repository whitespace, shell syntax, JavaScript syntax, and deterministic 480-page documentation generation;
  • two independent optimized package builds with byte-identical archives and recursively identical installed homes;
  • version, doctor, help, initialization, locked/offline check and test, every public single-file and package example, deterministic graph, exact process contracts, native run/build/direct execution, and framed LSP analysis from a fresh extraction;
  • installed-home immutability and rejection of independently tampered compiler and standard library copies.

The retained local candidate is:

  • archive: dist/nocter-v0.34.0-arm64-darwin.tar.gz;
  • size: 8,339,944 bytes;
  • archive SHA-256: db0751b6e869a9d1dfb911a93b299d122b6cdb73ca9eb6d3cf6e97efcd7507f9;
  • compiler SHA-256: 4c45f0aa57bb1824babe77e284cc370759c45b1a277680c50bd976abf5822ab1;
  • standard-library tree SHA-256: 29955cd25f368e3d7bec3b92608994a1c246ad49e3914dcf7e46b77ffe861389;
  • standard-library regular files: 153.

The candidate is ready for a separately authorized publication operation.