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

id: residual-risks-status-tag
severity: error
category: metadata
since: 2026-06-04
status: active
fixable: true
description: HITL-RATIFIED-RESIDUAL marker を持つ ADR が Accepted へ遷移したら Status 行に accepted-with-residual-risks タグを必須化。逆方向 (marker なしでタグのみ) も不整合として fail
related_adrs: [ADR-0109]

Rationale

escalate 採択 (残余リスク付き Accept・ADR-0109 Part4) の ADR が通常採択と区別されないと、downstream の LLM ノードが「通過済み = 問題なし」と解釈し、既知の未解決リスクが無症状で伝播する (ADR-0109 §5.2 #5)。Gate 2 consistency の corpus は各 ADR の先頭 40 行抜粋のみを参照するため、ファイル末尾の residual 節は構造上 downstream に渡らない — Status 行 (先頭 3 行目) のタグが downstream から見える唯一のシグナルであり、marker ⇔ タグの双方向整合を機械強制する。

❌ FAIL Example

- **Status**: Accepted
...
<!-- HITL-RATIFIED-RESIDUAL -->
## Known Limitations / Escalated Residual Risks
<!-- /HITL-RATIFIED-RESIDUAL -->

(marker あり + Accepted なのにタグなし → FAIL。逆に marker なしで accepted-with-residual-risks タグだけ付くのも FAIL = residual 節の誤削除等の不整合)

✅ PASS Example

- **Status**: Accepted (accepted-with-residual-risks — merge = 受理の規約により受理)
...
<!-- HITL-RATIFIED-RESIDUAL -->

または HITL 判断待ち:

- **Status**: Proposed
...
<!-- HITL-RATIFIED-RESIDUAL -->

(Proposed / Rejected / Superseded はタグ不要 — Accepted 遷移時のみ要求)

Migration / Corrigendum

  • 既存 ADR は全 pass を確認済み (導入時 117/117)。escalate 受理で Status を Accepted に更新する際にタグを併記すれば良い (fixable)
  • 適用第 1 号: ADR-0109 自身 (PR #1439 で Accepted (accepted-with-residual-risks ...) へ更新)

References

  • ADR-0109: §5.2 #5「escalate 採択 ADR の品質保証穴」の緩和 (a)
  • 関連: crossval_loopbreaker.tsRESIDUAL_MARKER_START/END (marker の生成元)、Gate 2 consistency の corpus 抜粋仕様 (consistency.ts 先頭 40 行)