Nocter v0.16.0
Nocter v0.16.0 Release Notes
Download nocter-v0.16.0-arm64-darwin.tar.gz
Nocter v0.16.0 makes recoverable failures practical without introducing a hierarchy of error
types. Every T! still uses the single built-in error payload, while that payload now safely
owns runtime messages, supports context and classification, and cleans up deterministically.
Owned Failure Values
The built-in error is now a one-word, move-only handle to an immutable runtime node.
error.new(code, message) snapshots both input strings, so errors may safely escape the storage
that produced their text. failure.context(message) consumes an existing error and adds an outer
reporting frame without changing its root code.
Readonly code(), message(), and has_code() operations support inspection and exact
classification. Process reporting prints context from outermost to innermost, followed by the leaf
message, releases the complete node chain once, and exits with status one. Deep context chains use
iterative cleanup rather than the native call stack.
Every fallible value is move-only because its failure branch may own an error. A newly produced
fallible temporary still works with postfix ?; propagating a stored outcome uses the canonical
move outcome? form.
Closed Runtime and Standard-Library Boundaries
One compiler runtime contract owns the error handle, node kinds, field offsets, static-node
discrimination, and reporting scratch layout. Machine layout, generated destruction, and ARM64
lowering consume that schema instead of maintaining parallel numeric rules.
The standard error API remains ordinary Nocter source. Implementation primitives are private to
the source that uses them whenever possible. A closed registry validates the exact exposure of
trusted primitives without making source visibility a backend concern or exposing implementation
operations through package namespaces.
Dynamic error construction aborts if its infallible private allocation fails. Recoverable memory
allocation failure uses a prebuilt static error node, so reporting an exhausted allocator cannot
recursively allocate another error.
Editor and Source Presentation
Opening an installed standard-library contract or implementation source now analyzes that file as
part of the one selected toolchain standard package. The language server no longer registers the
same canonical standard root as a second path package, including when the editor workspace itself
contains the installed home.
Source rendering also preserves the canonical as spelling, and hover for a mutable local now
renders var rather than changing the declaration to let.
Compatibility and Scope
The source-level failure channel remains T! with the built-in error; no user-defined failure
payload, implicit conversion, interface object, vtable, or reference count is introduced. Code
that stores a fallible value may need an explicit move when propagating or consuming it. Code and
message views are tied to the borrowed error handle rather than to constructor inputs.
The only implemented host and native target remains arm64-darwin. Unsupported language and
runtime forms are rejected before machine-code emission.
Qualification
The qualified arm64-darwin archive is 7,140,438 bytes with SHA-256
516b212138f8af2d1fef8d7b6a7c3577a670608d86b02c31ed6ca48d006f37b0. It was generated twice from
release-content commit 1d656283f27fb02a61f9ff1b1593040989e54cf2; both compressed archives and
both extracted homes were identical.
A fresh extraction without environment configuration passed release identity and installation
diagnosis, package initialization, locked/offline check and native test, deterministic JSON graph,
run, explicit build, direct Mach-O execution, and framed LSP analysis of installed standard
contract and implementation sources. The installed home remained byte-identical throughout the
smoke matrix. The published release contains exactly that qualified archive.