Source formats
All sources are TOML, read with the standard library’s tomllib. Every
text a reader sees is a table whose keys are the language codes listed in
the constitution’s index.toml and whose values are the text in that language,
so one file holds all languages of one provision side by side. Multi-line
text is a literal string ('''...'''); the build drops the newline after
the opening quotes and before the closing ones.
IDs
Every provision of the constitution (article, section, list item) and
every rule has an ID: one or more lowercase words joined by hyphens,
^[a-z0-9]+(-[a-z0-9]+)*$, for example leaks or credential-storage.
The ID is a key, like a BibTeX key, chosen by a person once and never
changed; it says what the provision is about, not where it stands.
There are two namespaces. In the constitution, article and section IDs
are unique across the whole constitution, and a list item’s ID only
within its section, so items can have short names (capital). In the
rules, a rule ID is unique among the rules, the private overlay’s rules
included. The same word may be used once in each namespace. An ID is
never reused. From the first approved revision on, a provision of the
constitution is only ever repealed, never deleted, so the sources hold
every ID used since then and the build rejects a second one. While the
constitution was a draft, revisions deleted provisions outright; the
build does not see those IDs, so they are listed here, and a draft
revision that deletes another adds it:
- revision 0.5: the article
interpretation; - revision 0.7: the article
rolesand its sectionsrelay-role,job-roleandworker-role; the itemsterms.deployment,terms.job,terms.layer,terms.projectandterms.skill; - revision 0.9: the section
third-party-personal-info; - revision 0.11: the section
asking-once; - revision 0.14: the items
terms.authoritative-interpretation,terms.edition,terms.hard-ruleandterms.undetermined; - revision 0.16: the items
must-ask.downtime,must-ask.machines,must-ask.money,must-ask.releasesandmust-ask.risk-controls; - revision 0.18: the item
must-ask.productive-resources, renamedmust-ask.means-of-production; - revision 0.24: the article
protection-scope, whose sectionsprotected-textandordinary-toolingmoved intoamendment-procedure; - revision 0.28: the section
response-priorityand its itemsresponse-priority.safety-incidents(its text is now the sectionsafety-incidents),response-priority.productivity-gainsandresponse-priority.minor-improvements; - revision 0.30: the section
checks-everywhere, replaced bydecidable-provisions; - revision 0.33: the section
rules-refine, whose text is now the itemdivision-of-instructions.rules; - revision 0.35: the section
role-definitions; - revision 0.36: the section
compliance.
The date-prefixed IDs of the earlier flat sources (20261012-...) are
retired as well. A rule may be deleted, and its ID then goes into
rules/retired-ids.txt (see Rules).
Text cites with {@...}; nothing else in the text is markup, and any
other braces are output as is. The constitution cites only itself,
without a namespace: an article or section by its ID ({@safety},
{@leaks}), a list item by its section’s ID, a dot and the item’s ID
({@must-ask.capital}), always this full path, even inside the same
section. A rule always names the namespace: {@constitution:leaks},
{@constitution:must-ask.capital}, {@rule:credential-storage}; the colon
says which body of text, the dot where in it. The build renders a
citation of the constitution as the number the provision has in that
language (see Numbering); the generated text shows numbers only, never IDs. A
long-lived record outside the sources (a case, a pull request, a report)
may cite a provision by ID or by number; a citation by number names the
edition, within which a number never changes (see Numbering). An ID
carries over from one edition to the next for every provision whose
content carries over.