kramme-cc-workflow/skills/kramme:docs:adr/SKILL.md
Author Architecture Decision Records for significant, long-lived decisions. Creates ADRs in docs/decisions/ with sequential numbering and lifecycle states (PROPOSED / ACCEPTED / SUPERSEDED / DEPRECATED). Detects and preserves existing ADR format when one is in use; falls back to a Nygard-style template otherwise. Use when adopting a new pattern, committing to a dependency, changing a public interface, changing the data model, or rejecting an alternative a future maintainer might reasonably re-propose. For in-project decisions during a tracked SIW initiative use /kramme:siw:close's decision log instead.
npx skillsauth add abildtoft/kramme-cc-workflow kramme:docs:adrInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Author an ADR for a significant, long-lived decision: state the problem, the choice, the alternatives rejected, and the consequences.
This skill writes ADR files and may update predecessor ADRs, so it runs only after explicit user invocation.
A decision warrants an ADR if any of these are true:
Route elsewhere if:
/kramme:siw:close, which emits a project-scoped decisions.md. This skill handles repo-level ADRs that outlive any single initiative./kramme:docs:feature-spec./kramme:docs:update-agents-md.Before drafting, check whether the project already has ADRs. If yes, preserve the existing style rather than imposing this template.
docs/decisions/docs/adr/ or adr/docs/architecture/decisions/architecture/decisions/0001- vs 001- vs ADR-001- vs adr-001-).ADR_DIR for the rest of the workflow.assets/adr-template.md when the directory does not exist or is empty.If the existing style uses a vocabulary that conflicts with the four lifecycle states below, prefer the project's vocabulary — but surface the mismatch with a CONFUSION marker so the user can decide whether to reconcile.
Four states (use verbatim unless the project already uses a different vocabulary):
"Don't delete old ADRs. They capture historical context."
Even SUPERSEDED ADRs stay in the directory. They explain why the current approach was chosen over the previous one. Deleting them erases the reasoning that a future maintainer needs to avoid re-making a rejected choice.
Emit these markers as you draft. They are non-optional when the condition applies.
Before expanding sections past the minimum, state the minimum viable ADR.
SIMPLICITY CHECK: minimum ADR = Context + Decision + one rejected alternative. Expanding Consequences because the decision has downstream effects on two services.
A minimum viable ADR has Context, Decision, and at least one rejected alternative. Expand only when a concrete reason forces it.
When drafting, you will spot prior decisions that were never documented. Do not backfill them silently.
NOTICED BUT NOT TOUCHING: caching strategy choice (Redis over Memcached, ~2024) was never captured as an ADR
Why skipping: out-of-scope for this ADR; log for a future backfill pass
Log the gap; do not retroactively invent ADRs for decisions you weren't present for.
Any claim in Context or Consequences that rests on measurement, benchmark, or external source must be verified. If you cannot verify it now, mark it.
UNVERIFIED: "Postgres writes are ~3x slower than Redis for our workload"
Source needed: benchmark in #perf channel or ops dashboard
An ADR built on unverified claims misleads future readers more than no ADR at all.
Gate drafting if any of these are absent:
MISSING REQUIREMENT: no deciders named
Cannot proceed past draft until resolved
If the decision scope is unclear — "is this one ADR or three?" — stop and clarify with the user before drafting.
CONFUSION: proposed ADR covers both session storage AND session encryption. These are separable decisions with different alternatives. Split into two ADRs?
Superseding produces a multi-file change (new ADR + predecessor update). State the plan before editing.
PLAN:
1. Write the new ADR in ADR_DIR using the detected filename convention (for example `0007-title.md`, `ADR-007-title.md`, or `adr-007-title.md`) with status PROPOSED unless the decision is already adopted
2. If the new ADR is already ACCEPTED, update #MMMM: change status to "SUPERSEDED by #NNNN", add forward-reference
3. Do not edit any other content of #MMMM
These are Tier-2 decisions — ask the user before proceeding:
ASK FIRST: about to supersede #0003 (ACCEPTED, authored by @alice 2024-06). Confirm before writing new ADR?
Five steps. Do not skip steps.
Apply the When to use criteria. If the decision affects only one function or is a purely tactical choice, emit a NOTICED BUT NOT TOUCHING marker (or nothing) and stop — this is not ADR-worthy.
Use ADR_DIR from pre-flight. Scan that directory for the highest existing ADR number and increment it. Match the project's detected filename contract, including any literal prefix, zero-padding, separator, and slug style. Do not silently normalize the project onto ADR- or bare-number filenames.
While scanning, also check existing ADR titles and slugs for one that already records this decision. If a match exists, emit CONFUSION ("an ADR for this decision may already exist: #NNNN — supersede it instead of creating a duplicate?") and resolve with the user before numbering a new file.
If the existing ADR filenames do not follow a sequential integer scheme you can increment safely (for example they are date-based or prose-only), emit CONFUSION and ask whether to preserve that non-sequential scheme or bootstrap a new ADR log.
For the common prefix + integer + separator + slug shapes, extract the integer with a pattern adjusted to the detected prefix and separator. Example starting point:
find "$ADR_DIR" -maxdepth 1 -type f -print \
| sed 's#.*/##' \
| sed -nE 's/^[^0-9]*([0-9]+)([-_].*)$/\1/p' \
| sort -n \
| tail -1
Treat that snippet as an example, not a universal regex: tighten it to the exact convention you detected in pre-flight (for example ADR-, adr-, bare digits, or another fixed prefix) before trusting the result.
If no ADR directory exists, create docs/decisions/, set ADR_DIR=docs/decisions/, and start at 0001.
assets/adr-template.md verbatim.Populate: Status (PROPOSED to start), Date (today, not the decision date — see Rationalizations), Deciders, Context, Decision, Consequences (positive / negative / neutral-or-follow-on), Alternatives considered (at least one).
Emit SIMPLICITY CHECK before expanding Consequences or Alternatives past the minimum.
Start as PROPOSED. Transition to ACCEPTED only when the decision is adopted (e.g. PR merged, team consensus recorded, external approval granted). Do not mark ACCEPTED pre-emptively.
Emit a PLAN marker first. Then:
PROPOSED by default and add a line noting the intended predecessor, such as Proposed successor to #MMMM.ACCEPTED and replace that note with Supersedes #MMMM.ACCEPTED, update the old ADR (#MMMM): change Status to SUPERSEDED by #NNNN and add a line referencing the successor. Do not edit any other content of the predecessor.If the predecessor was authored by someone else, emit ASK FIRST before proceeding.
kramme:code:api-design often surfaces choices that warrant an ADR (public surface shape, backwards-compatibility policy, versioning).kramme:code:migrate frequently produces an ADR recording the chosen migration path and what alternatives were rejected.kramme:siw:init / kramme:siw:close handle decisions that live within a single tracked initiative via a project-scoped decisions.md. Do not double-log those here.kramme:code:incremental — when an ADR accompanies code changes, each slice stays scoped to its own decision. Do not bundle multiple ADR-worthy decisions into one slice.Skills that resolve decisions during their own workflow (discovery interviews, refactor explorations, architecture critiques) can surface an ADR opportunity and hand off here rather than authoring inline. The offer contract — the three-criterion test, the canonical offer message, the handoff rule, and session de-duplication — lives in references/inline-offer-pattern.md. Read it only when implementing that handoff in another skill.
These are the lies you will tell yourself to skip or distort the ADR. Each has a correct response:
NOTICED BUT NOT TOUCHING for each. Backfilling decisions you weren't present for invents history.Rejection criteria. If any of these are true, revert the ADR (delete a newly created file, or undo the predecessor edit when superseding) and re-plan:
UNVERIFIED marker and no source. Build on evidence or mark the gap.Before declaring the ADR done, self-check:
SUPERSEDED by #NNNN with forward-reference; predecessor content otherwise untouched.UNVERIFIED marker.ADR_DIR), or docs/decisions/ when bootstrapping a new log.adr-001-), the new ADR preserves that contract and increments from the highest matching entry instead of restarting at 0001.If any box is unchecked, finish the gap or revert (delete the new file, or undo the predecessor edit) before declaring done.
tools
Requires Linear MCP. Implements one Linear issue end to end, selects applicable code-review, convention, and PR-refactor gates, runs them to bounded convergence, verifies, and optionally opens the PR and iterates on CI and review feedback until green. Use when the user wants a single Linear issue taken from implementation through a clean Pull Request. Not for implementation-only work, SIW-tracked issues, stacked PRs, existing PR updates, or post-merge rollout.
development
Reviews PR and local changes for convention drift and overcaution against documented rules and mined peer-file practice. Use for new patterns, dependencies, abstractions, or defensive complexity that departs from established practice; every finding cites evidence. Supports --inline. Not for general code quality (use kramme:pr:code-review) or spec review (use kramme:siw:spec-audit --team).
testing
Charts huge or foggy initiatives into a local `.context` decision map and resolves one typed frontier ticket per session until the work is ready for SIW or another execution workflow. Use when the route to a destination cannot fit in one agent session or parallel workspaces need coordinated planning state. Not for clear specs, ordinary issue decomposition, implementation, or Linear-native tracking.
development
Investigates a question against primary sources and saves one cited Markdown artifact. Use for reading legwork: official docs/API facts, source-code or spec checks, standards, and first-party service behavior before planning or implementation. Not for making product or architecture decisions, implementing code, broad web search, secondary blog summaries, or uncited answers.