Programming Language

Nocter

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

/development/reviews/v0.24.0-explicit-value-subjects.md

v0.24.0 Explicit Value Subjects Review

Status: complete (2026-08-31). This review covers the complete language, compiler, tooling, standard-library, example, and documentation migration for the v0.24.0 import and constant-name contract.

Contract and Authority Review

  • ExportedEntity::is_selectable_type is the sole semantic classification for authored selected imports. Declaration lowering and body name resolution consume it; neither carries a duplicate declaration-kind list.
  • Syntax owns only the ModuleAlias shape. Top-level lowering and block name resolution bind its identifier to the resolved module identity. Source projection therefore gives hover, navigation, references, rename, and semantic tokens the ordinary module fact instead of an editor-only alias interpretation.
  • Constant spelling is checked once while declaration names are lowered. Constant evaluation, checking, code generation, and LSP presentation consume the accepted declaration identity and do not repeat the character policy.
  • Analysis emits one compiler-owned completion plan: selected imports for types, namespace imports for values, and deterministic aliases for namespace collisions. Code actions consume that label and edit plan; the language server serializes it without rebuilding import semantics.
  • std/, examples, compiler fixtures, and generated project templates use ordinary v0.24.0 source. There is no compatibility lookup for selected values or lowercase constants.

Findings Closed During Review

  1. 1. Automatic imports initially suppressed module.member when an unrelated local member was visible. Type-name collision filtering now applies only to unqualified type candidates, and an end-to-end test preserves the qualified value candidate.
  2. The first selected-value diagnostic reused discovery code E0263. Top-level non-type selection now owns E0264, block selection owns E0349, and namespace-alias re-export owns E0265.
  3. One parser test still asserted that namespace aliases were invalid. It now tests only the still invalid empty selection; dedicated alias parsing covers top-level, block, and package-root forms.
  4. pub use module as alias became parseable without the retained semantic prohibition. Lowering now rejects it explicitly and has a focused rule test.
  5. One accepted syntax snapshot still described a selected function import and unqualified calls. The fixture and exact syntax-tree snapshot now use the namespace form.

Residue and Failure-Mode Audit

The review searched current public documentation, standard source, examples, compiler fixtures, embedded Nocter programs, diagnostics, parser snapshots, automatic imports, and generated project templates. Remaining selected lowercase names occur only in deliberate rejection tests or parser inputs whose semantic invalidity is the tested boundary. Historical release records were not rewritten as current contracts.

No remaining implementation requires a caller to distinguish value and type declarations itself, guess a namespace alias, preserve an undocumented ordering, or re-run module resolution from source text. Top-level and block imports have separate phase-local diagnostics but consume the same declaration-owned classification.

Qualification

  • locked full-workspace tests pass;
  • warnings-denied workspace Clippy passes;
  • Rust formatting and repository whitespace checks pass;
  • all standalone and package examples check offline against an isolated current Nocter home;
  • public documentation generation and packaging-manifest validation pass.

No finding with current user impact or an evident near-term failure mode remains.