docpact
docpact is a standalone Rust CLI for deterministic, diff-driven documentation governance.
It helps teams and agents answer three practical questions:
- before coding: what documents should I read first?
- after coding: what documentation should this change have reviewed or updated?
- ongoing: which governed documents have gone stale?
docpact stays deterministic. It does not replace governance decisions with AI inference, and it does not hide state in background services or opaque caches.
License: MIT
Why docpact
AI coding tools make code changes cheaper. They also make documentation drift cheaper.
In agentic coding workflows, that usually breaks down in three places:
- before coding: an agent does not know which documents it should read first, so it either loads too much, relies on coarse pointers, or skips discovery entirely
- after coding: an agent does not know which documents should have been reviewed or updated as a consequence of the change
- ongoing: an agent treats documentation as authoritative input, but has no built-in signal for whether that documentation has silently gone stale
docpact closes that loop:
routehelps decide what to read before codinglintenforces which governed docs should have been reviewed or updated after codingfreshnessdetects governed docs that may no longer be trustworthyrenderexposes short, read-only summaries over catalog, ownership, navigation, and workspace context
Public design principles:
Install
Install from crates.io:
Run from source:
Install from a local checkout:
Quick Start
- Start from one of the bundled config examples:
- Copy the right shape into the target repository as
.docpact/config.yaml. - Validate the config.
- Run
lintagainst an explicit diff source.
Example:
lint always needs one explicit diff source. Use one of:
--files <csv>--staged--worktree--merge-base <ref>--base <sha> --head <sha>
Core Commands
Validate configuration
Check a concrete change
Drill into one finding
Record completed review evidence
or, when coming from one explicit lint finding:
Audit governance coverage
Audit document freshness
Route reading before coding
Render derived summaries
Adoption Controls
docpact supports explicit adoption controls for repositories that cannot enforce all existing debt immediately.
Create and apply a baseline:
Add a waiver for one explicit finding:
Then apply it during lint:
Use waivers sparingly. They are temporary, explicit exceptions, not a default suppression path.
GitHub Actions
This repository ships a thin official GitHub Action wrapper in action.yml.
Typical usage:
- uses: <org>/docpact@v1
with:
version: 0.1.2
args: >
lint
--root .
--base ${{ github.event.pull_request.base.sha }}
--head ${{ github.sha }}
--mode enforce
Reference workflows:
- examples/github-actions/pr-lint.yml
- examples/github-actions/pr-lint-with-adoption-controls.yml
- examples/github-actions/coverage-audit.yml
- examples/github-actions/freshness-audit.yml
Repository CI workflows:
- test.yml: minimal PR and default-branch test CI
- release.yml: tag-driven crates.io publish and GitHub Release
Skills
This repository also ships official workflow skills under skills/:
- skills/README.md
- skills/docpact/SKILL.md: direct workflow entrypoint
- skills/docpact-governance/SKILL.md: governance-maintainer entrypoint
Current Capabilities
Current docpact capabilities include:
- repo and workspace config loading
- explicit workspace profile inheritance and child overrides
- deterministic trigger-to-required-doc matching
- metadata checks on governed Markdown and YAML docs
- diff coverage and repository coverage audit
- repository freshness audit
- deterministic routing with paths, module scope, and controlled intents
- read-only derived render views for catalog, ownership, navigation, and workspace summaries
- report-backed diagnostics drill-down
- explicit review-evidence recording
- baseline and waiver lifecycle
- list-rules and doctor inspection commands
- text, JSON, and SARIF reporting
- official GitHub Action wrapper
- official skills for direct workflow and governance maintenance
Still deferred:
- symbol-level drift checks
- executable documentation hooks
- AI-assisted semantic review
- documentation generation from code