--- description: Record an architecture decision as a correctly templated, numbered, and indexed ADR in one invocation. Use unprompted WHEN a decision of real consequence has just been made or is being made mid-task — choosing between technologies, setting a convention, changing an approach the codebase already uses, or reversing/superseding a previously recorded decision (a reversal is itself a decision that must be recorded). Invoked by `/os-adr:create`. --- Create a new ADR under `docs/adr/`. All mechanical work (ID assignment, templating, index regeneration, supersession bookkeeping) is done by the plugin's CLI — never hand-author the file, number, or index. **Moments that warrant an ADR** (recognize these unprompted; don't wait to be asked): - a technology/library/protocol choice with alternatives that were genuinely considered - a convention or pattern the codebase will now follow - a change that replaces an approach the codebase already uses - a **reversal of an existing Accepted ADR** — a task that reverses a recorded decision is **not complete** until the superseding ADR is created (`supersedes: NNNN`); implementing the change and stopping leaves the ADR history asserting the opposite of what the code does ## 1. Gather the decision content From the conversation (ask only for what you cannot infer): - **title** — short, imperative or noun-phrase ("Use Postgres for persistence") - **context** — the forces/problem that made a decision necessary - **decision** — what was decided, stated actively - **consequences** — what becomes easier/harder as a result - **alternatives** — options considered and *why each was rejected* (highest-value field; push for real reasons, not placeholders) - **affected_paths** / **affected_components** — repo paths and component names this decision governs (used for deterministic retrieval later; be concrete, e.g. `["src/db/", "config/database.yml"]`) - **status** — default `Accepted`; use `Proposed` only if the user says it isn't settled - **supersedes** — 4-digit ID, only if this replaces an existing ADR (check `docs/adr/README.md`) If the project has no `docs/adr/` yet, run `/os-adr:init` first (or its CLI, step 2's `adr-init`). ## 2. Invoke the CLI ```bash echo '{"title": "...", "context": "...", "decision": "...", "consequences": "...", "alternatives": "...", "affected_paths": ["..."], "affected_components": ["..."]}' \ | ruby ${CLAUDE_PLUGIN_ROOT}/bin/adr-new --root ``` Optional JSON fields: `status`, `date` (ISO), `supersedes` ("NNNN"). The CLI prints the created file path, sets `superseded-by` + `Superseded` status on any superseded ADR, and regenerates `docs/adr/README.md`. Prefer writing the JSON to a temp file and piping it (`cat file | ...`) when section bodies contain quotes. ## 3. Confirm Show the user the created path and a one-line summary. Do not edit the generated index by hand.