四個指紋
意義相同,長相不同。而且兩者都可證。
對整個封包取一個雜湊,只能回答一個問題:這是不是同一堆位元組。MLF 帶四個,所以它能回答人真正想問的那個問題 —— 到底什麼變了?
四個是什麼
- 結構
矩陣、座標、角色、區域、相依與路徑。
- 內容
數值與來源公式。
- 語意
正規化後的結構,加上內容意義。
- 呈現
樣式、版面與人類視圖中繼資料。
它們在構造上就是獨立的。把封包重新設定樣式,只會動到呈現雜湊,其餘三個不動。改一個值,會動到內容與語意,結構不動。單一個封包雜湊表達不出上面任何一句話。
語意相等
有用的推論是一個你真的可以去檢查的主張:兩個封包可以在語意上相等、同時在呈現上不同。那不是打太極 —— 那是兩個檔案之間一個可測試的關係。
語意
從 MLF 0.1 遷移到 1.0 必須保留語意與呈現指紋。v1.0 的發布驗證對那次遷移記下了 semantic_equal: true 與 presentation_equal: true,驗證狀態為 valid。
所以 0.1 → 1.0 的遷移不是「相信它安全」。那個主張有形狀,而且發布時實際檢查過。
每一個從哪裡算出來
每個指紋都在封包中一個被宣告的子集上計算。總覽頁的封包解剖標出了哪些成員餵給哪個雜湊。
| 指紋 | 計算範圍 |
|---|---|
| 結構 | 矩陣、座標、角色、區域、相依、路徑 |
| 內容 | 數值與來源公式 |
| 語意 | 正規化後的結構,加上內容意義 |
| 呈現 | 樣式、版面與人類視圖中繼資料 |
校驗和是另一回事
checksums.json 用 SHA-256 把每條路徑綁到它的位元組。那是完整性 —— 這個檔案有沒有完好送達。四個指紋是身分 —— 這在某個特定意義下是不是同一份文件。把兩者混為一談,你會得到一個只能告訴你「檔案沒壞」的系統。
做差異
mlfc diff 用這套詞彙比較兩個封包,所以差異的回報方式是「哪一層動了」,而不是一個位元組偏移量。
bash
mlfc diff a.mlf b.mlf