The corpus › Decisions

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.