diff --git a/build.zig b/build.zig index 28c7786..4e05d0c 100644 --- a/build.zig +++ b/build.zig @@ -442,6 +442,7 @@ pub fn build(b: *std.Build) void { csv_library, xkeyboard_config_library, b.dependency("fat", .{}), + b.dependency("volume-manager", .{}), b.dependency("display", .{}), b.dependency("ps2-bus", .{}), b.dependency("usb-hid", .{}), diff --git a/docs/file-system-development/storage-design-rationale.md b/docs/file-system-development/storage-design-rationale.md index 380204e..a5c2f81 100644 --- a/docs/file-system-development/storage-design-rationale.md +++ b/docs/file-system-development/storage-design-rationale.md @@ -215,16 +215,16 @@ matrix-proven shape; genuinely open. broke whenever a drive changed ports or enumeration order; `UUID=` entries exist because device-path identity failed. danos skips that era: the mount map (`volumes.csv` — configuration, read by the volume manager) keys on - **content identity, never port or discovery order**. Build status: only - rung 4 (MBR signature + partition index) is implemented today; the fuller - rungs and the `volumes.csv` map itself land with the identity ladder, so - today a single volume mounts at the fixed `/volumes/usb` and its recorded - identity is not yet consulted to pick a path. The target ladder the prober - reads off the medium, strongest first: - 1. GPT partition GUID — 128-bit, unique, stable for the volume's life *(planned)*; + **content identity, never port or discovery order**. Build status: rungs 1, + 3, and 4 (GPT partition GUID, FAT serial + label, MBR signature + index) are + implemented (S1); rung 2 waits on a non-FAT engine. The `volumes.csv` map and + the id-derived mount path land with S2, so today a single volume still mounts + at the fixed `/volumes/usb` and its recorded identity is not yet consulted to + pick a path. The ladder the prober reads off the medium, strongest first: + 1. GPT partition GUID — 128-bit, unique, stable for the volume's life — **built (S1)**; 2. filesystem UUID (ext-family and most modern formats, in the superblock) *(planned)*; 3. FAT volume serial + label — 32 bits, weak (dd-cloned sticks share it) - but what real sticks carry *(planned)*; + but what real sticks carry — **built (S1)**; 4. MBR disk signature + partition index — **built**; a bare FAT with no table takes index 0 over the whole device; 5. nothing — an anonymous volume: generated mount name, no persistence *(planned)*.