D-20260704-03|域名遷移機制:無資料搬運+CI 不變式+301 herding¶
背景與驅動力¶
部署資訊原本只有數行操作清單,未回答「遷移到底搬什麼」與「舊 client 怎麼收斂」。盤點結論:架構是 content-addressed(帳本歸 P2P、身分歸助記詞、內容歸 IPFS、code 歸 git),瀏覽器儲存只是快取與便利層——域名遷移本質上無資料可搬,需要的是把這件事變成可驗證的不變式與程序。
考慮過的選項¶
- origin storage 應用內匯出工具:當時以助記詞為唯一不可逆損失點而裁定不做;此部分後由 D-20260808-06 修正為提供不含金鑰的加密本機備份。
- 「bootstrap 清單不得含域名」字面不變式:multiaddr 必含自有 hostname、裸 IP 反壞 TLS,不可能成立——三輪修正拆成兩層。
- 五段程序 +CI 不變式(採納)。
決定¶
- 遷移性質 = 無資料搬運:content-addressed+ 跨 cutover 同一活網路;附 origin storage 命運表。
- 無識別子綁 origin CI 不變式,拆兩層:OrbitDB address 與 pubsub topic 純內容派生、不含任何域名、不從
location.origin派生;bootstrap/signaling/pinning 端點 hostname 與主站 origin 解耦(主站換域不需改任何端點)。「不用遷移」是設計不變式、不是自動性質。 - 程序五段:預告期 ≥30 天 banner → 前置檢核(pinning 帳本完整性健康抽查 +DNS 提前設定)→ cutover(遷移版 build 先上、major、
CANONICAL_BASE_URL對換、複驗後 flip;唯一抖動窗 =TLS 憑證簽發、分鐘級)→ 事後監看與 301 herding。 - 301 herding:path-preserving 301 使舊 client fetch
/version.json拿到新站檔,commit_hash不符觸發強制升版、自然落新 origin。升版檢查檔名全 corpus 統一為/version.json(與 PWAmanifest.json撞名會抓錯檔)。
後果與影響¶
域名從「架構風險」降為運營程序;每日 sitemap 重生成明文禁止觸碰 /version.json(否則全網假升版通知)。此不變式兩日後直接支撐鏈身分信任根論證(D-20260706-05:位址錨不含域名)。程序權威見 部署資訊.md。