Skip to content

feat: record the ADR policy in ADR 0009 and check it (DOC-04, adr-lint) - #111

Merged
kcramakrishna merged 4 commits into
devfrom
feat/adr-policy-checks
Nov 10, 2026
Merged

kcramakrishna merged 4 commits into
devfrom
feat/adr-policy-checks

Conversation

@kcramakrishna

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #110: the ADR policy is now recorded and checked.

  • ADR 0009 (root) records why ADRs hold only the current decision: agents load an ADR as an instruction and
    apply a superseded record as a current rule. It lists the rejected conventions (status lifecycle, archive
    folder, status-only header, history section) and the trade-offs.
  • DOC-04 flags retired ADRs in an audited repository: a status line or field, or a ## Status section, that
    says superseded, deprecated, rejected or obsolete, or a line that opens with "superseded by", "replaced by" or
    "deprecated by / in favour of", is PARTIAL with its file and line. A plain Status: Accepted is not flagged.
    Ruleset 2026-11-10.5; one-defect fixture doc-04-adr-tombstone with its eval file; in-process tests; rubric,
    REQ-SH-019 line, changelog and audit master. Self-audit: DOC-04 PASS.
  • make adr-lint (in make check and the CI static job): dev/adr_lint.py fails on a lifecycle field or
    section, a retired-ADR marker (the same rule as DOC-04), a missing or reordered template section, a title
    without its number, or an ADR with no row in the root index (and an index row to a missing ADR).

The CI job static is renamed to mention the ADR lint; only CI Gate is required, so merging is unaffected.

Checks

  • make check, make security, make docs-lint (baseline 647), make commit-lint RANGE=origin/dev..HEAD: pass.
  • Positive-fixture test with the sibling scaffolder: pass.

🤖 Generated with Claude Code

kcramakrishna and others added 4 commits November 10, 2026 10:36
Agents load ADRs as instructions and apply a superseded record as a
current rule. ADR 0009 records that reasoning, the rejected lifecycle
conventions and the trade-offs. The policy page links to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An ADR marked superseded, deprecated, rejected or obsolete is loaded by
an agent as a current rule (root ADR 0009). DOC-04 now reads each
numbered ADR for a status line or field, a `## Status` section, or a
line that opens with "superseded by", "replaced by" or "deprecated by /
in favour of". Any such tombstone is PARTIAL, with its file and line,
even when the index lists every entry. A plain `Status: Accepted` is
not flagged, and the word inside a sentence or table does not count.

Ruleset 2026-11-10.5; no catalogue bump. One-defect fixture
doc-04-adr-tombstone with its eval file, in-process tests, rubric,
REQ-SH-019 line, changelog and audit master. Self-audit: DOC-04 PASS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dev/adr_lint.py fails when an ADR in any of the five ADR folders has a
lifecycle field (Status, Date, Last reviewed, Deciders), a Lifecycle
section, a retired-ADR marker (the audit's DOC-04 rule, loaded at run
time so strict mypy stays on dev/), a missing or reordered template
section, a title without its number, or no row in the root index. An
index row to a missing ADR fails too. CI runs it in the static job.
The policy page, ADR 0009 and the gate listings name it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kcramakrishna
kcramakrishna added this pull request to the merge queue Nov 10, 2026
Merged via the queue into dev with commit c304ee5 Nov 10, 2026
18 checks passed
@kcramakrishna
kcramakrishna deleted the feat/adr-policy-checks branch November 10, 2026 05:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant