Project Manifest v19: Filesystem I/O v3

September 13, 2026 ยท View on GitHub

Status: implemented with local conformance. Project v19 admits the private filesystem-io.v3 profile and its checked atomic-write route.

Audience: compiler, project-tooling, and standard-library contributors.

Project v19 selects the private filesystem-io.v3 profile. It adds checked atomic publication while preserving the frozen Project v18 and filesystem I/O v2 authority and wire contracts. The operation and provider semantics are owned by Host Operation Outcome v1.

Manifest

The standard-library package uses this canonical v19 projection:

schema = "semaprax.manifest.v1"

[package]
name = "std-fs"
version = "0.1.0"
profile = "filesystem-io.v3"

[modules]
entry = "std.fs.examples"
sources = ["src/examples.spx", "src/fs.spx", "src/tests.spx"]
tests = ["std.fs.tests"]

[exports]
web = []

[command]
function = "std.fs.examples.roundtrip"

[capabilities]
required = ["fs.read", "fs.write"]

[dependencies]
std.io = "^0.1.0"
std.path.value = "^0.1.0"

The profile requires a private fn() -> bool command, explicit filesystem capabilities, and no public Web exports. filesystem-io.v3 is additive: the legacy filesystem-io.v2 profile and its file_write_atomic behavior remain unchanged. The v3 project schema is Project v19 and its semantic graph projection is V46.

Checked operation boundary

file_write_atomic_checked is admitted under FilesystemV3 and returns a checked publication value. Native callbacks and status are separate outputs; invalid or unwritten outcome values fail with status 5, while valid 0, 1, and 2 values are returned. The standard-library std.fs.write_atomic_checked wrapper maps those values to the fieldless WriteOutcome variants.

Wasm appends the import env.spx_filesystem_write_atomic_checked_v3 with seven i32 parameters, an i32 status result, and an out u64 value. The v3 status export is __spx_filesystem_status_v3; the v2 status export remains unchanged.

The physical provider reports 1 for pre-commit failure, 2 only for rename EIO where publication is uncertain, and 0 for known rename success, including cleanup failure after that success. These outcomes make no filesystem durability claim. The authoritative rename contract is the POSIX rename() specification.

Non-claims and acceptance

This document does not claim hosted-green or public filesystem-provider support. The local project harness filesystem_v3 gate executes the interpreter, native, and Wasm routes, the three valid outcomes, invalid and unwritten callback values, and nested path refusal. Provider and legacy filesystem regressions retain their separate owning gates. Network operations, durable job composition, and public Web exports remain outside this profile.