→ changed a policy in one place and found the old one still in force in three others
- cost when it happens
- high
- how often
- common
The policy was updated in March. The four files generated from it still carry the February
version, because regenerating them was a step somebody had to remember, and nothing said
they were stale.
Generation without a staleness check is a one-shot copy. The moment the source changes, the
copies become claims about a past state, and they look exactly like claims about the current
one. Nothing in the file says which generation produced it or from what.
The worker reads the file it is given and applies it faithfully. It has no way to know the
file is a stale projection of something else, because staleness is a property of the pair,
and the worker only ever sees one half.
Workers follow a superseded policy, and the failure surfaces as behaviour nobody asked for,
weeks after the change that caused it. Tracing it back means discovering that the source of
truth was never the source anything read.
Every generated projection is stamped with the hash of the policy it came from and the hash
of its own content. doctor and watch compare both: a source that moved on, or a file
that was edited by hand, is a named failing check. update regenerates deterministically
and refuses to overwrite a hand edit until the diff has been seen. The same discipline
covers every derived artifact the repository commits, and CI refuses a tree in which any of
them differs from what its source produces.
before policy.yaml (March) CLAUDE.md, AGENTS.md, ... (February)
after $ majordomus doctor
FAIL projection CLAUDE.md — generated from policy 3b0d79b4, current is 9f21c0aa
[reproduce: majordomus update --diff CLAUDE.md]
It does not decide whether the change should propagate; regeneration is explicit and its
diff is reviewable. It stamps and compares — it does not merge a hand edit back into the
source.
What this looks like
Concrete situations, one per audience. Each is declared in the moment's front matter, so the before and the after are data rather than prose a page could drift from.
-
The interval that changed in one file
platform-team
- before
- The checkpoint interval is raised in the policy; the instruction files keep telling every worker the old number.
- after
- `doctor` compares each projection with the stamp of the policy it was generated from and fails on a mismatch.
-
The control of record
enterprise
- before
- The approved policy and the file the workers actually read have been different for two quarters and nobody could have known.
- after
- The projection carries the policy hash and its own content hash; a difference is a failing check, not a discovery.
-
Caught by the pipeline instead of by a reader
ai-native-team
- before
- A stale generated file is noticed when somebody reads it closely, which is rarely.
- after
- CI regenerates and refuses a tree in which any derived artifact differs from its source.
How you would know
The observable symptoms this moment declares. They are the questionnaire on the index and the input of majordomus why diagnose; nothing else defines them.
-
◻
A rule or setting was changed in one place this month and a stale copy of it is still being used.
updated-one-copy
-
◻
Nothing reports when a generated file no longer matches what it was generated from.
no-staleness-signal
-
◻
Regenerating the derived files depends on somebody remembering to.
regenerate-by-memory
Where this lives in the tool
Everything below is read out of this moment's own front matter and resolved against the repository. A name here that did not exist would fail validation.
the commands that answer it
the capabilities of the executable that answer it
what it supervises — derived from the claims below
the claims that back this page, and the evidence behind each
the rules that govern it
- majordomus.projection-integrity
- project.derived-files-regenerated
- majordomus.policy-integrity
- majordomus.policy-completeness
the use cases that show the way out
If this one is familiar, so is the next
What this moment names, what names it, and what shares its area, audience or tags. The second and third are derived; only the first is written down.
All 38, and how they connect to the tool →