Skip to content

Decisions (ADRs)

Hard-to-reverse or cross-cutting choices are recorded as Architecture Decision Records (ADRs). In a managed product repo, ADRs live in the /spec spine; for the plugin itself, decisions are captured in CHANGELOG.md and PRs.

When to write an ADR

The bar is reversal cost, not novelty. Use /steer:adr when undoing the choice later would mean changing work built on top of it — stack, database, auth, deployment, tenancy model — or when asked to record a decision.

A first-time pattern is not an ADR. Used in one place it is a contract.md line; it earns an ADR when a third use makes it the house style. In a young codebase almost every pattern is new, so treating novelty as the trigger turns ordinary work into a decision record nobody reads. The practical test: if you cannot name the work a reversal would force you to redo, it is not an ADR yet.

flowchart TD
    Q{"Would reversing it mean
    redoing work built on top?"} -->|No| SKIP[No ADR needed]
    Q -->|Yes| PROPOSED[ADR: Proposed]
    PROPOSED --> REVIEW{Ratified by a human?}
    REVIEW -->|Yes| ACCEPTED[ADR: Accepted]
    REVIEW -->|Superseded later| SUPERSEDED[ADR: Superseded]

ADR status

New ADRs default to Proposed — the fixture suite asserts this. An ADR becomes Accepted only on an explicit human decision.

That decision is answerable in-session. /steer:adr accept <n> is the single writer of Proposed → Accepted: it offers the three-option gate prompt (Approve · Reject · Decide later) carrying the ADR's rejected alternatives and negative consequences, then stamps > Ratified by: / > Ratified at: / > Ratified via: (in-session or offline-review) and writes one /spec/history/ entry file. Decide later changes nothing, so an undecided ADR is never worse off. Self-ratification is legitimate — in a solo repo the author and decider are the same person, and the channel stamp is what keeps it auditable. See rule 61-gate-prompts and /steer:reference gates.

No ADR from inference

Reverse-engineering skills (/steer:adopt) must never infer a ratified ADR from code. An ADR records a decision a human made; the as-built spine records what exists. See Product spine.

Plugin-level decisions

ADRs are an artifact of the /spec spine in a managed product repo. The e22-plugins repo itself keeps no ADR log: changes to the plugin's own behavior are recorded in CHANGELOG.md under ## steer### [Unreleased], with the rationale — alternatives, consequences, what was rejected — in the PR description. See Release process.

A decision too large for a PR description is a signal to split the PR, not to introduce a record type. Adding a decision log for the plugin would be a change to how the repo works, so it goes through a convention-only PR first — see CONTRIBUTING.md → "Working in this repo".