歷史記錄 · 2026-07-24¶
重大重構里程碑¶
2026-07-24 ─ 文檔工程:美術資源第二波收官(暫緩桶退役、全 corpus 檢查鏈無死角)¶
- 美術資源清理定案後補完:11 檔 art frontmatter、裸 fence 補標 64、lint 修復波;
參考圖檔/更名對齊(實際使用圖/參考雛形)。 - 暫緩桶三桶清零退役:§ 斷引 45 筆全修(多為舊 track-functional-spec/asset-functional-spec 節號結構殘留——死節號改指現行權威檔:建模參數表/材質表/UGC機制/零件與場景;「連結後綴 §5」六筆收進連結文字);§ 引用連結化補 14 筆。
- 檢查鏈自此全 corpus 無死角:§ 2,220 全過、連結 3,237 全過、lint 三件套主桶 0;定則「生成物不受 zhlint 管」(INDEX/docs-map 正規化權威=生成器)。
- 提示詞檔殘留的已廢除場地概念敘述(StartLine/FinishLine/Waypoint 等 05-28 前模型)同輪裁決調整完畢=全數對齊現行 RoutePoint/走廊模型(14 處、含 Stage 2 編輯器措辭修正)。
2026-07-24 ─ 文檔工程:三域規則 ID 上線(LEDGER 89/ECON 52/MOD 57=198 條+rules.json registry)¶
決策檔:D-20260724-05
- 共識帳本/經濟/moderation 三域的規範性規則逐條掛穩定 ID(格式
PREFIX-R-nnn、粗體括號主錨掛於規則句、跨檔重述處掛同 ID 引用錨——同一規則的多處 copy 自此被同 ID 綁死);認定準則=「違反會造成共識分叉、錯帳、或裁決不同」且能寫出失敗測試,純敘述不掛。 - 三路獨立深讀盤點 218 條草稿→跨檔重複合併 20 筆→198 條套用(213 錨點;主錨所在=資料系統/程式架構 ledger・economy・moderation・reputation/經濟系統/算式表/信譽系統/賽內機制結算節)。
rules.jsonregistry(掃描生成、derived 非權威)+check:rules入 CI(docs-ci 第九步;主錨唯一性+三域連號看守);全檢查鏈綠。- 後續:主 repo 測試側標註 ID+
check:trace追溯矩陣(report-mode 先行);版本域規則列VER擴域候選未掛。
2026-07-24 ─ 主題部署 payload 歸位 public、src 僅保留程式與治理 metadata¶
決策檔:D-20260724-02
default與正式非 Default 主題的theme.json、theme.css、WebP/SVG/音訊改住public/assets/themes/<id>/,移除 Angular 對src/themes的特殊 assets copy;執行期 URL 維持/assets/themes/<id>/…。src/themes/僅保留ThemeService、stylesheet loader、測試、categories.json、retired-ids.json與生成式 registry;分類與退役名單不進公開部署目錄。- registry generator 以 public manifests 為權威,內建完整 Default manifest 與非 Default 選擇器摘要,不讓 source code 反向 import
public/;start/build在 Angular 編譯前強制重建 registry 與 Default token SCSS,token generator、validator、測試與 canonical 路徑同步調整。此決策取代早期「完整主題包放在src/themes/<id>/再由 Angular 複製」的目錄安排,但保留原有 runtime URL、fallback、lazy loading 與 CI 治理語意。
2026-07-24 ─ 文檔工程:全 corpus frontmatter+生成式索引(總覽生成區塊/docs-map/graph.json)¶
決策檔:D-20260724-04
- 首波 90 檔補 frontmatter(type 11 值/domain 11 域/summary 由總覽・流程・程式架構既有表格播種/authority・slug 佔位);歷史/快照豁免改 frontmatter
type: history|snapshot機器判定(lint 與引用檢查拆硬編檔名、.textlintignore留第二道保險);美術資源 11 檔=清理定案後第二波。 - 生成式索引三件套:總覽.md 檔案索引改生成區塊(圍欄內由
pnpm docs:generate管理、來源=各檔 frontmatter);新docs-map.md(11 域+跨域面板、域關聯聚合圖、per-domain 依賴子圖);graph.json(210 節點/1,447 邊,供 graphify 取用)。生成物 derived 非權威、且不入圖(防自指)。 check:frontmatter+check:docs入 CI(docs-ci 共七步);全檢查鏈綠、§ 與連結數字在插入前後完全守恆。- 附帶:
部署實際值與初始拓撲.md遷入部署資訊/(7 處入站引用同步修)。
2026-07-24 ─ 文檔工程:decisions/ ADR 106 檔+conformance 首波 5 家族(specs 檢查鏈五件套、主 repo 回放接線)¶
決策檔:D-20260724-03
- decisions/(ADR 制度落地):README(不可變/supersede 新檔制/canon 寫現況、決策檔寫為什麼)+ TEMPLATE + INDEX(生成)+ 106 筆
D-YYYYMMDD-nn決策檔(2026-04-29〜07-24 歷史條目全量升格裁決;superseded 4、supersedes/amends 鏈雙向一致);本檔全條目補「> 決策檔」引用 95 條(標題不動、錨點穩定)。 - conformance/(可執行契約首波):權威模型=語意權威永遠在 spec 敘述、向量=敘述的機器可驗採樣、生成器=工具非權威(採納閘賦權);首波 v1 五家族=
ledger/signing-digest/ledger/derive-match-id/ledger/loadout-signing-message/ledger/admission-v1/moderation/panel-draw(規劃期曾列文字 NUL 正規化、實碼盤點該 golden 實體即面板抽選、據實改列)。 - specs 檢查鏈:
docs-ci.yml五步(markdownlint/textlint 術語/zhlint strict/check:refs/check:decisions)=主桶非 0 即紅燈;終態 lint 主桶全 0、markdown 連結 3,096 全通過、常數 md↔code 0 drift。 - 主 repo 接線:新
src/testing/conformance/conformance.spec.ts(預設回放=向量約束實作;generate:conformance產值);pnpm run test2473 綠(197 檔、含回放 25)、十四步驗證全 0。
2026-07-24 ─ 部署檢核、Pinning HTTP v2、Bootstrap/Relay 信任邊界收口¶
決策檔:D-20260724-01
正式部署欄位改由共享向量同時驗證 browser runtime 與 release script;relayNodes 與
unauthenticated bootstrap 清單完全分離。PinningProvider v2 補齊 SignedPayload、64 KiB
上限、timeout、嚴格 URL/CID/JSON 驗證與 reactive availability;pinning server 新增
fail-closed CORS allowlist。Bootstrap loader 加入 5 秒、64 KiB、256 行、64 筆與 multiaddr
界線。Circuit Relay 改為每個 libp2p generation 單一 listener 重用;直接連線全失或
15 秒冷啟動觀察窗仍為零連線時才嘗試明示 relay,且嘗試期間 direct 恢復不會被舊失敗
結果誤判。官方 signaling 現況定為 Cloudflare Worker+SQLite-backed Durable Objects,
Node adapter 保留給公版自架者;pinning k8s 的 RWO 單副本更新策略同步固定為 Recreate。
同日 signaling 正式升為 scoped signed v2:移除全域 lobby 與「整場只選一個 provider」
假設,每個 room:<code>/match:<digest> 建立獨立 session;WebSocket 與 GossipSub
共用 canonical DAG-CBOR SignedPayload envelope、nonce replay guard 與 closed SDP/ICE
DTO。client 同時保留單一 active WSS 與 Gossip fallback,依 remote 最近有效入站 transport
回覆並跨 transport 去重;官方 WSS 故障或免費額度耗盡時有限次降級,不讓多人功能整體
失效。社群 signaling endpoint 只能由玩家明確加入,不建立自動信任陌生 operator 的公開
目錄。Worker front router 只做 admission,room/match 各自落 SQLite-backed Durable
Object,Hibernation、TTL、bounded nonce/token bucket 與不可逆 IP bucket 共同限制資源;
公版 Node 與 Worker adapter 通過同一 conformance vectors,公版 CI 只驗證與 dry-run。
官方部署拓撲同步定案:open-4wd-signaling、open-4wd-pinning 都是零 secrets、永不直接
部署的 public templates;官方分別從私有 open-4wd-signaling-deploy 與
open-4wd-pinning-deploy 跟版。官方 signaling 使用 Cloudflare,pinning/bootstrap 與
TURN 使用各自適合的部署面,避免全部落在同一故障域;穩定名稱固定為
open4wd.org、signal.open4wd.org、pin.open4wd.org、bootstrap.open4wd.org 與
turn.open4wd.org,.com 只做 HTTP 301。明確延後:實際私有 repo/官方部署、中央
/match rendezvous、Vercel/Deno adapter、TURN 多節點 HA、真實 ledger/signer/
bootstrap/legal 值,以及本機測試前的主 README;pinning quorum-follow 仍是已核准
目標,現行 runtime 維持 full-refold,待主 repo 模式落地、re-vendor 與領域事件窗
E2E 後再切換。