Nocter v0.62.0 Release Notes
Nocter v0.62.0 adds structured command-line applications to the standard library. Programs can now declare their accepted flags, value options, positional arguments, and nested commands once, then use that same schema for parsing, usage, and help. The release changes no Nocter source-language syntax.
Structured Command-Line Schemas
std/cli.Application owns one validated command-line grammar. It supports long and exact short flags, single-use and repeated value options, required and optional positionals, the -- option terminator, and recursively nested commands. Duplicate names, invalid ordering, missing values, unknown options or commands, and surplus input fail through stable std.cli.* error categories.
use std/cli.Application
func arguments(): void! {
var application = Application.new("report", "Summarize one input file.")?
application.add_flag("verbose", 'v', "Show progress.")?
application.add_option("output", 'o', "PATH", "Write to PATH.")?
application.add_positional("INPUT", true, "File to read.")?
let parsed = application.parse_process()?
let input = parsed.positional("INPUT") otherwise { return }
let output = parsed.option("output")
let verbose = parsed.flag("verbose")
}
The process adapter reads the operating-system argument sequence once and skips only argument zero. The ordinary parser also accepts caller-supplied &[&str], enabling deterministic tests without process-state substitution.
Owned Results and One Grammar Authority
ParsedArguments owns accepted option and positional values. It does not retain the process argument buffer or borrow the application schema, and its queries never parse token spelling again. A selected child command owns its nested result using the same representation and parser.
Compact usage and complete help traverse the exact Application used for recognition. The CLI module has no second help declaration, generated parser table, or compiler-known metadata. It returns owned presentation text and does not print, select an exit status, inspect a terminal, or interpret application values.
Public Application Adoption
Every public example that consumes command-line arguments now uses std/cli instead of indexing raw process arguments. Filesystem, text, JSON, HTTP, archive, binary-record, asynchronous-file, and wall-clock examples retain their previous process output and exit-status contracts while exposing their accepted invocation through one schema.
std/process remains available as the low-level authority for immutable operating-system arguments and UTF-8 decoding. Applications that need structured recognition no longer need to repeat argument counts, indexes, and usage spellings.
Compatibility and Non-goals
v0.62.0 adds standard-library APIs and removes no source-language syntax. Existing packages that read std/process directly continue to compile. std/cli deliberately does not provide shell parsing, environment or configuration fallback, automatic value conversion, reflection, derive-like declarations, implicit help or version behavior, terminal styling, or completion scripts.
Release Qualification
Release-content commit 3f6f1eb3f68c96ff36453f9d0d42f349e219731d passed the complete disposable compiler gate and deterministic 337-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 9420085-byte archive has SHA-256 39d07ee1a89874c77f096eab9c1c1f5be8f79e0ef737159db86ddfe2bbb296ed. Its manifest identifies compiler SHA-256 48f065a2f6332d8ab9c5d44657fb7910f5b7bc61d57a5e6fcaede065a5689448 and standard-library tree SHA-256 3844150824e2e7fad92d88296add0e3bf0fe0c964635a0d8134f5507295b038a across 384 files. Publication must reuse this exact retained archive without rebuilding it.