一键导入
migrate
Guided rewrite of legacy-shaped ADRs into the canonical-seven-section template enforced by /adr-kit:lint. Promotes inline status / date lines to a
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Guided rewrite of legacy-shaped ADRs into the canonical-seven-section template enforced by /adr-kit:lint. Promotes inline status / date lines to a
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Architecture Decision Record (ADR) management skill. Creates, maintains, and enforces architectural decisions with anti-rationalization guards and named verification gates. Drop into any project to give an AI coding agent a shared, enforceable ADR workflow.
One-shot project bootstrap for adr-kit. Hooks the kit into CLAUDE.md (via a slim stub + a copy of templates/adr-kit-guide.md → .claude/adr-kit-guide.md), runs bin/adr-audit to enumerate decision-shaped artefacts in source + documentation, walks the user through batch approval to generate Accepted ADRs via the adr-generator subagent, installs the pre-commit hook, and finally lints. Idempotent across re-runs. User-invocable only — this is a side-effecting operation.
One-time project setup for adr-kit. Hooks `CLAUDE.md` (slim stub with @-import) and drops the canonical guide at `.claude/adr-kit-guide.md`. v0.11-style inline `## ADR Kit Rules` sections are detected and left untouched (run `/adr-kit:upgrade` to migrate them). Idempotent across re-runs. The lighter cousin of `/adr-kit:init` — `setup` does not run a codebase audit or install the pre-commit hook.
Install or uninstall the adr-kit pre-commit hook in the current project. Copies templates/githooks/pre-commit into .githooks/pre-commit, makes it executable, and runs `git config core.hooksPath .githooks`. Idempotent. Used internally by /adr-kit:init and /adr-kit:upgrade; also exposed standalone for users who want to add or remove the hook independently.
ADR-set health sweep for adr-kit. Runs the due health tier(s) — cheap (drift + stale + lint) and/or LLM (suggest + audit) — applies mix-by-finding-type responses, and stamps the state file when done. Invoke after seeing an [adr-guardian] ... DUE block at session start, or on demand to run a full health sweep. Accepts optional arg: cheap | llm | all. LLM tier always asks before spending.
Shows the dependency graph for one Architecture Decision Record. Give it an ADR id (e.g. "ADR-007") and it lists outbound edges (Related Decisions entries, Supersedes claims, Superseded by / Amended by status refs) and inbound edges (every other ADR that references it, with the reference kind), flagging dangling references to ADRs that do not exist. Read-only and safe to call from parallel subagents. Invoke before superseding or retiring an ADR, or whenever you need to know what depends on a decision.
| name | migrate |
| description | Guided rewrite of legacy-shaped ADRs into the canonical-seven-section template enforced by /adr-kit:lint. Promotes inline status / date lines to a |
| argument-hint | [file or directory; defaults to docs/adr/] |
| disable-model-invocation | true |
| allowed-tools | ["Read","Edit","Glob","Grep"] |
You are running /adr-kit:migrate. The user wants to rewrite one or more legacy-shaped ADRs into the canonical template that /adr-kit:lint enforces. This is a write skill: you propose targeted structural edits, the user confirms, then you apply them.
docs/adr/ (the whole tree).If the path does not exist or contains no ADR files, say so plainly and stop.
<!-- TODO: populate --> placeholder so a human author can fill it in later.<!-- adr-kit-lint: skip --> is left untouched. A file with <!-- adr-kit-lint: advisory --> gets a warning ("this file is currently in advisory mode; migrating will make the marker meaningless") and a confirmation prompt.Look for docs/adr/.adr-kit.json (relative to project root, or the directory passed). If template.required_sections is set, target that list. Otherwise target the canonical seven:
## Status## Context## Decision## Alternatives Considered## Consequences## Related Decisions## ReferencesOrder matters. The migration must end with sections in the configured order.
For each file, determine:
The skill body below documents the patterns observed in real-world legacy ADRs. Apply each pattern that fits, in this order. Do not invent new transformations.
Source:
# ADR-NNN Title
**Status:** Accepted
**Date:** 2026-04-25
**Supersedes:** ADR-XXX (optional)
Target:
# ADR-NNN Title
## Status
Accepted, 2026-04-25. Supersedes ADR-XXX (optional).
If only **Status:** exists with no **Date:**, the Status section reads Accepted (without date).
Source has a ### Alternatives considered: (or ### Alternatives considered and rejected) heading nested inside ## Context. Target: lift the entire block out, change ### to ## , and place the new top-level ## Alternatives Considered heading between ## Decision and ## Consequences. Preserve content verbatim; only the heading level and position change.
Same as Pattern B but the source nests alternatives inside ## Consequences. Target: same restructure, place between Decision and Consequences.
Source: a ## Related section that mixes ADR/TASK references with file paths, PR links, vendor doc URLs, internal docs.
Target: rename to ## Related Decisions. Move pure-external references (files, URLs, PRs that are not ADR or TASK identifiers) to a new ## References section that follows. Keep ADR-NNN and TASK-NNN entries in ## Related Decisions.
Heuristic for splitting:
ADR-, TASK-, or referencing those identifiers -> ## Related Decisions.PR /Issue references -> ## References.## Related Decisions (safer default).If after Pattern D there are no external references to populate ## References, create the section with a placeholder:
## References
<!-- TODO: populate from inline citations or external sources cited in the body. -->
Never invent references. The placeholder makes it clear to a human reviewer that this is a known gap.
If the source legitimately has no alternatives discussion anywhere, create the section with a placeholder:
## Alternatives Considered
<!-- TODO: document at least 2 alternatives that were considered and rejected, with reasoning. -->
This is a real gap a human should fill, but the skill must not fabricate.
Source is a MADR-shaped ADR (madr.github.io): YAML frontmatter carrying
status: / date:, plus ## Context and Problem Statement,
## Considered Options, ## Decision Outcome, and often
## Pros and Cons of the Options and ### Positive Consequences /
### Negative Consequences subsections. bin/adr-audit flags these files
as template_profile: madr.
Mapping (content moves verbatim; only headings and position change):
| MADR source | Canonical target |
|---|---|
frontmatter status: + date: (or inline * Status: lines) | ## Status section, e.g. Accepted, 2026-04-02. Drop the frontmatter block afterwards. |
## Context and Problem Statement (+ ## Decision Drivers bullets, folded in below the problem statement) | ## Context |
## Considered Options + ## Pros and Cons of the Options | ## Alternatives Considered: one bullet per option with its pro/con summary as the rejection or selection reasoning. The chosen option stays listed, marked as chosen. |
## Decision Outcome ("Chosen option: ..., because ...") | ## Decision (the chosen option and its justification) |
### Positive Consequences / ### Negative Consequences (or "Good, because" / "Bad, because" bullets under Decision Outcome) | ## Consequences with **Positive:** / **Negative:** lists |
## Links / ## More Information | split per Pattern D: ADR identifiers to ## Related Decisions, external links to ## References |
If the source has no Related Decisions or References content, apply
Patterns E / F TODO placeholders. Never invent rejection reasons that the
Pros and Cons section does not state; if an option has no documented cons,
carry it over with <!-- TODO: state why this option was rejected -->.
Source is a Nygard / adr-tools ADR: exactly ## Status, ## Context,
## Decision, ## Consequences, nothing else. bin/adr-audit flags these
files as template_profile: nygard.
The four sections map 1:1 onto their canonical namesakes; their content is preserved verbatim. The three sections Nygard does not have are created with TODO placeholders, in canonical order:
## Alternatives Considered between Decision and Consequences, via
Pattern F's placeholder.## Related Decisions after Consequences, with - None. unless the
Status or Context text references other ADRs (e.g. "Supersedes ADR-9"),
in which case those references move here.## References last, via Pattern E's placeholder.Nygard Status sections often contain supersession links ("Superseded by
[ADR-12]"). Keep them in ## Status as prose and mirror the ADR identifier
into ## Related Decisions.
Before applying any edit, show the user a per-file summary:
Proposed migration plan (3 files):
ADR-007-timer-based-task-scheduling.md
Pattern A: inline `**Status:**` -> `## Status` heading
Pattern D: `## Related` -> `## Related Decisions` + new `## References`
ADR-029-simple-xhr-ota-flash.md
Pattern A: inline `**Status:**` -> `## Status` heading
Pattern F: missing `## Alternatives Considered`, will create with TODO placeholder
ADR-058-nonblocking-pic-command-response.md
Pattern A: inline `**Status:**` -> `## Status` heading
Pattern F: missing `## Alternatives Considered`, will create with TODO placeholder
Pattern E: missing `## References`, will create with TODO placeholder
No `## Related Decisions` content found in source; will create with `- None.`
Confirm to apply (y/n)?
If the user declines, stop without writing.
After confirmation, apply each transformation via Edit. One Edit per logical change, so the diff is reviewable. Report what was changed per file.
After all edits, suggest the user run /adr-kit:lint <path> to confirm the migrated files now PASS strictly. Do NOT run lint yourself: that is a separate skill the user invokes.
/adr-kit:lint after migration. The user decides when to verify.Single-file migration:
ADR-007-timer-based-task-scheduling.md migrated.
Applied: Pattern A (Status promotion), Pattern D (Related split).
Run /adr-kit:lint on this file to verify.
Directory migration:
Migrated 3 of 80 candidate files. 1 already canonical (skipped). 76 deferred (no patterns matched, manual review needed).
Applied:
ADR-007 (A, D)
ADR-029 (A, F)
ADR-058 (A, F, E, no Related content)
Skipped:
ADR-022 (already canonical)
Deferred (manual review): 76 files.
Reason: complex shape that did not match any of patterns A through H. Inspect by hand.
Run /adr-kit:lint docs/adr/ to confirm overall result.
The aggregate's bottom line tells the user one concrete next step (run lint), never invents a status the migration did not actually achieve.
**Status:**, **Date:**, **Supersedes:**, **Amended by:**, etc. Fold all into the new ## Status section as a comma-separated sentence. Order: Status, date, supersedes/amended.## Related with no body or only whitespace. Target: ## Related Decisions with - None. body.Renumbered from ADR-XXX ... line before **Date:**. Fold into the new ## Status section as a trailing sentence: "Renumbered from ADR-XXX on YYYY-MM-DD to resolve duplicate numbering. Content unchanged."## inside a fenced code block. The skill treats only headings outside code fences as canonical sections. If unsure, ask the user.## Pros and Cons or ## Decision drivers: if the file matches the MADR shape, Pattern G consumes these (## Pros and Cons of the Options feeds ## Alternatives Considered, ## Decision Drivers folds into ## Context). Otherwise do not rename these; they are project-specific and the user can address custom subsections in a follow-up pass.If the migration would require any of these, refuse and explain:
/adr-kit:lint automatically after migration. The user decides.