跳轉到

歷史記錄 · 2026-06-30

月份索引歷史記錄

重大重構里程碑

2026-06-30 ─ 信譽系統複審:信譽改「純 derive、無獨立事件」(廢 ReputationEvent,跨 ~13 檔)

決策檔:D-20260630-01

信譽系統.md 多角度複審。撈出 ReputationEvent schema 三檔三套不一致(信譽系統 §10 type:'ugc_used' + peerId / 信譽變動流程 §4 type:'reputation_event'+subtype / reputation.md type:'reputation-adjust'+target+reason),升級為架構決定過程修正:我一度誤判 reputation.md(事件式 appendEvent('reputation-adjust'))為 canonical 並先改了 2 檔;複查事件權威 資料系統 §31/§201 發現「MatchResultEvent 內嵌信譽事件」(同經濟結算、multisig),證實 reputation.md 的獨立事件才是 drift。使用者裁定 (A) 對齊資料系統權威

最終模型:信譽 = 純 derive、無獨立 ledger 事件(同經濟「不另開 mint 事件」)。分數 = clamp(500 + Σ delta, 0, 1000),各 delta 在 applyEvent來源事件推導:MatchResultEvent(勝場+1/連勝+5/斷線−5,自 ranking·disconnects·recentMatches)/ ugcUsageStats(每 100 次+5 / 高評分+20)/ ArbitrationResultEvent(檢舉準確+10/剽竊−50/惡意檢舉−30)/ ModerationActionEvent(被檢舉成立−20/版權−100)。防偽 = 來源事件本身已驗證(multisig/仲裁/黑名單)。推導出的 ReputationDelta(target/delta/reason/causeEventId/appliedAt)僅供 history/UI、非事件。廢除:獨立 ReputationEvent 'reputation-adjust' + appendEvent + evidenceEventIds 防偽 + reason 底線短名(win_match/ugc_used/report_accurate)。

Q2③ 頻繁斷線加碼罰結案 = 不加碼(先前標記暫緩待本審)。先評估斷線影響:單次斷線對他人輕微(比賽續跑、獎金池略縮)、集體斷線 void 已對稱兜住、斷線者早三重自損(forfeit+σ不收斂+−5)、15s 重連窗救誤殺 → 現有機制足夠。§2.3 措辭收乾淨「異常斷線(15s 未重連,每次)−5」。§4.1 去多餘 floor()

跨檔 reconcile(~13 檔):reputation.md(§1 事件→derive 模型表 + ReputationDelta / §2-3 ReputationEvent[]→ReputationDelta[] / §5 onMatchVictory·checkMilestone·checkMaliciousReporter→derive 函式 / §8 API)、信譽系統 §10、信譽變動流程(§1 flow / §4 / §5 deriveReputation / §8 異常情境 / §2 來源表)、資料系統 §31·§33·§54·§201、賽內 §3.2.7、ugc-rating §高評分 milestone、moderation §5.4、DMCA流程、檢舉與仲裁流程、比賽結算流程 §6·§30·§180·§227、玩家整體旅程、流程.md、程式流程/ledger mindmap。grep 驗證:全 corpus 僅剩信譽系統 §10「無獨立 ReputationEvent」這條正確否定指標。

第二輪多角度複審(同日):公式(weight 表 / Bayesian §3.3=算式表 §19 / milestone)全對。3 修 + 2 待續。3 修:① ugc-blacklisted −20 來源歸錯(我第一輪造成)——§10 + reputation.md §1 放 ModerationActionEvent,但檢舉純仲裁、moderation.md §5.4 寫「derive 自仲裁結果」→ 改掛 ArbitrationResultEvent(該列 4 項:檢舉準確+10/剽竊−50/惡意−30/被檢舉成立−20),ModerationActionEvent 只剩 DMCA 違反版權 −100。② 比賽信譽 +1 改完賽制(使用者選 a)——§2.2「比賽勝場 +1 / 判定完賽且非斷線」vs reputation.md derive(只給冠軍 ranking[0])打架;裁定 match-finish +1 給所有非斷線完賽者(理由:信譽=信任分非技術分、完賽=good-citizen/抗 Sybil;連勝 +5 仍看冠軍)。renamed match-victorymatch-finish、deriveMatchReputation 改 ranking.filter(非斷線) 全發。跨檔:信譽系統 §2.2/§10、reputation.md §1 enum+表+§5.1、賽內 §3.2.7、信譽變動流程 §1/§2、比賽結算 §6(經濟系統「比賽勝場」是獎金、另一系統、不動)。③ §10 高評分來源補「評分」(非只 ugcUsageStats)。2 待續:#4 騷擾/作弊檢舉類型無對應信譽 reason(待裁定)、#5 新手仲裁豁免在 derive 沒接線(reputation.md §5 未呼叫 shouldApplyArbitrationPenalty、待補接線)。細節另記於本機工作筆記(未入 repo)。

2026-06-30 ─ 經濟系統複審:rank 精確化 + 場 clarity

經濟系統.md 複審(7 輪審計後 + 多回合改版),整體紮實、多回合互動已對齊(finisherCount = 完成 N 回合 / royalty per-match 去重 / combo per-match / 24h K=5 = 5 match)。2 個一致性小修:① §6/§4「rank = 總名次」→「完賽者排名(總名次序、forfeit 不佔位)」,與本日 economy.md / ledger.md 同步(獎金名次是完賽者壓縮名次、非絕對總名次,沿用單場語義)。② §6.1/§11「5 場」標清楚「= 5 場 match(非回合)」+ comboHash = sorted 完賽者 PeerIds。第二輪深審(公式 / 數值全對:獎金例 / 整除 / niche / 月軟曲線)裁定:獎金維持 per-match、與回合數 N 無關(N-scaling 考慮後否決——competitor 獎金看總名次不看 match 長度;royalty 才隨 N 用到的 UGC 放大、為刻意內容多樣激勵;K=5 + finisherCount ≥ 3 封頂刷分),§6 補設計註。

2026-06-30 ─ 零件與場景複審:3 drift 修正

零件與場景.md 多角度複審,大致對齊(8 類零件 / 18 mount / aero / tire·motor·battery 公式 / chip slot / weapon 3 機制 / entity 3 類 / 場地 schema)。修 3 drift + 1 一致性:① §1 整車約束「材質密度比」→「零件質量比」(VEHICLE_PART_MASS_RATIO_MAX;材質密度比 PART_MATERIAL_DENSITY_RATIO_MAX 是 part 層約束、不屬整車,兩個 50:1 拆分見 spec_review)。② §9.5 鏈段「≤ 32」→「≤ MAX_WEAPON_DRIVEN_BODIES 16」(32 是舊 MAX_CHAIN_SEGMENT 殘值、撐破 body 預算帳)。③ §8.4 / §12「thermal_limit」→「auto_thermal_limit」×3(runtime part 欄位;材質層才叫 thermal_limit)。④ §5 駕駛功率補沒電 cutoff note(對齊本日算式表 §2 Endurance)。

2026-06-30 ─ 遊戲機制複審:Endurance「沒電後果」補定義

決策檔:D-20260516-01

遊戲機制.md 多角度複審,大致對齊(8 skill enum = 算式表 §3 / 熱·疲勞 = §6·§7 / 5 流體 = 材質表 / 天氣範圍 = 建模 §452 / 跑道·三層掉出·重力)。撈出一真缺口:Endurance 是 8 大 stat 之一、電量 capacity_mah 會耗,但全 corpus 無「沒電 / 低電對駕駛的後果」定義 —— 算式表 §2 駕駛功率用常數 declared_output_w、與剩餘電量無關(剩 1% 跟滿電一樣快),§10 視覺卻寫「電量低 → 馬達轉速降」暗示了公式裡不存在的機制。裁定硬切(使用者:「就像其他賽車遊戲,沒電就停在路中、等時間到」):capacity_mah ≤ 0 → actual_power_w = 0(算式表 §2)+ 技能 / 武器 applied_energy = 0(§3)、capacity_mah clamp ≥ 0;停住的車靠慣性滑行、等回合賽程時間上限(同「卡牆 / stall = 無法完賽、時間上限兜底」)。§10 措辭對齊(電量低 = 色變警示 / 耗盡 = 馬達停轉滑行)。Endurance stat 意義 = 撐多久不斷電。

2026-06-30 ─ 多回合比賽模型 實作 + Match / Round / Race 三層正名(跨 ~25 檔)

決策檔:D-20260630-02

承 2026-06-29 揭露的多回合跨檔大洞 + brainstorm 全數定案,本日實作進 企劃。使用者授權「依照你的建議 + 你再完整 review 確認、沒問題就開始」。實作前完整複審(讀 ledger / economy / matchmaking / 賽內 / 算式 / 程式參數 / 資料系統 / 比賽結算 / 經濟 / 車輛組裝 全文),確認設計 end-to-end 成立。

模型(積分制冠軍):一場比賽(match)MATCH_ROUND_COUNT回合(round)(1–5 暫定、預設 3)。房主開房設定逐回合場地(可重複軌)+ 圈數 + 時限 + 人數(≤ 各回合 auto_player_max 最小值)。配對後每人從車庫選 N 台(一台 / 回合、可重複)。逐回合 載入 / reset / 競速 → 回合名次 + 積分 P − k + 1(線性,暫定);回合內全毀者排末位、得低分但續賽換新車(非整場出局);損傷不繼承。N 回合積分加總 → 總名次(tiebreak 總時間 → PeerId)→ per-match 結算一次(獎金 / TrueSkill / 信譽 / royalty 累加);finisherCount < 3 → match 層 void。ledger = 一場比賽一筆 MatchResultEvent(內嵌 rounds[])。

三層正名(防程式誤解,使用者要語義對齊)Match 比賽(結算 / 帳本 / 經濟 / 房間設定單位)/ Round 回合(match 內結構槽)/ Race 即時競速(回合內 netcode / 物理)。

  • → Match(全改)RaceResultEvent→MatchResultEvent(type race-result→match-result)、RaceEconomySettlement→MatchEconomySettlementRaceParticipantLoadout→MatchParticipantLoadoutthreeCarRotation→carRotation 可變長)、RaceResultSignature→MatchResultSignatureRaceRules→MatchRulesRaceConfig→MatchConfigrounds:3 固定 + 單軌 → rounds: RoundConfig[])、RaceContext→MatchContextRaceRecord→MatchRecordRaceDerivedState→MatchDerivedStateDerivedState.race→.match)、recentRaces→recentMatchesrecentRaceCombos→recentMatchComboscoldRacePartitions→coldMatchPartitionsraceRecords→matchRecordsraceId→matchId(結算 / 紀錄脈絡)、racePrizes→matchPrizes(+RacePrizeShare→MatchPrizeShare)、race_prize→match_prizehot_race_quarters→hot_match_quartersuseRaceId→useMatchIdwin_race→win_matchrace-victory→match-victory、及函式 computeRaceSettlement/computeRacePrize/shouldGrantRacePrize/buildRaceResultCandidate/reviewAndSignRaceResult/collectAllUgcUsedInRace/updateRatingsAfterRace/splitColdRacePartitions/getRaceRecord/getRecentRacesForPlayer/raceRecordFromEvent/appendRecentRaceCombo/onRaceVictory 一律 →Match。
  • 保留 race(即時層)RaceSnapshotEventrace_seed、rollback/desync/checksum、RACE_*/PER_RACE/MAX_RIGID_BODIES_PER_RACE 常數(界定回合內即時 race、per 回合)、preRaceVersionCheckon-chain-race context enum、Race Sign Key+其 raceId(賽內 ephemeral 簽鑰)、賽內機制.md 檔名、race room / /race/:id UI 字串。

新增程式參數表 §7 MATCH_ROUND_COUNT_DEFAULT 3 / _MIN 1 / _MAX 5(+ §19.2 invariant);算式表 §20.1 多回合積分與總名次(roundPoints = P−k+1 + tiebreak);ledger.md §5 RoundResult(roundIndex / trackRef / lapCount / ranking / finishTimes);matchmaking.md MatchConfig + RoundConfig

逐檔(~25):程式參數表 / 算式表 / 資料系統(§3 事件權威) / 程式架構 ledger·economy·matchmaking·moderation·ugc-rating·reputation·pinning-service·builtin-assets·system-constants·interfaces·signaling-service·程式流程(ledger+matchmaking mermaid) / 賽內機制(§1.5 房間設定 + §3 回合↔比賽兩層拆分) / 配對流程(§1 流程改:開房設定→選 N 車→逐回合循環→match 結算) / 車輛組裝(§1 選 N 台指標) / 比賽結算流程(總名次 + per-match) / 經濟系統(§6.2 finisher = 完成 N 回合) / 信譽系統 / 信譽變動流程 / 比賽進行流程 / 治理事件流程 / 升版流程 / 美術資源 UGC卡片。

驗證:grep 全 corpus(排除本檔)→ 0 個 match 層 Race* 殘留;realtime keeps 全在;新詞彙(MATCH_ROUND_COUNT / MatchResultEvent / RoundResult / MatchConfig / carRotation…)跨 15 檔一致;combo_max_races→combo_max_matches

保留 settlement 內部(多簽 / prize-by-rank 沿用);唯一邏輯變動 = collectAllUgcUsedInMatch 改掃 N 回合所有 track + carRotation(Set 去重 → 同軌跨回合重複用 royalty 算一次)。

第二輪 review 補修(同日):broad [Rr]ace 全掃,再撈出 ① state.race.playerSlotCounts×2(economy.md;DerivedState 容器已改 .match、漏改會炸) ② raceCount→matchCount(跨 6 檔:ReputationDerivedState / RecentTeammate / 仲裁門檻——多回合下 raceCount 歧義〔回合 vs 比賽〕,正名除疑) ③ addFromRace→addFromMatch / hadRecentSharedRace→hadRecentSharedMatchhotRaceQuarters 參數 / lastRaceId? API / race-result mermaid / race-prize prose×4 / Race result settlement 殘留。⭐closed 既有 latent gap:computeMatchSettlementmatch.finishers 但該欄位從未定義(舊 race.finishers 即如此)→ 改 in-function derive finishers = ranking − disconnects(forfeit 規則已定案);併補 Room.currentMatchId 宣告(原 currentRaceId 也缺)。二輪後 grep 再驗 0 殘留

第三輪 review 補修(同日、邏輯 / consensus 角度):① 補 SettlementContext 介面正式定義(economy.md §4;原為隱含型別)。② ⭐deriveTotalRanking 命名 + 定義(算式表 §20.1 純函數) + reviewAndSignMatchResult 明文「candidate.ranking 須 == 由 rounds[] 重算總名次」——多回合新增的 consensus-critical 缺口:總名次是衍生 aggregate(積分加總),單場時 ranking = 即時物理觀測本就自驗、多回合若簽章者不重算則主 peer 可偽造總名次(verifySettlement 會照偽造名次算「對」的獎金)。③ 結算流程 §8.3 主 peer 步驟改用 deriveTotalRanking。④ 修 rank = 總名次 註解不準(finishers 壓縮 forfeit、實為「完賽者排名、總名次序、forfeit 不佔位」,沿用單場語義)。

車輛組裝 多回合複審(同日):cross-check 建模 §6 全對齊(§3.1 mount 配對 / §3.2 部件數 / §9 canonical body·tire·battery / §3.4 約束 = 程式參數表 §3)、無漂移。裁決兩多回合互動並落檔:① 版本檢核 N 台「整人擋」——carRotation 任一台含 unusable 資產 → 整人拒絕進房(非單回合 DNF、湊齊 N 台全可用才上場;authority 賽內 §1.6 + summary 車輛組裝 §13)。② carRotation preloading 一次選定後鎖死——不可逐回合換車(賽前承諾策略 + loadout-lock 防作弊;車輛組裝 §7)。+ 小修:§10「進入每回合前 reset」、§13 補窄路相容 per (車, 回合場地) 警告。

車輛回合狀態「reset 流程」→「每回合新車」reframe(同日、車輛組裝第二輪複審延伸):使用者點出多回合下「reset_for_new_match / 回滿 / 重置 / 損傷不繼承」是多餘的流程框架——每回合載入該回合的車(carRotation[i])+ 場地 = 全新世界,初始狀態天然全新(換新車的自然結果、非 reset 工序;fresh-load 對 determinism 更乾淨:各 peer 從同一 GLB 載入 → 初始狀態一致)。保留:新車初始狀態「值」定義(fatigue 0 / temp ambient / battery 滿 / 彈藥滿 / broken false,determinism 需要)+ 回合內彈藥有限(打完即空)。移除 / 改寫:reset_for_new_match 函式名 + 「回滿 / 每場回滿 / 已射出 bullet 清除 / 損傷不繼承(當主動動作)」→ 一律收斂成「每回合新車 + 新場地世界」。跨 9 檔:算式表 §11(標題 reset→「車輛回合初始狀態」)·§20.1 / 建模 §172·§173 / 程式參數表 §141 / physics-engine §137 / 零件與場景 §141 / 遊戲機制 §7·§20 / 車輛組裝 §10(+補 launch_ammo 與 battery 對稱) / 配對流程 §1 / 賽內機制 §1.4·§3.1.1。grep 驗證「reset 流程」框架 0 殘留(僅留無關者:/reset.html 逃生口 / month-reset / checkpoint 計圈重置 / 重置視角)。

待調 / 暫定MATCH_ROUND_COUNT_MAX=5、積分線性(可改 top-heavy)、跨回合斷線 forfeit 整場細節、Race Sign Key per-match vs per-round 派生(即時層、暫不動)。