v0.35.0: Static Data and Practical Unicode Text
Status: published and externally audited (2026-09-05). v0.35.0 turns the v0.34.0 scalar foundation into Unicode-aware text APIs and adds the general immutable-static data contract required to represent generated lookup tables without compiler-specific Unicode behavior.
The public contract is spec/35-static-unicode-text.md. The cross-crate boundary is development/docs/unicode-text-data-design.md.
Phase 0: Contract and Data Architecture
Status: complete. Pin final Unicode 17.0.0; define immutable static declarations, static provenance, the initializer domain, target data ownership, Unicode properties, default casing, Unicode trim, String suffix mutation, tooling behavior, and non-goals. Reject generated decision trees and Unicode-specific compiler primitives as competing authorities.
Phase 1: Immutable Static Product
Status: complete. Implement syntax, contract joining, evaluation, checked readonly places, ownership restrictions, target data objects, layout, Mach-O readonly sections, diagnostics, and structural tooling for the closed static initializer domain. Prove that unreachable data is omitted and that no later phase re-evaluates initializer syntax.
Phase 2: Unicode Data Generation and Lookup
Status: complete. A development-only generator verifies a versioned input manifest and exact digests, validates the complete Unicode 17.0.0 property and casing corpus, and deterministically generates fixed-array source. std/internal/unicode owns one semantic lookup contract over that private representation. Its current visibility is module-local; Phase 3 and Phase 4 promote only functions with real cross-module consumers. Normal builds and release packaging use committed data without network access.
Phase 3: Character Properties and Borrowed Text
Status: complete. The five char property methods now project the package-internal Unicode lookup contract, while borrowed Unicode trim composes scalar iteration, those property methods, and the existing checked subview boundary. ASCII APIs remain direct and unchanged. Generated-data validation, standard-source checking, standard tests, and complete native execution qualify named boundaries, complements, multi-byte offsets, original-input provenance, and transitive noalloc.
Phase 4: Case Conversion and Owned Mutation
Status: complete. Borrowed text now provides full default lower/upper conversion through one Unicode lookup and one UTF-8 iteration path. Ordinary and recoverable variants share the same implementation; the latter preserves the selected allocator and propagates allocation failure without publishing partial output. String.pop and boundary-safe String.truncate mutate only the logical UTF-8 suffix, retain capacity, and leave the value unchanged after a rejected boundary. Native tests qualify multi-scalar mappings, Final_Sigma, case-ignorable context, scalar removal, and allocator failure. Existing compiler cleanup tests qualify destruction of unpublished partial results on propagation edges.
Phase 5: Tooling and Practical Integration
Status: complete. The public Unicode example now exercises Unicode whitespace, contextual and expanding default casing, scalar properties, and boundary-safe owned suffix mutation. The same source crosses canonical formatting, compilation, and native execution. Editor integration follows ordinary standard declaration identities from the example to the public contract and private body, and qualifies hover, signature help, member completion, navigation, references, and semantic highlighting. A temporary installed archive checks and runs the example, while its framed LSP opens both generated static tables and the casing implementation without diagnostics.
Phase 6: Stabilization and Release Preparation
Status: complete. Two independent full compiler gates and two independent optimized package builds passed. Fresh installed-home, public example, exact native process, framed LSP, generated data, tamper rejection, and deterministic archive checks passed. The final review found no open release-blocking issue. Publication and external asset evidence are frozen in the release audit.
Completion Definition
v0.35.0 is complete only when immutable static data is a reusable compiler product rather than a Unicode exception, Unicode 17.0.0 inputs and generated outputs are reproducible and singular, every public API is implemented in ordinary standard source, unreachable tables are absent from native images, and no parser, checker, backend, or editor duplicates Unicode semantics.