D-20260803-01|持久儲存拒絕保留既有 UGC 偏好¶
背景與驅動力¶
D-20260802-13 規定 standard/generous
需要 persistent storage,但其「請求失敗或 API 不可用時保存/回復為 off」文字沒有區分
這次 requested mutation 與請求前已保存的 sanitized level。若玩家原本已有非 off 偏好,拒絕
另一個等級的請求不應覆寫既有偏好;瀏覽器目前未確認 persistence 時,既有非 off 也必須如實
顯示為 dormant,而不是被呈現成 off。
本裁決只修正 persistence request 的 mutation 結果與狀態呈現,不改 LRU 門檻、storage authority 生命週期、peer serving 或任何網路邊界。
考慮過的選項¶
- 每次拒絕都強制保存
off:會把失敗的 requested mutation 變成另一個未請求的寫入,並破壞 既有合法偏好,否決。 - persistence 未確認仍樂觀保存玩家剛請求的非
offlevel:無法證明額外 retention 的必要條件, 否決。 - 以請求前 sanitized saved level 為 rollback boundary;只有 persistence 成功才提交 requested mutation(採納)。
決定¶
- 設定層先讀取並 sanitize 目前已保存的
ugcContribution.level;無效值依既有 sanitizer 收斂為off。玩家請求standard/generous時,只有 persistent storage 已確認或本次請求成功後, 才提交 requested mutation。 - persistence request 被拒、拋錯或 API 不可用時,該 requested mutation 失敗,不保存新 level,
並保留請求前的 sanitized saved level。先前為
off就維持off,UI 顯示本次拒絕 feedback; 不得因拒絕而假稱standard/generous已保存。 - 先前已保存的
standard/generous若目前未確認 persistence,仍顯示該保存值,但額外 retention 不啟用,runtime 狀態為storage-not-persistent。這種 dormant 狀態不得靜默改寫或顯示成off;下一次成功取得 persistence 後,才可依保存 level 啟用。 - 公開設定 action(包含 persistence 拒絕路徑)不得建立、啟動或重試 storage authority,也不得
啟動身分、Ledger、Helia networking 或 P2P。正常
AppShelllifecycle 仍依 D-20260802-14 獨立管理 authority,不受本裁決 擴張或改寫。
後果與影響¶
設定 UI 的選中值永遠反映實際 sanitized saved level;拒絕 feedback 描述本次 mutation 失敗,不把
既有值誤報為 off 或新請求值。storage-not-persistent 表示非 off 偏好已保存但額外 retention
目前休眠,並不表示 networking、authority 或 provider 已啟動。
本決策只窄幅修正 D-20260802-13 的 persistence-denial 語意;不重寫歷史決策,不改 D-20260802-14 的單一 storage authority、離線 GC、借用 adapter 或 disposal 契約,也不新增 Kubo、 port、CSP、共識、rule ID、global seed 或 closed-browser background service。