上位 doc: §4 Summary Table in adr-lint_rules.md — Summary Table 集約参照

id: umbrella-readonly
severity: error
category: structure
since: 2026-06-22
status: active
fixable: false
description: status: umbrella の ADR は本文 (frontmatter 以外) の編集を CI で拒否する。子 ADR (refined_by / amends 関係) で内容を更新する
related_adrs: [ADR-0152, ADR-0028]
implementation: scripts/adr-lint.mjs --check-umbrella-readonly (subcommand。pure RULES とは別の git diff ベースゲート)

Rationale

ADR-0152 で「2 ライフサイクル混在の構造改訂」として ADR-0028 を umbrella 化し、子 ADR-0160 (DRP Discovery) / ADR-0161 (MAS GAS-MVP) に責務分割した。umbrella ADR は「全体像を残す」読み取り専用ノードとして残り、決定内容の更新はすべて子 ADR で行う。

これを規律だけに任せると、PR レビュアーが「ついでに ADR-0028 を直す」誘惑に駆られて umbrella の意義 (情報の単一所在) が崩れる。本ゲートで CI 段に機械強制し、起案者の意図を最初から子 ADR に向ける。

判定アルゴリズム

  1. git diff --name-only --diff-filter=MR ${base}...HEAD -- 'docs/adr/*.md' で base 比の変更 ADR を列挙
  2. 各変更 ADR について git show ${base}:${path} で base 側の frontmatter status を確認
  3. base 側で status: umbrella だった ADR のみ判定対象
  4. base / HEAD それぞれから frontmatter を剥がした本文を比較
  5. 本文に差分があれば fail。frontmatter のみの変更 (子 ADR との両端宣言・refined_by 追加) は許容

注: base 側 status が accepted 等の場合は umbrella 化 PR 自体が許容される (umbrella 化遷移は本文書換が必要なため・1 回限りの遷移)。

❌ FAIL Example

 # ADR-0028: UC スライス開発 全体 6 段ワークフロー

-- **Implementation Status**: umbrella (Stage 5-6 完了条件は ADR-0161 §KPI 4 へ移管済)
+- **Implementation Status**: umbrella (本文の細部を修正)

 ## コンテキスト
-(旧記述)
+(新記述に書き換え)

(base 側で status: umbrella の ADR 本文を書換 → fail)

✅ PASS Example

---
 status: umbrella
 refined_by:
   - ADR-0160
   - ADR-0161
+  - ADR-0170  # 新しい子 ADR の両端宣言 (frontmatter のみの追加 → 許容)
---
 # ADR-0028: UC スライス開発 全体 6 段ワークフロー
 (本文は不変)

(frontmatter のみの更新 → pass)

Migration / Corrigendum

  • 導入時 (2026-06-22) は umbrella ADR ゼロ。最初の適用候補は ADR-0028 (ADR-0152 KPI 4 で umbrella 化予定)
  • ADR-0028 の status: accepted → umbrella への flip PR では base が accepted のため本ゲートは pass する (umbrella 化 PR は本文書換を伴うが、base が umbrella でないため対象外)
  • flip 後の編集はすべて子 ADR (ADR-0160 / ADR-0161 ほか後続) で行う

References

  • ADR-0152: 構造改訂を決定した親 ADR (本ルールは §KPI 4 の機械化)
  • ADR-0028: umbrella 化対象の ADR
  • ADR-0160: 子 ADR (DRP Discovery / Stage 1-4)
  • ADR-0161: 子 ADR (MAS GAS-MVP / Stage 5-6)
  • frontmatter-status-sync: frontmatter status: umbrella と本文 **Status**: Umbrella の同期検査 (本ルールの相補)
  • scripts/adr-lint.mjs::runCheckUmbrellaReadonly: 実装本体