DECISION: wire format questions blocking the 1.0 format freeze #81
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Owner decisions required. These six questions are currently inlined in the
README's 1.0 roadmap with empty
> _answer:_slots. Moving them here soanswers land in one place.
Every one of these changes the on-disk format. After 1.0 they are frozen,
because
.mffiles written by 1.0 must stay readable forever. Answer themnow or accept them as-is permanently.
1. Simplify
MFFileChecksum? It is a message wrapping a singlebytes multiHashfield. Multihash already self-describes its algorithm, sorepeated bytes hashesdirectly onMFFilePathwould be simpler and cutper-file protobuf overhead. Is the extra message layer intentional — e.g.
reserved for per-hash metadata like
verified_at?2. Store Unix file mode? The format stores mtime/ctime but not
permissions. Irrelevant for pure archival, a real gap for software
distribution and filesystem restore.
3. Remove
atime? Access time is volatile, frequently disabled(
noatime), and non-deterministic — two manifests of an unchanged directorywill differ, which directly conflicts with the determinism goal.
4. What are the path normalization rules?
string pathhas nospecification: forward-slash always? relative always?
..forbidden? UTF-8NFC vs NFD (macOS writes NFD, Linux NFC — the same filename produces
different bytes)? Maximum length? This is both a security question (#61) and
a cross-platform correctness question.
5. Add a version byte after the magic? Currently
ZNAVSRFGis followedimmediately by protobuf. A version byte (
ZNAVSRFG\x01) would allow futureframing changes without parsing protobuf first.
MFFileOuter.Versionexistsbut requires successful deserialization to read.
6. Add a length prefix after the magic? Protobuf is not
self-delimiting, so the current framing cannot support concatenating
manifests or appending data.
Definition of done
"no change" recorded in
docs/FORMAT.md.that resulted in no change — a spec that is silent on normalization is a
spec that will be implemented inconsistently by the planned JavaScript
library.
Please answer and reassign to
clawbot.