Add an architectural decision log using MADR - #5245
Draft
madurangasiriwardena wants to merge 1 commit into
Draft
Conversation
madurangasiriwardena
force-pushed
the
adr-decision-log
branch
2 times, most recently
from
September 1, 2026 17:04
ac62fd5 to
d89105a
Compare
Contributor
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
madurangasiriwardena
force-pushed
the
adr-decision-log
branch
2 times, most recently
from
September 2, 2026 04:21
c8429a0 to
93842e4
Compare
Introduce docs/adrs as the decision log, recording the choice of format as ADR-0000, alongside a template and the process for proposing, accepting and superseding records. Adoption is enforced rather than left to convention: a CODEOWNERS entry on the directory, a Related ADRs section and checklist item in the pull request template, and an adr-lint workflow that runs markdownlint and then checks the filename pattern, the status vocabulary, agreement between each record and its index row, and number uniqueness. Records are exempted from the docs/content page conventions in docs-lint.sh and .vale.ini, because they are not documentation pages, and excluded from the docs paths filter so that an ADR-only change does not trigger a Docusaurus build. Signed-off-by: Maduranga Siriwardena <maduranga.siriwardena@gmail.com>
madurangasiriwardena
force-pushed
the
adr-decision-log
branch
from
September 2, 2026 04:36
93842e4 to
9c71fe3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
ThunderID has no decision log. Design reasoning currently lives in GitHub Discussions, pull request threads, and, for older decisions, internal mail threads that external contributors cannot read at all. The result is that rejected proposals resurface, and a deliberate deviation from a specification is indistinguishable from an oversight.
This PR introduces
docs/adrs/as the decision log, adopting MADR 4.0.0 as the format. It records that choice as the first record, ADR-0000, so the log opens by explaining itself.Nothing in the runtime changes. This is documentation plus CI wiring.
Approach
The log.
docs/adrs/README.mddocuments when a record is required (wire-visible contracts, deliberate spec deviations, persistence schema or storage strategy, runtime dependencies, cross-cutting patterns), the propose and accept process, the rule that accepted records are immutable and are changed only by superseding them, and flat numbering.adr-template.mdis the MADR 4.0 template withstatuspre-filled so a copied record starts valid. The README deliberately references no specific table, package or subsystem, so it does not need editing as the code around it changes.Enforcement rather than convention. A partially adopted log is worse than none, because readers infer that an undocumented decision was never deliberately made. Three mechanisms rather than good intentions:
CODEOWNERSentry ondocs/adrs/, so every record gets architectural review.### Related ADRssection and a checklist item in the pull request template. The item is phrased as checked whether an ADR is required rather than wrote an ADR, so a contributor whose change needs no record can still tick it truthfully. A box only some contributors can tick is a box everyone learns to ignore..github/workflows/adr-lint.yml, which runs markdownlint over the directory and then checks theNNNN-title-with-dashes.mdfilename pattern, thatstatusholds a recognized value, that each record has an index row whose Status column agrees with its front matter, and that numbers are unique.Lint scoping. Records are not
docs/contentpages and cannot satisfy those conventions, soscripts/docs-lint.shand.vale.iniexempt the directory.docs/adrs/**is also excluded from thedocspaths filter inpr-builder.yml, because the Docusaurus content root isdocs/contentand an ADR-only change has no site to build.Two notes for reviewers:
adr-lint.ymlusespnpm dlx, notnpx. The rootpackage.jsonpins pnpm throughdevEngines, which makes npm refuse to runnpxanywhere in this repository.pull_requestondocs/adrs/**with an unfilteredmerge_group, matchingdocs-style-check.yml. If it is ever made a required check in branch protection, PRs that do not touchdocs/adrs/will wait on a status that never reports.Related Issues
Related PRs
Related ADRs
Checklist
breaking changelabel added.Security checks