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:
@@ -56,7 +56,8 @@ extends Resource
|
||||
|
||||
## Core 特性标签,驱动特殊执行规则
|
||||
## ⚠️ 实现现状(2026-07-20):代码实为 `@export var feature_tags: int = 0`(int 位掩码,非 Array[String]);
|
||||
## CoreFeatureTag 常量为 int 1..5 并用 `&` 判定——值非 2 的幂有位冲突 bug(见审计 D 节)。
|
||||
## CoreFeatureTag 常量为 int 1..5(单选枚举,设计器 OptionButton 下标写入);
|
||||
## 判定已由 `&` 修复为 `==`(dc05eea,原 `&` 因非 2 的幂会串扰;见审计 D 节)。
|
||||
@export var feature_tags: Array[String] = []
|
||||
|
||||
## 图标路径
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user