first-usable-contract

Historical record: 3.1 file and recovery milestone

Documentation home · Current file semantics

Version 3.1.0, released on 25 October 2026, implemented the first usable file and coordinated-recovery batch. This retrospective is not an active release checklist.

File and session changes

The release added basic ownership/modes/umask, nanosecond timestamps, sparse/truncate operations, ordered append, atomic rename and open-unlink behavior. It separated the replaceable CSI frontend from the FUSE mount owner, so frontend restart could retain a surviving owner's established connections. Request expiry, immutable replay identities and a replicated expiry floor bounded duplicate-result lifetime across retries and restart.

Hardlinks, symlink publication and current durable handle reclamation arrived later in 3.2.0. The current contract is Filesystem semantics, with handle lifetime covering unlink/close/expiry.

Replication and membership changes

Sparse current-state checkpoints replaced indefinitely retained full command history. Transfer gained checksummed resumable prefixes, bounded journals/spools and background rebuild. Learner replacement recorded identity, verified catch-up, promoted under current quorum and required a durable original-member serving fence. Stable aliases and authenticated successor discovery supported mounted clients. Kubernetes Leases selected lifecycle actors without substituting for storage fences.

Historical observations and limits

The original first-usable batch report records its exact runtime sources and outcomes. Its failures, single-copy storage waits and deferred work retain their original meaning. The 3.1 milestone did not establish transparency through mount-owner/host loss, production SLOs, quotas, file-backed database support or migration from the retired driver.

For current operating instructions, use replication, lifecycle and the operator runbook.