摘要
PR #880 建立了 doc↔code 同步守門(引述綁定逐字比對 + hint 近似網),有效消滅了「文件抄寫關卡 hint 但實作已改」這類漂移。但覆蓋範圍僅限 LevelSpec.hint(9 條)與 4 處 opt-in 綁定的引述,其餘引述 src 常數的文件內容仍會靜默漂移。
背景與證據
這道守門的起因是一次真實漏網:04-levels-world.md 的 §60 L8 hint 主句寫著「地面長按吸入鍵 0.6 秒星化變身」,但 levels.ts:613 的實際值早已改為 SP 鍵。它沒有帶任何取代標註,所以既不在人工 sweep 的搜尋範圍(找 已由/已於/已被),也不被守門的行內標註規則涵蓋——是純粹的無標記過期抄寫。
複審席的故障注入證實缺口仍在:
注入:未綁定的錯誤 toast「星力結晶!長按 B 鍵引爆」
結果:verify:docs exit 0(漏)
影響
GAME_DESIGN 系列設計文件是接手者的 SSOT。無標記的過期抄寫比有標記的更危險——讀者沒有任何線索知道該去查證。目前只有 hint 這一類受保護,toast、技能浮字、UI 標籤、數值常數(HP、telegraph 時長、難度門檻)都在覆蓋範圍外。
範圍
分兩類,成本與作法不同:
A. 字串類(toast、技能浮字、UI 標籤) — 成本較低。複審席建議的方向是把「長引述強制綁定」寫成慣例並由守門執行,而非對短標籤做全面 exact-match(後者會誤傷「世界地圖」這類通用詞彙造成大量偽陽性)。需先盤點有多少處值得納管。
B. 數值常數(HP、telegraph、難度門檻) — 成本高一個量級。這類值不是「」引述而是散在敘述句裡,機械化需解析 TS 物件字面值並建立「值 ↔ 欄位路徑」對映。原作者評估後決定不做,理由是數值漂移通常伴隨鄰近上下文一起變、人眼較容易發現。此判斷需要在本卡重新評估是否成立。
待修的既有小瑕疵
scripts/verify-design-docs.mjs:30-31 的校準敘述寫「211 筆」,與現況計數(約 204 非廢止/218 含廢止)不符;「其餘 ≤0.20」也略大於實測的未綁定集合。門檻 0.5 的分離帶結論不受影響(實測 bound 0.412 vs stale 0.558),但註解數字應更新為實測值或改為「約 N」。
驗收標準
- 決定 A 類的納管範圍與機制,實作後以故障注入證明能擋(至少涵蓋複審席用的錯誤 toast 樣態)
- 重新評估 B 類是否值得做,結論寫進文件(做或不做都要有依據)
- 慣例(哪些內容必須綁定、綁定格式)寫進
99-superseded.md 或貢獻指引,不能只存在於守門程式碼裡
- 修正
verify-design-docs.mjs:30-31 的校準計數註解
摘要
PR #880 建立了 doc↔code 同步守門(引述綁定逐字比對 + hint 近似網),有效消滅了「文件抄寫關卡 hint 但實作已改」這類漂移。但覆蓋範圍僅限
LevelSpec.hint(9 條)與 4 處 opt-in 綁定的引述,其餘引述 src 常數的文件內容仍會靜默漂移。背景與證據
這道守門的起因是一次真實漏網:
04-levels-world.md的 §60 L8 hint 主句寫著「地面長按吸入鍵 0.6 秒星化變身」,但levels.ts:613的實際值早已改為 SP 鍵。它沒有帶任何取代標註,所以既不在人工 sweep 的搜尋範圍(找已由/已於/已被),也不被守門的行內標註規則涵蓋——是純粹的無標記過期抄寫。複審席的故障注入證實缺口仍在:
影響
GAME_DESIGN系列設計文件是接手者的 SSOT。無標記的過期抄寫比有標記的更危險——讀者沒有任何線索知道該去查證。目前只有 hint 這一類受保護,toast、技能浮字、UI 標籤、數值常數(HP、telegraph 時長、難度門檻)都在覆蓋範圍外。範圍
分兩類,成本與作法不同:
A. 字串類(toast、技能浮字、UI 標籤) — 成本較低。複審席建議的方向是把「長引述強制綁定」寫成慣例並由守門執行,而非對短標籤做全面 exact-match(後者會誤傷「世界地圖」這類通用詞彙造成大量偽陽性)。需先盤點有多少處值得納管。
B. 數值常數(HP、telegraph、難度門檻) — 成本高一個量級。這類值不是「」引述而是散在敘述句裡,機械化需解析 TS 物件字面值並建立「值 ↔ 欄位路徑」對映。原作者評估後決定不做,理由是數值漂移通常伴隨鄰近上下文一起變、人眼較容易發現。此判斷需要在本卡重新評估是否成立。
待修的既有小瑕疵
scripts/verify-design-docs.mjs:30-31的校準敘述寫「211 筆」,與現況計數(約 204 非廢止/218 含廢止)不符;「其餘 ≤0.20」也略大於實測的未綁定集合。門檻 0.5 的分離帶結論不受影響(實測 bound 0.412 vs stale 0.558),但註解數字應更新為實測值或改為「約 N」。驗收標準
99-superseded.md或貢獻指引,不能只存在於守門程式碼裡verify-design-docs.mjs:30-31的校準計數註解