Programming Language

Nocter

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

/development/reviews/v0.18.0-phase-0.md

v0.18.0 Phase 0 Construction Review

Result: passed (2026-08-25). This review covers the breaking removal of construction default, structural-construction independence, and nominal-hover simplification. It evaluates the completed working tree rather than the published v0.17.0 tag.

Review Criteria

The review searched for:

  • superseded syntax, semantic fields, diagnostics, presentation branches, and standard-library spellings;
  • wrappers, indexes, and public APIs retained only for the removed default-member state;
  • repeated visibility, construction-entry, or declaration-member decisions;
  • analysis or presentation code reinterpreting checking internals;
  • multiple authorities for representation opacity, structural construction, or hover shape;
  • dependencies that require one responsibility to know another responsibility's private storage.

Historical release notes and completed milestone records remain unchanged because they describe the language that was published at their tags. They are not compatibility inputs to the active parser.

Findings and Remediation

Removed default-member authority

The syntax parser, declaration model, definition lowering, graph validation, checking surface, canonical renderer, diagnostics, tests, standard library, and current documentation retained parts of the old feature. Phase 0 removed the state rather than setting it to None: there is no construction-default field, selected-default index, duplicate-default rule, E0314 projection, public-presentation surface, or construction-only contextual-word scanner.

Structural completion repeated the same decision

Structural-field completion first selected the complete construction surface and then fetched the same structural fields again. ConstructionSurfaceTable::accessible_structural_fields now owns the single complete decision. The lower-level representation_fields query remains separate because body checking must diagnose an inaccessible named field rather than collapse it into a generic invalid-construction result.

Hover reconstructed a weaker visibility rule

The first nominal-hover implementation checked public module visibility directly and could diverge from direct-source visibility used by checking. SourceAccessContext now exposes the exact checking-owned declaration-site and representation queries. Analysis receives that read-only contract from CheckedProgram; the raw SourceAccessTable and construction-surface table are not public analysis APIs. Construction selection no longer stores a second opaque-representation bit.

The semantic graph admitted an empty construct

The parser rejected an empty construct, but freeze-time graph validation still accepted an empty ConstructionDeclaration. The immutable graph now rejects that shape as an integrity failure. A dedicated graph test protects the boundary, and the duplicate-construction test now uses real construction members rather than relying on the invalid empty shape.

Hover looked up each nominal member twice

Nominal hover first checked field or variant visibility and then repeated the declaration lookup while rendering. It now retains the validated declarations for the rendering pass. This preserves the all-or-header rule without a second graph traversal.

Final Boundary Assessment

  • spec/ is the only owner of observable construction and hover behavior.
  • syntax owns recognition and the nonempty construct shape; it retains no compatibility parse.
  • declarations own construction identity and graph integrity, but no primary-entry concept.
  • checking owns derived construction indexes and exact source visibility. Its public editor contract exposes decisions, not tables.
  • analysis owns canonical text rendering and consumes only declaration identities plus the checking-owned visibility contract. It does not consume a checking construction view for type hover.
  • the language server converts ranges and protocol values; it does not select construction or representation policy.
  • standard-library source uses the same ordinary construct syntax as user packages.

No unresolved responsibility leak, duplicate authority, compatibility branch, or feature-specific wrapper was found in the completed Phase 0 scope.

Verification

The completed tree passed:

  • cargo test --workspace --quiet using an external target directory;
  • cargo clippy --workspace --all-targets -- -D warnings using the same external target;
  • cargo fmt --all --check;
  • node docs/build-docs.js;
  • active-source searches for removed semantic and diagnostic identities;
  • git diff --check.