Skip to content

Commit f69b992

Browse files
authored
Merge pull request #1966 from fullsend-ai/docs/adr-minor-updates-policy
docs: allow minor annotations on accepted ADRs
2 parents b1fdcec + cb18f31 commit f69b992

6 files changed

Lines changed: 40 additions & 25 deletions

File tree

AGENTS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ All git forge operations (GitHub API calls, PR comments, issue creation, workflo
3030

3131
These rules apply whenever you touch `docs/ADRs/` or review a PR that does. Full authoring guidance is in [`skills/writing-adrs/SKILL.md`](skills/writing-adrs/SKILL.md); invoke that skill when writing a new ADR.
3232

33-
**Immutability:** Once an ADR on `main` has status **Accepted**, its Context, Decision, and Consequences sections are frozen. Do not add post-decision notes, rewrite rationale, or edit consequences in place. When circumstances change, write a **new** ADR that supersedes the old one. The only acceptable edits to an Accepted ADR on `main` are status changes (e.g., to Deprecated or Superseded) and links to the superseding ADR. Typos and broken links are narrow exceptions — call them out in the PR description.
33+
**Immutability:** Once an ADR on `main` has status **Accepted**, it is a point-in-time record. Do not substantially rewrite its Context, Decision, or Consequences sections. When circumstances change, write a **new** ADR that supersedes the old one. Minor annotations are welcome: cross-references to related ADRs, short notes linking to newer decisions, typo and broken-link fixes, and status changes (e.g., to Deprecated or Superseded). Call out any edits to accepted ADRs in the PR description.
3434

3535
**New ADRs in pull requests:** Approval happens at **merge**, not when the branch is created. If the decision is made, set status to **Accepted** in the ADR you are proposing (not **Proposed** merely because the PR is open). Use **Proposed** or **Undecided** only when the decision itself is still unsettled. When status is Accepted, update `docs/architecture.md` and related problem docs in the same PR per the writing-adrs skill.
3636

37-
**When reviewing PRs:** Flag in-place edits to Context, Decision, or Consequences on Accepted ADRs already on `main` as a policy violation. Allow status-only updates and supersession links. For brand-new ADR files on the PR branch, evaluate whether the recorded decision matches the diff — do not treat **Accepted** on a new file as a mistake if the ADR is ready for human review at merge.
37+
**When reviewing PRs:** Flag substantial rewrites to Context, Decision, or Consequences on Accepted ADRs already on `main` as a policy violation. Allow minor annotations (cross-references, short notes, typo fixes), status updates, and supersession links. For brand-new ADR files on the PR branch, evaluate whether the recorded decision matches the diff — do not treat **Accepted** on a new file as a mistake if the ADR is ready for human review at merge.

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ This project uses the [Probot DCO app](https://github.com/apps/dco) to enforce s
8181
- PRs require approval from a [CODEOWNERS](CODEOWNERS) member before merging.
8282
## Working with ADRs
8383

84-
ADRs (Architecture Decision Records) are **point-in-time records**. Once accepted, their content is frozen — do not edit the Context, Decision, or Consequences sections. If a decision needs to change, write a new ADR that supersedes the old one. See the [ADR template](docs/ADRs/0000-adr-template.md) and [ADR 0001](docs/ADRs/0001-use-adrs-for-decision-making.md) for full details.
84+
ADRs (Architecture Decision Records) are **point-in-time records**. Once accepted, do not substantially rewrite their Context, Decision, or Consequences sections — if a decision needs to change, write a new ADR that supersedes the old one. Minor annotations are welcome: cross-references to related ADRs, short notes linking to newer decisions, and typo fixes. See the [ADR template](docs/ADRs/0000-adr-template.md) and [ADR 0001](docs/ADRs/0001-use-adrs-for-decision-making.md) for full details.
8585

8686
### ADR numbering
8787

docs/ADRs/0000-adr-template.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ Date: YYYY-MM-DD
1515

1616
{Accepted | Deprecated | Superseded}
1717

18-
<!-- Once this ADR is Accepted, its content is frozen. Do not edit the Context,
19-
Decision, or Consequences sections. If circumstances change, write a new
20-
ADR that supersedes this one. Only status changes and links to superseding
21-
ADRs should be added after acceptance. -->
18+
<!-- ADRs are point-in-time records, but not fully frozen after acceptance.
19+
Minor annotations are welcome: cross-references to related ADRs, short
20+
notes linking to newer decisions, or clarifying remarks. However, do not
21+
substantially rewrite the Context, Decision, or Consequences sections. If
22+
the decision itself needs to change, write a new ADR that supersedes this
23+
one. For evolving design narrative, use docs/architecture.md. -->
2224

2325
## Context
2426

docs/architecture.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ What are the components of the agent execution stack?
44

55
> **This is a living document.** It must always reflect the current state of
66
> architectural decisions. When an ADR is accepted (or superseded), this
7-
> document is updated to match. ADRs are point-in-time records and are not
8-
> modified after acceptance; this document is where the *current* truth lives.
7+
> document is updated to match. ADRs are point-in-time records that may receive minor annotations
8+
> but are not substantially rewritten; this document is where the *current* truth lives.
99
> A reader should be able to understand the system's architecture from this
1010
> document alone, without tracing a chain of ADRs.
1111

skills/renumber-adr/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,4 @@ After all renames and reference updates:
128128
collides, renumber all of them before updating references (so cross-references
129129
among the new ADRs are correct).
130130
- **Do not modify ADR content** beyond the number in the title and heading.
131-
ADR content is immutable once accepted; this skill only fixes numbering.
131+
Substantial ADR content is not rewritten once accepted; this skill only fixes numbering.

skills/writing-adrs/SKILL.md

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,38 @@ description: >-
1212

1313
An ADR records exactly **one** decision. Problem docs explore; ADRs decide.
1414
`docs/architecture.md` and problem docs are the current state (mutable). ADRs
15-
are point-in-time records (immutable once accepted).
15+
are point-in-time records that can receive minor annotations but should not be
16+
substantially rewritten.
1617

17-
### ADRs are immutable records
18+
### ADRs are point-in-time records, not evolving documents
1819

19-
Once an ADR is accepted, its content is frozen. It captures the decision, the
20-
context that existed at that time, and the consequences as understood then. When
21-
new information arrives or circumstances change, write a **new** ADR that
22-
supersedes the old one -- do not edit the original's Context, Decision, or
23-
Consequences sections.
20+
An ADR captures a decision and the context that existed when it was made. It is
21+
not a living design document -- that role belongs to `docs/architecture.md`.
22+
23+
That said, accepted ADRs are **not 100% frozen**. Minor annotations after the
24+
fact are welcome and encouraged:
2425

2526
**Acceptable modifications to an accepted ADR:**
2627

2728
- Changing its `status` (e.g., from Accepted to Deprecated or Superseded)
28-
- Adding a link or note pointing to a newer ADR that supersedes it
29+
- Adding cross-reference links to related or superseding ADRs
30+
- Adding short notes that connect the ADR to newer decisions or clarifications
31+
- Fixing typos, broken links, or formatting
32+
33+
These annotations keep ADRs useful as navigational aids rather than dead-end
34+
documents. When a reader lands on an older ADR, links to subsequent decisions
35+
help them find the current state of thinking.
2936

30-
**Not acceptable:**
37+
**Not acceptable -- write a new ADR instead:**
3138

32-
- Rewriting the Context to reflect updated understanding
39+
- Substantially rewriting Context to reflect updated understanding
3340
- Editing the Decision to match a revised approach
3441
- Modifying Consequences based on what actually happened
42+
- Turning the ADR into a running log of how the decision evolved
3543

36-
If a decision turned out to be wrong, that is exactly what supersession is for.
37-
The original ADR remains as a historical record of what was decided and why.
44+
If a decision turned out to be wrong, that is what supersession is for. The
45+
original ADR remains as a historical record of what was decided and why. For
46+
ongoing design narrative, use `docs/architecture.md`.
3847

3948
### docs/architecture.md is always current
4049

@@ -191,8 +200,10 @@ If the ADR partially answers a question, add a parenthetical:
191200
- You're rewriting a section of architecture.md -- make a surgical edit instead
192201
- `relates_to` lists more than 3 problem docs -- the decision may be too broad
193202
- You didn't run `make lint` -- stop and run it
194-
- You're editing the Context, Decision, or Consequences of an accepted ADR --
195-
write a new superseding ADR instead
203+
- You're substantially rewriting the Context, Decision, or Consequences of an
204+
accepted ADR -- write a new superseding ADR instead
205+
- You're turning an old ADR into a running changelog -- use
206+
`docs/architecture.md` for evolving design narrative
196207

197208
## Common Mistakes
198209

@@ -205,6 +216,8 @@ If the ADR partially answers a question, add a parenthetical:
205216
| Rewriting existing doc sections | Make surgical additions only |
206217
| Skipping linters | Run `make lint` before committing |
207218
| Wrong ADR number | Check existing files in `docs/ADRs/` first |
208-
| Editing an accepted ADR's content | Write a new ADR that supersedes it |
219+
| Substantially rewriting an accepted ADR | Write a new ADR that supersedes it |
220+
| Omitting cross-references to related ADRs | Link older ADRs to newer related decisions |
221+
| Treating old ADRs as evolving design docs | Use `docs/architecture.md` for living narrative |
209222
| Forgetting to update architecture.md | It must always reflect current decisions |
210223
| Leading zeros in title number | Use `"1. Title"` not `"0001. Title"` — zero-padded numbers are only for filenames |

0 commit comments

Comments
 (0)