Rules

39 business rules described. A business rule is a condition the business imposes, with what it constrains and what happens when it is broken.

Severity
Sort: A–Z
Business ruleSeverityFirst lineLinks
Relation outside the matrixerrorA declared relation joins two types the profile does not allow for it. The link is dropped from the model by the relation typing step. A frontmatter reference that names an existing note of a type the attribute does not accept is this finding, not an unresolved reference: the note exists, the relation is what the profile forbids.
Relation typinginfoEvery link between two notes ends up with a relation of the profile, decided on four rungs, the first that applies winning: a mapped section (a business object under ## Objects of a screen is accesses), a typed frontmatter attribute (reads is accesses in read mode), a type pair that admits a single relation (a markdown link or a plain mention between a rule and a screen is constrains, marked relation_origin: pair and turned around when the profile only allows it the other way), then related, kept with its confidence capped at 0.60 and reported by the ambiguous relation check. The first two rungs come from what the author wrote and are never overturned; a declared relation the profile does not allow between the two types is dropped by the relation outside the matrix check. The labels shown for a relation, in either direction, come from the profile alone. The architecture guide and the writing guide describe it.
Stale sourcewarningA source or a note has not changed for longer than the configured threshold. The date comes from git and is always right.
Suggested domaininfoA note no frontmatter, folder or glob files lies within the radius of a pivot of the neighbourhood: a term with a note of its own whose distinct neighbours, over the typed links and the co-occurrence neighbourhood, reach the configured threshold. The note is a candidate for a domain named after the pivot, the last segment of its identifier, and is attached to the closest pivot, at equal distance to the one of highest degree, then to the first identifier in code-unit order. A stopword or a term the lock file rejects never pivots. The build proposes and files nothing: a growing corpus moves its pivots, and a note would swing from one domain to another between two builds. The proposal is promoted by declaring the domain in the configuration with the folders or globs that claim its notes, or by naming the note under domains in the lock file; the configuration may also let the build file every reached note itself, with the origin inferred.
Suspect conversionwarningA converted PDF holds no extractable text although the document is large; it is probably made of images. Nothing of it enters search or the occurrence scan.
Term homonyminfoTwo entities share a title or an alias once spellings are compared: same form after lower-casing, accent stripping and singularisation. The recognition dictionary keeps both, every occurrence of the form links to each entity at half the confidence it would have with a single target, glossary entities first, and the finding names the form and the entities. When the two are different things, distinct titles or aliases settle it; when they are one concept seen from two sides, as the glossary term and the business object called "Entity" in this wiki, both stay and a ## Not to be confused with section tells the reader which is which. The linter reports the same finding in global scope for a local title that an entity of another type carries in the published model. A twin folded into its note is no homonym: the twin resources are reconciled before the dictionary is built, and the titles and aliases of the folded twin name the entity it became, once.
Transcript withheldwarningA transcript was kept out of the site because its reader cannot write it back with the pseudonyms: the page of the meeting shows neither the transcript nor its download, and its text enters neither the model nor the search index. The raw file is never published.
Type conflicterrorThe frontmatter type contradicts the type given by the file suffix. The tool reports rather than guesses.
Unclassified domaininfoA note sits under no folder a declared domain claims, matches no domain glob and declares none in frontmatter. It lands in the unclassified domain. A domain claims a folder with folder: true, the folder named after its identifier, or folder: <name>, anywhere on the path of a note in any source; a subdomain declared by folder claims only the notes under its parent's folder, or anywhere on a path the parent's globs match when the parent is declared by globs. Folders and globs combine, the deepest domain winning, then the last declared.
Undefined termwarningA recurring expression crosses the threshold without any note defining it. It has a keyword page built from its passages, but no definition.
Unknown applicationwarningThe application cascade (the application of the source, the set.application of a typing rule, the frontmatter application) produced an identifier that applications: does not declare. The value is kept as written on the entity and the finding says where it came from; nothing composes the entity into a declared application. Distinct from the missing application, where the cascade produced nothing at all.
Unknown attributewarningA frontmatter key is declared neither by the type of the note nor among the common attributes of the profile. The value is kept as written in the model and shown in the side panel of the page, but nothing interprets it: it produces no relation and no typed display. Most often a typo in a key, or an attribute the project profile has yet to declare.
Unknown domainwarningA frontmatter domain names no domain declared under domains: of the configuration, by its identifier or by its identifier path. The frontmatter wins over the folders and the globs, so the value is kept as written on the entity and the site shows what the author meant, but nothing files the note under a declared domain. Distinct from the unclassified domain, where the note names nothing, sits under no claimed folder and matches no glob.
Unknown typewarningThe type cascade gave a note a type that neither the default profile nor the project profile declares: a source type, a typing rule or a frontmatter type names a slug that does not exist. The note is kept and treated as a document, and its type origin records where the unknown slug came from, so that the site shows it. The fix is a type of the profile, a declaration in the project profile, or a correction of the rule or the frontmatter.
Unreachable contractwarningThe contract an API note declares in its contract attribute, a URL or a path relative to the note, could not be fetched, read or parsed: the server answered with an error, the build ran without network access, the file is missing, or the document is neither an OpenAPI 3.x document in JSON or YAML nor a WSDL 1.1 or 2.0 document. No operation is imported from it, the note keeps the operations written by hand, and the build goes on; the API page has no imported operations until a later build reads the contract. A project whose contracts must be present raises the severity to error.
Unreachable sourcewarningA declared source could not be fetched or read: wrong URL, unknown ref, missing credentials, a missing local path, or a faulty concordance-lint.yaml in the repository, which the build refuses to read differently from its linter. The build goes on without it; nothing from that source enters the model until it comes back.
Unresolved referencewarningA value of a reference-typed frontmatter attribute (reads, roles, rules, consumers, affects, broader among others) matches no note by identifier, by path relative to the source root or by exact title, or matches several notes by title. No link is recorded for that value; the other values of the attribute are unaffected. The fix is to write the identifier, the path or the exact title of an existing note, the identifier or the path when a title is shared: this repository names its roles by path, roles/publication/reader, because the glossary carries a term with the same title as one of them. A note found under a type the attribute does not accept is a relation outside the matrix, not an unresolved reference.
Unusable pseudonymisation dictionarywarningThe pseudonymisation dictionary the configuration names is missing, is not valid YAML or does not match its schema. While pseudonymisation is disabled the finding is a warning and the build goes on; when it is enabled the finding is raised as an error, the build fails and every transcript is withheld from the output, because a site built without the dictionary would publish every name as written.
Unused terminfoA glossary term is never cited: neither its title nor its aliases appear elsewhere.

19 rules of 39 — pagination by twenty. The Links column counts the related pages, which brings the most central rules of the journey to the top.