knowledge-lintv0.1.0

Overview

What knowledge-lint checks, where it stops, and how this documentation is organised.

knowledge-lint validates a knowledge base made of Markdown files with YAML frontmatter: a directory of category folders, declared in one _types.yml. It is a single Rust binary, so it behaves the same locally and in CI, without an interpreter or package manager.

It was extracted from ai-knowledge-template, but works with any knowledge directory that follows the same conventions.

What it checks

  • Every folder is a declared category, and every entry’s type matches its category.
  • Required frontmatter fields, allowed status values and valid last_reviewed dates.
  • Overdue reviews for entries that are still marked active.
  • related links and _attachments.yml references point to files that exist.
  • Secrets are SOPS-encrypted, and entries contain no plaintext keys.

What is checked depends on the kind a category has in _types.yml:

Focus
What knowledge-lint checks per category kind
What knowledge-lint checks per category kindEvery folder in the knowledge directory needs a category in _types.yml; an undeclared folder is an error. knowledge_entry categories hold Markdown entries, checked for the required fields title, source and created, an allowed status, the category's type, a valid last_reviewed date and its review interval, related links, plaintext keys (4 private-key headers as errors, 6 API-key prefixes as warnings) and a file size above 500 KB (a warning). sops_secret categories need a top-level sops: key in every file; nothing is decrypted. assets categories are not checked; their files are referenced from _attachments.yml, which is checked for existing paths, reachable URLs (a warning) and existing referenced_by entries.knowledge/ → Undeclared folderknowledge/ → knowledge_entryknowledge_entry → Required fieldsknowledge_entry → statusknowledge_entry → typeknowledge_entry → last_reviewedknowledge_entry → relatedknowledge_entry → Plaintext keysknowledge_entry → File sizeknowledge/ → sops_secretsops_secret → sops: keyknowledge/ → assetsassets → No content checksknowledge/ → _attachments.yml_attachments.yml → path_attachments.yml → referenced_byknowledge/ – folders declared in _types.ymlknowledge/folders declared in_types.ymlUndeclared folder – errorUndeclared foldererror!knowledge_entry – Markdown entriesknowledge_entryMarkdown entriesRequired fields – title, source, createdRequired fieldstitle, source, createdstatus – one of status_valuesstatusone of status_valuestype – matches the categorytypematches the categorylast_reviewed – valid date, review intervallast_reviewedvalid date, review intervalrelated – linked files existrelatedlinked files existPlaintext keys – 4 headers, 6 prefixesPlaintext keys4 headers, 6 prefixesFile size – warning above 500 KBFile sizewarning above 500 KBsops_secret – SOPS filessops_secretSOPS filessops: key – structural, never decryptedsops: keystructural, never decryptedassets – plain filesassetsplain filesNo content checks – listed in _attachments.ymlNo content checkslisted in _attachments.yml_attachments.yml – attachment list_attachments.ymlattachment listpath – file exists, URL answerspathfile exists, URL answersreferenced_by – entries existreferenced_byentries exist!Critical

Source: src/lint.rs, src/checks/knowledge_entry.rs, src/checks/secret_scan.rs, src/checks/secrets.rs, src/checks/attachments.rs

Show chart data
Data for What knowledge-lint checks per category kind
NodeLevelParentRoleChildren
knowledge/1Undeclared folder, knowledge_entry, sops_secret, assets, _attachments.yml
Undeclared folder2knowledge/critical
knowledge_entry2knowledge/Required fields, status, type, last_reviewed, related, Plaintext keys, File size
Required fields3knowledge_entry
status3knowledge_entry
type3knowledge_entry
last_reviewed3knowledge_entry
related3knowledge_entry
Plaintext keys3knowledge_entry
File size3knowledge_entry
sops_secret2knowledge/sops: key
sops: key3sops_secret
assets2knowledge/No content checks
No content checks3assets
_attachments.yml2knowledge/path, referenced_by
path3_attachments.yml
referenced_by3_attachments.yml
Focus
What knowledge-lint checks per category kind
What knowledge-lint checks per category kindEvery folder in the knowledge directory needs a category in _types.yml; an undeclared folder is an error. knowledge_entry categories hold Markdown entries, checked for the required fields title, source and created, an allowed status, the category's type, a valid last_reviewed date and its review interval, related links, plaintext keys (4 private-key headers as errors, 6 API-key prefixes as warnings) and a file size above 500 KB (a warning). sops_secret categories need a top-level sops: key in every file; nothing is decrypted. assets categories are not checked; their files are referenced from _attachments.yml, which is checked for existing paths, reachable URLs (a warning) and existing referenced_by entries.knowledge/ → Undeclared folderknowledge/ → knowledge_entryknowledge_entry → Required fieldsknowledge_entry → statusknowledge_entry → typeknowledge_entry → last_reviewedknowledge_entry → relatedknowledge_entry → Plaintext keysknowledge_entry → File sizeknowledge/ → sops_secretsops_secret → sops: keyknowledge/ → assetsassets → No content checksknowledge/ → _attachments.yml_attachments.yml → path_attachments.yml → referenced_byknowledge/ – folders declared in _types.ymlknowledge/folders declared in_types.ymlUndeclared folder – errorUndeclared foldererror!knowledge_entry – Markdown entriesknowledge_entryMarkdown entriesRequired fields – title, source, createdRequired fieldstitle, source, createdstatus – one of status_valuesstatusone of status_valuestype – matches the categorytypematches the categorylast_reviewed – valid date, review intervallast_reviewedvalid date, review intervalrelated – linked files existrelatedlinked files existPlaintext keys – 4 headers, 6 prefixesPlaintext keys4 headers, 6 prefixesFile size – warning above 500 KBFile sizewarning above 500 KBsops_secret – SOPS filessops_secretSOPS filessops: key – structural, never decryptedsops: keystructural, never decryptedassets – plain filesassetsplain filesNo content checks – listed in _attachments.ymlNo content checkslisted in _attachments.yml_attachments.yml – attachment list_attachments.ymlattachment listpath – file exists, URL answerspathfile exists, URL answersreferenced_by – entries existreferenced_byentries exist!Critical

Source: src/lint.rs, src/checks/knowledge_entry.rs, src/checks/secret_scan.rs, src/checks/secrets.rs, src/checks/attachments.rs

Show chart data
Data for What knowledge-lint checks per category kind
NodeLevelParentRoleChildren
knowledge/1Undeclared folder, knowledge_entry, sops_secret, assets, _attachments.yml
Undeclared folder2knowledge/critical
knowledge_entry2knowledge/Required fields, status, type, last_reviewed, related, Plaintext keys, File size
Required fields3knowledge_entry
status3knowledge_entry
type3knowledge_entry
last_reviewed3knowledge_entry
related3knowledge_entry
Plaintext keys3knowledge_entry
File size3knowledge_entry
sops_secret2knowledge/sops: key
sops: key3sops_secret
assets2knowledge/No content checks
No content checks3assets
_attachments.yml2knowledge/path, referenced_by
path3_attachments.yml
referenced_by3_attachments.yml

Each check and its exact message are listed under Rules.

Where it stops

knowledge-lint checks structure and metadata, not prose. It does not decrypt secrets, does not judge whether an entry is correct, and does not let you rename the frontmatter fields.

How the docs are organised

Edit this page on GitHub · Docs for v0.1.0