Pre-release Harn is pre-1.0 — the language, standard library, and CLI may change between releases. See the release notes

Check documentation examples

Use the documentation checker to verify fenced Harn examples in Markdown with the same parser, type checker, linter, and formatter as your code.

Run the repository check#

From your prepared Harn checkout, run:

make check-docs-snippets

The summary reports checked and intentionally skipped snippets, failed checks, and how many snippets reached the formatter and linter. A run that finds no documentation files or validates no snippets fails.

Choose a policy for your documentation#

Edit .harn-docs.toml. Its include patterns select files relative to the working directory. The defaults table sets the policy; matching rules override the fields they name, in file order. Overlapping patterns check each file once. A rule that matches no selected files fails.

For example, keep partial teaching examples at parse-only validation while requiring complete, formatted introductory examples:

version = 1
include = ["README.md", "docs/**/*.md"]

[defaults]
validation = "parse"
format = false
lint = "off"
line_width = 74

[[rules]]
include = ["README.md", "docs/getting-started/*.md"]
validation = "check"
format = true
lint = "strict"

Use validation = "check" for examples that declare their inputs and imports. Keep validation = "parse" for fragments whose surrounding context appears in the prose. lint = "advisory" reports style warnings; lint = "strict" makes warnings fail the check. format = true requires canonical formatter output at line_width. The width limit also applies to intentionally skipped examples because they must fit the rendered page.

Configuration fields are validated before scanning. Unknown keys, unsupported values, empty patterns, and nonpositive widths fail with an error.

To use another policy file, pass its path to the checker:

HARN_BIN=/path/to/harn harn run --standalone \
  scripts/check_docs_snippets.harn -- --config docs-policy.toml

Mark an example's intent#

An ordinary harn fence uses the file's validation policy. A harn,check fence always receives full type checking. A harn-prompt fence uses the prompt-template linter. An unknown Harn fence modifier fails instead of silently escaping checks.

Use harn,ignore or harn-prompt,ignore only for intentional fragments that the parser cannot accept. To show Markdown syntax itself, put it inside a longer Markdown fence:

```harn,check
pub fn answer() -> int {
  return 42
}
```

For examples that intentionally demonstrate an error, use harn,diagnostic-check or harn,diagnostic-lint. Those fences verify the expected diagnostic rather than requiring clean code, and do not receive formatting or ordinary lint checks. Harn's own configuration also sets diagnostic_examples to store the checked diagnostic projection. After changing one of these examples, regenerate it with make sync-docs-diagnostics and review the diff.

Static checks do not prove that an agent completes its task. Add an execution test with recorded model responses for runnable agent examples.