ReviewOS

also looking at this

stacks/drone

feat: continue unresolved runtime update maintenance

#59
Merged chris wants to merge codex/runtime-maintenance-continuations into main
21 files +1097 -40
docs/adr/0031-full-host-filesystem-fixture.mdadded+40-0
Changes to docs/adr/0031-full-host-filesystem-fixture.md
@@ -0,0 +1,40 @@
1# Full host filesystem qualification
2
3Status: implementation in progress for #42. Physical deployment remains disabled.
4
5Extend the public update-coordinator storage campaign with actual Linux ENOSPC.
6Run explicitly inside a private mount namespace, verified against PID 1's mount
7namespace, with kernel mountinfo readback rejecting shared or slave propagation.
8Mount a new 16 MiB tmpfs only at an exclusively created private fixture
9directory. Read back the filesystem type, capacity, ownership and mount identity.
10No block device, existing mount or physical vehicle is involved.
11
12Keep signed repositories and the owned build outside the bounded filesystem.
13Place the actual protocol store, candidates and slots inside it. Confirm a real
14release-7 host session, prepare release 9, then publish new signed root/role
15metadata. At the public slot-selection progress boundary, fill an owned sibling
16file through real writes until ENOSPC and release only 1 MiB of its allocation.
17The larger signed image must make actual partial progress before ENOSPC. Leave
18the filesystem full until the trial process has exited, including its attempts
19to record failure. Never replace filesystem or SQLite methods with faults.
20
21Inspect retained bytes and public status after removing only the owned filler.
22Require the previous known-good image and accepted metadata/security floors to
23survive without a new health confirmation. A pending attempt and selected slot
24must undergo explicit fresh-process metadata recovery and exact-slot abandonment
25before an unrestricted fresh trial can confirm a different slot through actual
26new boot/session evidence. Preserve failed partial bytes and the older image.
27
28Copy and hash the full volume before freeing the filler or opening it for
29inspection, then archive later retained states before unmounting the volatile
30filesystem. Keep failure observations, status snapshots
31and process results. CI retains these synthetic artifacts for seven days.
32The opt-in Linux qualification must execute in CI; a skipped local test supplies
33no positive filesystem-exhaustion evidence.
34
35Linux documents tmpfs capacity limits and loss of contents on unmount in
36[tmpfs(5)](https://man7.org/linux/man-pages/man5/tmpfs.5.html). This is real logical
37filesystem exhaustion on a memory-backed filesystem. It does not qualify storage
38device exhaustion, persistent-media durability, EDQUOT, EIO, sync failures or
39electrical power loss. Those remain separate acceptance requirements. The fixture
40adds no production storage layer, privileged application command or dependency.