madr/status-enum
ADR の status フィールドが許可された値のいずれかであることを検証します。
このルールは context.metadata.status を読み取ります。これは YAML frontmatter に v2 の本文リストメタデータをマージしたものです。これにより MADR v2(太字の - **Status**: 形式と、素の * Status: リスト形式の両方)、v3、v4 をサポートします。競合した場合は frontmatter が優先されます。明示的な null/undefined の frontmatter 値はスキップされるため、v2 の本文リストの値が保持されます。
チェック内容
Section titled “チェック内容”missingStatus— マージ後のメタデータにstatusフィールドが見つからない(frontmatter と v2 太字リストの両方を確認)か、値が文字列ではありません。メッセージ:Metadata does not contain a "status" field (checked frontmatter and v2 bold-list)。invalidStatus—statusは存在するものの、valuesとの完全一致でもprefixValuesとの前方一致でもありません。メッセージ:Status "<status>" is not one of: <allowed>。data.statusとdata.allowed(許可された値に加え、各プレフィックスを"<prefix> ..."として表現したもの)を含みます。
比較はデフォルトで大文字小文字を区別しません(caseSensitive: false)。前方一致は superseded by ADR-0042 が superseded by プレフィックスにマッチするような、遷移中の状態を扱います。
---status: accepteddate: 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 は許可された列挙値に含まれません)。
🔧 自動修正
Section titled “🔧 自動修正”このルールは 自動修正可能(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:(手動で修正してください)。
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
values | string[] | ['proposed', 'rejected', 'accepted', 'deprecated'] | 完全一致で許可する status 値。 |
prefixValues | string[] | ['superseded by'] | startsWith で一致を許可するプレフィックス(例: superseded by ADR-0042)。 |
caseSensitive | boolean | false | false の場合、比較は大文字小文字を区別しません。 |
import { defineConfig } from 'madr-lint';
export default defineConfig({ rules: { 'madr/status-enum': ['error', { values: ['draft', 'review', 'final', 'archived'], prefixValues: [], caseSensitive: true, }], },});MADR バージョン互換性
Section titled “MADR バージョン互換性”| バージョン | 適用 | 備考 |
|---|---|---|
| v2 | はい | メタデータブリッジ経由で、本文リストの - **Status**: proposed(太字)または * Status: proposed(素) |
| v3 | はい | frontmatter の status: ... |
| v4 | はい | frontmatter の status: ... |
無効化する場合
Section titled “無効化する場合”異なる status 語彙を持つシステムから移行する場合は、madr/status-enum を off にしてください。ある程度の検証を維持するために、values / prefixValues を上書きすることを優先してください。
他のルールと同様、インラインコメントで抑制できます — ルールの抑制を参照してください。