<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on Katalyst Documentation</title><link>https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/</link><description>Recent content in Reference on Katalyst Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>Configuration</title><link>https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/configuration/</guid><description>&lt;h1 id="configuration"&gt;Configuration&lt;a class="anchor" href="#configuration"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Katalyst reads a &lt;code&gt;.katalyst/&lt;/code&gt; directory, found by walking upward from the
current working directory to the nearest ancestor that contains one. That
ancestor is the repo root; all relative paths resolve against it.
Discovery resolves symlinks on both the root and the input path, because on
macOS &lt;code&gt;$TMPDIR&lt;/code&gt; lives behind &lt;code&gt;/var&lt;/code&gt; to &lt;code&gt;/private/var&lt;/code&gt; and relative-path
resolution would otherwise produce garbage.&lt;/p&gt;
&lt;p&gt;For &lt;em&gt;why&lt;/em&gt; the config is shaped this way, see &lt;a href="https://deploy-preview-116--stately-starburst-216875.netlify.app/deep-dives/domain-model/collections/"&gt;How collections
work&lt;/a&gt;. To set one up step by
step, see &lt;a href="https://deploy-preview-116--stately-starburst-216875.netlify.app/how-to/configure-rules/"&gt;Configure checks for a
collection&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The CLI</title><link>https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/cli/</guid><description>&lt;h1 id="the-cli"&gt;The CLI&lt;a class="anchor" href="#the-cli"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;katalyst&lt;/code&gt; CLI is &lt;strong&gt;self-documenting&lt;/strong&gt;. Run &lt;code&gt;katalyst --help&lt;/code&gt; for the full
command tree, and &lt;code&gt;katalyst &amp;lt;command&amp;gt; --help&lt;/code&gt; (down to leaves like
&lt;code&gt;katalyst item list --help&lt;/code&gt;) for a command&amp;rsquo;s arguments, flags, and behavior.
That help is the source of truth, and it is snapshot-tested, so it does not
drift from the binary.&lt;/p&gt;
&lt;p&gt;This page is deliberately thin. It records only the cross-cutting facts the
per-command help does not surface on its own: the two command grammars, the
shared exit codes, and the filter-predicate grammar that the configuration
&lt;code&gt;when:&lt;/code&gt; clause reuses.&lt;/p&gt;</description></item><item><title>Glossary</title><link>https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/glossary/</guid><description>&lt;h1 id="glossary"&gt;Glossary&lt;a class="anchor" href="#glossary"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The canonical vocabulary for Katalyst. Use these terms consistently in code,
docs, and user-facing copy. The general, backend-agnostic vocabulary is
introduced in the &lt;a href="https://deploy-preview-116--stately-starburst-216875.netlify.app/deep-dives/domain-model/"&gt;domain model&lt;/a&gt;;
how each term maps onto today&amp;rsquo;s code is documented in the per-package
&lt;code&gt;AGENTS.md&lt;/code&gt; files under &lt;code&gt;internal/&lt;/code&gt;. This page is the quick lookup.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Term&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Aggregate&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The descriptive operation an inspector realizes: measuring a distribution across a collection&amp;rsquo;s items rather than fetching or asserting. See &lt;strong&gt;Inspector&lt;/strong&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Attribute&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A named characteristic of an item: a column, a frontmatter key, a response field, its filename, its path, or another backend-derived property. A key in a structured object specifically is a &lt;strong&gt;Field&lt;/strong&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Base&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;One configured backend source plus the operations Katalyst can perform on its content. A raw base gives Katalyst base-native access; a collectionized base adds collection mappings. See &lt;a href="https://deploy-preview-116--stately-starburst-216875.netlify.app/deep-dives/domain-model/base/"&gt;Bases&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;BaseInstance&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A configured instance of a BaseType plus how to reach it (for &lt;code&gt;filesystem&lt;/code&gt;, a root directory). Declared under &lt;code&gt;.katalyst/bases/&lt;/code&gt;; it embeds the collections it maps.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;BaseType&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A known backend kind capable of holding content Katalyst can operate on (&lt;code&gt;filesystem&lt;/code&gt; and &lt;code&gt;sqlite&lt;/code&gt; today; &lt;code&gt;postgresql&lt;/code&gt;, &lt;code&gt;mongodb&lt;/code&gt;, and others later).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Everything after the closing frontmatter fence. Preserved verbatim except by &lt;code&gt;fix&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Check&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Shorthand for a check instance when context is unambiguous.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Check instance&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;One configured check attached to a collection: a check type plus its arguments (one YAML object under &lt;code&gt;checks:&lt;/code&gt;). It runs against each item (object, markdown, or filesystem family).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Check type&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The reusable definition of a constraint: one entry in katalyst&amp;rsquo;s check registry (&lt;code&gt;object_required_field&lt;/code&gt;, &lt;code&gt;markdown_single_h1&lt;/code&gt;, &amp;hellip;), selected by its &lt;code&gt;kind:&lt;/code&gt; id. &lt;code&gt;katalyst check-types list&lt;/code&gt; lists them.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;CheckLibrary&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The provider behind a check type. Native libraries (&lt;code&gt;filesystem&lt;/code&gt;, &lt;code&gt;plaintext&lt;/code&gt;, &lt;code&gt;markdownbodytext&lt;/code&gt;, &lt;code&gt;structuredobject&lt;/code&gt;) wrap hand-written checks; schema-backed libraries (&lt;code&gt;json-schema&lt;/code&gt;, Vale next) compile a named schema and run items against it, and report their own availability. A library is provenance, orthogonal to the source-data family (&lt;code&gt;structuredObject&lt;/code&gt;, &lt;code&gt;markdownBodyText&lt;/code&gt;, &lt;code&gt;fileSystem&lt;/code&gt;, &lt;code&gt;plainText&lt;/code&gt;) the check reads.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Collection&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A group of items that share structure: a directory of similar files, a relational table, a Mongo collection, or a family of API resources. Collections own checks and are addressed by name.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Collection layer&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Inspectors that profile a configured collection&amp;rsquo;s items, addressed by domain identity (collection + item id) and probing through the same substrate the checks use.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Collection-scoped check&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A check type that runs once per collection over all its items (e.g. &lt;code&gt;filesystem_unique_filename&lt;/code&gt;), rather than per item. It re-scans the full collection even under a single-item selector.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Collection mapping&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The two-way mapping from a base instance&amp;rsquo;s contents to collections and items. Yields one or more collections; filesystem and SQLite mappings are implemented today. Implemented by &lt;code&gt;CollectionDefinition&lt;/code&gt; in code.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Config&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A &lt;strong&gt;Project&lt;/strong&gt;&amp;rsquo;s configuration: the schemas, bases, and collection mappings that declare what the project contains and how its items are checked. Katalyst&amp;rsquo;s config is the &lt;code&gt;.katalyst/&lt;/code&gt; directory; it is loaded by the &lt;code&gt;project&lt;/code&gt; package&amp;rsquo;s loader (&lt;code&gt;internal/project/loader.go&lt;/code&gt;). Each object type owns the parse of its own config: the base registry validates a declared &lt;code&gt;type&lt;/code&gt;, and a collection parses its own block in &lt;code&gt;storage/collection&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Discriminator&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The &lt;code&gt;when&lt;/code&gt; predicate that selects a variant: a list of &lt;code&gt;item list --filter&lt;/code&gt; expressions over an item&amp;rsquo;s metadata, ANDed together.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Document&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The markdown file-form of an &lt;strong&gt;Item&lt;/strong&gt;: a parsed markdown file (frontmatter metadata + body + a line map). Use it where parsing or the on-disk file is the subject; elsewhere prefer &lt;strong&gt;Item&lt;/strong&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Evidence&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The structured result of one inspector: counts and distributions with the unit count &lt;code&gt;n&lt;/code&gt; as denominator. Never a recommendation or verdict.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Field&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A key in an item&amp;rsquo;s structured object (its frontmatter map). A field is an &lt;strong&gt;Attribute&lt;/strong&gt;; a filename is an attribute but not a field. The term used wherever object or frontmatter keys are meant (&lt;code&gt;object_field_type&lt;/code&gt;, &lt;code&gt;name_matches_field&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Frontmatter&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The on-disk metadata block at the top of a markdown file, in YAML (&lt;code&gt;---&lt;/code&gt;), TOML (&lt;code&gt;+++&lt;/code&gt;), or JSON (&lt;code&gt;{ … }&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Inspector&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A read-only operation that measures content and returns evidence. The descriptive dual of a check: a check asserts a predicate, an inspector reports the distribution. Inspectors come in two layers.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Item&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The unit of data in a collection, addressed by a selector and operated on by &lt;code&gt;check&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, and the &lt;code&gt;item&lt;/code&gt; subcommands. In the filesystem backend an item is one file matching the collection&amp;rsquo;s pattern, its id the filename stem; its markdown file-form is a &lt;strong&gt;Document&lt;/strong&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Data surface&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A representation Katalyst exposes for checks, inspectors, or &lt;code&gt;fix&lt;/code&gt; to read from content: markdown body text, plain text, structured object, or file metadata. See &lt;a href="https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/data-surfaces/"&gt;Data surfaces&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Measurement primitive&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A reusable building block the inspectors are built from: &lt;code&gt;object_fields&lt;/code&gt; (a data dictionary over object maps), &lt;code&gt;markdown_body&lt;/code&gt; (body structure), and file-metadata.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The parsed, in-memory structure of the frontmatter (a &lt;code&gt;map[string]any&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Operation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Something a base lets you do with its data: read, list, query, aggregate, write. Each has a scope (item, collection, across collections) and structural requirements the backend must satisfy. See &lt;a href="https://deploy-preview-116--stately-starburst-216875.netlify.app/deep-dives/progressive-operations/"&gt;progressive operations&lt;/a&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Profile class&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A group of near-identical profiles the summarizer collapses together, so output is proportional to the number of distinct profiles, not directories.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Project&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The whole katalyst workspace: a repo root with a &lt;code&gt;.katalyst/&lt;/code&gt; &lt;strong&gt;Config&lt;/strong&gt; that declares the bases, collections, and checks katalyst operates over. The top-level scope an empty selector addresses, and what &lt;code&gt;katalyst init&lt;/code&gt; creates. Collections live within a project; the &lt;code&gt;project&lt;/code&gt; package (&lt;code&gt;internal/project&lt;/code&gt;) is its code home, holding the &lt;code&gt;.katalyst/&lt;/code&gt; loader while the collection implementation lives under &lt;code&gt;storage/&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Raw base layer&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Inspectors that profile a base directly, before any collection configuration, addressed by base-native reference (a path today). The onboarding case: &amp;ldquo;what&amp;rsquo;s in this base?&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Repo root&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The directory containing the &lt;code&gt;.katalyst/&lt;/code&gt; config directory; the base for all path resolution.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Resolver&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The runtime object that decides which object schema applies to an item and caches compiled schemas per &lt;code&gt;(library, path)&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Schema&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The definition of a collection&amp;rsquo;s shape, expressed in a CheckLibrary&amp;rsquo;s format (JSON Schema today; a Vale style config later). Named in &lt;code&gt;schemas:&lt;/code&gt;; located by path. The katalyst concept, not the JSON Schema document specifically.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Schema directive&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The inline &lt;code&gt;schema:&lt;/code&gt; key inside a document&amp;rsquo;s frontmatter, opting it into a named schema.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Selector&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;How a command names what to operate on: nothing (whole project), &lt;code&gt;&amp;lt;collection&amp;gt;&lt;/code&gt;, or &lt;code&gt;&amp;lt;collection&amp;gt;/&amp;lt;item&amp;gt;&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Scope&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The level an operation or backend mapping applies to: item, collection, project, or across collections. In a base, scope answers whether one matched source unit becomes an item or a collection.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Span&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The slice of body text a text rule is evaluated against, chosen by its &lt;code&gt;target&lt;/code&gt;: the whole &lt;code&gt;body&lt;/code&gt;, each &lt;code&gt;line&lt;/code&gt;, the &lt;code&gt;first-line&lt;/code&gt;, or &lt;code&gt;matched-lines&lt;/code&gt; (lines matching a &lt;code&gt;select&lt;/code&gt; regex).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Target&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The slice of a path a filesystem name/path check type tests: &lt;code&gt;filename&lt;/code&gt;, &lt;code&gt;filename-ext&lt;/code&gt;, &lt;code&gt;parent-dir&lt;/code&gt;, or &lt;code&gt;path-segments&lt;/code&gt; (every directory segment plus the basename). For a text rule, the slice of body it tests, see Span.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Text rule&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A &lt;code&gt;text_*&lt;/code&gt; check (&lt;code&gt;text_requires&lt;/code&gt;, &lt;code&gt;text_forbids&lt;/code&gt;, &lt;code&gt;text_denylist&lt;/code&gt;) that tests the body as raw text, a regex or a literal denylist, independent of markdown structure. Applies to plain-text items too.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Validation result&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The product of running an item&amp;rsquo;s checks: either &lt;code&gt;path: OK&lt;/code&gt;, or a flat list of violations.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Variant&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A discriminated check group inside a collection (one entry of &lt;code&gt;variants:&lt;/code&gt;): a &lt;code&gt;when&lt;/code&gt; discriminator plus the schema/checks added for items that match it. An item runs the base checks plus the first matching variant&amp;rsquo;s.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Violation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;One failed check, reported as &lt;code&gt;path:line: /pointer: message&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="usage-notes"&gt;Usage notes&lt;a class="anchor" href="#usage-notes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;check type&lt;/strong&gt; is the definition; a &lt;strong&gt;check instance&lt;/strong&gt; is that check type
configured in a collection and run against a specific item, and a
&lt;strong&gt;violation&lt;/strong&gt; is a check that failed. The &lt;a href="https://deploy-preview-116--stately-starburst-216875.netlify.app/reference/check-types/"&gt;check types
reference&lt;/a&gt; and &lt;code&gt;katalyst check-types list&lt;/code&gt; enumerate check types.&lt;/li&gt;
&lt;li&gt;Prefer &lt;strong&gt;schema&lt;/strong&gt; for what users author. The runtime check is the &lt;code&gt;object&lt;/code&gt;
check type, provided by the JSON Schema &lt;strong&gt;CheckLibrary&lt;/strong&gt;; &amp;ldquo;validator&amp;rdquo; is not a
thing users write.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;frontmatter&lt;/strong&gt; for the on-disk block and &lt;strong&gt;metadata&lt;/strong&gt; for the parsed
structure; they are not interchangeable.&lt;/li&gt;
&lt;li&gt;Say &lt;strong&gt;&lt;code&gt;.katalyst/&lt;/code&gt;&lt;/strong&gt; or &amp;ldquo;the config&amp;rdquo; rather than an unqualified
&amp;ldquo;config&amp;rdquo; when ambiguous.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default to the general term; use the specific one only where the form is the
subject.&lt;/strong&gt; &lt;em&gt;Item&lt;/em&gt; and &lt;em&gt;attribute&lt;/em&gt; are the general terms; &lt;em&gt;document&lt;/em&gt; (an item&amp;rsquo;s
markdown file-form) and &lt;em&gt;field&lt;/em&gt; (an attribute that is a structured-object key)
apply only where parsing, the on-disk file, or the object map is specifically
what you mean. A document is an item and a field is an attribute; the reverse
does not hold.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>