docs: 记录 3 个潜在 bug 的修复状态(对齐 dc05eea)

- 审计报告 D 节 + G.2 表标注 D1/D2/D5 已修复(待运行时验收),修正 D1
  修复方案为「单选枚举 + ==」(复核发现设计器 core_tab 以下标写入 feature_tags,
  不宜改 2 的幂位标志)
- architecture_design ADR-R5-N2 与 core_wand §1 的现状 callout 同步更新为已修复

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-20 14:53:27 +08:00
co-authored by Claude Opus 4.8
parent dc05eeada7
commit 5e3d80ad85
3 changed files with 12 additions and 9 deletions
+1 -1
View File
@@ -2944,7 +2944,7 @@ func reset() -> void:
> **结论**:所有 Feature Tag 字符串必须通过 `CoreFeatureTag` 常量访问,禁止在业务代码中写裸字符串。
> **⚠️ 实现现状 (2026-07-20 审计)**:代码**未按本节的 `String` 常量 + `in` 判定实现**。`core_feature_tag.gd` 实为 **`int` 常量**PERSISTENT_MEMORY=1, DUAL_STREAM=2, ALWAYS_CAST_LAST=3, SHUFFLE_DECK=4, INFINITE_SPELLS=5),`core.feature_tags` 为 `int` 位掩码,用 `&` 判定。**⚠️ 潜在 bug**:这些值非 2 的幂,`&` 会串扰(如 `ALWAYS_CAST_LAST(3) & PERSISTENT_MEMORY(1) = 1` 误判持久内存;当前仅 `wand_memory=1` 未触发)。修复建议:改真·2 的幂位标志(1,2,4,8,16),或回退到本节的 String + `in`(后者天然无冲突)。详见 [审计报告 D 节](../../docs_dev/doc_code_audit_2026-07-20.md)。
> **⚠️ 实现现状 (2026-07-20 审计)**:代码**未按本节的 `String` 常量 + `in` 判定实现**。`core_feature_tag.gd` 实为 **`int` 常量**PERSISTENT_MEMORY=1, DUAL_STREAM=2, ALWAYS_CAST_LAST=3, SHUFFLE_DECK=4, INFINITE_SPELLS=5),`core.feature_tags` 为 `int` 位掩码。**feature_tags 实为单选枚举**(游戏设计器 `core_tab.gd` 以 OptionButton 下标 0..5 写入,下标即等于常量值)。原代码用位与 `&` 判定,因常量非 2 的幂会串扰(`3 & 1 = 1` 误判持久内存)。✅ **已修复** (`fix/audit-latent-bugs` dc05eea):判定改为 `==`,常量保持 1..5(未改位标志以免与设计器 desync)。详见 [审计报告 D 节](../../docs_dev/doc_code_audit_2026-07-20.md)。
```gdscript
# core_feature_tag.gd (Autoload: CoreFeatureTag)