跳轉到

D-20260716-01|App Shell 唯一連線狀態機與離線能力模型

背景與驅動力

解鎖成功但 libp2p/OrbitDB/ledger/signaling 無法啟動時,舊行為靠 fake providers 撐頁面——使用者看到假線上資料,頁面各自猜測自己是否 online,離線可用性沒有一致邊界。

考慮過的選項

  • 沿用 fake providers 撐頁面:假資料誤導使用者、各頁面 online 判斷不一致;否。
  • App Shell 發布唯一狀態機 + 逐能力 flags、線上能力 fail-closed(採納)。

決定

  • App Shell 發布唯一狀態機 locked | local-ready | launching | online-ready | reconnecting + 逐能力 flags;頁面不得自行猜測 online、不顯示假線上資料。
  • local-ready 允許:編輯 / 儲存本機組裝車、使用本機可讀零件與場地、執行不產生正式結果的本機測試、編輯 / 匯出本機 UGC。
  • fail-closed:上鏈、fork、付費操作、多人房、配對、聊天、觀戰與正式參賽,非 online-ready 一律關閉。
  • 登入後離線沿用同身分的本機資源;連線恢復 = 建立新的 online generation,舊 callback、room、cache 與 transport 必須 teardown。
  • fake providers 只准 isolated tests;資料 schema 版號不動、不為尚未發布的開發資料建立 migration。

後果與影響

「離線能做什麼」自此是狀態機的單一事實而非各頁面的猜測;generation 切換讓重連不揹舊資源的殘留狀態,假線上資料路徑從生產碼消失。與離線資產快取、升版循環同屬 PWA 離線面,現況見 pwa-offline.mdinterfaces.md