ADR-0001 — Every change starts with an approved ADR
Every feature and functional change starts with a written decision, and no implementation begins until the owner approves it.
- Status: Approved
- Date: 2026-10-31
- Deciders: @puncoz
- Approved by: @puncoz
- Approved on: 2026-11-01
- Supersedes: —
- Superseded by: —
- Design documents:
AGENTS.md§2–§3,content/docs/maintain/adr/index.mdx,content/docs/maintain/_templates/adr.mdx
Context
puncoz-packages-docs is greenfield: a Fumadocs scaffold that will document every package, library and project its owner builds — npm, Composer and other ecosystems, public and private projects. The owner builds it change by change, largely with AI agents.
Two forces make an explicit gate necessary:
- The expensive mistakes are structural and early. How content is laid out per ecosystem and package, how versions are handled, and how private project documentation is kept off the public site are cheap to get right on paper and expensive to change once many pages and inbound links depend on them. A private page that was published cannot be unpublished.
- Agents produce plausible work fast. Without a gate, a decision is made implicitly in code and found late.
Decision
- Every feature and functional change starts with an ADR in
content/docs/maintain/adr/, written fromcontent/docs/maintain/_templates/adr.mdx, withStatus: Proposedand an index row incontent/docs/maintain/adr/index.mdx. - No application code is written until the owner explicitly approves it. Approval sets
Status: Approved,Approved by,Approved on. - Once approved, the whole scope is implemented in one pass, with tests and every affected document, without stopping for per-step review.
- Agents never commit, push, rebase or switch branches. The owner reviews the working tree and commits.
- An approved ADR's Decision is never edited; it is superseded by a new ADR.
- Content within approved conventions needs no ADR. Writing or updating a package's or project's pages is the site's normal work; deciding the conventions themselves is not.
What needs an ADR is the table in AGENTS.md §2. Anything that decides how private project
documentation is stored, built, served or searched always does.
Options considered
| Option | Pros | Cons | Verdict |
|---|---|---|---|
| A — ADR gate for every functional change | Decisions are explicit, reviewable and recorded; structural mistakes are caught before code | Ceremony on small features | Chosen |
| B — Code first, document after | Fast | Decisions are implicit; privacy and structure errors are found late | Rejected |
| C — ADRs only for "big" changes | Less ceremony | "Big" is judged by whoever wants to skip it | Rejected |
Consequences
Positive
- Every decision has a record of why, which an agent in a later session can read.
- The owner controls scope change by change.
Negative / accepted trade-offs
- Small features carry an ADR's overhead. Accepted: the template keeps a small ADR small.
Content invariants
Establishes the gate through which any departure from AGENTS.md §6 must pass.
Security considerations
None directly — this is a process decision. It does make every later security decision pass through the mandatory security section of an ADR (ADR-0005).
Implementation notes
-
AGENTS.md§2–§3 describe the gate and execution rules. -
content/docs/maintain/adr/index.mdxholds the index and the next free number. -
content/docs/maintain/_templates/adr.mdxexists. - Tests: not applicable (process only).
Written together with the documents it governs, at the owner's direct request, so the implementation notes above are already done. If the owner rejects or changes this ADR, the documents are changed to match.
Docs to update on implementation
-
content/docs/maintain/adr/index.mdx— status on approval.
Architecture Decision Records
Every decision about how this site is built and run, with its status, from the first ADR to the latest.
ADR-0002 — Design documents are living snapshots, published as this site's Maintain track
This site's design documents describe it as it stands now and are published as its Maintain track, separate from decisions and package docs.