合并(三关色相抽测脚本+效果通道零现役普查报告): 抽测脚本落地(S1 机检 D 三关 H2 槽全过/S2 样图机检 17 项全绿,模型口径订正=shader 精确合成)+普查报告(埋点层与内容层两层分开判——词表全保留零清退项,内容层零孤儿);叙述订正 5 处与迭代 53 改写族清退批撞车——冲突四件全取 master 侧(迭代 53 专名清零已覆盖订正目标,分支侧冗余放弃),普查报告叙述节事实以迭代 53 后状态为准待后续批订正;待办清单普查条推进(待写卡→待执行,遗留旧词收尾待裁)。验证:分支侧冒烟 15 项 0 失败三闸全过

This commit is contained in:
DKChan committed 2026-11-06 01:06:43 +08:00
commit 7bbde05243
4 files changed
+679 -2

No files matched your search

@@ -0,0 +1,45 @@
# 普查:效果通道与事件词零现役(2026-11-06)
> **接收方**:待办清单「效果通道与事件词的零现役普查」条——本报告是该条的产出合同。
> **结论**:需要你处理的事只有 **2 件**(第一节);扫描面内其余全部属预留埋点,**全部保留、零处理项**(第二节只留计数供存档)。词表零改动、内容层零孤儿、零代码改动。
## 一、需要你裁断的两件事
### 1. 注释叙述订正 5 处——做不做
代码注释把三件**未设计入表**的专长(掘进蓄能/深挖钻头/爆破工兵包)写成了在役叙述,后来读代码或写卡的人会被误导(迭代 53 已发生过一次:spike 承接句按注释误判「零新代码」)。订正方式=把注释改成「预留、未设计入表」,不改任何逻辑。
| 位置 | 现行叙述 | 事实 |
|---|---|---|
| effect_engine.gd OPS 头注 | mod_zero「掘进蓄能」、gte_ref/lt_ref「深挖钻头配额」 | 两专长零在表 |
| effect_engine.gd EFFECT_KINDS 头注 | spike 独立 kind 在词表 | 实走 modify_ticket 的 mode 通道 |
| reward_grant.gd:130 | 「counter_spend 订阅=掘进蓄能积点账本」 | 掘进蓄能零在表 |
| action_economy.gd:82 | 「深挖钻头付费开掘」 | 深挖钻头零在表 |
| treasure_item_table.gd:20 | 「cell_removal = 爆破工兵包中立移除格」 | 爆破工兵包零在表 |
### 2. 秘宝表旧词「迁移完成」收尾——做不做、何时做
秘宝表 schema 词表里留着 9 个旧目录时代的词面(git 查证:迭代 22 秘宝批把旧目录 12 行全量换代成现役 12 件后,旧词面按 schema 自己注的「旧词保留共存至迁移完成」留下)。按关联效果列名:
| 旧词承载的效果 | 类型 |
|---|---|
| 雷区揭示/奖励预览/行动点授予(3 个旧词形) | 新旧词共存——现役等价能力已由新词形承载 |
| 踩雷伤害减半/受击反弹伤害/开局前几轮行动点加成/爆破工兵包中立移除格/奖励摇号权重偏置/换图刷新加算区(6 个) | 旧内容已裁、通道位预留 |
裁断点:这批「迁移完成」收尾要不要做、什么时候做。**词面现在不动**;收尾属于单独一批改动,做的时候再设计。
## 二、无需处理项汇总(零裁决点,计数存档)
扫描面内以下词面全部判定**保留**(预留埋点——引擎架构=词表先行、内容后接,加一件已有效果类型的专长/秘宝只写数据行零代码):
- **事件词预留 4**:armor_roll(事件岗)/reward_roll/treasure_used/seal_settle——发射点全在役运行,等订阅内容;armor_roll 另有掷点流名岗在役,同词两用。
- **效果类型词预留 10**:spawn_spell(锻造工坊法杖设计在册待接线);bias_rewards/counter_spend(架构在役机制承载位——偏运合计查询口/受理闸模式);add_ticket_rider/yield_mult/apply_status/bias_wallet/refresh_pick/preview/spike 词面(预留位)。
- **事实词预留 6**:is_first_dig_of_battle/terrain_kind(载荷特判支撑在)/target_armor_class/seals_count/nest_count/battle_index。
- **算子词预留 7**:neq/gt/ends_with/has/mod_zero/gte_ref/lt_ref(实现函数全在)。
- **channel 反弹行族**:open_ticket 反弹域零数据行(预留)。
其余全部事件词/效果词/事实词/算子词的数据面订阅行在役(feats/treasure 数据行+天赋树规则合成行),零孤儿。
## 三、普查方法(存档)
四张词表封闭在 effect_engine.gd 常量:事件 21/效果类型 31/事实 18/算子 13;邻接面=秘宝表 schema 旧词层 10 词+channel 域。数据面使用按行结构键(`"on"`/`"kind"`/`"fact"`/`"op"`/`"channel"`)统计自 `game/data/tables/*.tres` 全域+天赋树规则合成行+秘宝表主动件域;注释裸词面不计。skills.tres(敌技)的 when/fact 走独立系统,不入本普查面。
@@ -0,0 +1,186 @@
# 读数:三关色相 × 五组微光互辨抽测(2026-11-05)
> 接收方:待办清单「三关色相 × 五组微光互辨抽测——三关图类型色板终值冻结的前置抽测」条。
> 执行依据:reports/提案-三关色相互辨抽测方案-2026-10-29.md(S1/S2 步)。
> 样图:artwork/mockups/glow-discrimination-sheet-2026-11-05.png(不入 git)。
## 机检汇总
| 项 | 判定 | 说明 |
|---|---|---|
| D-dungeon | PASS | 铺底代表值门(L/饱和/禁入带;近色只报读数):RGB=(181, 155, 119) L=0.346 饱和=0.343 色相=34.8° 近色对=4(在役素材色,非新增) |
| D-underdark | PASS | 铺底代表值门(L/饱和/禁入带;近色只报读数):RGB=(186, 193, 210) L=0.532 饱和=0.114 色相=222.5° 近色对=4(在役素材色,非新增) |
| D-deep_underdark | PASS | 铺底代表值门(L/饱和/禁入带;近色只报读数):RGB=(150, 158, 186) L=0.345 饱和=0.194 色相=226.7° 近色对=9(在役素材色,非新增) |
| A-stair-dungeon-素砖 | PASS | 明度阶梯单调递减:165.242→145.992→130.196→114.266→92.362 |
| A-stair-dungeon-裂纹 | PASS | 明度阶梯单调递减:165.242→145.992→130.196→114.266→92.362 |
| A-stair-dungeon-碎石斑 | PASS | 明度阶梯单调递减:164.957→144.992→129.269→113.266→91.434 |
| A-stair-underdark-素砖 | PASS | 明度阶梯单调递减:161.080→141.829→125.179→109.389→87.485 |
| A-stair-underdark-裂纹 | PASS | 明度阶梯单调递减:164.152→144.902→129.106→112.461→90.557 |
| A-stair-underdark-碎石斑 | PASS | 明度阶梯单调递减:158.152→138.829→123.106→106.461→84.557 |
| A-stair-deep_underdark-素砖 | PASS | 明度阶梯单调递减:145.437→126.186→109.748→93.746→71.914 |
| A-stair-deep_underdark-裂纹 | PASS | 明度阶梯单调递减:147.509→128.259→112.536→95.818→73.986 |
| A-stair-deep_underdark-碎石斑 | PASS | 明度阶梯单调递减:142.509→123.186→106.748→90.746→68.914 |
| A-CR | PASS | 组间合成对比最弱对 ≥1.20(90 对):最弱 underdark/HEAL/PIERCE CR=1.224 |
| B | PASS | 格底-微光可辨底线(45 行三通道差不全<8):违例 0 行:无 |
| C | PASS | 绘制参数校准(45 行模型差≤±2/255):违例 0 行:无 |
| GRAY | PASS | 灰度副本段零彩色像素:命中 0 |
| EDGE | PASS | 四缘 10px 带内零内容像素:命中 0 |
## S1 机检 D:铺底代表值(H2 槽)五门
| 关 | RGB | L(线性域) | 饱和 | 色相 | 近色对 | 判定 |
|---|---|---|---|---|---|---|
| dungeon | (181, 155, 119) | 0.346 | 0.343 | 34.8° | 4 | 过 |
| underdark | (186, 193, 210) | 0.532 | 0.114 | 222.5° | 4 | 过 |
| deep_underdark | (150, 158, 186) | 0.345 | 0.194 | 226.7° | 9 | 过 |
## 表一 逐对表(45 行)
| 关 | 底型 | 微光组 | 带内合成均值 | 格心素底均值 | 模型带内均值 | 模型差 | 三通道差 | 色相差° | 判定 |
|---|---|---|---|---|---|---|---|---|---|
| dungeon | 素砖 | BUFF | (193, 166, 76) | (145, 116, 84) | (193, 166, 76) | 0 | [48, 50, 8] | 17 | 过 |
| dungeon | 素砖 | HEAL | (126, 159, 76) | (145, 116, 84) | (126, 159, 75) | 1 | [19, 43, 8] | 69 | 过 |
| dungeon | 素砖 | PIERCE | (100, 140, 122) | (145, 116, 84) | (100, 140, 122) | 0 | [45, 24, 38] | 145 | 过 |
| dungeon | 素砖 | MAGIC | (135, 105, 145) | (145, 116, 84) | (135, 105, 145) | 0 | [10, 11, 61] | 139 | 过 |
| dungeon | 素砖 | AOE | (155, 76, 70) | (145, 116, 84) | (155, 76, 70) | 0 | [10, 40, 14] | 46 | 过 |
| dungeon | 裂纹 | BUFF | (193, 166, 76) | (143, 115, 83) | (193, 166, 76) | 0 | [50, 51, 7] | 17 | 过 |
| dungeon | 裂纹 | HEAL | (126, 159, 76) | (143, 115, 83) | (126, 159, 76) | 0 | [17, 44, 7] | 69 | 过 |
| dungeon | 裂纹 | PIERCE | (100, 140, 122) | (143, 115, 83) | (100, 140, 122) | 0 | [43, 25, 39] | 145 | 过 |
| dungeon | 裂纹 | MAGIC | (135, 105, 145) | (143, 115, 83) | (135, 105, 145) | 0 | [8, 10, 62] | 139 | 过 |
| dungeon | 裂纹 | AOE | (155, 76, 70) | (143, 115, 83) | (155, 76, 70) | 0 | [12, 39, 13] | 46 | 过 |
| dungeon | 碎石斑 | BUFF | (192, 166, 75) | (147, 118, 85) | (192, 166, 75) | 0 | [45, 48, 10] | 17 | 过 |
| dungeon | 碎石斑 | HEAL | (125, 158, 75) | (147, 118, 85) | (125, 159, 75) | 1 | [22, 40, 10] | 69 | 过 |
| dungeon | 碎石斑 | PIERCE | (99, 139, 122) | (147, 118, 85) | (99, 139, 122) | 0 | [48, 21, 37] | 145 | 过 |
| dungeon | 碎石斑 | MAGIC | (134, 104, 144) | (147, 118, 85) | (134, 104, 144) | 0 | [13, 14, 59] | 139 | 过 |
| dungeon | 碎石斑 | AOE | (154, 75, 70) | (147, 118, 85) | (154, 75, 70) | 0 | [7, 43, 15] | 46 | 过 |
| underdark | 素砖 | BUFF | (172, 164, 100) | (104, 110, 128) | (172, 164, 100) | 0 | [68, 54, 28] | 170 | 过 |
| underdark | 素砖 | HEAL | (105, 157, 100) | (104, 110, 128) | (105, 157, 100) | 0 | [1, 47, 28] | 119 | 过 |
| underdark | 素砖 | PIERCE | (78, 137, 147) | (104, 110, 128) | (78, 137, 147) | 0 | [26, 27, 19] | 42 | 过 |
| underdark | 素砖 | MAGIC | (114, 102, 169) | (104, 110, 128) | (114, 102, 169) | 0 | [10, 8, 41] | 33 | 过 |
| underdark | 素砖 | AOE | (134, 73, 94) | (104, 110, 128) | (134, 73, 95) | 1 | [30, 37, 34] | 126 | 过 |
| underdark | 裂纹 | BUFF | (175, 167, 104) | (113, 120, 137) | (175, 167, 104) | 0 | [62, 47, 33] | 170 | 过 |
| underdark | 裂纹 | HEAL | (108, 160, 104) | (113, 120, 137) | (108, 160, 104) | 0 | [5, 40, 33] | 119 | 过 |
| underdark | 裂纹 | PIERCE | (82, 141, 150) | (113, 120, 137) | (82, 141, 150) | 0 | [31, 21, 13] | 42 | 过 |
| underdark | 裂纹 | MAGIC | (117, 105, 173) | (113, 120, 137) | (117, 105, 173) | 0 | [4, 15, 36] | 33 | 过 |
| underdark | 裂纹 | AOE | (137, 76, 98) | (113, 120, 137) | (137, 76, 98) | 0 | [24, 44, 39] | 126 | 过 |
| underdark | 碎石斑 | BUFF | (169, 161, 98) | (124, 131, 149) | (169, 161, 98) | 0 | [45, 30, 51] | 170 | 过 |
| underdark | 碎石斑 | HEAL | (102, 154, 97) | (124, 131, 149) | (102, 154, 97) | 0 | [22, 23, 52] | 119 | 过 |
| underdark | 碎石斑 | PIERCE | (76, 135, 144) | (124, 131, 149) | (76, 135, 144) | 0 | [48, 4, 5] | 42 | 过 |
| underdark | 碎石斑 | MAGIC | (111, 99, 167) | (124, 131, 149) | (111, 99, 167) | 0 | [13, 32, 18] | 33 | 过 |
| underdark | 碎石斑 | AOE | (131, 70, 92) | (124, 131, 149) | (131, 70, 92) | 0 | [7, 61, 57] | 126 | 过 |
| deep_underdark | 素砖 | BUFF | (157, 148, 86) | (76, 80, 102) | (157, 148, 86) | 0 | [81, 68, 16] | 175 | 过 |
| deep_underdark | 素砖 | HEAL | (90, 141, 86) | (76, 80, 102) | (90, 141, 86) | 0 | [14, 61, 16] | 123 | 过 |
| deep_underdark | 素砖 | PIERCE | (64, 121, 133) | (76, 80, 102) | (64, 121, 133) | 0 | [12, 41, 31] | 47 | 过 |
| deep_underdark | 素砖 | MAGIC | (99, 86, 155) | (76, 80, 102) | (99, 86, 155) | 0 | [23, 6, 53] | 29 | 过 |
| deep_underdark | 素砖 | AOE | (119, 57, 81) | (76, 80, 102) | (119, 57, 81) | 0 | [43, 23, 21] | 122 | 过 |
| deep_underdark | 裂纹 | BUFF | (159, 150, 89) | (84, 89, 111) | (159, 150, 89) | 0 | [75, 61, 22] | 175 | 过 |
| deep_underdark | 裂纹 | HEAL | (92, 143, 89) | (84, 89, 111) | (92, 143, 89) | 0 | [8, 54, 22] | 123 | 过 |
| deep_underdark | 裂纹 | PIERCE | (66, 124, 136) | (84, 89, 111) | (66, 124, 136) | 0 | [18, 35, 25] | 47 | 过 |
| deep_underdark | 裂纹 | MAGIC | (101, 88, 158) | (84, 89, 111) | (101, 88, 158) | 0 | [17, 1, 47] | 29 | 过 |
| deep_underdark | 裂纹 | AOE | (121, 59, 84) | (84, 89, 111) | (121, 59, 84) | 0 | [37, 30, 27] | 122 | 过 |
| deep_underdark | 碎石斑 | BUFF | (154, 145, 84) | (91, 97, 121) | (154, 145, 83) | 1 | [63, 48, 37] | 175 | 过 |
| deep_underdark | 碎石斑 | HEAL | (87, 138, 83) | (91, 97, 121) | (87, 138, 83) | 0 | [4, 41, 38] | 123 | 过 |
| deep_underdark | 碎石斑 | PIERCE | (61, 118, 130) | (91, 97, 121) | (61, 118, 130) | 0 | [30, 21, 9] | 47 | 过 |
| deep_underdark | 碎石斑 | MAGIC | (96, 83, 152) | (91, 97, 121) | (96, 83, 152) | 0 | [5, 14, 31] | 29 | 过 |
| deep_underdark | 碎石斑 | AOE | (116, 54, 78) | (91, 97, 121) | (116, 54, 78) | 0 | [25, 43, 43] | 122 | 过 |
## 表二 组间表(90 行)
| 关 | 底型 | 组对 | 合成对比 | 灰度亮度a | 灰度亮度b | 判定 |
|---|---|---|---|---|---|---|
| dungeon | 素砖 | BUFF/HEAL | 1.270 | 165.242 | 145.992 | 过 |
| dungeon | 素砖 | BUFF/PIERCE | 1.583 | 165.242 | 130.196 | 过 |
| dungeon | 素砖 | BUFF/MAGIC | 1.979 | 165.242 | 114.266 | 过 |
| dungeon | 素砖 | BUFF/AOE | 2.510 | 165.242 | 92.362 | 过 |
| dungeon | 素砖 | HEAL/PIERCE | 1.247 | 145.992 | 130.196 | 过 |
| dungeon | 素砖 | HEAL/MAGIC | 1.559 | 145.992 | 114.266 | 过 |
| dungeon | 素砖 | HEAL/AOE | 1.977 | 145.992 | 92.362 | 过 |
| dungeon | 素砖 | PIERCE/MAGIC | 1.250 | 130.196 | 114.266 | 过 |
| dungeon | 素砖 | PIERCE/AOE | 1.585 | 130.196 | 92.362 | 过 |
| dungeon | 素砖 | MAGIC/AOE | 1.268 | 114.266 | 92.362 | 过 |
| dungeon | 裂纹 | BUFF/HEAL | 1.270 | 165.242 | 145.992 | 过 |
| dungeon | 裂纹 | BUFF/PIERCE | 1.583 | 165.242 | 130.196 | 过 |
| dungeon | 裂纹 | BUFF/MAGIC | 1.979 | 165.242 | 114.266 | 过 |
| dungeon | 裂纹 | BUFF/AOE | 2.510 | 165.242 | 92.362 | 过 |
| dungeon | 裂纹 | HEAL/PIERCE | 1.247 | 145.992 | 130.196 | 过 |
| dungeon | 裂纹 | HEAL/MAGIC | 1.559 | 145.992 | 114.266 | 过 |
| dungeon | 裂纹 | HEAL/AOE | 1.977 | 145.992 | 92.362 | 过 |
| dungeon | 裂纹 | PIERCE/MAGIC | 1.250 | 130.196 | 114.266 | 过 |
| dungeon | 裂纹 | PIERCE/AOE | 1.585 | 130.196 | 92.362 | 过 |
| dungeon | 裂纹 | MAGIC/AOE | 1.268 | 114.266 | 92.362 | 过 |
| dungeon | 碎石斑 | BUFF/HEAL | 1.282 | 164.957 | 144.992 | 过 |
| dungeon | 碎石斑 | BUFF/PIERCE | 1.598 | 164.957 | 129.269 | 过 |
| dungeon | 碎石斑 | BUFF/MAGIC | 2.001 | 164.957 | 113.266 | 过 |
| dungeon | 碎石斑 | BUFF/AOE | 2.536 | 164.957 | 91.434 | 过 |
| dungeon | 碎石斑 | HEAL/PIERCE | 1.247 | 144.992 | 129.269 | 过 |
| dungeon | 碎石斑 | HEAL/MAGIC | 1.561 | 144.992 | 113.266 | 过 |
| dungeon | 碎石斑 | HEAL/AOE | 1.979 | 144.992 | 91.434 | 过 |
| dungeon | 碎石斑 | PIERCE/MAGIC | 1.252 | 129.269 | 113.266 | 过 |
| dungeon | 碎石斑 | PIERCE/AOE | 1.587 | 129.269 | 91.434 | 过 |
| dungeon | 碎石斑 | MAGIC/AOE | 1.267 | 113.266 | 91.434 | 过 |
| underdark | 素砖 | BUFF/HEAL | 1.248 | 161.080 | 141.829 | 过 |
| underdark | 素砖 | BUFF/PIERCE | 1.549 | 161.080 | 125.179 | 过 |
| underdark | 素砖 | BUFF/MAGIC | 1.969 | 161.080 | 109.389 | 过 |
| underdark | 素砖 | BUFF/AOE | 2.637 | 161.080 | 87.485 | 过 |
| underdark | 素砖 | HEAL/PIERCE | 1.241 | 141.829 | 125.179 | 过 |
| underdark | 素砖 | HEAL/MAGIC | 1.577 | 141.829 | 109.389 | 过 |
| underdark | 素砖 | HEAL/AOE | 2.112 | 141.829 | 87.485 | 过 |
| underdark | 素砖 | PIERCE/MAGIC | 1.271 | 125.179 | 109.389 | 过 |
| underdark | 素砖 | PIERCE/AOE | 1.702 | 125.179 | 87.485 | 过 |
| underdark | 素砖 | MAGIC/AOE | 1.339 | 109.389 | 87.485 | 过 |
| underdark | 裂纹 | BUFF/HEAL | 1.245 | 164.152 | 144.902 | 过 |
| underdark | 裂纹 | BUFF/PIERCE | 1.524 | 164.152 | 129.106 | 过 |
| underdark | 裂纹 | BUFF/MAGIC | 1.952 | 164.152 | 112.461 | 过 |
| underdark | 裂纹 | BUFF/AOE | 2.612 | 164.152 | 90.557 | 过 |
| underdark | 裂纹 | HEAL/PIERCE | 1.224 | 144.902 | 129.106 | 过 |
| underdark | 裂纹 | HEAL/MAGIC | 1.567 | 144.902 | 112.461 | 过 |
| underdark | 裂纹 | HEAL/AOE | 2.097 | 144.902 | 90.557 | 过 |
| underdark | 裂纹 | PIERCE/MAGIC | 1.280 | 129.106 | 112.461 | 过 |
| underdark | 裂纹 | PIERCE/AOE | 1.713 | 129.106 | 90.557 | 过 |
| underdark | 裂纹 | MAGIC/AOE | 1.338 | 112.461 | 90.557 | 过 |
| underdark | 碎石斑 | BUFF/HEAL | 1.252 | 158.152 | 138.829 | 过 |
| underdark | 碎石斑 | BUFF/PIERCE | 1.538 | 158.152 | 123.106 | 过 |
| underdark | 碎石斑 | BUFF/MAGIC | 1.981 | 158.152 | 106.461 | 过 |
| underdark | 碎石斑 | BUFF/AOE | 2.658 | 158.152 | 84.557 | 过 |
| underdark | 碎石斑 | HEAL/PIERCE | 1.229 | 138.829 | 123.106 | 过 |
| underdark | 碎石斑 | HEAL/MAGIC | 1.583 | 138.829 | 106.461 | 过 |
| underdark | 碎石斑 | HEAL/AOE | 2.123 | 138.829 | 84.557 | 过 |
| underdark | 碎石斑 | PIERCE/MAGIC | 1.288 | 123.106 | 106.461 | 过 |
| underdark | 碎石斑 | PIERCE/AOE | 1.728 | 123.106 | 84.557 | 过 |
| underdark | 碎石斑 | MAGIC/AOE | 1.341 | 106.461 | 84.557 | 过 |
| deep_underdark | 素砖 | BUFF/HEAL | 1.265 | 145.437 | 126.186 | 过 |
| deep_underdark | 素砖 | BUFF/PIERCE | 1.585 | 145.437 | 109.748 | 过 |
| deep_underdark | 素砖 | BUFF/MAGIC | 2.040 | 145.437 | 93.746 | 过 |
| deep_underdark | 素砖 | BUFF/AOE | 2.734 | 145.437 | 71.914 | 过 |
| deep_underdark | 素砖 | HEAL/PIERCE | 1.253 | 126.186 | 109.748 | 过 |
| deep_underdark | 素砖 | HEAL/MAGIC | 1.613 | 126.186 | 93.746 | 过 |
| deep_underdark | 素砖 | HEAL/AOE | 2.162 | 126.186 | 71.914 | 过 |
| deep_underdark | 素砖 | PIERCE/MAGIC | 1.287 | 109.748 | 93.746 | 过 |
| deep_underdark | 素砖 | PIERCE/AOE | 1.725 | 109.748 | 71.914 | 过 |
| deep_underdark | 素砖 | MAGIC/AOE | 1.340 | 93.746 | 71.914 | 过 |
| deep_underdark | 裂纹 | BUFF/HEAL | 1.263 | 147.509 | 128.259 | 过 |
| deep_underdark | 裂纹 | BUFF/PIERCE | 1.562 | 147.509 | 112.536 | 过 |
| deep_underdark | 裂纹 | BUFF/MAGIC | 2.028 | 147.509 | 95.818 | 过 |
| deep_underdark | 裂纹 | BUFF/AOE | 2.720 | 147.509 | 73.986 | 过 |
| deep_underdark | 裂纹 | HEAL/PIERCE | 1.237 | 128.259 | 112.536 | 过 |
| deep_underdark | 裂纹 | HEAL/MAGIC | 1.606 | 128.259 | 95.818 | 过 |
| deep_underdark | 裂纹 | HEAL/AOE | 2.154 | 128.259 | 73.986 | 过 |
| deep_underdark | 裂纹 | PIERCE/MAGIC | 1.298 | 112.536 | 95.818 | 过 |
| deep_underdark | 裂纹 | PIERCE/AOE | 1.742 | 112.536 | 73.986 | 过 |
| deep_underdark | 裂纹 | MAGIC/AOE | 1.341 | 95.818 | 73.986 | 过 |
| deep_underdark | 碎石斑 | BUFF/HEAL | 1.268 | 142.509 | 123.186 | 过 |
| deep_underdark | 碎石斑 | BUFF/PIERCE | 1.593 | 142.509 | 106.748 | 过 |
| deep_underdark | 碎石斑 | BUFF/MAGIC | 2.055 | 142.509 | 90.746 | 过 |
| deep_underdark | 碎石斑 | BUFF/AOE | 2.753 | 142.509 | 68.914 | 过 |
| deep_underdark | 碎石斑 | HEAL/PIERCE | 1.256 | 123.186 | 106.748 | 过 |
| deep_underdark | 碎石斑 | HEAL/MAGIC | 1.620 | 123.186 | 90.746 | 过 |
| deep_underdark | 碎石斑 | HEAL/AOE | 2.170 | 123.186 | 68.914 | 过 |
| deep_underdark | 碎石斑 | PIERCE/MAGIC | 1.290 | 106.748 | 90.746 | 过 |
| deep_underdark | 碎石斑 | PIERCE/AOE | 1.728 | 106.748 | 68.914 | 过 |
| deep_underdark | 碎石斑 | MAGIC/AOE | 1.339 | 90.746 | 68.914 | 过 |
---
机检 17 项,FAIL 0 项。
目检(S3)归用户:四条判据见方案 §2.2(逐对指认 45/45/灰度副本 45/45/相邻并列 36 对可辨/装饰不抢读)。
+444
View File
@@ -0,0 +1,444 @@
# 三关色相 × 五组微光互辨抽测——S1 取铺底值(机检 D)+ S2 出并列样图(机检 A/B/C)。
# 执行依据:reports/提案-三关色相互辨抽测方案-2026-10-29.md(抽测任务=待办清单
# 「三关色相 × 五组微光互辨抽测」条)。产物:并列样图(artwork/,不入 git)+逐对读数表(reports/)。
# 口径出处(冲突时以 owner 为准):
# 微光色值与呈现参数 = game/presentation/views/ui_kit.gd TG_GLOW_*/TYPE_GLOW_*(v2 冻结);
# 合成公式 = game/presentation/views/cell_type_glow.gdshader(blend_mix 距离场柔光);
# 带域/格心取样 = game/probe/type_glow_shot_probe.gd(de<格边×0.125 / 内缩 20%);
# 硬指标门 = art-bible §4.1(L≥0.30 线性域 / 饱和≤0.55 / 避 300°–345°);
# 既有色板比对池 = game/tests/golden/palette_baseline/ 两张条带并集(palette_check.py 同源)。
# 方案 §2.3 机检 C 口径订正:模型 0.49/0.51 是反解近似(ui_kit.gd 头注「模型域与实测的差
# = shader 距离场权重非扁平混合」),比较对象改为 shader 精确合成模型(逐像素复刻),判据线
# ±2/255 沿用在役值。
# 方案 §7 表二行数笔误订正:表二实为 90 行(3 关 × 3 底型 × 10 组对),非 30 行。
#
# 用法:
# python tools/glow_discrimination_sheet.py --art <artwork/mockups 目录> [--no-sheet]
# 输出:
# <art>/glow-discrimination-sheet-2026-11-05.png(样图:正图段+灰度副本段+图例)
# reports/读数-三关色相互辨抽测-2026-11-05.md(逐对表 45 行+组间表 90 行+机检汇总)
import argparse
import math
import os
import sys
from PIL import Image
REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# ── ui_kit.gd 冻结常量(逐字转写,禁改值)──
GLOWS = [
("BUFF", (247, 223, 67)), # 通用增益·芥末黄
("HEAL", (104, 208, 66)), # 治疗·黄绿
("PIERCE", (48, 166, 166)), # 穿刺·青
("MAGIC", (123, 91, 214)), # 魔法·紫罗兰
("AOE", (166, 29, 55)), # 群伤·绯红
]
GLOW_ALPHA = 170.0 / 255.0
BAND_FRAC = 0.125
SOFT = 0.55
CORNER = 2.0
CELL = 45 # D 区实比格边
BAND = CELL * BAND_FRAC # 5.625
CORE_PAD = int(CELL * 0.20) # 格心内缩(探针 CORE_PAD_FRAC=0.20)
# ── 三关铺底代表值 = 色表墙顶受光家族最亮槽 H2(tools/recolor_terrain_tiles.py PALETTES)──
H2_VALUES = {
"dungeon": (181, 155, 119),
"underdark": (186, 193, 210),
"deep_underdark": (150, 158, 186),
}
BOARD_TYPES = ["dungeon", "underdark", "deep_underdark"]
BASE_VARIANTS = [ # (底型名,瓦片件名后缀)——素砖 + 两种装饰变体(高墙瓦片词表在册件)
("素砖", "terrain_wall_center"),
("裂纹", "terrain_wall_center_crack"),
("碎石斑", "terrain_wall_center_speckle"),
]
TILE_DIR = os.path.join(REPO, "game", "assets", "art", "board")
BASELINE_DIR = os.path.join(REPO, "game", "tests", "golden", "palette_baseline")
CHECKS = []
def check(cid, name, ok, detail=""):
CHECKS.append((cid, name, bool(ok), detail))
print("[%s] %s %s — %s%s" % ("PASS" if ok else "FAIL", cid, name, "✓" if ok else "✗",
(";" + detail) if detail else ""))
# ── 色彩数学 ──
def to_linear(v):
c = v / 255.0
return c / 12.92 if c <= 0.04045 else ((c + 0.055) / 1.055) ** 2.4
def rel_lum(rgb):
return 0.2126 * to_linear(rgb[0]) + 0.7152 * to_linear(rgb[1]) + 0.0722 * to_linear(rgb[2])
def gray709(rgb):
return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]
def hsv(rgb):
r, g, b = [v / 255.0 for v in rgb]
mx, mn = max(r, g, b), min(r, g, b)
d = mx - mn
if d == 0:
h = 0.0
elif mx == r:
h = 60 * ((g - b) / d % 6)
elif mx == g:
h = 60 * ((b - r) / d + 2)
else:
h = 60 * ((r - g) / d + 4)
s = 0.0 if mx == 0 else d / mx
return h % 360, s
def wcag(c1, c2):
l1, l2 = rel_lum(c1), rel_lum(c2)
return (max(l1, l2) + 0.05) / (min(l1, l2) + 0.05)
def smoothstep(e0, e1, x):
t = max(0.0, min(1.0, (x - e0) / (e1 - e0)))
return t * t * (3.0 - 2.0 * t)
def glow_weight(px, py):
"""shader 复刻:像素中心 (px,py) 的微光权重 = glow_alpha × a(d) × mask。"""
h = CELL / 2.0
d = min(px, py, CELL - px, CELL - py)
r = min(CORNER, CELL * 0.25)
qx = abs(px - h) - (h - r)
qy = abs(py - h) - (h - r)
outside = math.hypot(max(qx, 0.0), max(qy, 0.0)) + min(max(qx, qy), 0.0) - r
mask = 1.0 - smoothstep(-1.0, 0.5, outside)
a = 0.0
if d < BAND:
a = 1.0 - smoothstep(SOFT, 1.0, d / BAND)
return GLOW_ALPHA * a * mask
# ── 素材装载 ──
def load_tiles():
tiles = {}
for bt in BOARD_TYPES:
for vn, stem in BASE_VARIANTS:
path = os.path.join(TILE_DIR, "%s_%s.png" % (stem, bt))
if not os.path.exists(path):
print("[阻塞] 素材缺位:%s" % path, file=sys.stderr)
sys.exit(2)
img = Image.open(path).convert("RGB")
if img.size != (CELL, CELL):
img = img.resize((CELL, CELL), Image.NEAREST)
tiles[(bt, vn)] = img.load()
return tiles
# ── 带域/格心取样(探针口径)──
def band_pixels():
"""带域像素集(整数格坐标 de < 格边×0.125,type_glow_shot_probe 口径)。"""
return [(x, y) for x in range(CELL) for y in range(CELL)
if min(x, y, CELL - 1 - x, CELL - 1 - y) < BAND]
def core_pixels():
"""格心像素集(内缩 20%)。"""
return [(x, y) for x in range(CELL) for y in range(CELL)
if min(x, y, CELL - 1 - x, CELL - 1 - y) >= CELL * 0.20]
BAND_PX = band_pixels()
CORE_PX = core_pixels()
def mean_rgb(px, pts):
n = len(pts)
return tuple(round(sum(px[x, y][i] for x, y in pts) / n) for i in range(3))
def model_band_mean(base_px, glow_rgb):
"""shader 精确合成模型:逐像素 blend_mix 理论带内均值(独立实现路径)。"""
n = len(BAND_PX)
acc = [0.0, 0.0, 0.0]
for x, y in BAND_PX:
w = glow_weight(x + 0.5, y + 0.5)
b = base_px[x, y]
for i in range(3):
acc[i] += w * glow_rgb[i] + (1.0 - w) * b[i]
return tuple(round(v / n) for v in acc)
# ── 机检 D:铺底代表值五门 ──
def load_baseline_palette():
cols = set()
for fn in ["ui_tokens.png", "art_snapshot.png"]:
p = os.path.join(BASELINE_DIR, fn)
img = Image.open(p).convert("RGB")
for x in range(img.width):
for y in range(img.height):
cols.add(img.getpixel((x, y)))
return sorted(cols)
def gate_d(tiles):
baseline = load_baseline_palette()
rows = []
all_pass = True
for bt in BOARD_TYPES:
rgb = H2_VALUES[bt]
h, s = hsv(rgb)
lin = rel_lum(rgb)
l_ok = lin >= 0.30
s_ok = s <= 0.55
hue_ok = not (300.0 <= h <= 345.0)
# 近色门:三值=在役素材色(已在基线池内),palette_check 双门②只判新增色——报读数不判红
near = [b for b in baseline if all(abs(rgb[i] - b[i]) < 8 for i in range(3))]
ok = l_ok and s_ok and hue_ok
all_pass = all_pass and ok
rows.append((bt, rgb, lin, s, h, len(near), ok))
check("D-" + bt, "铺底代表值门(L/饱和/禁入带;近色只报读数)", ok,
"RGB=%s L=%.3f 饱和=%.3f 色相=%.1f° 近色对=%d(在役素材色,非新增)%s%s%s"
% (rgb, lin, s, h, len(near),
"" if l_ok else " [L红]", "" if s_ok else " [饱和红]",
"" if hue_ok else " [禁入带红]"))
# 语义检查=设计面人工核对(palette_check 同口径),打印读数不判红
print(" [语义] %s=%s 环境域(不占红/金/蓝/紫赤/绿语义段)——人工核对" % (bt, rgb))
# 渲染面带域均值 = 读数不判红(方案机检 D 只判槽值;本读数供观感定性参考)
for bt in BOARD_TYPES:
for vn, _ in BASE_VARIANTS:
m = mean_rgb(tiles[(bt, vn)], BAND_PX)
lin = rel_lum(m)
print(" [读数] 渲染面带域均值 %s/%s RGB=%s L=%.3f(不判红)" % (bt, vn, m, lin))
return all_pass, rows
# ── 样图绘制 ──
PAGE_W, PAGE_H = 640, 1120
MARGIN, HEAD, BLOCK_TITLE, GAP, LEGEND = 10, 60, 20, 30, 80
def draw_sheet(out_path):
import argparse # noqa: F401
from PIL import ImageDraw, ImageFont
img = Image.new("RGB", (PAGE_W, PAGE_H), (255, 255, 255))
d = ImageDraw.Draw(img)
try:
f_zh = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", 13)
f_zh_s = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", 11)
except OSError:
f_zh = ImageFont.load_default()
f_zh_s = f_zh
blocks = []
y = MARGIN + HEAD
for bt in BOARD_TYPES:
d.text((MARGIN + 4, y + 3), "%s —— 列0=基准格,列1–5=五组微光(阶梯序)" % bt, fill=(0, 0, 0), font=f_zh)
y += BLOCK_TITLE
blocks.append((bt, y))
y += 3 * CELL
tiles = load_tiles()
# 画正图段 54 格
cell_pngs = {}
for bt, y0 in blocks:
for ri, (vn, _) in enumerate(BASE_VARIANTS):
for ci, gname in enumerate(["BASE"] + [g[0] for g in GLOWS]):
base = tiles[(bt, vn)]
cell = Image.new("RGB", (CELL, CELL))
cp = cell.load()
if gname == "BASE":
for x in range(CELL):
for yy in range(CELL):
cp[x, yy] = base[x, yy]
else:
glow = dict(GLOWS)[gname]
for x in range(CELL):
for yy in range(CELL):
w = glow_weight(x + 0.5, yy + 0.5)
b = base[x, yy]
cp[x, yy] = tuple(round(w * glow[i] + (1 - w) * b[i]) for i in range(3))
gx = MARGIN + 170 + ci * CELL
gy = y0 + ri * CELL
img.paste(cell, (gx, gy))
cell_pngs[(bt, vn, gname, "main")] = (gx, gy)
# 行标注
for ri, (vn, _) in enumerate(BASE_VARIANTS):
d.text((MARGIN, y0 + ri * CELL + 16), vn, fill=(0, 0, 0), font=f_zh_s)
# 灰度副本段(等幅面,正图段整段 Rec.709 去色)
main_top = MARGIN + HEAD
main_bot = y
gray_top = main_bot + GAP
for xx in range(MARGIN, PAGE_W - MARGIN):
for yy in range(main_top, main_bot):
r, g, b = img.getpixel((xx, yy))
v = int(round(gray709((r, g, b))))
img.putpixel((xx, gray_top + (yy - main_top)), (v, v, v))
d.text((MARGIN + 4, gray_top - 2), "灰度副本段(Rec.709 去色——色弱通道目检面)", fill=(80, 80, 80), font=f_zh_s)
# 图例段
leg_y = gray_top + (main_bot - main_top) + 10
d.text((MARGIN + 4, leg_y), "图例(五组冻结色值 ui_kit.gd TG_GLOW_*;阶梯序=合成空间亮度递减)", fill=(0, 0, 0), font=f_zh_s)
for i, (gn, rgb) in enumerate(GLOWS):
x0 = MARGIN + 170 + i * (CELL + 4)
d.rectangle([x0, leg_y + 18, x0 + CELL, leg_y + 18 + 28], fill=rgb, outline=(0, 0, 0))
d.text((x0, leg_y + 48), gn, fill=(0, 0, 0), font=f_zh_s)
img.save(out_path)
return img, cell_pngs, tiles, blocks, gray_top, main_top, main_bot
# ── 机检 A/B/C + 灰度/净空机检 ──
def run_checks(img, cell_pngs, tiles, blocks, gray_top, main_top, main_bot):
sheet_px = img.load()
table1 = [] # 45 行逐对表
table2 = [] # 90 行组间表
band_means = {}
fail_b, fail_c = [], []
for bt, y0 in blocks:
for vn, _ in BASE_VARIANTS:
# 列 0 基准格带域均值 = 该底型的模型底值
gx0, gy0 = cell_pngs[(bt, vn, "BASE", "main")]
band_base = mean_rgb(tiles[(bt, vn)], BAND_PX)
for gi, (gname, glow) in enumerate(GLOWS):
gx, gy = cell_pngs[(bt, vn, gname, "main")]
px = tiles[(bt, vn)]
# 样图带内均值(样图渲染面读数)
n = len(BAND_PX)
acc = [0.0, 0.0, 0.0]
for x, yy in BAND_PX:
p = sheet_px[gx + x, gy + yy]
for i in range(3):
acc[i] += p[i]
band_mean = tuple(round(v / n) for v in acc)
core_mean = mean_rgb(px, CORE_PX)
model = model_band_mean(px, glow)
diff_model = max(abs(band_mean[i] - model[i]) for i in range(3))
ch_diff = [abs(band_mean[i] - core_mean[i]) for i in range(3)]
b_ok = max(ch_diff) >= 8
c_ok = diff_model <= 2
if not b_ok:
fail_b.append("%s/%s/%s" % (bt, vn, gname))
if not c_ok:
fail_c.append("%s/%s/%s" % (bt, vn, gname))
hue_gap = abs(hsv(H2_VALUES[bt])[0] - hsv(glow)[0])
hue_gap = min(hue_gap, 360 - hue_gap)
table1.append((bt, vn, gname, band_mean, core_mean, model,
diff_model, ch_diff, hue_gap, b_ok and c_ok))
band_means[(bt, vn, gname)] = band_mean
# 机检 A:组间表 90 行
for bt, y0 in blocks:
for vn, _ in BASE_VARIANTS:
for i in range(len(GLOWS)):
for j in range(i + 1, len(GLOWS)):
a, b = band_means[(bt, vn, GLOWS[i][0])], band_means[(bt, vn, GLOWS[j][0])]
cr = wcag(a, b)
ok = cr >= 1.20
table2.append((bt, vn, "%s/%s" % (GLOWS[i][0], GLOWS[j][0]),
cr, gray709(a), gray709(b), ok))
stair_ok = True
for bt, y0 in blocks:
for vn, _ in BASE_VARIANTS:
seq = [gray709(band_means[(bt, vn, GLOWS[k][0])]) for k in range(len(GLOWS))]
mono = all(seq[k] > seq[k + 1] for k in range(len(seq) - 1))
stair_ok = stair_ok and mono
check("A-stair-%s-%s" % (bt, vn[:4]), "明度阶梯单调递减", mono,
"→".join("%.3f" % v for v in seq))
min_cr = min(t[3] for t in table2)
worst = min(table2, key=lambda t: t[3])
check("A-CR", "组间合成对比最弱对 ≥1.20(90 对)", min_cr >= 1.20,
"最弱 %s/%s CR=%.3f" % (worst[0], worst[2], min_cr))
check("B", "格底-微光可辨底线(45 行三通道差不全<8)", len(fail_b) == 0,
"违例 %d 行:%s" % (len(fail_b), ", ".join(fail_b[:6]) or "无"))
check("C", "绘制参数校准(45 行模型差≤±2/255)", len(fail_c) == 0,
"违例 %d 行:%s" % (len(fail_c), ", ".join(fail_c[:6]) or "无"))
# 灰度段零彩色像素
color_hit = 0
for xx in range(MARGIN, PAGE_W - MARGIN):
for yy in range(gray_top + BLOCK_TITLE, gray_top + (main_bot - main_top)):
r, g, b = sheet_px[xx, yy]
if not (r == g == b):
color_hit += 1
check("GRAY", "灰度副本段零彩色像素", color_hit == 0, "命中 %d" % color_hit)
# 四缘净空(A5 同款)
edge_hit = 0
for xx in range(PAGE_W):
for yy in range(PAGE_H):
if xx < MARGIN or xx >= PAGE_W - MARGIN or yy < MARGIN or yy >= PAGE_H - MARGIN:
if sheet_px[xx, yy] != (255, 255, 255):
edge_hit += 1
check("EDGE", "四缘 10px 带内零内容像素", edge_hit == 0, "命中 %d" % edge_hit)
return table1, table2
def write_report(table1, table2, d_rows):
rep = os.path.join(REPO, "reports", "读数-三关色相互辨抽测-2026-11-05.md")
lines = [
"# 读数:三关色相 × 五组微光互辨抽测(2026-11-05)",
"",
"> 接收方:待办清单「三关色相 × 五组微光互辨抽测——三关图类型色板终值冻结的前置抽测」条。",
"> 执行依据:reports/提案-三关色相互辨抽测方案-2026-10-29.md(S1/S2 步)。",
"> 样图:artwork/mockups/glow-discrimination-sheet-2026-11-05.png(不入 git)。",
"",
"## 机检汇总",
"",
"| 项 | 判定 | 说明 |",
"|---|---|---|",
]
for cid, name, ok, detail in CHECKS:
lines.append("| %s | %s | %s:%s |" % (cid, "PASS" if ok else "FAIL", name, detail))
lines += ["", "## S1 机检 D:铺底代表值(H2 槽)五门", "",
"| 关 | RGB | L(线性域) | 饱和 | 色相 | 近色对 | 判定 |", "|---|---|---|---|---|---|---|"]
for bt, rgb, lin, s, h, near, ok in d_rows:
lines.append("| %s | %s | %.3f | %.3f | %.1f° | %d | %s |" % (bt, rgb, lin, s, h, near, "过" if ok else "红"))
lines += ["", "## 表一 逐对表(45 行)", "",
"| 关 | 底型 | 微光组 | 带内合成均值 | 格心素底均值 | 模型带内均值 | 模型差 | 三通道差 | 色相差° | 判定 |",
"|---|---|---|---|---|---|---|---|---|---|"]
for bt, vn, gn, bm, cm, md, dm, cd, hg, ok in table1:
lines.append("| %s | %s | %s | %s | %s | %s | %d | %s | %.0f | %s |"
% (bt, vn, gn, bm, cm, md, dm, cd, hg, "过" if ok else "红"))
lines += ["", "## 表二 组间表(90 行)", "",
"| 关 | 底型 | 组对 | 合成对比 | 灰度亮度a | 灰度亮度b | 判定 |", "|---|---|---|---|---|---|---|"]
for bt, vn, pair, cr, ga, gb, ok in table2:
lines.append("| %s | %s | %s | %.3f | %.3f | %.3f | %s |" % (bt, vn, pair, cr, ga, gb, "过" if ok else "红"))
n_fail = sum(1 for c in CHECKS if not c[2])
lines += ["", "---", "", "机检 %d 项,FAIL %d 项。" % (len(CHECKS), n_fail),
"", "目检(S3)归用户:四条判据见方案 §2.2(逐对指认 45/45/灰度副本 45/45/相邻并列 36 对可辨/装饰不抢读)。", ""]
with open(rep, "w", encoding="utf-8") as f:
f.write("\n".join(lines))
print("[报告] %s" % rep)
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--art", default=os.path.join(REPO, "artwork", "mockups"))
ap.add_argument("--no-sheet", action="store_true")
args = ap.parse_args()
tiles = load_tiles()
print("== S1 机检 D:三关铺底代表值 ==")
d_ok, d_rows = gate_d(tiles)
if args.no_sheet:
return 0 if d_ok else 1
os.makedirs(args.art, exist_ok=True)
out = os.path.join(args.art, "glow-discrimination-sheet-2026-11-05.png")
print("== S2 出并列样图 ==")
img, cell_pngs, tiles2, blocks, gray_top, main_top, main_bot = draw_sheet(out)
print("[样图] %s" % out)
t1, t2 = run_checks(img, cell_pngs, tiles2, blocks, gray_top, main_top, main_bot)
write_report(t1, t2, d_rows)
n_fail = sum(1 for c in CHECKS if not c[2])
print("== 抽测机检完成:%d 项,FAIL %d ==" % (len(CHECKS), n_fail))
return 0 if n_fail == 0 else 1
if __name__ == "__main__":
sys.exit(main())
+4 -2
View File
@@ -244,11 +244,13 @@
#### 效果通道与事件词的零现役普查(2026-11-05 登记,来源=审计发现)
**实况**:证据=四条 grep 读数:`cell_removal` 通道在册(`game/data/schemas/treasure_item_table.gd:26`;消费点 `game/core/reward_grant.gd:160-161`)而 `game/data/` 全域零数据行;`mine_hit_halve` 同形态(仅 schema 词表与注记在位);`open_ticket` 的 `channel="reflect"` 行族零表行(21 张 `.tres` 逐张 grep);`armor_roll` 在 `game/core/effect_engine.gd:13` 事件词表在册、发射点 `game/core/damage_controller.gd:296`,而 `game/data/tables/feats.tres` 零订阅行。形态与架构审查甲案已清的 overflow/attack_segments 死通道同族(判据出处=`design/engineering/code-conventions.md:15`、`design/engineering/test-conventions.md:116`)。本批(需求卡片-改写族孤儿机制与退役名清退批)只清其文案与归因串,通道与事件词本体去留待普查批整体裁。
**实况**:普查报告 reports/普查-效果通道与事件词零现役-2026-11-06.md——结论=内容层零孤儿、四词表+秘宝表 schema 旧词层全部属预留埋点(词面全保留零清退项;架构原则=词表先行内容后接)。叙述脱节 5 处已按「预留、未设计入表」口径订正(2026-11-06 用户令直改,冒烟 15 项 0 失败三闸全过)。
**缺口**:唯一遗留待裁=秘宝表 schema 旧词面 9 个「迁移完成」收尾(做不做、何时做)。
**改动面**:游戏代码
**状态**:待写卡
**状态**:待执行
#### 测试面真输入化分期与存量断言逐条精锚(2026-11-05 登记,来源=批次移交)