Decisions
Numbered records for choices about this format and this implementation — the ones CA3 answers alone.
A decision answerable inside CA3 belongs here. One that decides a boundary between this format and something outside it is not answerable here, because only one side of it is in this checkout.
The records
| Status | ||
|---|---|---|
| 0001 | A recording carries its own prose, not the protobuf project's | Accepted — built |
| 0002 | The vocabulary is one set, and one function decides it | Accepted — built |
| 0003 | Cost that can be paid after recording is paid after recording | Accepted — built |
| 0004 | Converters are Rust, behind one C ABI | Accepted — not built |
| 0005 | An export carries the schema's numbers, not a reader's | Accepted — not built |
| 0006 | Reserved: the Metadata record’s own keys | Not written |
| 0007 | The container describes itself, and its descriptive records are protobuf | Accepted — not built |
| 0008 | A training layout is built here, and measured before it is chosen | Accepted — built, converter pending |
| 0009 | The format has a write form and a read form, and the converter is the bridge | Accepted — both forms built, neither declared |
How these are written
"Accepted" means decided, not built. Each record states its implementation status separately, and states the command that re-derives every checkable claim in it. A number nobody can re-derive rots silently; a number beside its command cannot.
A new decision gets a new record; a correction is an edit in place. When a choice genuinely changes, write a new record and mark the old one superseded. When a sentence is simply wrong, fix it where it is wrong. Version control is the history.
Every record names what it rejected. A decision without alternatives is a description. The rejected option and the reason for rejecting it are what a reader needs to reopen the question honestly later.
Every record states what would change it. A choice with no reversal condition is either permanent — which should be said outright — or it is a choice nobody is watching.
Every measurement reports the rows where nothing changed. A table of only the favourable cases cannot be told apart from a table that never looked.
Not every change needs a record. One is worth writing when the choice turns on a measurement, when the alternative was reasonable and was rejected anyway, or when somebody arriving later would be right to ask "why is it done this way" and find no answer in the code.
Authority
spec/container.md is the contract. Where a record disagrees with it, the
specification wins and the record is wrong — a record explains a decision, it
does not make one binding.
A record here that has drifted into deciding a boundary with something outside this repository has overreached, and the fix is to move it rather than to weigh it against whatever the other side decided.
0006 is reserved rather than free. 0005 names it as the record it "cannot
be built without" — where a user-set column name, a description, a node
description and a stated element type each live in Metadata, and how a
rewrite composes with §11.3’s attestation. Taking the number for something
else would leave 0005 pointing at the wrong record.