v0.32.0 Phase 2 Review
Result: complete with no open finding. The configured command now reaches one child setup path and one parent I/O session. This review covers the authority replacement; exhaustive behavior and failure injection remain Phase 3 qualification.
Replaced Authorities
- The two-descriptor capture poll, capture session, and capture child-setup sources were removed.
- One three-descriptor poll transition now classifies writable stdin and readable stdout/stderr. Direction-specific validation rejects event bits that are valid for another descriptor role.
- One
CommandIoSessionowns optional input state, optional capture state, every pipe endpoint, transfer offsets, capture buffers, scratch storage, liveness, and cleanup. statusandoutputshare the same prepare, fork, launch-report, I/O, wait, and failure-selection path. Their only remaining distinction is whether capture channels are requested and which typed output variant is accepted.
Target and Policy Boundaries
- Raw Darwin code reports closed poll, read, write, descriptor-install, directory, exec, and wait facts. It does not construct public process errors.
- Child setup reports input installation, output installation, directory change, and executable replacement as distinct stages. Ordinary exit status remains outside the report protocol.
- Parent orchestration waits exactly once before selecting launch, capture, or input failures.
- A descriptor-local
F_SETNOSIGPIPEsetting converts early child stdin closure to typedEPIPE; no process-wide signal state is changed.
Single Environment Authority
The old compiler ProcessEnvironmentVector primitive existed only so the previous command path could pass inherited envp directly to exec. The prepared environment now owns every exec vector, so the primitive, its standard profile binding, machine-context dependency, ARM64 selection and emission, and test fixture surface were deleted together. The compiler still retains counted process-entry storage for public argument and environment queries; it can no longer bypass the prepared command environment.
Evidence
- Existing native
Command.statusandCommand.outputexamples run through the unified path. - New target tests observe simultaneous writer/read readiness and prove descriptor-local broken pipe classification without terminating the test process.
- All 34
nocterlibrary tests pass through authored and installed standard-library copies. - Focused machine, ARM64, runtime-contract, standard-profile, target-program, and discovery suites pass after primitive deletion; discovery reports no unreferenced private implementation helper.
- Complete lifecycle combinations and failure precedence are deliberately owned by Phase 3 rather than inferred from these structural checks.