MLF 1.0 · mlfc 1.0.0
English

四個指紋

意義相同,長相不同。而且兩者都可證。

對整個封包取一個雜湊,只能回答一個問題:這是不是同一堆位元組。MLF 帶四個,所以它能回答人真正想問的那個問題 —— 到底什麼變了?

四個是什麼

  • 結構

    矩陣、座標、角色、區域、相依與路徑。

  • 內容

    數值與來源公式。

  • 語意

    正規化後的結構,加上內容意義。

  • 呈現

    樣式、版面與人類視圖中繼資料。

它們在構造上就是獨立的。把封包重新設定樣式,只會動到呈現雜湊,其餘三個不動。改一個值,會動到內容與語意,結構不動。單一個封包雜湊表達不出上面任何一句話。

語意相等

有用的推論是一個你真的可以去檢查的主張:兩個封包可以在語意上相等、同時在呈現上不同。那不是打太極 —— 那是兩個檔案之間一個可測試的關係。

語意

從 MLF 0.1 遷移到 1.0 必須保留語意與呈現指紋。v1.0 的發布驗證對那次遷移記下了 semantic_equal: truepresentation_equal: true,驗證狀態為 valid

所以 0.1 → 1.0 的遷移不是「相信它安全」。那個主張有形狀,而且發布時實際檢查過。

每一個從哪裡算出來

每個指紋都在封包中一個被宣告的子集上計算。總覽頁的封包解剖標出了哪些成員餵給哪個雜湊。

指紋計算範圍
結構矩陣、座標、角色、區域、相依、路徑
內容數值與來源公式
語意正規化後的結構,加上內容意義
呈現樣式、版面與人類視圖中繼資料

校驗和是另一回事

checksums.json 用 SHA-256 把每條路徑綁到它的位元組。那是完整性 —— 這個檔案有沒有完好送達。四個指紋是身分 —— 這在某個特定意義下是不是同一份文件。把兩者混為一談,你會得到一個只能告訴你「檔案沒壞」的系統。

做差異

mlfc diff 用這套詞彙比較兩個封包,所以差異的回報方式是「哪一層動了」,而不是一個位元組偏移量。

bash
mlfc diff a.mlf b.mlf