コンテンツにスキップ

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 は許可された列挙値に含まれません)。

オプションデフォルト説明
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 を上書きすることを優先してください。

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