Wire types and durable-format codecs for LoonFS.
Everything that crosses a process or storage boundary is defined here:
validated identifier and path types at the crate root, the versioned HTTP
protocol shapes in [v0], and the durable storage formats in [wire]
(WAL segments, metadata SSTs, namespace manifests, and control objects).
Other LoonFS crates depend on this one for vocabulary; it depends on none
of them.
One module here is deliberately not a boundary format: [options] holds
the per-operation argument structs that the embedded runtime and the HTTP
client both expose. They parameterize the same semantic operations on both
surfaces, so this crate — the shared vocabulary — owns the single
definition rather than each surface keeping its own copy to drift.
One module is a function rather than a shape: commit_identity computes
the durable fingerprint of a mutation. It lives here for the same reason
the operation language does — the engine that stamps a fingerprint on a
commit receipt and the client that recomputes one to prove a retry is the
same request must produce identical values, so there is one implementation
and no second reading of the rules.
Module rule: v0 HTTP shapes live in [v0]; the crate root keeps the
ids/paths/errors/wire-format modules and re-exports the common v0
surface as a curated explicit list below.