D251 - The console's filesystem is a knowledge file, and a title's data layers over it
decided · 2026-08-25 · designed before there was more than one path in it
Two designs were on the table: a 1:1 tree of the console's directories, for accuracy, and a per-title overlay, for keeping one title's data in one place.
They answer different questions and both are right. The guest-visible namespace is the only part a guest can observe - it resolves paths and opens them, and every answer either matches the console or does not - so it should be 1:1. Where the host actually keeps the bytes is unobservable, so it should be whatever is cleanest, which is per-title. The mount table is already the indirection between the two, and making a mount a stack rather than a directory buys the merge for a list walk per resolve.
Layered in process, never on disk. Merging on disk would mean a copy of the base tree per title and no way to tell afterwards which file came from where; layering keeps the base derived and rebuildable, which is the test that it really is derived.
The base is a manifest, not a committed tree
"What we know a real PS5 filesystem looks like" is a set of claims about the platform, and a claim here says how it is known. A committed directory tree cannot carry that, and git does not track empty directories, so it would have to be faked with placeholder files to survive a clone.
crates/orbistoun-fs/data/filesystem.toml is therefore
shaped like the function knowledge base: a path, whether a guest may
write there, known_by, and what asked for it.
It has two entries. /app0, because six
titles read from it. /data, because the probe asked an hour
ago. Nothing else, and that is the point: a guest resolving a path
orbistoun invented gets a fabricated platform fact back, which is worse
than the failure it replaces - the failure is information. The tree
grows when something asks, and the probe is the instrument for asking
(D242 applies to directory names as much as to symbol names).
Writability comes from the manifest rather than from a constant in code, so the two cannot drift.