Overview
The rule ids are the shared vocabulary between the auditor script, the triage step, and the agent acting on the report. A finding is cited by id, a severity override in the spec is keyed by id, and a run-over-run delta is counted by id. This page is the reference. How to run the auditor and triage what it finds is in vault-audit.
Read the structural rules as framework-agnostic
C-rules fire on every vault regardless of framework. They check shape, links, dates, and whichever fields the spec declares required.
| Rule | Finding | Severity |
|---|---|---|
| C000 | Frontmatter unparseable | critical |
| C001 | Orphan atom, no inbound or outbound links | warning |
| C002 | Broken wikilink | warning |
| C003 | Missing frontmatter | warning |
| C004 | Filename does not match the type’s pattern | warning |
| C005 | Decision modified after its decision date | critical |
| C006 | Undigested source, zero atoms extracted past the age threshold | info |
| C007 | Decision past its expected resolution date | warning |
| C008 | Required field missing or empty | warning |
| C009 | Atom past the atomicity byte threshold | warning |
| C010 | Stale seedling | info |
| C011 | Publishable claim failing the corroboration or legal gate | critical |
| C012 | Stale verification on a decision-relevant claim | warning |
| C013 | Unresolved contradiction past its aging threshold | info |
| C014 | Note filed outside its type’s folder | warning |
| C015 | Content note with an absent or unmappable type | warning |
The three criticals protect provenance. Unparseable frontmatter (C000) hides a note from every other check. A decision edited after its date (C005) is a hindsight rewrite, per decision-journals. An under-corroborated publishable claim (C011) breaks the gate in source-verification.
C015 matters more than it looks. Without it, a note with no type silently evades every per-type check, so the cleanest way to pass the audit would be to strip the field that makes a note checkable.
Read the schema rules as prefix-triggered
S-rules encode a rigor framework and fire only on notes that opt in by type or filename prefix, per rigor-frameworks. Existing notes in another framework are untouched.
| Rule | Finding | Severity |
|---|---|---|
| S003 | Theme atom with fewer than three linked data points | warning |
| S004 | Result atom not linked to a hypothesis | warning |
| S006 | Objective atom missing concept, example, or assessment links | warning |
| S007 | ADR missing an alternatives section | warning |
| S008 | Decision missing key_atoms | warning |
| S009 | Naked link dump in an atom | info |
S001, S002, and S005 are reserved for future built-in rules. Custom rules a vault declares take a U prefix (U001, U002) so they never collide with a reserved slot.
Treat M000 as a failed run, not a warning
M000 fires when vault-spec.yaml is missing or unparseable and the auditor fell back to built-in defaults. It is emitted as a warning precisely so the run exits non-zero, and spec_status in the JSON summary reads missing or invalid. A clean count sitting next to M000 says nothing about the vault’s real rules; generate or repair the spec before triaging anything else.
Override severities in the spec, never in the script
severity_overrides in the spec maps a rule id to a severity. The defaults stay in the script; the vault’s opinion lives in its spec, alongside the per-type fields described in vault-frontmatter-schema.
Autofix only the mechanical tier
The auditor’s --fix mode repairs what it can derive with certainty and nothing else.
- C003, missing frontmatter. Adds a block, with
typetaken from the folder when that folder maps to exactly one type. - C008, missing required field. Fills
idfrom the filename,createdandmodifiedfrom file mtime,statuswith the seedling default, and the structural tags. Semantic fields (title,sources,confidence,decision_date) stay open for a human. - C015, untyped note. Sets
typefrom an unambiguous folder. - C002, broken link. Repairs only when exactly one filename matches the target.
Everything else is left alone. An autofix that invents a title, a source, or a confidence value is fabricating research provenance. Dry run is the default, --apply writes, and an un-versioned vault is refused without a further --force, because there is no undo otherwise. The case where a field becomes newly required across many notes is handled as a migration in vault-schema-migration.