跳轉到

D-20260809-01|身分資產庫與 UGC 選擇器

背景與驅動力

D-20260717-01 已將正式 CID 與 local: 測試資產分域,D-20260802-14 已建立唯一 Helia storage authority,D-20260808-06 則建立 per-identity sealed container 與加密本機備份;但三者都沒有定義玩家 如何明確保留別人的 UGC。若車庫與開房 picker 繼續從歷史 loadout 或偶然下載快取推測候選,LRU 逐出後會出現裸 CID、無聲消失與不可預期候選,且多身分共用裝置時無法安全判斷哪些 CID 不可 GC。

考慮過的選項

  • 把所有看過或用過的 CID 自動視為候選:快取副作用會變成玩家資料,無法表達保留意圖,否決。
  • 另做 UGC 收藏並收幣入庫:與玩家收藏清單撞名,且本機保留沒有鏈上驗證或收費必要,否決。
  • per-identity sealed 資產庫名單,加上不含 owner mapping 的裝置 CID 引用投影(採納)。

決定

  • UGC 資產唯一保留概念為「資產庫/入庫」;玩家收藏只指玩家公開頁清單。資產庫只接受已發布 part | track 的 canonical CID,免費且無數量上限,builtin:local: 永不入庫。
  • 每個身份的 asset-library domain 以 v1 exact schema 封存 CID、kind、名稱/評分/縮圖快照、 part type 與時間;沒有 GLB bytes。狀態只有「已入庫・已取回」與「已入庫・待取回」。取回必須 重新走 canonical bytes、類型與安全驗證;takedown、similarity-pending 或類型不明者不得新增。
  • 裝置層只保存 CID reference count 與 conservative flag,不保存 PeerId/profile 到 CID 的 owner mapping。library 是獨立永久 pin ownership,不覆寫 mineloadoutrace-lock 或一般 LRU。 profile 刪除先在 PIN 驗證的短生命週期 context 解密並準備差異,profile 與 container 成功刪除後 才減少引用;備份匯入未知 sealed 名單時先進 conservative 模式,寧可過度保留,不可低估保護集。
  • .open4wd-backup 包含 sealed 資產庫名單但不含鏈上 UGC bytes;匯入後自然呈現待取回。exact-root CAR 仍是另一條原 CID 保存/補回路徑,兩者不合併。
  • Garage 正式 picker=公版+資產庫項;只有已取回且驗證成功者可裝。local-test 車位另加 local:。 Race Config 正式場地同理,待取回只提供取回動作,不得先進 MatchConfig。歷史 loadout/瀏覽快取 不得成為一般候選來源;既有 loadout 缺 bytes 時保留名稱快照並顯示不可用。
  • 類別候選 10 項以下不顯示搜尋,第 11 項起顯示;排序永遠可用,來源順序穩定,並呈現來源、 評分、縮圖與關鍵 stat chips。tire 四位與 roller 六位逐位裝配,viewport mount 選取同步位置。
  • LOCALlocal: 測試資產的同一套可主題化視覺標記,適用本機測試車位、Editor、零件列與 Race Config;正式位置直接排除 local:,所有拒絕必須有 inline 或 toast 回饋。

後果與影響

玩家的明確保留意圖不再與偶然快取混淆;鎖定身份時 GC 仍能以不洩漏 owner mapping 的裝置投影 保護資產。代價是匯入未知 sealed 名單後可能暫時過度保留,這是刻意的 fail-safe,而不是猜測後 低估引用。所有格式仍屬首次公開前的 v1,沒有 v2、雙讀或相容 shim。