Terminology

Ground your docs' vocabulary — glossary-backed lexicon rules over the same source layer as every other grounded check.

SHIP'S COMPUTER: The word is "waypoint". You said "node". I have filed this under things we agreed to stop saying.

A glossary is a grounded source with structure: canonical spellings and banned ones. Casing is a linter's job (markdownlint MD044 proper-names).

docs.mdv.md
<!-- mdv: document @glossary/terms=./glossary.json? @glossary/undefined=./glossary.json? -->
glossary.json
[
  {
    "term": "waypoint",
    "kind": "domain-term",
    "deprecated": ["node"],
    "definition": "A charted position a transit plan may pass through."
  }
]
plan.md
## Route

The transit plan passes through every node before docking.
plan.md
  3  warning  "node" is a deprecated form of "waypoint"  deprecated-term
              help: Replace it with the canonical term from the glossary

Glossary entries

JSON only (grammars/glossary.schema.json; invalid-glossary otherwise). Fields: term, kind, aliases, deprecated, compounds, definition. Put it in CODEOWNERS.

Binding

Per contract (above) or once in config; ? keeps copies shape-only until the glossary exists.

export default defineConfig({
  rules: { "@glossary/terms": { value: "glossary?" }, "@glossary/undefined": { value: "glossary?" } },
  sources: { declare: { glossary: "./.mediva/sources/glossary.json" } },
});

The checks

CodeFires onDefault
deprecated-terma banned spelling; quoted mentions are exemptwarn
undefined-terman unlisted acronym, CamelCase or multi-word namewarn, opt-in

Promote with error=deprecated-term.

Without a glossary

content.entities.in checks capitalised names against any source.

<!-- mdv: document content.entities.in=./crew.json -->

On this page