From ship
Scans ADR Decision Outcome sections against the current codebase, reports drift with modification direction and priority. Use for repos with MADR-style ADRs to detect decision divergence.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ship:adrift [adr-directory]When to use
ADR と コードの整合性確認, ADR drift, ADR vs code, ADR audit, 意思決定の風化チェック, decision record divergence
[adr-directory]opusThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scan each ADR's Decision Outcome section against the current codebase. Record drift with `file:line`, modification direction, and priority so ADRs can serve as a usable refactoring baseline.
Scan each ADR's Decision Outcome section against the current codebase. Record drift with file:line, modification direction, and priority so ADRs can serve as a usable refactoring baseline.
$ARGUMENTS may contain a single ADR directory path. Trim whitespace and treat an empty string as auto-detect (Step 1). If non-empty, treat the value as a path relative to repo root and reject if it does not exist.
Treat only docs/decisions/ (MADR-style) as the ADR directory. If it does not exist, treat the repo as having no ADRs and abort with "No ADRs found, run /census first". Use a different path only when $ARGUMENTS specifies one explicitly.
Parse each ADR's front matter or top section for Status. Map Superseded ADRs to their successor via Superseded by [...] link.
Extract code-identifiers (function names, type names, module names, file paths) and bullet-point decisions from the ## Decision Outcome section (fall back to ## Decision for older MADR). Skip prose-only ADRs (record as "unverifiable, prose-only").
For each extracted symbol, apply the following.
ugrep -r "<symbol>" for literal matchesRun python3 ${CLAUDE_SKILL_DIR}/../_lib/external-adr-refs.py --adr-dir <adr-dir> --json. It matches ADR-NNNN references across the codebase against the NNNN-*.md files in the ADR directory detected in Step 1 and returns ids with no local match as external_refs. Record these as External ADR dependencies in a separate section. This catches the case where a meta ADR lives in a different repo (e.g., a shared dotclaude config) and has not been promoted locally.
Detect repo language by manifest file and run the matching reviewer subagents via Task tool. Subagents receive the candidate file:line list plus the ADR Decision Outcome text. They flag semantic gaps clippy or grep cannot detect.
| Manifest | Reviewer subagents to spawn |
|---|---|
| Cargo.toml | reviewer-rust + reviewer-design |
| package.json | reviewer-strictness + reviewer-design |
package.json with *.tsx | reviewer-strictness + reviewer-react-pattern |
| Other / Unknown | reviewer-design |
| Direction | When |
|---|---|
code-fix | ADR is the correct contract; code drifted |
adr-update | Code is the correct contract; ADR is stale |
accept | Drift is cosmetic, deprecated comment, or documented |
| Priority | Criteria |
|---|---|
| H | Public API affected, or 2+ downstream consumers |
| M | Internal API affected, single downstream consumer |
| L | Comment / doc-string only, or dead reference |
Write the report following ${CLAUDE_SKILL_DIR}/templates/report-template.md, substituting placeholders from findings. After writing, print a console summary: ADR count, finding count, per-priority count breakdown, unverifiable count.
mkdir -p docs/audit
STAMP=$(date -u +%Y-%m-%d-%H%M%S) # UTC date + HHMMSS; same-day reruns never collide
REPORT="docs/audit/${STAMP}-adr-drift.md"
/issue for eachadr-update findings and ADR body edits to /adr/census to discover areas with no ADRFinish only when all of the following hold. Record the reason for any unmet item in the report.
| Item | Condition |
|---|---|
| Report | docs/audit/<YYYY-MM-DD>-<HHMMSS>-adr-drift.md exists |
| Per-ADR | Every ADR has a Per-ADR Findings section (findings / "no drift" / "unverifiable") |
| Findings | Every drift records file:line / direction / priority |
| Status | Superseded ADRs reflect Superseded in Status |
| External | External ADR references, if any, recorded in External ADR Dependencies |
npx claudepluginhub thkt/dotclaude --plugin shipDiscovers design decisions in code that lack ADRs and produces a ranked list of ADR promotion candidates by impact and reversibility. Pairs with adrift for drift detection.
Authors, indexes, and lints Architecture Decision Records (ADRs) to preserve the rationale behind system decisions. Scaffolds new ADRs, enforces format, manages supersession, and maintains an index.
Validates ADR files in docs/adrs/ for reference integrity, supersedes/extends/related links, circular chains, self-references, and domain conflicts. Report-only or interactive fixes.