跳轉到

歷史記錄 · 2026-08-15

月份索引歷史記錄

重大重構里程碑

2026-08-15 ─ Spectator ingress 與 replay checkpoint 有界化(issue 000541)

spectator DataChannel 在 UTF-8 decode 前改用 source→viewer/viewer→source 方向別 raw cap 與 message/byte token bucket;大型 replay checkpoint 另受低頻 quota,sender 強制 canonical prefix。 觀戰端只在 waiting-checkpoint 接受目前 source assignment generation、PeerId 與單調 frame,錯誤 correlation 在 snapshot/signature base64 decode 前拒絕;合法 bytes 只解碼一次並共用於 hash、驗章與 world load。專案仍在 pre-launch,直接收緊未發布 spectator wire,不保留舊編碼相容層。

2026-08-15 ─ Waiting-room control ingress 有界化(issue 000540)

RoomLinkPort 在 DAG-CBOR decode 前新增每條真實 remote link 的一般 message/raw byte token bucket,OPAQUE、join/state、簽章、grid、chat 與 match-start 再受獨立低頻 quota 約束。 oversized、非 binary、畸形與 overflow 都以診斷快照計數;連續 16 次 drop 會關閉 link,合法成功 分派則清除連續計數。專案仍在 pre-launch,直接收緊尚未發布的 room-control wire,不保留舊版 相容或 migration shim。

2026-08-15 ─ Race mesh control ingress 有界化(issue 000539)

賽內 ordered control DataChannel 在 DAG-CBOR decode 前新增 256 KiB 單包上限與 per-peer message/byte token bucket;純 rate overflow deterministic drop,oversized、畸形或 schema 違規 累積 3 次則關閉 link、標記 race-mesh offline 並進既有 disconnect/forfeit。ControlWire 外層改為 exact schema,key announce 同時鎖定 raceId、32-byte public key、64-byte signature 與 8 筆保留硬界。 專案仍在 pre-launch,直接收緊尚未發布的 network/sync v1,不保留舊 wire 或 migration shim。

2026-08-15 ─ TURN token client 有界回應讀取(issue 000542)

主程式不再把所選 signaling provider 的 /turn-token 成功回應直接交給 response.json()Content-Length 與實際串流都受 32 KiB byte 硬上限約束,chunk 累計超限會立即 cancel。 完整有界 body 才以 strict UTF-8 解碼、解析 JSON 並進入既有 token shape 驗證,避免惡意或遭 入侵 operator 以無界 body 耗盡 client 記憶體。固定上限進入 Network.signaling 與程式參數表。

2026-08-15 ─ UGC 付費意圖永久重播守門(issue 000538)

ugc-sponsor-burnugc-maintenance 改以 chain-bound canonical signed-intent digest 辨識同一付款授權;writer、live validator 與 fold reducer 共用同一 helper,Orbit entry 的 parents、clock 與 admission proof 不進 digest,因此旁觀者換 entry 重播仍命中。成功扣款才把 64 位 digest 原子加入 processedPaymentIntents;集合永不逐出並進入 checkpoint canonical serialization,pre-launch checkpoint 缺欄 fail-closed。

2026-08-15 ─ Authoring 原始 GLB 不可變 Release(issue 000519)

27 個原始 GLB 移入 specs 分類樹並由 Git LFS 追蹤;最小 source manifest 形成 path、SHA、size 與 flat Release asset 的唯一權威。Specs PR 在不下載 LFS bytes 下驗 pointers 與 candidate epoch, post-merge job 只 selective pull 27 檔,經 immutable setting、Draft、部分上傳恢復與完整下載回讀 後發布。Main recipe 移除 source hash/root,只以 sourceAssetId exact-set join;dependency lock 與 adoption verifier 綁 exact specs commit、Release tag、manifest fingerprint/digest,再執行 production Editor 全旅程。Specs public 前只用本機 sibling,不新增暫時私有憑證。

Production Editor 的 canonical 壓縮改為每次定稿可快照貼圖最大邊,part 減面另可快照三角形 目標;一般 UGC 預設仍為 4096px/90k,公版 recipe 明示 part 128px/6k、track 256px。壓縮前 會剪除不可達 accessor/bufferView,並保留 Mount、RoutePoint 等語意 leaf,避免舊幾何隨 Draco 成品出貨。真實 chassis 原始 GLB 的 test-only authoring 實測為 66,112 bytes,保留 18 個 Mount 並通過 104KiB 測試閘;真實 track-01 則為 251,068 bytes,保留 RoutePoint_1/2 且完成 Editor 全旅程。未設定 OPEN4WD_BUILTIN_WRITE=1 時只寫 Playwright test-results, 正式 27 個公版仍保留由維護者手動產生。

決策檔:D-20260815-01

2026-08-15 ─ 註解品質本機前移與多語 PR 流程(issue 000536)

四個產品 repo 統一補上 opt-in 的本機 pre-commit/pre-push 註解品質檢查;維護者模式同時阻擋 結構與語言問題,外部貢獻者模式只阻擋結構問題並回報語言差異,避免其他語系作者在本機即被 繁體中文政策擋住。Main、Pinning、Signaling 另把既有分析器接入 ESLint,TURN 則沿用 Python 分析器;Pinning/Signaling 補齊間接匯出、class expression、protected/private、accessor、 decorator 與 overload 等語法測試。

公開 Template CI 的註解 job 只在官方 repo 執行,且不成為 build、deploy 或發布先決條件;外部 PR 由維護者以 suggested changes 修正繁體中文後再合併。工作流程在 issue 從「處理中」轉為 「已處理」前,會在 registry lock 內逐 repo 執行註解品質命令,任何缺 repo、缺 runtime、缺 script 或非零結果都 fail closed,且不留下部分寫入。

決策檔:D-20260815-02

2026-08-15 ─ pnpm 執行前依賴檢查改為 fail-closed(issue 000543)

四個 Node repo 在 repo-local pnpm-workspace.yaml 明定 verifyDepsBeforeRun: errorpnpm runpnpm exec 發現依賴過期時直接失敗,不再沿用 pnpm 11 的自動安裝預設。Workflow 增加跨 repo policy test,同時鎖定 exact pnpm@11.18.0 與 fail-closed 設定。Frozen install 仍須逐次取得明確授權;直接執行既有 node_modules 工具入口只保留為明示繞過新鮮度檢查的唯讀診斷手段。

2026-08-15 ─ Canonical Fold 自包含比賽結算(issue 000537)

安全複審確認舊 match-result 可用舊時戳繞過 live-only 的 anchor/base/settlement 重算, 再由 public-write OrbitDB 直接把事件自報 payout 套進 reducer;既有月硬頂也未把本次 incoming mint 納入判定。因專案仍在 pre-launch,直接移除 unpublished wire 欄位,不保留 相容 shim:MatchResultEvent、proposal 與 takeover 全部移除 economySettlementbaseLogHeadCidsroundAnchorCids,完賽者多簽只背書自包含 match facts。

逐回合 RaceConsensusAnchorEvent 改為 inline roundAnchors[];live admission 與 timeless fold 共用同一組 matchId/grid/loadout/anchor/quorum 驗證。最初把完整 grid proof 重複放進每張 anchor,在 8 人 × 5 回合極限測試達 71,448 bytes,超過 64 KiB;最終改為外層只保存一份完整 proof,每張 anchor 簽 gridContextDigest + gridSeed,同時維持 grid domain binding 與大小上限。

經濟 reducer 現在從事件位置的 canonical DerivedState 計算 settlement,rolling window 與 信譽時序統一使用 state.derivedAt。月硬頂以 monthMinted + incomingMint 判斷,超過時零入帳 但仍留下 MatchRecord.economyOutcome 稽核資料。ordinary genesis receipt 新增唯一正整數 genesisTimestamp,初始化 derivedAt 與 UTC 月錨;正式 pinning service/replica 缺值或不一致 即 fail closed,rebirth 延續 checkpoint state。

決策檔:D-20260815-03