Skip to main content

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
0001A recording carries its own prose, not the protobuf project'sAccepted — built
0002The vocabulary is one set, and one function decides itAccepted — built
0003Cost that can be paid after recording is paid after recordingAccepted — built
0004Converters are Rust, behind one C ABIAccepted — not built
0005An export carries the schema's numbers, not a reader'sAccepted — not built
0006Reserved: the Metadata record’s own keysNot written
0007The container describes itself, and its descriptive records are protobufAccepted — not built
0008A training layout is built here, and measured before it is chosenAccepted — built, converter pending
0009The format has a write form and a read form, and the converter is the bridgeAccepted — 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.