跳轉到

D-20260813-02|規則 Owner 單一責任契約

背景與驅動力

規則 registry 以 implementationRepos 陣列保存實作責任 repo,但既有 checker 的 coverage 與 conformance 唯一性以全域 rule/tuple 聚合。Schema 若允許同一規則列出多個 owner,任一 repo 的證據就可能替其他 repo 補 coverage,而各 repo 提供同一 tuple 又會被判成重複;可表達資料與 實際驗證模型因此不一致。現有 210 條規則全都只有一個 owner,沒有需要共同 ownership 的案例。

考慮過的選項

  • 立即把 checker 擴充成多 owner 模型:必須同時改成逐 repo 的 layer 與 test contract,現階段沒有 真實案例可驗收,棄。
  • 把欄位改成單一字串:語意最直接,但會破壞既有 registry 與 consumer 格式,棄。
  • 保留陣列格式並強制恰有一項,未來出現真實共同執法需求時另立新契約(採納)。

決定

  • implementationRepos 保留陣列資料格式,但每條規則必須恰有一個 owner;owner 表示唯一實作 責任歸屬,不是候選 repo 清單。
  • Schema 對零項或多項一律 fail closed;既有規則資料不變。
  • 未來首次出現真正跨 repo 共同執法時,另立逐 repo 宣告 requiredLayerstestContracts 的 新版契約,coverage key 必須包含 repo,不得沿用目前的全域聚合語意。

後果與影響

Schema 與既有 checker 的責任模型重新一致,多 owner 不會以看似合法的資料靜默進入 registry。 代價是目前不能直接在同一規則列出多個共同 owner;這是刻意的 fail closed,待真實需求提供可 驗收案例後再擴充,不預先維護沒有消費者的抽象模型。