Order the records the way the system is learned
Jochen asked whether the order made sense. It did not -- it followed when things happened to be decided, which after consolidation is fictional anyway since record 5 alone folds decisions taken across a week. Concretely wrong before: the domain statement sat at 8, after five engineering rules; the constitution was scattered across 5, 12 and 17; the tiers landed at 15, 16, 21 and 22 with process records in between. Now it walks: what the mesh is (1-3), its tiers from the bottom up (4-8), what runs on them and how it gets there (9-10), how it is built (11-16), how it is checked (17-18), how we work (19-23). Two things made this safe rather than free. It is a permutation, not a compaction, so the renames go through temporary names -- otherwise two files want one slot and one is lost. And the reference rewrite is a single simultaneous pass, because almost every number moved into a slot another number was vacating; replacing one at a time would have cascaded and pointed things at the wrong record while still resolving. Verified: 284 [ADR NNNN](path) links across the repository, all with matching text and target. The ordering principle is now stated in 19 rather than left implicit -- the repository already said "the numbering is the flow" about its folders, and there was no reason for the records to be the exception.
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
---
|
||||
status: accepted
|
||||
date: 2026-08-26
|
||||
deciders: jochen
|
||||
reconstructed: false
|
||||
---
|
||||
|
||||
# 22. The constitution absorbs what is already enforced
|
||||
|
||||
## Context
|
||||
|
||||
[ADR 0021](0021-hq-is-the-source-of-the-constitution.md) makes this repository the source
|
||||
and the knowledge base a derived copy, and playbook
|
||||
[05](../00-META/process/05-constitution-sync.md) publishes the copy whenever a rule changes.
|
||||
|
||||
Three rules were accepted on 2026-08-25 and the sync came due. Reading the target before
|
||||
overwriting it — as [§2](../00-META/how-we-build.md) requires — found the two documents had
|
||||
diverged in a way nobody had recorded, and that a literal republish would have **deleted rules
|
||||
the mesh currently enforces**.
|
||||
|
||||
| | source (`how-we-build.md`) | enforced page |
|
||||
|---|---|---|
|
||||
| §4 | naming and boundaries | **code quality** — structure, layering, types, restraint |
|
||||
| §5 | four evidence rules | one runtime-evidence rule |
|
||||
| §6 | review by a non-proposer | a design meeting with **two node operators** |
|
||||
|
||||
The enforced page was last written 2026-07-10, is agent-authored, and its code-quality section
|
||||
appears in no decision record anywhere. It has been checked against for six weeks regardless.
|
||||
|
||||
Two facts made this urgent rather than tidy:
|
||||
|
||||
**Removal is not the safe option.** The orchestrator reads *"when absent, no constitution is
|
||||
injected (backward-compatible)"* — so deleting the page would not fail, it would silently
|
||||
inject nothing, and every design meeting would run unchecked with no error anywhere. Three
|
||||
unenforced rules would become all of them.
|
||||
|
||||
**The stricter review bar has never been met.** The enforced page requires two node operators,
|
||||
neither the proposer. There is one operator. Every amendment ever made violated it.
|
||||
|
||||
## Considered options
|
||||
|
||||
1. **Republish wholesale.** What the playbook literally says. Rejected — it deletes the
|
||||
code-quality rules, which exist nowhere else.
|
||||
2. **Merge surgically** — update §2, §3, §5 in the copy and leave §4 alone. Nothing is lost and
|
||||
it is quick, but the source becomes authoritative for some sections and the copy for others,
|
||||
which is the drift being fixed.
|
||||
3. **Absorb, then republish.** Chosen.
|
||||
|
||||
## Decision
|
||||
|
||||
**What the mesh enforces and cannot cite is written down here first, then republished.**
|
||||
|
||||
The code-quality rules become §8 rather than §4, because appending renumbers nothing and every
|
||||
existing citation stays valid.
|
||||
|
||||
**They are recorded as inherited, and marked as such.** Every other rule in the document states
|
||||
the incident or measurement that earned it. These state nothing, because nothing was ever
|
||||
written down. Importing them silently would have made the document claim a provenance it does
|
||||
not have, and this repository's whole argument is that the reasoning is the expensive half.
|
||||
|
||||
**The review bar is resolved in favour of what is achievable.** A rule requiring two operators
|
||||
where there is one is not a high standard, it is a rule everything silently violates — the same
|
||||
shape as a firewall key declared in five manifests and read by no code
|
||||
([04-ISSUES/003](../04-ISSUES/003-firewall-scope-is-read-by-no-code/00-report.md)). Review means
|
||||
a person who is not the proposer, which is both achievable and what has been practised.
|
||||
|
||||
## Consequences
|
||||
|
||||
- **The copy can now be a faithful projection**, which is what makes "the source is the source"
|
||||
true rather than aspirational.
|
||||
- **§8 has no reasoning behind it and says so.** Anyone may propose replacing an inherited rule
|
||||
with an earned one; until then the marking is the honest state. It is also a standing
|
||||
invitation to delete any of them that turn out to serve nothing.
|
||||
- **Six weeks of drift went unnoticed** because nothing compares the two. The sync is manual and
|
||||
runs only when someone remembers a rule changed. **Nothing detects divergence**, and this
|
||||
record does not fix that — it is worth an issue.
|
||||
- **The operator's instinct to remove the copy was right about the direction and wrong about the
|
||||
method.** The end state where the mesh reads this repository directly — rendered and operable
|
||||
through the board — removes the second copy rather than blanking it. That is not designed and
|
||||
is not decided here.
|
||||
- **Section numbering is now append-only in practice.** §8 sits after the overrides section
|
||||
purely because renumbering would break citations, which is a cost of the copy existing at all.
|
||||
|
||||
## Sync
|
||||
|
||||
Run 2026-08-26, and the read-back earned its place in the playbook.
|
||||
|
||||
**The first publish reported success and changed nothing.** It created a new revision and
|
||||
updated the title, and the body did not apply — a malformed argument was dropped silently. Had
|
||||
the sync been marked done on the strength of the tool saying *"updated; new revision created"*,
|
||||
three accepted rules would have gone unenforced while every record said otherwise, and nothing
|
||||
would ever have contradicted it.
|
||||
|
||||
That is §5 demonstrating itself during its own publication: a green result proves transport,
|
||||
not effect. The republish was verified by reading the rule back out of the live page, not by
|
||||
trusting the second success message either.
|
||||
|
||||
## References
|
||||
|
||||
- [ADR 0021](0021-hq-is-the-source-of-the-constitution.md) — source and copy.
|
||||
- [ADR 0020](0020-the-mesh-is-governed-by-a-constitution.md) — why the copy is injected at all.
|
||||
- [Playbook 05](../00-META/process/05-constitution-sync.md) — the sync this record interrupts.
|
||||
- [ADR 0017](0017-a-test-defends-a-decision.md), [ADR 0018](0018-a-picture-is-read-from-what-runs.md),
|
||||
[ADR 0012](0012-the-mesh-creates-no-symlinks.md) — the three rules whose sync surfaced this.
|
||||
Reference in New Issue
Block a user