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. Preserve predecessors; never delete history.
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.CONFUSION fires during drafting, split.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.
development
Compare an existing PR's title and body against the actual branch diff and report drift — false claims, missing major changes, stale scope, missing risk callouts. Use after pushing changes to a branch with an open PR, or before requesting review. Read-only by default; add --fix to delegate to kramme:pr:generate-description for an updated description. Complements kramme:pr:code-review (which checks description accuracy as one signal among many code-quality checks) by being a fast, focused, single-purpose check that runs in seconds.
tools
Reviews plugin skills for focused scope, progressive disclosure, portability, safety, retry behavior, and documentation quality. Use when auditing a SKILL.md, skill directory, or proposed skill text against skill-authoring standards. Not for creating new skills, editing skills, or reviewing ordinary application code.
tools
Reviews recent agent session transcripts to find repeated manual workflows or repeated user asks, then proposes and optionally scaffolds only useful new skills or custom subagents. Use when the user asks to inspect recent sessions, find automation opportunities, or create reusable workflows from repeated work. Not for summarizing one session, general retrospectives, or codebase refactoring.
data-ai
Remove all DONE issues and renumber remaining issues within each prefix group. Not for editing live issue content, archiving still-open issues, or moving issues between prefix groups.