Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Docuchango

PyPI version CI codecov Python Version License: MPL 2.0

Docuchango logo

Docuchango keeps a folder of engineering documents valid. Give it a docs-cms/ directory of ADRs, RFCs, memos and PRDs, and it checks the frontmatter against a schema, verifies every link, cleans up the Markdown, and fixes what it can without asking. It is built for repositories where humans and coding agents write documentation together and need it to stay trustworthy.

  • Structured by default. Every document has an id, a title, a created date, tags, a project id and a UUID, enforced by Pydantic schemas per document type. ADRs, RFCs and PRDs also carry a status.
  • Fixes, not just findings. Whitespace, code fences, status variants, recognizable date formats and tags are repaired in place, and a missing tags, project_id or doc_uuid is filled in with a default. What it cannot fill in safely, such as title or deciders, it reports.
  • Agent-ready. Ships a guide that tells coding agents how to read, cite and extend the docs. Point AGENTS.md at it and you are done.
  • Fast and CI-friendly. A hundred documents validate in under a second, with exit codes that work in pre-commit hooks and pull request checks.

Two-minute start

You need Python 3.10 or newer. With uv nothing else has to be installed:

# 1. Create the folder structure, config and templates
uvx docuchango init --project-id my-app --project-name "My App"

# 2. Write your first decision record from the template
cp docs-cms/templates/adr-000-template.md docs-cms/adr/adr-001-adopt-docs-cms.md
#    ...edit the frontmatter and body...

# 3. Check it, then let it repair what it can
uvx docuchango validate --dry-run
uvx docuchango validate

Prefer a permanent install? pip install docuchango or uv tool install docuchango gives you the docuchango command directly.

init creates this layout:

docs-cms/
├── docs-project.yaml         # project config (id, folders, rules)
├── docs-project.schema.json  # editor validation for the config
├── README.md
├── adr/                      # Architecture Decision Records
├── rfcs/                     # Requests for Comments
├── memos/                    # Findings, plans, status notes
├── prd/                      # Product Requirements Documents
└── templates/                # adr-000, rfc-000, memo-000, prd-000

A validation run looks like this:

$ docuchango validate --dry-run

🔍 Validating Documentation
DRY RUN - No changes will be made

Scanned 12 files

✗ Remaining issues: 2
  docs-cms/adr/adr-004-event-bus.md
    • ID mismatch: frontmatter has 'adr-003' but filename suggests 'adr-004'
    • Line 53: Broken link './adr-002-example.md' - File not found

❌ Validation failed

Run it again without --dry-run and the fixable problems disappear. The two above need a human, so they stay in the report.

What a document looks like

Every file is Markdown with a YAML frontmatter block. This is a complete ADR header:

---
id: adr-001                 # lowercase, matches the filename
title: Adopt docs-cms
status: Accepted            # ADR: Proposed, Accepted, Rejected, Implemented, Deprecated, Superseded
created: 2026-09-14
deciders: Platform Team
tags: [documentation, process]
project_id: my-app          # from docs-project.yaml
doc_uuid: 7c9e6679-7425-40de-944b-e07fc1f90ae7   # generate once, never change
---

Each type adds a field or two:

Type Folder Extra required fields Status values
ADR adr/ deciders Proposed, Accepted, Rejected, Implemented, Deprecated, Superseded
RFC rfcs/ author Draft, Proposed, Accepted, Rejected, Implemented, Deprecated, Superseded
Memo memos/ author none required
PRD prd/ author, target_release Draft, In Review, Approved, In Progress, Completed, Cancelled

Generate a UUID with uuidgen | tr '[:upper:]' '[:lower:]' or python -c "import uuid; print(uuid.uuid4())".

Everyday commands

Command What it does
docuchango init Create docs-cms/ with config, schema and templates
docuchango validate Check every document and fix what can be fixed
docuchango validate --dry-run Report only, change nothing
docuchango validate --verbose Show every check, useful in CI logs
docuchango bulk update --type adr --set status=Accepted Change a frontmatter field across many documents
docuchango bulk timestamps Derive created dates from git history
docuchango migrate --project-id my-app Upgrade legacy frontmatter to the current schema
docuchango bootstrap Print the setup guide; --guide agent prints the agent guide

validate, the bulk commands and migrate all accept --dry-run. init does not: it refuses to write into a folder that already has files in it unless you pass --force, which overwrites the files it generates. dcc-validate is a short alias for docuchango validate.

Working with coding agents

Docuchango treats docs-cms/ as the project's durable memory. Tell your agents the same thing by adding an AGENTS.md at the repository root:

# Agent Instructions

Use `docs-cms/` as durable project memory. Read the relevant ADRs, RFCs,
PRDs and memos before changing architecture, schemas or process.

Record new durable knowledge as a docs-cms document, not as loose notes.
ADRs for decisions, RFCs for proposals, PRDs for requirements, memos for
findings. Do not mark an agent-authored decision `Accepted` without explicit
human approval; use `Proposed` or write a memo.

After editing docs-cms, run `docuchango validate` and report anything it
could not fix.

The full agent guide covers searching, citing and proposing documents. Print it with docuchango bootstrap --guide agent, or read docs/AGENT_GUIDE.md.

Validate in CI

name: Validate docs
on:
  pull_request:
    paths: ['docs-cms/**']
jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0   # git history lets docuchango derive timestamps
      - uses: astral-sh/setup-uv@v8
      - run: uvx docuchango validate --dry-run --verbose

Use --dry-run in CI so a pull request fails on problems instead of being silently rewritten. Run the fixing form locally or in a pre-commit hook.

Going further

Python API

from docuchango.validator import DocValidator
from docuchango.schemas import ADRFrontmatter

validator = DocValidator(repo_root=".", verbose=True)
validator.scan_documents()
validator.check_code_blocks()
validator.check_formatting()

adr = ADRFrontmatter(**frontmatter_data)

Development

uv sync                      # install with dev dependencies
uv run pytest                # tests
uv run pytest --cov=docuchango
uv run ruff format . && uv run ruff check .
uv run mypy docuchango tests
actionlint                   # GitHub Actions workflows
uv build

Releases are automated from conventional commits. See PUBLISHING.md.

Requirements

  • Python 3.10 to 3.15
  • macOS, Linux or Windows

License

Mozilla Public License 2.0. See LICENSE.

Metadata

Release files for docuchango 1.19.0rc3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for docuchango 1.19.0rc3
File Size Uploaded
docuchango-1.19.0rc3.tar.gz 218.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for docuchango 1.19.0rc3
File Interpreter ABI Platform
docuchango-1.19.0rc3-py3-none-any.whl Python 3 none any Details

Total release size: 376.3 kB

Release files / docuchango-1.19.0rc3.tar.gz

Download URL docuchango-1.19.0rc3.tar.gz
Size 218.5 kB
Tags Source
SHA-256 checksum
How to use checksums
10def234e105e422f78435e8f89ef79b27cf6c790248ddb3b5c843e4802c99e6
BLAKE2b-256 checksum
How to use checksums
5a54ffc5a09f0c305c6367d807dadd7da7fa1c458c01ab276a3334866087263a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / docuchango-1.19.0rc3-py3-none-any.whl

Download URL docuchango-1.19.0rc3-py3-none-any.whl
Size 157.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4b2873fdcea89a6fc186171468ef7b8f9fd142bdd9b5aa8cf66d953e5ab9ea39
BLAKE2b-256 checksum
How to use checksums
38995f284a0a17b440d1951eba29413d3479959b4a2f016aa74dfb90725e4118
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release history Release notifications | RSS feed

1.19.0

2 release files

This release

1.19.0rc3 This release

2 release files

1.18.1

2 release files

1.18.0

2 release files

1.17.2

2 release files

1.17.1

2 release files

1.17.0

2 release files

1.16.0

2 release files

1.15.0

2 release files

1.14.0

2 release files

1.13.0

2 release files

1.12.0

2 release files

1.11.0

2 release files

1.10.0

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.4

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page