Nocter v0.61.0 Release Notes
Nocter v0.61.0 makes routine source maintenance and local release installation explicit, reproducible, and failure-aware. It adds comment-preserving canonical formatting, one tiered compiler verification entry point, bounded local candidate retention, and a verified nocter install command. The release changes no Nocter source-language syntax.
Comment-Preserving Formatting
nocter fmt now preserves ordinary comments, item documentation, file documentation, inline and multiline comment text, and their source order while canonicalizing surrounding syntax. Formatter trivia is modeled independently from token layout. A candidate rewrite is reparsed and must retain the same token stream, comment text and kind, comment order, and syntax-owned documentation attachments before the original file can be replaced.
nocter fmt --check reports a stable E0602 diagnostic when canonical output differs. The earlier reserved E0601 code remains reserved rather than being reassigned to the completed comment support.
Verified Local Installation
An existing trusted compiler can now install a release archive already present on the local filesystem:
nocter install nocter-v0.61.0-arm64-darwin.tar.gz --sha256 <digest>
The mandatory digest is the caller's trust input. Nocter reads one bounded byte snapshot, checks its SHA-256, safely extracts those same bytes, requires the exact .nocter/ archive root, and validates the candidate manifest, compiler, complete standard-library tree, legal files, host, and native target before publication. The command does not fetch a URL, choose a latest release, or claim that an untrusted checksum authenticates a publisher.
Without --home, the command replaces only the active validated Nocter home. --home may create an absent sibling destination but cannot overwrite an unrelated existing directory. Fresh publication and active replacement use a private same-parent transaction. Reported replacement failure restores the old home when possible, marked interrupted state is validated before recovery, and unmarked reserved paths are never removed automatically.
Reliable Repository Operation
One verification script now owns both fast change feedback and the complete compiler gate. Pull requests and pushes to main use the fast tier on the supported host; scheduled and manual runs exercise the complete native, CLI, LSP, feature, and documentation surface. Both tiers build in a disposable target directory so successful verification does not permanently grow the repository.
Release qualification likewise uses disposable build output. It keeps only the current qualified local candidate; immutable historical artifacts remain owned by GitHub Releases and their audited release records.
Shared Archive Safety
Package acquisition and release installation now use one bounded physical .tar.gz extraction authority. It rejects absolute and parent paths, links, special entries, duplicate normalized paths, nonportable components, excessive depth, excessive entries, and excessive compressed or expanded content. Package policy and release-home policy remain separate consumers rather than duplicating archive interpretation.
Compatibility and Non-goals
v0.61.0 changes no source syntax and removes no standard-library API. Existing source packages do not require migration. Remote toolchain acquisition, automatic latest-version selection, publisher signatures, multiple installed-version selection, and silent background updates remain outside this release.
Initial bootstrap still uses ordinary archive extraction because no trusted Nocter compiler exists yet. The SHA-256 supplied to nocter install proves exact content identity only after the user trusts the channel that supplied that digest.
Release Qualification
Release-content commit ff0a20e72315ac4eb6e7044829a0c17438fa7c7c passed the complete disposable compiler gate and deterministic 334-page documentation generation. Two independent package builds produced byte-identical archives and recursively identical installed homes. Fresh installation, active-home replacement, every public example, interactive LSP checks, installed-home immutability, and compiler and standard-library tamper rejection all passed.
The retained 9413121-byte archive has SHA-256 b386a42dff56b9523db4861cf6129e42597ed27597958b0b92481c6eec9a6722. Its manifest identifies compiler SHA-256 48f065a2f6332d8ab9c5d44657fb7910f5b7bc61d57a5e6fcaede065a5689448 and standard-library tree SHA-256 cd67a7d0822210db5f5889a9c54e8c1795e599da8c55ec06382e797083fcbade across 375 files. Publication must reuse this exact retained archive without rebuilding it.