Nocter v0.32.0
Nocter v0.32.0 Release Notes
Nocter v0.32.0 completes configured synchronous subprocess execution. An owning Command can now
select a working directory, construct the child environment, and provide finite standard-input
bytes before it is consumed by status or output. The only implemented host and native target
remains arm64-darwin.
Owned Command Configuration
std/process now supports:
use std/process.Command
var command = Command.new("./helper")?
command.current_dir("./workspace")?
command.clear_env()
command.env("MODE", "configured")?
command.remove_env("UNWANTED")?
command.input("request\n".bytes())
let output = command.output()?
Configuration changes only the owned request; it does not create a child. Repeated working
directory and input settings replace earlier values. Environment edits retain untouched inherited
entries unless clear_env selects an exact environment, and the last operation for a name wins.
Invalid text is rejected without partially changing the command.
Calling input with an empty byte view supplies immediate end of file and therefore differs from
leaving standard input inherited. status still inherits standard output and standard error;
output still returns owning byte vectors and typed terminal status.
One Closed I/O Lifecycle
Arguments, environment entries, pointer vectors, working-directory text, and finite input are
owned and prepared before child creation. The child performs only descriptor setup, directory
selection, and executable replacement. A private close-on-exec launch report distinguishes input,
output, directory, and executable setup failures from ordinary child exit.
Configured stdin writes and captured stdout and stderr reads share one fair readiness loop. Each
ready direction performs one bounded nonblocking operation before readiness is polled again, so a
child cannot deadlock by filling an output pipe while waiting for input. Early child input closure
does not terminate the parent through SIGPIPE, and every successfully created child is observed
exactly once on every representable path.
Practical Integration
The subprocess-configured package example combines an exact environment, a relative executable in
a configured working directory, finite input, simultaneous output capture, UTF-8 validation, and
typed status inspection. Its exact output is part of installed-home release qualification, while
the same authored package drives formatter and editor checks.
Compatibility and Non-goals
This release preserves the existing Command.status and Command.output result shapes and the
v0.31.0 capture rules. It does not add PATH search, shell parsing, asynchronous child ownership,
incremental I/O, caller-provided descriptors, merged streams, size limits, timeouts, parent-sent
signals, process groups, terminal control, or another native target.
Candidate Qualification
Release-content commit 14951f2350f58354cce1c8beab8447a13949be78 passed two independent
locked workspace runs with 1,541 tests passed, zero failed, and one ignored in each run. The ignored
public-HTTPS acquisition test passed separately. Warnings-denied all-target Clippy,
no-default-features checking, deterministic documentation, formatter checks, and repository
validation also passed.
Two independent optimized builds produced the same archive and installed home. The retained local
archive is 8,289,509 bytes and has SHA-256
4cf4bd44ff163bc993f919fb2d652fde54492427418b3a46230d31df70e43d45. Its isolated installed home
passed version and integrity checks, every public example, package run/build/test/graph operations,
the exact text-banner, stdin-prefix, subprocess-status, subprocess-output, and
subprocess-configured process contracts, framed LSP requests, immutability checking, and compiler
and standard-library tamper rejection. Publication reuses that retained candidate without
rebuilding it.