Conformance 測試向量¶
共識語意的「輸入 → 期望輸出」資料集:語言中立、自足——重新實作者不跑主 repo 也能對答案。 目錄結構 =
conformance/<域>/<family>.vectors.json,一檔一個語意家族、檔內多向量。
權威模型¶
- 語意權威永遠在 spec 敘述(canon 各檔):每個
expected值都必須可由敘述獨立推導;不可推導者不入向量。 - 向量 = 敘述的機器可驗採樣,與「程式參數各 leaf 分冊(內容權威;導覽)↔
system-constants(被比對)」同款關係:收藏於本目錄後成為對實作的約束面(回放測試紅燈),位階在敘述之下。 - 生成器 = 工具、不是權威:向量由主 repo
generate:conformance產值(sha-256/CID 不可手算),權威由採納閘賦予 = 人工 review diff+ 每家族抽樣以敘述獨立驗算。主 repo 的 conformance harness 為每個 family 至少凍結一條reviewedExpected;它不得由 productioncompute回填,生成與回放都必須另外通過該 oracle。採納後約束方向反轉——實作輸出偏離向量 = 紅燈,修實作或走升版流程改契約;重生成同樣只是產值步驟、同過採納閘。 - 矛盾位階:向量 ↔ 敘述矛盾 = 紅燈開修復項、預設修向量側;查明屬敘述筆誤 → 敘述走正常 spec 修正(屬共識語意變更者照 升版.md)。實作 ↔ 向量矛盾 = 回放紅燈,修實作或走升版流程改契約,二擇一。
變更紀律¶
formatVersion只描述 fixture envelope 的機器讀取格式;pre-launch 一律為 1,且不保留舊格式 reader。- 不建立 fixture revision 或「內容改過幾次」欄位。案例與
expected的歷次變更由 Git/exact specs SHA、綁定 ADR 與generatedBy追蹤,runner 不得依編輯次數分支。 - 任何
expected值的改動 = 共識語意變更:條目寫進 歷史記錄.md+ 依升版流程處理。純新增向量(增加覆蓋)不算語意變更。 - 未來若出現需跨發布相容的外部 consumer,另行決策新增
contractVersion;不得重用格式版本或編輯次數。
檔案格式¶
{
"family": "ledger/derive-match-id",
"spec": ["資料系統.md", "程式架構/ledger-admission.md"],
"formatVersion": 1,
"encoding": { "bytes": "hex-lower", "bigint": "decimal-string" },
"generatedBy": "open-4wd@<client version>",
"vectors": [{ "name": "…", "input": {}, "expected": {} }]
}
- 編碼慣例:bytes= 小寫 hex;BigInt= 十進位字串(JSON 無 BigInt 型別;欄位語意由 spec 敘述定義)。
spec欄列出綁定的敘述權威檔(repo 相對路徑)。generatedBy= 產值來源記錄(provenance),非權威宣示。- 每份 fixture 必須使用同一 envelope metadata;
pnpm check:conformance從 fixture 目錄發現全部家族,驗證路徑、格式、編碼、來源、案例名稱與本頁生成式索引 parity。
新增準則¶
向量必須自足(不引主 repo 代碼)、可由 spec 敘述獨立推導驗算、經採納閘 review 後 commit、家族列入下方索引。