Case 6/0: the arbiter that disagreed with itself

Case 6/0: the arbiter that disagreed with itself

Jesús Pérez
Six live vocabularies, none owning the others. Seven concepts with two different renderings, five of them inside the same file. A gate that looked at 10 files out of 110 and was called by no CI recipe. And when an agent with the full ontology loaded arrived to fix it, it wrote a seventh vocabulary and misfiled a term by misapplying a rule it had authored that same day. It was not carelessness: it was that nothing could contradict it.
Case 6/0: the arbiter that disagreed with itself

🕵️ Show the full case file → 📋 Session protocol →

Case file · Code Homicide Dept.

The project's vocabulary was written in six places. None owned the others; none witnessed the others. The glossary — the one document whose only job is to fix the words — used both forms of the same concept in the same file, five times. And when an investigator arrived with the full ontology loaded to sort it out, it wrote a SEVENTH vocabulary and misfiled a term by misapplying a rule it had authored that same day. It was not carelessness. It was that nothing could contradict it.

Case No. 6/0Classification: ANTI-PAP · VOCABULARY WITHOUT A WITNESSStatus: RESOLVED
Show glossary
PAP
The project's architecture principles, rules and patterns. An anti-PAP is an approach that runs head-on against them.
witness
A signed receipt that a check ran and what it returned. It proves structure, never truthfulness. A witness RECORDS; it does not refuse. It becomes a barrier only when a control point declines to proceed without one.
declared twice
The series' pathogen. One truth written in TWO places, which must agree BY HAND, with nothing checking that they do. Cases 404-PAP and 69/58 are the same disease in other organs.
false friend
A translation that LOOKS right and displaces the meaning. Spanish «librería» is a SHOP; the word is «biblioteca». It is dangerous precisely because it does not grate.

The protocol to declare, version and verify this → ontoref.dev

The double ledger — what it cost, and what it left

The left column is the crime. The right is what the crime left, and one entry there is not an engineering metric: the four ruled-out suspects are four models of the problem that could only be ruled out by facing them. The third — “a cognate is safe” — and the fourth — “it collides with a directory, therefore it is untranslatable” — were not produced by any validator. They were produced by a human reading the word «compuerta» and saying: that loses the concept.

What the crime cost

  • Live vocabularies, none owning the others 6
  • …one of them dead: a .ftl nobody reads 1
  • Concepts carrying two different renderings 7
  • …of those, incoherent INSIDE one file 5
  • Spanish files the previous gate looked at 10 of 110
  • ES content families never scanned 6
  • CI recipes that called the gate 0
  • Pages serving English to a Spanish reader 4 · for months
  • False friends in a published post 1 («librería»)
  • Concepts already merged into one word 2 · «gate» and «door» → «puerta»
  • Generated pages no route ever served 1

What the case left behind

  • A term registry with a language axis 45 concepts · 71 rules
  • Cross-registry contracts over the union 7
  • Gate coverage 10 → 110 files
  • Measured divergences, after the cure 7 → 0
  • The gate's false positives 43 of 52 → 0
  • Surfaces × languages declared 4 × 1, and adding a language breaks the build
  • The spine, governed by its own protocol for the first time

The point of abandonment — what the table doesn't show

There was a moment, with the new contract barely frozen, when the gate returned 52 findings and 43 were false. It flagged “puerta” eighteen times in texts about the four funnel doors. It flagged “every build system uses DAGs” demanding “compilar”. That was the point of abandonment, and it had two comfortable exits: weaken the rule until the tool went quiet, or edit correct prose to appease it. Both kill the policy. The third exit is the only honest one, and it names half the ADR: the gate declares what it cannot check. A form rejected for one concept may be the right rendering of another. A loanword inside a compound is not a bare anglicism. A verbatim quotation is not translated. None of that can be established by a regular expression — so the policy says so in the data, and stays silent. A gate that cries wolf is a gate people learn to skip. And a skipped gate is the green tick over unread files this whole thing began with.

The suspects — the false leads

The Anglicism“"It is a list of words to purge." It does not explain why `commit` stays. If the criterion were "sounds English", `commit` would be first to fall — and translating it leaves the reader with no way back to the tool. The list could not tell a word from a name.”ruled out
The Surface“"Just type it by surface: a README is not written like a talk." Correct, and insufficient. The axis was added and the term still carried ONE verdict. "Commiteé" spoken is alive; written it is jargon. That is fixed — and it does not fix that nobody knew WHY `gate` stayed.”ruled out — true but short
The Cognate“"If it looks like the original, translate it: it is a cognate." Spanish «librería» looks like the original and is a SHOP. «Compuerta» looks like it and comes from ELECTRONICS. Languages evolve their cognates apart, and the displacement is invisible precisely because the word still resembles its source. This suspect does not grate: that is what makes it dangerous.”ruled out — and it does not grate
The Identifier“"It stays because it collides with a directory." This is the one that killed the investigator. The collision with `reflection/` is handled by blanking code spans — not by a lexical class. But the file's note said "collides with the reflection/ directory", and the investigator read it as "untranslatable". It filed `reflection` — which HAS a faithful cognate — beside `gate` — which has none. The same day. In the same file. While applying the rule correctly to `schema` two lines below.”GUILTY

The weapon — anglicisms.ncl — where the policy lived in a comment

# anglicisms.ncl — the list it all came from

{ en = "gate",       es = "puerta",  severity = 'Warning, prose_safe = false,
  note = "collides with gate.ncl / the 'Gate type" },
{ en = "reflection", es = "reflexión", severity = 'Warning, prose_safe = false,
  note = "collides with the reflection/ directory" },

# And at the top of the file, in a COMMENT:
#   Terms kept by technical convention (NOT denied):
#   commit, exit, NCL, ADR, DAG, JSONL, Ed25519...

The weapon is not the list. It is that the list COULD NOT BE WRONG, because there was nothing to check it against.

The turn — rendering.ncl — the verdict and the reason, kept apart

# rendering.ncl — the verdict and the REASON, kept apart

'Keep + 'Identifier          # translating breaks the REFERENCE (commit, ADR, NCL)
'Keep + 'NoFaithfulRendering # translating breaks the CONCEPT   (gate)
'Render + 'FaithfulRendering # Spanish carries it whole         (reflexión, esquema)

# And the contract nobody had written:
RenderingsAreInjective   # two concepts may NOT render to the same word
  → "es::puerta ← gate; es::puerta ← door"   exit 1

A human found it, reading. No validator would have. Now one does.

The verdict

The series asks: with ontoref, would it not have gone like this? The answer, again, is NO — and it is the third time it has been, for the same cause. The mechanism existed: contracts, witnesses, gates. All built, accepted, working. And never pointed at this surface. It is literally the sentence from the mirror case: having the mechanism is not enough, you have to point it at the surface that hurts. But this case adds something the previous ones did not have, and it is the reason to publish it. The pathogen reproduced ITSELF, LIVE, during the investigation, executed by an agent with the full ontology loaded. It built a seventh vocabulary parallel to the six that already existed, without seeing them. And it misfiled reflection by misapplying a rule it had itself written that same day — while applying it CORRECTLY to schema, the same day, in the same file. It was not carelessness: it was that nothing could contradict it. There was nowhere to check the classification against, so it checked it against its own reasoning. Which is exactly the sin the protocol claims to fight. A vocabulary without a witness does not produce an error. It produces an arbiter that convinces itself — and then convinces everyone who consults it.

The vocabulary lived in six placesOne registry of concepts, and the contracts run over the union of the two that remain. Reading half a registry is believing half a policy.
"Do not translate" never said whyTwo incompatible reasons: 'Identifier (breaks the reference) and 'NoFaithfulRendering (breaks the concept). A 'Keep justified by «a faithful word exists» is refused by contract.
A cognate was assumed safe'FalseFriend and 'Displaces are classes of their own, and every rejection carries what it costs — or someone reverts it in good faith in six months.
The translation invented an ambiguityInjectivity per language: two concepts may not render to the same word. It fires on the real data, today.
A language could be half-addedlanguages is declared once, and adding one breaks the build until all 45 concepts answer for it. A half-added language is a site serving the wrong one.
The gate asserted what it could not knowThe policy declares its own limits: gateable, gate_source, <!-- lang:xx -->. The rule is still emitted for the human — who has the context a regex lacks — but no surface fails on it.
The gate could not read the surface where the disease wasmode = 'I18nKeys: export the bilingual file and walk only the target language. The spine is governed by the protocol it ships.
Nobody called the gatejust ci-lexicon. Inherited from ADR-070: existence is not participation.

Case law — what enforces the lesson today

  • The vocabulary has ONE policy, and every surface consults it — never six copiesadr:071/registry-is-the-single-policy
  • The gate declares what it cannot check, instead of asserting itadr:071/the-gate-declares-what-it-cannot-check
  • A declared language is answered on every surface, or there is no dischargeadr:071/a-language-is-answered-everywhere
  • The vocabulary's witness runs in the chain, with its negative casetest:.ontoref/reflection/tests/test_es_vocab_gate.nu

The throwaway script that measured the original incoherence is today less reliable than the gate that replaced it: it still returns a false positive the gate does not. That, in one line, is the difference between measuring once and declaring forever.

Glosario

Was this useful? Rate it
Got something to add? Tell me what you think, what you'd suggest, or whether we should keep exploring this topic.
· reads

We use cookies to help this site function, understand service usage, and support marketing efforts. Cookie Policy for more info.