v0.26.0 Phase 5 Monotonic-Time Qualification Review
Outcome
Phase 5 is complete. The monotonic-time foundation passes the complete compiler workspace, standard-library native execution, editor presentation, public example, generated-documentation, and static-quality gates. No unresolved correctness or responsibility-boundary finding remains in the reviewed scope. Version identity, archive generation, installed-home qualification, and publication remain release-preparation work.
Findings Closed During Qualification
The first Darwin timeout representation modeled both timeval fields as u64. Darwin ARM64 uses an i64 seconds field followed by an i32 microseconds field and four padding bytes. The adapter now validates the accepted unsigned domain and stores the exact two eight-byte ABI slots, leaving the padding zero. Values outside one target call return an adapter error instead of crossing the syscall boundary with an invalid representation.
The public sleep policy initially imported the Darwin module and interpreted a raw errno. That made target-independent policy depend on a target module, a syscall result shape, and one numeric error convention. std/internal/time now owns a target-neutral WaitStatus and one-wait contract. The Darwin implementation alone maps its syscall result; std/time owns only rounding, monotonic remeasurement, retry, chunking, and the stable public error.
Counter-read instruction selection initially accepted a caller-supplied Boolean to distinguish the counter and its frequency even though the primitive role already carried that fact. Selection now branches only on the closed role. Syscall result validation also reuses the common direct-result contract instead of repeating its register and width checks.
The first ARM64 counter lowering emitted a bare CNTVCT_EL0 read. Architectural counter reads can otherwise be observed out of instruction order, so the backend now emits an instruction synchronization barrier immediately before every monotonic-counter observation. The integration test lowers the source-visible standard primitive through Machine and requires the ordered encoded pair, rather than testing only an isolated encoder word.
The bundled standard declaration catalog was owned by Session, while primitive fixtures and one physical-standard test carried independent copies. The test copy had already omitted two standard roles. nocter-standard-profile now owns the complete physical catalog, closed role types publish their exhaustive member sets from the same declaration that defines each enum, and production compilation and physical-standard qualification consume that one complete profile. Synthetic primitive fixtures reuse its primitive-locator subcatalog without pretending to contain the entire physical standard package. Session no longer knows physical standard paths, and adding a role cannot silently omit it from profile iteration. The move also removes Session's now-unused direct dependencies on compile-input and syntax representations.
The public-example output catalog and exact standard dependency review did not yet contain the new elapsed example and time edges. Both catalogs now name the complete authored surface and reject either missing or stale entries.
Authority and Runtime Review
nocter-runtime-contract is the sole semantic authority for the three monotonic target roles. nocter-standard-profile is the sole physical locator authority for declarations in the bundled standard package. The target program freezes exact signatures, the ARM64 selector chooses closed instructions from semantic roles, and the standard library reaches them only through declarations attached during discovery. No backend code constructs Duration, no standard code inspects instructions, and no source spelling selects a target operation.
std/time/duration.nct contains the only counter-to-duration conversion and normalized arithmetic. std/internal/os/darwin contains the only timeout ABI and raw wait syscall. std/internal/time contains the only target-result classification. The exact standard dependency graph enforces these edges. Searches found no wall-clock fallback or dynamic timekeeping call.
Native qualification verifies a non-zero bounded counter frequency, wrapping subtraction, all duration arithmetic boundaries, normalized elapsed values, zero sleep, upward target-resolution rounding, large-wait chunking, and the no-early-return rule. The LSP qualification uses the same source-backed Duration, Instant, and sleep identities for hover, navigation, implementation, and completion.
Qualification
Phase 5 passed:
cargo clippy --manifest-path development/compiler/Cargo.toml --workspace --all-targets -- -D warnings;cargo test --manifest-path development/compiler/Cargo.toml --workspace(one network-only test remains intentionally ignored);- focused ARM64 encoding, standard discovery, native time, LSP presentation, and public-example execution tests;
- an end-to-end ARM64 assertion that every monotonic-counter observation contains the required synchronization barrier;
cargo fmt --manifest-path development/compiler/Cargo.toml --all --check;- generated documentation and link validation through
node docs/build-docs.js; git diff --checkand final residue, authority, ABI, and dependency reviews.
v0.26.0 is ready for release preparation. Phase 5 does not assign a release version to the binary, build a distribution archive, mutate an installed home, or publish a release.