Project Manifest v18: Process I/O
September 10, 2026 ยท View on GitHub
Status: implemented private manifest/profile; HOSTED GREEN under the v0.4.0 release baseline. Broader physical-provider platform support remains separately scoped.
Audience: compiler, project-tooling, and standard-library contributors.
Project v18 selects the private process-io.v1 profile. It gives one authored
command entry a checked, bounded process provider while preserving the frozen
older Project manifest schemas and their authority. This document specifies
the manifest admission boundary; the process operation and provider contract
remain owned by Bounded Process I/O v1.
Manifest
The frozen Project v18 projection has the following ordered assignments:
schema = "semaprax.project.v18"
name = "process-fixture"
version = "1.0.0"
profile = "process-io.v1"
entry = "process.app"
sources = ["src/app.spx", "src/tests.spx"]
web_exports = []
command = "process.run"
capabilities = ["process.execute"]
tests = ["process.tests"]
version is canonical SemVer text. The manifest requires 2..=16 explicit,
strictly ordered relative .spx source paths. web_exports is always empty:
this profile admits private command execution and does not construct a public
ABI or Web artifact. The command identifies an authored fn() -> bool entry;
it has no command input table or public export signature.
The profile's capability inventory is the six sorted names
process.args.read, process.environment.read, process.execute,
process.stderr.write, process.stdin.read, and process.stdout.write.
capabilities may select any nonempty sorted subset of that inventory, but it
must include process.execute; unrelated effects and unsorted lists are
rejected. The command may import std.process and std.io for checked
internal composition. Those imports do not create public ABI authority.
Schema/profile mismatches, nonempty Web exports, an input declaration, missing
process.execute, capabilities outside the six-name inventory, and malformed
source or command fields fail closed before publication. Project v17 and all
older schemas retain their existing parsing, canonical bytes, profiles, and
authority.
Admission and non-claims
The manifest is authenticated as one Project snapshot. Linking and command preparation retain ordinary source, dependency, effect, ownership, cleanup, and provider checks. The empty export list keeps this route private; it is not a public process API and does not establish production support.
The package gate covers example, conformance, and bundled-consumer commands
on the interpreter, native C11 -O0/-O2, and Core Wasm. The historical local
witness also included five physical Darwin provider cases; those observations
retain their original host scope. The implemented manifest, process and replay
corpus has hosted-green release evidence. Broader public/process functionality
and additional physical-host claims remain separate from that accepted baseline;
a backend fixture does not establish an unselected physical-provider scenario.
Owning implementation
src/project/manifest.rs owns the frozen v18 line shape and canonical render;
src/project/manifest/tables.rs owns lowering from semaprax.manifest.v1;
src/project/profile.rs owns ProcessIoV1, its six capability names, and
subset validation. Process operation and physical-provider ownership are
specified in Bounded Process I/O v1.