A key is not a label
A decision record · a-key-is-not-a-label
A wiki node page printed its property keys and relationship slugs as headings — effective_note in a monospace cell, baselines-on where a reader looked for a phrase. Every property and edge declaration in the eighteen ontology files now carries a label:, which is what the site shows; one relationship slug has one label wherever it is declared. What no declaration covers — the undeclared relationships, the two universal ones, and a year’s figures keyed by pattern — is read as words, and never as the key.
Context Contents
The ontology declarations had a name, a type and a description, and the site rendered the
only short one it had (#551). So “Properties” on a legislation node was a column of
designation, general_assembly, effective_note, accountability_effect, and the links card
set instance-of, establishes, perturbed-by in the place a sentence’s verb goes.
The description is not the label. It is a paragraph, written for the class page, and cutting it to a heading is the “summary is the description, cut” failure the corpus already refuses for nodes.
A lookup table in web/ would be a second vocabulary. It would drift from the declarations
the day a property is added, and nothing would say so; a label on the declaration arrives with
the key or the schema refuses the file.
yidam has no such field. Its OntologyProperty and OntologyEdge carry no label, and at
0.16.0 it ignores an unknown key: yidam lint passes unchanged with 220 label: lines present.
The field is the web schema’s until upstream has one.
The decision Contents
Every property and edge declaration carries label:, and the web schema refuses one that does
not. 121 property labels and 99 edge labels. Most are the key in sentence case; the ones that
are not say what the key abbreviates — effective_note is “When each part took effect”,
simulated-by is “Priced by”, baselines-on is “Measured against”.
One relationship slug has one label. funded-by is declared on two classes and parallels
twice on one, and each reads the same everywhere. That is what lets a page name an inbound
edge — declared at the other end — by its slug alone.
What no declaration names is read as words. Most relationships are undeclared on purpose
(edge_policy: characteristic); instance-of and sourced-from are conventions no class
declares; fy2027_scale is one of a family of observation keys matched by pattern. Each is
shown with its separators as spaces and its first letter capitalized, and a leading fiscal year
kept in the key’s own form — “FY2027 scale”. The one thing the fallback may not return is the
key.
Consequences Contents
A new declaration costs one line more, and fails web/tests/unit/schema.spec.ts without it.
Two tests hold the rule from both ends. web/tests/unit/ontologyLabels.spec.ts holds the
declarations — every one labeled, no label its own key, one slug one label.
web/tests/dist/wikiKeys.spec.ts holds the build — no key or bare slug in a property or
relationship position on any wiki page.
The fallback is still a fallback. “Recovered funds from” is the slug in words, which reads well because the corpus writes its slugs as verb phrases. A slug that did not would need a declaration, and the declaration is where its label would go.
Upstream is asked for the field. Until yidam’s ontology types carry a label, yidam’s own
output (its MCP tools, its lint messages) keeps printing keys.
Alternatives considered Contents
Humanize every key and declare nothing. Covers most of the vocabulary and none of the
keys worth a label: effective_note would read “Effective note”, which is what the key already
said and not what it holds.
Label only the properties. The links card is where the slugs read worst — a verb in a table heading with hyphens in it — and the edge declarations had the same gap.
Cited by Contents
Nothing in the corpus or the catalog points here yet. A decision nothing reaches is not necessarily stale — plenty of them settle a question that has stayed settled — but it is worth knowing which ones are load-bearing and which are history.