跳轉到

D-20260816-10|ADR 廢止關係改採必填 metadata 與生成索引

背景與驅動力

歷史記錄的手工「廢除欄位彙整」宣稱完整,實際卻停在 2026-06-12。其後 ADR 持續增加,具名 欄位、事件、route、常數與架構模型的移除、改名及取代關係只能靠人工重抄,總覽與文檔工程仍把 停更附錄指成權威。單靠文字搜尋也無法區分正式決定、被否決選項與一般後果描述。

考慮過的選項

  • 只把舊表凍結,後續分散查 ADR 與流水帳:修改最少,但沒有單一可查索引,棄。
  • 從 ADR 本文關鍵字自動推論:看似省回填,卻會把被否決選項與敘述性文字誤判為決策,棄。
  • ADR frontmatter 必填結構化 metadata,由檢查器驗證並生成索引(採納)。

決定

  • 每份 ADR 必填 deprecates,無項目也明寫空陣列。每項只允許 itemkindreplacementremoved 不得宣稱取代方式,renamedreplaced 必須明列新名稱或新模型。
  • 只登錄「決定」明確裁撤的具名契約,不從 prose 自動推論,不登錄被否決選項、一般實作動作或 單純後果。既有 ADR 逐項人工回填。
  • check:decisions 同時守門 metadata 與生成的決策索引;任何 ADR 缺欄、結構錯誤或索引過期都 fail closed。手工廢除表凍結為 ADR metadata 制度前的早期快照,不再追加或宣稱完整。
  • 同一次交付分兩個驗證階段:先落 schema、generator 與新 ADR guard,再完成全部歷史回填後才 宣告索引完整;中間紅燈不是可發布狀態。

後果與影響

廢止關係現在有單一、可機械驗證的查詢面,新 ADR 不會再默默漏記;歷史流水帳仍保存事件脈絡, canon 仍只寫現況。代價是每次新增 ADR 多一項明確分類責任,且早期回填必須由人閱讀決定內容, 不能以全文搜尋取代判讀。