Data quality linting for AI knowledge bases. Finds the contradictions, stale facts, and missing metadata in a corpus before retrieval turns them into confident wrong answers.
Python
0
34 commits
updated Aug 19, 2026
Data quality linting for AI knowledge bases.
A RAG system inherits every contradiction and stale fact in its corpus, then surfaces them as confident wrong answers. doclint scans the corpus before retrieval ever touches it and reports what will go wrong.
Two documents that answer the same question differently will not fail any test you currently have. The retriever returns both, the model picks one, and nothing anywhere logs that a choice was made.
Conflicts, meaning documents that make incompatible claims about the same subject. Detection runs on semantic similarity over a vector index to find candidate pairs, then an optional LLM verification pass confirms the claims contradict each other instead of merely overlapping.
Incompleteness, covering missing metadata, broken links, truncated documents, and sections that promise content they never deliver.
Drift, where meaning changed across versions without anything recording that it changed.
pip install doclint
Or from source with Poetry:
git clone https://github.com/karthikcsq/doclint.git
cd doclint && poetry install
doclint scan ./knowledge-base/
Output is a terminal report by default, with JSON and HTML available for CI.
The scanner discovers files and routes each to a parser (PDF, DOCX, HTML, Markdown, plain text) that extracts text alongside metadata like author, date, and version. Embeddings are generated once per file and cached against content hash, so a rescan after editing three documents costs three embeddings instead of the whole corpus. Detectors then run in parallel over the indexed corpus, and the reporter aggregates their findings.
Embeddings run locally through sentence-transformers. The LLM verification pass is opt-in and is the only step that can call an external API.
CLI (typer + rich)
└── Scanner
├── Parsers pdf, docx, html, markdown, text
├── Cache content-hashed, skips unchanged files
├── Embeddings sentence-transformers, local
├── Detectors conflicts, completeness, llm_verifier
└── Reporters console, json, html
Alpha. The parser, cache, embedding, and detection layers are implemented and covered by tests. Drift detection across document versions is the least mature piece. Full design notes are in doclint_architecture.md.
MIT licensed.
Data quality linting for AI knowledge bases. Finds the contradictions, stale facts, and missing metadata in a corpus before retrieval turns them into confident wrong answers.
Python
0
34 commits
updated Aug 19, 2026
Data quality linting for AI knowledge bases.
A RAG system inherits every contradiction and stale fact in its corpus, then surfaces them as confident wrong answers. doclint scans the corpus before retrieval ever touches it and reports what will go wrong.
Two documents that answer the same question differently will not fail any test you currently have. The retriever returns both, the model picks one, and nothing anywhere logs that a choice was made.
Conflicts, meaning documents that make incompatible claims about the same subject. Detection runs on semantic similarity over a vector index to find candidate pairs, then an optional LLM verification pass confirms the claims contradict each other instead of merely overlapping.
Incompleteness, covering missing metadata, broken links, truncated documents, and sections that promise content they never deliver.
Drift, where meaning changed across versions without anything recording that it changed.
pip install doclint
Or from source with Poetry:
git clone https://github.com/karthikcsq/doclint.git
cd doclint && poetry install
doclint scan ./knowledge-base/
Output is a terminal report by default, with JSON and HTML available for CI.
The scanner discovers files and routes each to a parser (PDF, DOCX, HTML, Markdown, plain text) that extracts text alongside metadata like author, date, and version. Embeddings are generated once per file and cached against content hash, so a rescan after editing three documents costs three embeddings instead of the whole corpus. Detectors then run in parallel over the indexed corpus, and the reporter aggregates their findings.
Embeddings run locally through sentence-transformers. The LLM verification pass is opt-in and is the only step that can call an external API.
CLI (typer + rich)
└── Scanner
├── Parsers pdf, docx, html, markdown, text
├── Cache content-hashed, skips unchanged files
├── Embeddings sentence-transformers, local
├── Detectors conflicts, completeness, llm_verifier
└── Reporters console, json, html
Alpha. The parser, cache, embedding, and detection layers are implemented and covered by tests. Drift detection across document versions is the least mature piece. Full design notes are in doclint_architecture.md.
MIT licensed.