D027 - Filesystem writing is blocked, and now measured rather than asserted

Filesystem writing is blocked for the same reason package writing is, and it is now measured rather than asserted.

The backlog had this as "reading is done; writing is not", which read like effort remaining. It is not - it is the reader-only-source problem again, and examples/superblock.rs puts a number on it.

Of the 0x400-byte superblock, 38 bytes are named by a cited field. Across three real packages, a further 95 bytes are non-zero and unaccounted for, in sixteen runs, identical in all three:

0x0000  0x0008..0x000c  0x001a  0x0028  0x0038..0x003a  0x0052  0x005a  0x0062
0x0068..0x006c  0x0070..0x0074  0x0078..0x007c  0x0080..0x0084
0x00b0  0x00b8..0x00d9 (33 bytes)  0x036c  0x0380..0x03a0 (32 bytes)

Two of those runs are thirty-two bytes wide and sit where a digest would. That is a shape, not a meaning, and shape is not something to build on - it is exactly the reasoning D012 gives for the package's six unknown entries.

The inode is worse in proportion: five fields cited out of 0xA8 unsigned, 0x2C8 signed.

A reader walks a filesystem by following four numbers and never looks at the rest. The container was in this exact position until an open-source writer turned up and supplied every block a reader never reads. The same is needed here, and more effort against reader-shaped sources does not close it.

The local kit was swept for one and has none. What it does have is UFS2 - a FreeBSD ufs/ffs header tree and a ufs2_object.cpp - which is a different filesystem, present because some homebrew images genuinely are UFS2. Recorded because those headers look relevant and are not, and the next person to search will find them first.

Recorded so that "reading is done; writing is not" is not mistaken for a task waiting to be picked up.