最終更新: 2026/06/22 20:19
umbrella-readonly — umbrella ADR の本文編集を機械的に拒否
上位 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 に向ける。
判定アルゴリズム
git diff --name-only --diff-filter=MR ${base}...HEAD -- 'docs/adr/*.md'で base 比の変更 ADR を列挙- 各変更 ADR について
git show ${base}:${path}で base 側の frontmatterstatusを確認 - base 側で
status: umbrellaだった ADR のみ判定対象 - base / HEAD それぞれから frontmatter を剥がした本文を比較
- 本文に差分があれば 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: 実装本体