Skip to content

Configuration reference

The terminology tool reads three parts of the family’s one config file, manni.config.yaml. The top-level collections: list says which files exist. The top-level tools: key says where Vale’s configuration is. The term: section holds the tool’s own settings. Every term: key has a default, so most repositories need no term: section at all. collections: has none. A run with no paths, no collection and no manifest stops with No files to read.

manni.config.yaml
collections:
- name: site
paths:
- "docs/**/*.md"
tools:
vale:
config: .vale.ini
term:
manifests:
- terms.yaml
abstractMaxLength: 80
severity:
unused-term: off

A bare manni term check reads every file the top-level collections: list declares, and --collection narrows a run to one of them. A term is a page declaring type: term, so no key says where the terms are. They are found among the documents. The keys of a collection are on the metadata tool’s configuration reference.

A family file that declares collections: and no term: section is still this tool’s config. Every term: key takes its default.

manni term lint and manni term write -f vale run Vale. The path to Vale’s configuration is a family setting, tools.vale.config, and it sits beside collections: rather than under term:. It is documented with the other family keys on the metadata tool’s configuration reference. Without it, Vale finds its own configuration, as it does when a person runs it.

KeyTypeDefaultMirrorsDescription
manifestslist of paths[]noneYAML or JSON files holding entries outside any document, relative to the config file. Read on every run that loads the config.
abstractMaxLengthnon-negative integer60noneThe length, in UTF-16 code units, past which abstract-too-long fires.
baselinepathnone--baselineA baseline file, relative to the config file. Setting it compares every check run against the file, without the flag. With --baseline and no key, the file is .manni-term-baseline.json.
severitymappingthe defaultsnonePer-rule level: error, warning, notice or off. Only the rules named change.
allowEmptybooleanfalse--allow-emptyTreat a missing path, no matched files or no terms as success. The flag wins.
respectGitignorebooleantrue--no-gitignoreSkip files .gitignore covers when expanding directories and globs. The flag wins for one run.

A manifest holds entries that live in no document. The top-level key is the entry’s id, and each entry carries the terminology fields by name:

terms.yaml
corrective-lens:
label: corrective lens
narrower: [bifocal, progressive lens]
definition: A lens worn to correct a refractive error of the eye.
bifocal:
label: bifocal
abstract: Lenses with two distinct optical powers, divided by a visible line.

A finding about an entry names the manifest and the entry’s own line. When a manifest and a page use one id, both get a duplicate-id finding, and neither value wins.

severity: moves any of the ten rules to another level, or turns it off. The defaults and each rule’s message are on the rules reference.

manni.config.yaml
term:
severity:
unused-term: off # a termbase written ahead of the docs
asymmetric-hierarchy: error # hold both halves of every hierarchy

The levels are the family’s three, notice, warning and error, plus off. Only an error moves the exit code. See severity across the family. term lint takes no level from this map. Its levels come from Vale’s configuration.

A config the tool cannot use stops the run with exit 2. A malformed config stops it before any file is read. A key that belongs to the family is refused by name, with where it went:

manni: manni.config.yaml: term does not carry "paths". Name a collection under collections:.
manni: manni.config.yaml: term does not carry "vale". Vale's settings live under tools.vale.

term.exclude is refused with the same message as term.paths. Every other refusal names the key and what it expected:

manni: Unknown key "maxLength" under term: in manni.config.yaml. Supported keys: manifests, abstractMaxLength, baseline, severity, allowEmpty, respectGitignore.
manni: manni.config.yaml: term.severity.undefined-term "fatal" is not a level. Expected notice | warning | error | off.
manni: term.abstractMaxLength in manni.config.yaml must be a non-negative integer.

A type error names the key and the type it wanted, and never repeats the value. Two refusals come after the documents load. A tools.vale.config that names a missing file stops lint and write -f vale without -o, the two forms that run Vale:

manni: manni.config.yaml: tools.vale.config "nowhere.ini" does not exist.

A term.manifests file that is not there stops every verb once the other files are read, named as the config spells it:

manni: manni.config.yaml: term.manifests "terms/missing.yaml" does not exist.

The other tools: refusals are on the metadata tool’s configuration reference.