adr-review-reminderlisted
Install: claude install-skill ttamakijp/dev-templates
> Dispatch / scheduled-tasks MCP に登録する際は、上記
> `schedule.cronExpression` をそのまま `cronExpression` パラメータに
> 渡す。導入手順は同ディレクトリ [`README.md`](../README.md) を参照。
# adr-review-reminder
## Overview
ADR-0020 cadence の自動 trigger。毎月 1 日 00:00 UTC (= 09:00 JST) に
`docs/adr/*.md` の frontmatter を walk し、`next_review_date <= today` の
ADR を集めて 1 つの Issue に集約起票する。
## Keywords
adr, review, lifecycle, frontmatter, ADR-0020, Phase 5, maintenance,
scheduled-task
本 task は 2 種類を 1 Issue にまとめて起票する:
1. **Accepted ADR の review** (ADR-0020) — `next_review_date <= today`
2. **stale draft の警告** (ADR-0023 Q5) — `docs/adr/drafts/proposed-*.md`
の `proposed_date` から 90 日経過
draft は warn-only。CI / Issue 起票で可視化するのみで、自動却下や
強制 fail はしない (議論中 draft を拒否してしまうため過剰)。
## 実行手順
### Step 1: 対象 ADR 抽出
```python
# 擬似コード
import datetime as dt, glob, yaml, re
today = dt.date.today()
overdue = []
for path in sorted(glob.glob("docs/adr/*.md")):
text = open(path, encoding="utf-8").read()
if not text.startswith("---\n"): continue
end = text.find("\n---\n", 4)
if end < 0: continue
fm = yaml.safe_load(text[4:end])
nrd_raw = fm.get("next_review_date")
if not nrd_raw: continue
nrd = dt.date.fromisoformat(str(nrd_raw))
if nrd <= today:
overdue.append({
"adr": fm.get("adr"),
"title": fm.get("title"),
"accepted_date": fm.get("accepted_date"),
"next_review_date": nrd_raw,
"days_overdue": (today - nrd).days,
"watc