コンテンツにスキップ

madr/status-enum

ADR の status フィールドが許可された値のいずれかであることを検証します。

このルールは context.metadata.status を読み取ります。これは YAML frontmatter に v2 の本文リストメタデータをマージしたものです。これにより MADR v2(太字の - **Status**: 形式と、素の * Status: リスト形式の両方)、v3、v4 をサポートします。競合した場合は frontmatter が優先されます。明示的な null/undefined の frontmatter 値はスキップされるため、v2 の本文リストの値が保持されます。

  • missingStatus — マージ後のメタデータに status フィールドが見つからない(frontmatter と v2 太字リストの両方を確認)か、値が文字列ではありません。メッセージ: Metadata does not contain a "status" field (checked frontmatter and v2 bold-list)
  • invalidStatusstatus は存在するものの、values との完全一致でも prefixValues との前方一致でもありません。メッセージ: Status "<status>" is not one of: <allowed>data.statusdata.allowed(許可された値に加え、各プレフィックスを "<prefix> ..." として表現したもの)を含みます。

比較はデフォルトで大文字小文字を区別しません(caseSensitive: false)。前方一致は superseded by ADR-0042superseded by プレフィックスにマッチするような、遷移中の状態を扱います。

---
status: accepted
date: 2026-05-01
---
# ADR-0001: ...

デフォルトで大文字小文字を区別しないため、status: ACCEPTED も有効です。前方一致:

---
status: superseded by ADR-0042
---

MADR v2 の本文リスト形式も読み取られます:

# ADR-0001: ...
- **Status**: accepted
- **Date**: 2026-05-01
# ADR-0001: ...

missingStatus を発行します(メタデータが一切ありません)。

---
status: pending
---

invalidStatus を発行します(pending は許可された列挙値に含まれません)。

このルールは 自動修正可能madr-lint --fix)ですが、対象は v2 本文リストの status 値のみで、値が設定された列挙値へ曖昧さなく対応づけられる場合に限ります。frontmatter の値は書き換えません(YAML を意識した編集は対象外)。

修正される(設定された正規の値に正規化):

修正前修正後種類
- Status: Accepted- Status: accepted大文字小文字の違い †
- Status: depricated- Status: deprecated収録済みのスペルミス
- Status: superceded by ADR-0042- Status: superseded by ADR-0042プレフィックスの誤字(末尾は保持)
- Status: Superseded By ADR-0042- Status: superseded by ADR-0042プレフィックスの大文字小文字(末尾は保持) †

† 大文字小文字のみの修正は caseSensitive: true の場合に適用されます。デフォルトの caseSensitive: false では、大文字小文字だけが異なる値は有効であり、そもそも報告されないため修正の対象になりません。スペルミスの行(depricated, superceded by …)は大文字小文字の設定に関係なく無効な値なので、デフォルトのまま修正されます。

修正されない(報告のみ、決して書き換えない):

  • 曖昧な修正 — ある値が 2 つの設定値に case-fold で一致する、または 2 つのプレフィックスに一致する場合は修正しません。
  • 未設定のターゲット — シノニムは values / prefixValues に実在する値・プレフィックスにのみ対応づけます。superseded by を外していれば superceded by … は修正しません。
  • 一意なターゲットのない純粋な誤字 — 例: acccepted(どの許可値にも case-fold で一致しない)。
  • frontmatter 由来の値 — YAML frontmatter 内の status:(手動で修正してください)。
オプションデフォルト説明
valuesstring[]['proposed', 'rejected', 'accepted', 'deprecated']完全一致で許可する status 値。
prefixValuesstring[]['superseded by']startsWith で一致を許可するプレフィックス(例: superseded by ADR-0042)。
caseSensitivebooleanfalsefalse の場合、比較は大文字小文字を区別しません。
import { defineConfig } from 'madr-lint';
export default defineConfig({
rules: {
'madr/status-enum': ['error', {
values: ['draft', 'review', 'final', 'archived'],
prefixValues: [],
caseSensitive: true,
}],
},
});
バージョン適用備考
v2はいメタデータブリッジ経由で、本文リストの - **Status**: proposed(太字)または * Status: proposed(素)
v3はいfrontmatter の status: ...
v4はいfrontmatter の status: ...

異なる status 語彙を持つシステムから移行する場合は、madr/status-enumoff にしてください。ある程度の検証を維持するために、values / prefixValues を上書きすることを優先してください。

他のルールと同様、インラインコメントで抑制できます — ルールの抑制を参照してください。