最終更新: 2026/06/22 18:56
frontmatter-status-sync — frontmatter status と本文 Status の整合
上位 doc: §4 Summary Table in adr-lint_rules.md — Summary Table 集約参照
id: frontmatter-status-sync
severity: error
category: metadata
since: 2026-06-11
status: active
fixable: true
description: frontmatter に status が宣言されている ADR は、その値が本文太字メタ欄 Status の正規化値 (accepted/proposed/superseded/rejected) と一致する。未宣言は対象外
related_adrs: [ADR-0123, ADR-0131]
Rationale
2026-06-11 の common トリオ backfill (PR #1761) で全 ADR の frontmatter に status (本文太字メタ欄 Status の写し) が入った。原本は本文・frontmatter は写しという二重保持のため、片方だけ更新される drift が構造的に起こり得る。frontmatter は docs サイトのチップ表示・検索・将来の機械読みが参照するので、drift は誤分類として下流に伝播する。本ルールは「status を宣言するなら本文と一致」を CI で強制し、二重保持期間の安全弁となる。
frontmatter に status が無い ADR は検査対象外とする。パイプライン生成 ADR (webhook) はまだ common トリオを出力しないため、必須化すると生成 PR が毎回 fail する (PR #1722 で解消した定番後修正の再発)。必須化は webhook がトリオを生成するようになってから別途行う。
❌ FAIL Example
---
status: proposed
---
# ADR-0134: ...
- **Status**: Accepted (PR #1713 merge = 受理)
(本文は Accepted なのに frontmatter が proposed のまま = flip 漏れ → FAIL)
✅ PASS Example
---
status: accepted
---
# ADR-0134: ...
- **Status**: Accepted (PR #1713 merge = 受理)
正規化対応: Accepted (注釈...) → accepted / Superseded by ADR-0120 → superseded / Proposed → proposed / Rejected → rejected (大文字小文字無視・注釈は無視)。
Migration / Corrigendum
- 導入時に全 134 本へ backfill 済み (本文 Status から機械導出・PR #1761) で 134/134 pass
- Status flip (Proposed→Accepted 等) の際は本文と frontmatter の両方を更新する (片方だけだと本ルールが FAIL する = 意図どおり)