Introduction
Reusable engineering-discipline toolkit: documentation anti-drift checks, pre-commit hooks, reusable CI workflows, and agent skills. Extracted from poly and designed to be adopted by arbitrary projects with a few lines of configuration.
The current shipment: 19 static and diff-scoped checks, 11 agent skills, three reusable CI workflows, and a set of pre-commit hooks that wrap each doc-facing check.
Well-run projects accumulate discipline mechanisms — doc-drift gates, sanitizer matrices, escape hatches that demand written reasons — but they stay trapped in the repo that invented them. This repo extracts those mechanisms into a versioned, consumable standard so every project (mine or yours) can exhibit the same discipline without re-deriving it.
The design principle throughout: every check is simple (regex/diff-level), every escape hatch is in-band, greppable, and carries a written reason. Sophistication lives in the system design, not the analysis techniques — which is what makes the whole thing portable.
What lives here
Section titled “What lives here”Doc anti-drift checks (19 in the registry). Each check enforces one invariant of the documentation lifecycle — lifecycle classes, drift-map coupling, generated-doc freshness, dated status claims, symbol-based references, cited behavioral claims, interpolated inventory counts. See Checks reference for the full list.
Pre-commit hooks wrap the doc-facing checks so they run on every commit in a consuming repo. See Adopt in a repo.
Reusable CI workflows (doc-discipline.yml, pre-commit.yml,
sanitizer-nightly.yml). doc-discipline.yml gates PRs with the full check
suite plus doc-drift (which needs a merge base); pre-commit.yml runs a
consuming repo’s pre-commit hooks against its checkout; sanitizer-nightly.yml
runs a scheduled ASan/UBSan/TSan matrix and opens/updates/closes a single
label-deduped sanitizer-failure issue as legs go red or green. Each is one
uses: line in a consuming workflow file, pinned to a release tag.
Agent skills (11 shipped). Authoring-time discipline for AI coding agents — the conventions the checks enforce, taught at write time. See Skills.
What it isn’t
Section titled “What it isn’t”- Not a linter framework. The checks are single-purpose scripts, each one regex/diff/AST-simple. There’s no plugin system; there’s a registry.
- Not a doc generator. The
generated-freshnesscheck enforces that YOUR generator’s output is committed and current, but jk-standards does not ship one. - Not a competitor to nfr-review. nfr-review detects whether a repo has this discipline wired up; jk-standards enforces it. Producer/ consumer split, versioned independently.
When to reach for it
Section titled “When to reach for it”- Docs in your repo describe behavior that changes faster than the docs
themselves — you need
doc-driftandgenerated-freshness. - Prose in your repo cites test outcomes or inventory counts that quietly
fall out of sync — you need
behavioral-claimsandcount-drift. - Comments and enduring docs reference
foo.cpp:429and rot every time someone reformats — you needfile-line-refs. - You want AI coding agents in your repo to write within these conventions rather than fight them — you want the skills.
If none of that resonates, this probably isn’t the toolkit you’re looking for. It’s opinionated by design.
- Quickstart — wire it into a fresh repo in ten minutes.
- Checks reference — every check, its rule, and its escape hatch.
- Configuration reference — every
jk-standards.yamlfield with its default.