diff --git a/design/gdd/07-体验验证清单.md b/design/gdd/07-体验验证清单.md index 9f9dd454..6c160a10 100644 --- a/design/gdd/07-体验验证清单.md +++ b/design/gdd/07-体验验证清单.md @@ -162,7 +162,7 @@ ### ⑮ 秘宝词族换词全 UI 面目检 + 渲染像素闸补跑(2026-10-05 秘宝代码词族对齐批顺带登记——迭代15③号卡) - **实机目检(「秘宝」字样全 UI 面,约 3 分钟)**:①C 区槽位标题应显示「秘宝」(原「魔法道具」,hero_info_panel_view 槽位组);②空槽悬停提示应显示「秘宝槽(空)」;③战斗总结三选一叙述行应显示「秘宝 / …」或「秘宝 / 随机获得一件」(原「魔法道具」开头);④换关 toast 应显示「上关剩余 N 件秘宝已随关卡结束清空」。**红灯信号**:任何界面残留「魔法道具」字样。〔**✅ 真人目检半已核销(2026-10-14)**:用户实机目检回报完成,未呈报残留(qa 收尾批)〕 -- **渲染像素类闸补跑挂账**:本批屏蔽五件(golden_compare / shot_probe / fx_probe / ui_layout_probe / board_shot——组 A 文案变更使像素断言合法失效,按 goal 令弃断);**补跑时点=迭代 14 全入库后的表现批周期闸一次性补跑**,与本批无独立补跑义务;届时若 golden 基线因文案换代失效,按换代流程重锚而非当缺陷修。**分工注记(2026-10-05 ui-struct-probe 批)**:结构类断言(互压/等宽/出屏)已由 `ui_struct_probe` 入轻闸默认必跑段(tools/probe_gate.sh),与像素五闸互补不替代——五闸补跑义务不变。**核销注记(2026-10-08 迭代 19 卡①自动化验收补齐批——机器补跑半顺带核销)**:五件机器半全部归宿已入库并实测绿——shot_probe(扩屏七屏+shot_checker A-D 断言)/board_shot(L1-L3 取证+golden 逐像素 0.00%×3)/golden_compare 三件入 render_gate(窗口化自动闸),fx_probe 入 probe_gate --full(headless 逻辑层断言),ui_layout_probe 补 1280/1920 两档最小断言(首跑 PASS);五闸归宿对账见需求卡片-自动化验收补齐批 §一。**真人目检半(上方「秘宝」字样全 UI 面 3 分钟)仍归用户,不注销**。 +- **渲染像素类闸补跑挂账**:本批屏蔽五件(golden_compare / shot_probe / fx_probe / ui_layout_probe / board_shot——组 A 文案变更使像素断言合法失效,按 goal 令弃断);**补跑时点=迭代 14 全入库后的表现批周期闸一次性补跑**,与本批无独立补跑义务;届时若 golden 基线因文案换代失效,按换代流程重锚而非当缺陷修。**分工注记(2026-10-05 ui-struct-probe 批)**:结构类断言(互压/等宽/出屏)已由 `ui_struct_probe` 入轻闸默认必跑段(tools/probe_gate.sh),与像素五闸互补不替代——五闸补跑义务不变。**核销注记(2026-10-08 迭代 19 卡①自动化验收补齐批——机器补跑半顺带核销)**:五件机器半全部归宿已入库并实测绿——shot_probe(扩屏七屏+shot_checker A-D 断言)/board_shot(L1-L3 取证+golden 逐像素 0.00%×3)/golden_compare 三件入 render_gate(窗口化自动闸),fx_probe 入 probe_gate --full(headless 逻辑层断言),ui_layout_probe 补 1280/1920 两档最小断言(首跑 PASS);五闸归宿见本句上列逐件注记(原对账卡已按「吸收即死」退役,git 历史可考)。**真人目检半(上方「秘宝」字样全 UI 面 3 分钟)仍归用户,不注销**。 ### ⑯ UI 结构批复验(2026-10-05 ui-struct-probe mini-loop 顺带登记——标题屏双列修复+按钮宽度纪律,约 2 分钟) @@ -280,6 +280,7 @@ | v1.3 | 2026-10-15 | 简明技术中文用语规范(用户令):词面修正 35 处(随批→顺带 25、收口→完成/合并进 master 5、台账→状态记录 1、销号→注销 2、报错→返回错误 1、对拍→与基线数据逐项比对 1;均系正文现役文本,版本历史既有行按豁免不动)+失同步修复 0 处 | | v1.4 | 2026-10-17 | ㉖① 机检承接注记(迭代 29 GDD 反哺点经用户逐条裁决写入):屏壳切换正确性已由 `screen_flow_probe` 机检承接(入轻闸必跑段);该项**保留不注销**——承载机器抓不到的观感半(演出时序/文案/布局逐屏零漂移) | | v1.5 | 2026-10-17 | 新增 ㉘ 未开格类型徽章批类型微光实机目检节(迭代 30 卡①随批登记:五组一眼可分/微光不遮数字〔环不外溢〕/出圈灭入圈复亮/整屏不脏/群伤暗档 #A61D37 观感〔provisional,读数归样张批复核〕——登记不阻塞;能力验证半=双帧 glow 作用集 2/4/4·outside=0+golden off 帧 0.10–0.14%+探针 case⑰+单测五段 51 检查) | +| v1.6 | 2026-10-20 | 死链清偿:㉑ 节「五闸归宿对账见需求卡片-自动化验收补齐批 §一」指路句删除——该卡早已按 doc-conventions §11「吸收即死」退役,五件归宿由本句上列逐件注记自持。同批十一张失归属卡片退役,roadmap 卡片列改「已退役(git 历史可考)」 | ## ㉖ 代码架构技术债修复批——全流程走查(迭代 27 卡①顺带登记;能力验证半=冒烟 V1-V9+parity 三变体逐位一致、与基线数据逐项比对五跑全同) diff --git a/design/gdd/systems/表现与支撑/HUD框架.md b/design/gdd/systems/表现与支撑/HUD框架.md index 18d9a2fc..e7150e30 100644 --- a/design/gdd/systems/表现与支撑/HUD框架.md +++ b/design/gdd/systems/表现与支撑/HUD框架.md @@ -168,7 +168,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 配套拍板(同日):魔法提灯=灯甲形态(光照圈外扩 +2 格,flat 整数档)随迷雾立项;**类型微光不随视野扩大**(类型先读仍只贴身 8 格,微光锚=可挖域);提灯载体归 aux_items 新行(登记原文——2026-10-07 用户令改道为独立卡,2026-10-08 裁案A=秘宝·同调位新行落位,见下方实施状态注记;**2026-10-09 用户裁退役**——新目录 15 件未收提灯,fog_lantern 数据行与卡④接线拆除归退役删行批〔实装批〕,功能由新目录普通档「阔视野带」承接,06 登记条在册),呈现面挂「资产升档重产批」(挂账不动)。 -**实施状态(2026-10-03 迭代 11 第④批已入库)**:迷雾遮蔽+菱形灯光区跟随+暗淡记忆态上线,探针断言顺带扩(ui_input_probe case⑮)。四裁决逐条对账——①案甲视野迷雾立项(纯呈现层):迷雾开关分层验证可用(呈现态布尔,off 态=无迷雾基线),同板同动作序列与 MC 逐项比对逐位一致;②暗淡记忆态:区外已开格灰显+数字可读,明度按 [art-bible](../../../art/art-bible.md) §6.5 写入文档值(记忆板 #3A3A3A/记忆墨 #C4C4C4,provisional);③灯光半径=微光环 8 格同圈:LIGHT_RADIUS=8 参数化(曼哈顿菱形,常量);④提灯 +2、微光不扩:FOG_LANTERN_BONUS=+2(落码常量实名——本条旧记 LIGHT_RADIUS_LANTERN_BONUS 系文档侧拟名,随卡④入库对齐),类型微光仍贴身 8 邻格零改动。**〔2026-10-05 迭代14⑤接线注记〕公共接线面已就位**——`board_view.set_fog_lantern(enabled)`(true=半径 8+2、false=复原 0;写入即 refresh 重算雾态),半径算式消费 `_fog_lantern` 迷雾批已在位;ui_input_probe case⑮ 增接线断言(开=dist 9 格转可见+lantern=2/关=复原)。**〔2026-10-08 迭代 19 卡④入库注记〕载体到位+接线闭环=功能可达**——载体=秘宝·同调位新行 `fog_lantern`「魔法提灯」(treasure_items.tres 表尾追加,desc「灯光区半径+2」,slot_cost 1、营地秘宝匣同调装配获渠,行字段=用户「按推荐」全收);生产路径=runner set_attunement→enc.attunement→begin_battle 注入 orchestrator 装配集→公共只读出口 `attune_has`→组合根呈现桥 `main._sync_fog_lantern` 每战首轮装配链**显式重算含否**(🔴 复原语义=禁战斗结束隐式复原——卸装/未装配写 0,断点续玩/跨关天然正确);未装配=false 写 0=缺省零扰动基线逐位不变。顺带测试:case⑮ 载体级段(装配→lantern=2+dist R+1 转可见+卸装复原)+smoke 行字段/同调目录投影(九件→十件)/装配贯通断言+存档回归 Part 6+单测 fog_lantern_wiring(run_all 17→18 套)。原「提灯载体归 aux_items 新行随 Alpha 信息件重定批」登记去向就此注销(改道留痕=需求卡片-提灯载体道具批-2026-10-07 §一)。验收线(本篇「验收标准」视野迷雾行)逐条转正式验收:区内完整渲染/区外已开格灰显可读/区外未开格不可见/灯光区随移动跟随/两态结算逐位一致;实机目检人闸(迷雾观感/记忆态可读性/移动跟随流畅度)随出口闸。黑暗区域渲染规格承载 = art-bible §6.5(v3.5)。 +**实施状态(2026-10-03 迭代 11 第④批已入库)**:迷雾遮蔽+菱形灯光区跟随+暗淡记忆态上线,探针断言顺带扩(ui_input_probe case⑮)。四裁决逐条对账——①案甲视野迷雾立项(纯呈现层):迷雾开关分层验证可用(呈现态布尔,off 态=无迷雾基线),同板同动作序列与 MC 逐项比对逐位一致;②暗淡记忆态:区外已开格灰显+数字可读,明度按 [art-bible](../../../art/art-bible.md) §6.5 写入文档值(记忆板 #3A3A3A/记忆墨 #C4C4C4,provisional);③灯光半径=微光环 8 格同圈:LIGHT_RADIUS=8 参数化(曼哈顿菱形,常量);④提灯 +2、微光不扩:FOG_LANTERN_BONUS=+2(落码常量实名——本条旧记 LIGHT_RADIUS_LANTERN_BONUS 系文档侧拟名,随卡④入库对齐),类型微光仍贴身 8 邻格零改动。**〔2026-10-05 迭代14⑤接线注记〕公共接线面已就位**——`board_view.set_fog_lantern(enabled)`(true=半径 8+2、false=复原 0;写入即 refresh 重算雾态),半径算式消费 `_fog_lantern` 迷雾批已在位;ui_input_probe case⑮ 增接线断言(开=dist 9 格转可见+lantern=2/关=复原)。**〔2026-10-08 迭代 19 卡④入库注记〕载体到位+接线闭环=功能可达**——载体=秘宝·同调位新行 `fog_lantern`「魔法提灯」(treasure_items.tres 表尾追加,desc「灯光区半径+2」,slot_cost 1、营地秘宝匣同调装配获渠,行字段=用户「按推荐」全收);生产路径=runner set_attunement→enc.attunement→begin_battle 注入 orchestrator 装配集→公共只读出口 `attune_has`→组合根呈现桥 `main._sync_fog_lantern` 每战首轮装配链**显式重算含否**(🔴 复原语义=禁战斗结束隐式复原——卸装/未装配写 0,断点续玩/跨关天然正确);未装配=false 写 0=缺省零扰动基线逐位不变。顺带测试:case⑮ 载体级段(装配→lantern=2+dist R+1 转可见+卸装复原)+smoke 行字段/同调目录投影(九件→十件)/装配贯通断言+存档回归 Part 6+单测 fog_lantern_wiring(run_all 17→18 套)。原「提灯载体归 aux_items 新行随 Alpha 信息件重定批」登记去向就此注销(改道留痕=原提灯载体道具批卡(已按「吸收即死」退役,git 历史可考))。验收线(本篇「验收标准」视野迷雾行)逐条转正式验收:区内完整渲染/区外已开格灰显可读/区外未开格不可见/灯光区随移动跟随/两态结算逐位一致;实机目检人闸(迷雾观感/记忆态可读性/移动跟随流畅度)随出口闸。黑暗区域渲染规格承载 = art-bible §6.5(v3.5)。 ### 营地覆盖层:四柜台并排(程序占位——视觉终稿归营地视觉批) @@ -313,3 +313,4 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 | v0.16 | 2026-10-10 | 柜台名扫改(2026-10-10 天赋树设计会话裁「道具工坊」改名「秘宝匣」):迭代 19 卡④入库注记内「营地道具工坊同调装配获渠」改「营地秘宝匣同调装配获渠」。机制与接线零改动 | | v0.18 | 2026-10-15 | 简明技术中文用语规范(用户令):词面修正 5 处——核心规则导语「收口」→「完成」;装板校验「报错中止」→「显示错误并中止」;迷雾实施状态注记「随批」→「顺带」2 处(探针断言扩、测试引导语);营地覆盖层注记「随批补缺」→「顺带补缺」。机制、数值、结构零改动 | | v0.19 | 2026-10-17 | **未开格类型微光实装入库注记(迭代 30 卡①,合并 `7ffd1dc0`)**:①微光节实装状态行「游戏内待实施批」→「已实装」(2026-09-30 核证的「无独立实现」状态注销),在役实现(ui_kit TG_GLOW_* 五组、格面微光子件 + 距离场 shader)随行登记;②口径史注记后补「两带分工」注记(卡顶色带 = 条目级静态色带 / 格面微光 = 棋盘格内动态微光,禁互为引用;统一面归 06 两带统一条);③验收标准类型微光行去「待实施批落地后验收」括注转正式验收。微光定义(一句话/作用范围/生命周期/关联边界)零改动;明度档 provisional 值登记归 art-bible 版本历史 | +| v0.20 | 2026-10-20 | 死链清偿:视野迷雾实施状态注记内「改道留痕=需求卡片-提灯载体道具批」指路句改指提交史——该卡早已按 doc-conventions §11「吸收即死」退役,原句为死链;同批十一张失归属卡片退役。机制、数值、结构零改动 | diff --git a/design/research/需求卡片-UI交互与观感批-2026-10-13.md b/design/research/需求卡片-UI交互与观感批-2026-10-13.md deleted file mode 100644 index bc1e58f4..00000000 --- a/design/research/需求卡片-UI交互与观感批-2026-10-13.md +++ /dev/null @@ -1,196 +0,0 @@ -# 需求卡片:UI 交互与观感批(按钮五态矩阵 · 全局纹理过滤 · 观感四件) - -- 版本:v1.2(2026-10-14 grilling 第二轮三裁落文,用户令「按推荐」:⑥<4.5:1=换墨 ⑦光柱=连续 alpha(filter 归 LINEAR 白名单)⑧诊断钮=移调试浮窗)——**两轮八裁全落、零待裁点,卡片成立;开工门=U0(待用户编入迭代点名)** -- 来源:[06-待办清单](../gdd/06-待办清单.md) 五条(2026-10-13「UI 美化三层诊断」登记)+[08-Alpha版本标准](../gdd/08-Alpha版本标准.md) 对应行 -- 归属:呈现层表现批(纯工程,零新素材) -- 排期:**已编入迭代 26 卡①**(2026-10-14 用户令;卡片状态=已编入;开工门=U0——用户新会话 /iter 26 四检发令;本迭代位预留后续追加卡,同迭代 24 先例);**M4 数值批顺延 27+** - -## 1. 目标与完成定义 - -把「UI 美化三层诊断」里**剩余可纯工程落地**的部分一次收口,六项: - -1. **按钮五态矩阵补齐**(第一层第二条):普通钮悬停态(乙案 modulate 提亮)+禁用态错配修正、危险钮本族按下态+禁用态、主钮禁用态、三工厂键盘焦点样式盒; -2. **全局纹理过滤设邻近采样**(第一层第三条):`project.godot` 一行设置+显式 LINEAR 白名单+翻转面全枚举; -3. **三处 <4.5:1 文字位换墨**(第三层机判组):站桩护甲徽标两处+敌顺位徽标+RAP 反馈行,机检断言锚定; -4. **光柱硬边修**(第三层①):斜光带内 alpha 渐变+纵向衰减; -5. **元素细节余②③**(第三层,④诊断钮单列):BCard 图标槽明度差降档、商店卡片区垂直居中、营地四栏等高; -6. **诊断转储钮退出玩家画面**(第三层④):移入调试浮窗。 - -**完成定义**:六项落码;冒烟+单元+场景探针+改前改后读数对拍四闸全绿;冒烟新增断言在位(§7);06 相关条目销号或改写、08 回填、07 登记目检项(登记不阻塞);反哺点四条列明待用户裁决。 - -## 2. 现状事实(2026-10-13 代码级实查;开工自行复核) - -### 2.1 按钮皮(`game/presentation/views/ui_kit.gd`) - -- `_apply_button_skin`(:541-555,四工厂公共打底):normal=button_stone 九宫格(8px 切片);**hover=同一张常态图**(:547,悬停零视觉变化);pressed=button_stone_pressed(:549);**disabled= pressed 图**(:550——禁用态长相=按下态);font 五色齐(normal/hover/pressed/focus 同 INK,disabled=INK α0.45);**无 focus 样式盒**——键盘焦点走引擎默认灰描边。 -- 四工厂终态(实查各厂 override 叠加结果): - -| 工厂 | normal | hover | pressed | disabled | focus 样式盒 | -|---|---|---|---|---|---| -| `button()` :445 / `verb_button()` :562 | 石纹 | **=常态图** | 石纹按压 | **=石纹按压** | **无** | -| `primary_button()` :575 | 烛光黄平涂 | 烛光黄提亮 | 烛光黄深档 | **=石纹按压(错配)** | **无** | -| `danger_button()` :591 | 深红平涂 | 深红提亮 | **=石纹按压(错配)** | **=石纹按压(错配)** | **无** | - -- 素材:`game/assets/art/ui/button_stone.png` 与 `button_stone_pressed.png` 均 **48×48 RGBA**(8px 九宫格,实查 PIL);**无悬停态素材**。 -- **诊断订正①**:06 记「危险钮只填常态与悬停,没有按下态也没有禁用态」——实查按下/禁用态**在**(承自 skin 打底),但皮肤错配(红钮按下显石纹棕图);危险钮自身只覆写了 normal/hover。缺的是「本族按压态」,不是「态本身」。按迭代 25 滑轨条先例,卡片以代码面为准。 -- **诊断订正②**:06 记「五种状态覆盖数量很不齐(悬停四处/按下三处/禁用一处/焦点零处)」——焦点样式盒为零属实;其余计数系按工厂逐条数的近似值,与 override 叠加终态有出入(禁用态实为三厂**全部**继承 skin 的 pressed 图=错配而非「一处」)。本卡以本表终态为准。 - -### 2.2 纹理过滤 - -- `game/project.godot` **无** `rendering/textures/canvas_textures/default_texture_filter` 设置(引擎默认 Linear;全文仅 theme/custom_font 与 theme/custom 两行界面相关)。 -- 全库显式 `texture_filter` 共 13 处:**NEAREST 11 处**(ui_assembler.gd:188、battle_end_overlay.gd:60/76、board_fx_view.gd:150、board_view.gd:310、board_world.gd:50、hero_info_panel_view.gd:202、level_map_screen.gd:169、standee_body.gd:222、ui_kit.gd:234/508/671);**LINEAR 2 处**(board_world.gd:43 脚影=径向渐变平滑衰减;status_slot_row.gd:127 状态图标=§8.2 已登记例外「抗锯齿矢量风源图」)。(**2026-10-14 T0 勘误**:成文时计 12 处、漏登 `board_world.gd:50`(hero 立绘 sprite NEAREST),开工事实抽查实测 13 处;该点与本批全局 Nearest 意图同向,不属翻转面风险、不进 LINEAR 白名单,V3 断言不受波及) -- 平滑渐变件(当前无显式 filter=继承 Linear,改全局 Nearest 后会劣化,须显式白名单): - - `vignette_rect`(ui_kit.gd:242-258)径向暗角 256×256,STRETCH_SCALE 拉满全屏——Nearest 下 1920 宽屏会出可见像素块; - - `gradient_base`(ui_kit.gd:281-296)竖向渐变 64×256,STRETCH_SCALE; - - `beams_rect`(ui_kit.gd:263-277)程序生成 560×560,STRETCH_TILE——归属已裁=显式 LINEAR 白名单(Q7,随 T4 连续 alpha 实现一并落)。 -- 改全局 Nearest 的翻转面=上述之外的全部纹理(立绘/瓦片/格面/图标——即本批意图);T0 枚举成清单。 - -### 2.3 呈现层残余 <4.5:1 文字位(第三层) - -- 站桩护甲徽标(standee_body.gd:489-494,敌 only,直绘舞台底 STAGE_BG #3E342A,ui_kit.gd:118):轻甲 WARM_FAINT(过);**魔法护甲 HERO_BLUE(≈3.2:1)**;**重甲 GOLD_DEEP(≈3.3:1)**。 -- 敌顺位徽标 ①②③(standee_body.gd:436-441):GOLD_DEEP 13px 直绘同底(≈3.3:1)。 -- RAP 反馈行(ap_bar_view.gd:77):STONE_FAINT 对 AP 条面板底 PANEL_DATA #E9D9B8(ap_bar_view.gd:43;≈2.9:1)。 -- 站桩名行(:501 WARM)与轻甲档已过,不动;**不改 GOLD_DEEP/HERO_BLUE 常量本身**(他处语义岗在役——如 standee_body.gd:199 意图动画判据、board_view.gd:35 小人边框、level_map_screen.gd:237),只换上述裸用点位。 -- 机检设施现役:smoke_all.gd:29-37 `_theme_rel_luminance`/`_theme_contrast`(迭代 25 V2 滑轨断言同款)。 - -### 2.4 光柱(第三层①) - -`beams_rect`(ui_kit.gd:263-277)生成 560×560 贴片:带域 d∈[240,340) 内 α=0.05 匀净、**带内外缘零过渡**,暖白 (1, 236/255, 200/255),STRETCH_TILE 满铺——实机为三块等距硬边梯形(06 诊断原文)。 - -### 2.5 元素细节余②③④(第三层;①滑轨已随迭代 25 销号) - -- ②图标垫深块:BCard 图标槽(ui_kit.gd:659-663)76×76 SLOT_BACKDROP #3E362C 深墨棕直角块+1px 边,坐米色卡面;bcard 在役消费方=三选一(curio_pick_overlay.gd:103)。**诊断订正③**:06 记「商店与三选一的卡片上」——实查商店卡(shop_overlay_view.gd:121-139)为纯文字行卡、无图标槽;垫块仅三选一一处。 -- ③留白失衡:商店 `_cards_box`(shop_overlay_view.gd:64-67)VBox EXPAND_FILL、子项默认顶对齐→卡片堆上半、下半空(诊断属实)。**诊断订正④**:06 记「三选一同款」——实查三选一 `_choice_box`(curio_pick_overlay.gd:62-65)已 ALIGNMENT_CENTER+EXPAND_FILL、卡已垂直居中,描述不符。营地侧:camp_overlay_view.gd:106-175 四栏(天赋树/锻造工坊/秘宝匣/图鉴)高度不一(树与秘宝匣 scroll 有 336 min 高;锻造锁定态与图鉴栏仅锁文、无 min 高)。 -- ④诊断转储钮:main.gd:333-334 **无条件挂载** `UiAssembler.build_diag_button`(ui_assembler.gd:219-228,左下角 112px 常驻)——「调试变体」注释在册但无门控,玩家画面可见(06 诊断属实)。 - -### 2.6 冒烟基线与渲染闸 golden 面 - -987/0(active.md 489 条,2026-10-13;开工日复核)。迭代 25 遗留两条主题红线断言(smoke_all.gd:5376-5385:Button 类型词条零接触+focus 族词条零定义)——本批走逐实例 override 路线,两条断言**维持不换代**(§3)。 - -- **渲染闸 golden 面**(tools/render_gate.sh):board L1-L3 整屏帧逐像素比对(tools/golden_compare.py,容差=灰度差 ≤16 且 changed ≤2%)。**本批预期变更区=站桩徽标换墨**(①②③ 顺位徽标+护甲图标落在棋盘裁剪区):徽标像素静态估约 1% 量级(低于 2% 线,但换墨色差远超 16 容差,是否越线取决于当屏敌数)——处置见 T6 第 4 步。 -- 光柱仅在标题屏(ui_assembler.gd:111 `build_start_overlay`),**不在 golden 面**;战斗屏舞台底=平色 `panel_flat(STAGE_BG)`(battle_stage_view.gd:49),无纹理过滤依赖。 -- 全站按钮经 ui_kit 四工厂(裸 `Button.new()` 全库仅工厂自身 :446 命中,T1 覆盖面闭合)。 - -## 3. 设计契约(红线,违反=L3 停机呈报) - -- 🔴 **主题层零新增词条**:全部按钮状态走逐实例 override(ui_kit 工厂内),不碰 main_theme.tres 的 Button/focus 任何词条——迭代 25 两条红线断言(smoke_all.gd:5376-5385)必须原样维持绿。若实现中发现必须走主题层:停机呈报,两条断言同批换代须用户批。 -- 🔴 **零新美术素材**:全部改动用既有贴图/程序化生成(悬停态乙案=modulate 提亮,零素材);本批不自行产图——需要新素材的需求一律出批走美术线自立批。 -- 🔴 **棋盘战斗逻辑与棋盘几何零触碰**:board_view/board_world 除脚影既有显式 LINEAR 外零改动;全局纹理过滤属渲染设置面,不算触碰(其观感翻转正是意图,枚举清单见 T0)。 -- 🔴 **对比度硬指标**:换墨后各处 ≥4.5:1(art-bible §7.2),机检断言锚定;不达即回炉换值,不许放行。 -- 🔴 **旧实现同批清理**:诊断钮从 main.gd 卸载点真删(不留死开关);disabled=pressed 图的错配随批修正,禁止新旧并存。 - -## 4. 范围边界 - -**做**(六项,见 §1)。 - -**不做**(去向): -- 引擎原生控件(LineEdit/SpinBox/滑轨/滚动条)的键盘焦点视觉 → 维持引擎默认;归 06「棋盘战斗键盘/手柄输入」Beta 条连带裁决点③(本批交付的焦点态是其前置件,只覆盖游戏自有钮)。 -- 九宫格切片错位(氛围层条后半)→ 06 在册;须先核素材尺寸能否撑住新切片值(border_stone 48×48 按 12 切片、panel_stone 48×48 按 16 切片,铺到四百多像素宽面板的拉伸接缝),可能要重出素材=美术线连带面,本批不碰。 -- UI 贴图重构 / 字体补完 / 战斗一屏样张(第二层三件)→ 06 在册,美术线。 -- 第二/三关棋盘观感 → 06 在册,开工前须过「素材轴/UI 轴」定性人闸。 -- 关卡节点图重构 → 06 在册,用户已裁「先文档设计讨论」,不属本批。 - -## 5. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| [06-待办清单](../gdd/06-待办清单.md) | ①「UI 按钮状态矩阵缺档」条;②「全局纹理过滤」条;③「呈现层残余 <4.5:1 文字位」条;④「UI 氛围层与九宫格切片」条(仅光柱半);⑤「UI 元素细节修」条(余②③④;②③范围按 §2 诊断订正③④收窄:②仅三选一 BCard、③仅商店+营地) | **机械面,随批**:①②③销号;④改记「九宫格半存续」;⑤销号余项 | -| [08-Alpha版本标准](../gdd/08-Alpha版本标准.md) | 三·界面「UI 按钮状态矩阵」行;五·表现「全局纹理过滤」「UI 氛围层与九宫格切片」「UI 元素细节修」三行 | **机械面,随批**回填(氛围行注明九宫格半未结) | -| [07-体验验证清单](../gdd/07-体验验证清单.md) | 新增目检节(㉕):按钮五态/Nearest 全屏巡检/光带/布局/诊断钮清零 | **机械面,随批**登记(不阻塞) | -| active.md | 批收口快照惯例 | **机械面,随批** | -| roadmap | 迭代行 | 编入时随编入批更新;本卡不动 | -| art-bible §7 | ①按钮五态/焦点态规格无条款(本批实现=临时权威);②平滑渐变件 LINEAR 白名单无例外条款(§8.2 已有状态图标例外先例);③若立新色 token(HERO_BLUE 亮档/GOLD 亮档)§4.1 语义岗登记;④**氛围层风格一致性**——vignette/gradient_base/beams 保平滑 vs DitherBand 抖动派并存(grilling Q5 裁保平滑,不一致性留样张批统一裁决) | **反哺点**(四条列实现报告待用户裁决,另批落文;**设计权威文档,不随批更新**) | - -## 6. 任务卡 - -### T0 基线与枚举复核(≈0.25d) - -1. §2 全部 file:line 开工复核(含四项诊断订正复命)。 -2. 纹理过滤翻转面全枚举:无显式 filter 的 TextureRect/Sprite2D 清单,一式两份(实现报告+卡审留档)。 -3. 按钮消费点枚举:四工厂全部调用方清单(焦点/禁用改动的波及面,含 HUD 顶条紧凑钮豁免域)。 - -### T1 按钮五态矩阵(≈0.5d) - -1. skin 函数改版为五态统一管线,三厂一致(grilling 第一轮已裁值落此): - - **悬停=乙案**:普通钮 hover=常态图+modulate 提亮(档位见代拍板项 1;与 `primary_button` 现行 `CANDLE.lightened(0.06)`(ui_kit.gd:579)同纪律);主钮/危险钮 hover 承现行提亮档不动。 - - **禁用=甲案**:三厂 disabled=本族底+modulate α0.45(与现行 `font_disabled_color` α0.45 同纪律的幽灵化),取代现状「=石纹按压图」错配(§2.1)。 - - **焦点=甲案**:三厂 focus 样式盒=INK 2px 内缩 1px(与现行 `font_focus_color=INK` 同源;三类钮底可辨性实比,不达走 §8 L2 调宽/内缩,不动色系不动主题层)。 - - 危险钮补本族 pressed(深红平涂系深档)+disabled(承上)。 -2. 断言见 §7 V1/V2。 - -### T2 全局纹理过滤(≈0.25d) - -1. `project.godot` 增 `[rendering]` 节 `textures/canvas_textures/default_texture_filter=0`(0=Nearest)。 -2. vignette_rect/gradient_base 补显式 LINEAR(白名单两处);脚影/状态图标既有显式不动;beams 归显式 LINEAR 白名单(Q7 裁,随 T4 实现一并落)。 -3. 断言见 §7 V3。 - -### T3 <4.5:1 文字位换墨(≈0.25d) - -1. standee_body.gd:441 顺位徽标、:494 重甲徽标(GOLD_DEEP)与 :492 魔法护甲徽标(HERO_BLUE)换同族亮档(≥4.5:1 vs STAGE_BG;token 处置见代拍板项 4)。 -2. ap_bar_view.gd:77 STONE_FAINT→STONE_DEEP(既有 token,对 PANEL_DATA 5.6:1,ui_kit.gd:95 在案)。 -3. 断言见 §7 V4。 - -### T4 光柱氛围修(≈0.25d) - -1. beams_rect 带内 alpha 渐变(0→0.05→0 横向过渡)+纵向衰减(上亮下暗);**衰减实现=连续 alpha**(grilling Q7 裁:与 Q5 裁定的氛围保平滑三件(暗角/地图渐变/光柱)同血统;Bayer 抖动案弃——α0.05 极弱件上台阶不可见且与同屏平滑暗角风格跳变);**纹理 filter=显式 LINEAR 白名单**(与 Q5 同一条纪律,入 T2 白名单清单)。 -2. 目检见 §7。 - -### T5 元素细节余②③(≈0.5d) - -1. ②BCard 图标槽(ui_kit.gd:659-663)明度差降档(白图标 ≥3:1 图形对比硬约束;代拍板项 6)。 -2. ③shop_overlay_view.gd:64-67 卡片区垂直居中;camp_overlay_view.gd:106-175 四栏等高(统一 min 高或拉伸;代拍板项 7)。 - -### T5b 诊断转储钮退役(≈0.25d) - -1. main.gd:333-334 卸载点删除;build_diag_button(ui_assembler.gd:219-228)退役,转储入口收口调试浮窗(**grilling Q8 裁甲**:承迭代 18 卡⑦「主菜单三散件收一」纪律;删除案否——`dump_diagnosis` 卡死取证功能保留;门控隐藏案否——debug_overlay 本就可全局可开,双轨无意义);`_on_diagnose_pressed`(main.gd:1288-1299)连接随迁。 -2. 断言见 §7 V6。 - -### T6 文档同步闸与全闸(≈0.25d) - -1. §5 机械面五件更新完毕+反哺点四条列明。 -2. 07 登记目检节。 -3. 批末四闸全绿合并。 -4. **渲染闸 golden 面处置**(grilling 补入 2026-10-14):跑 `tools/render_gate.sh`;board golden(L1-L3)若红——核对热区**限于站桩徽标换墨面**(§2.6 已证的唯一预期变更区)→ 显式重制三张基线(视觉换代批既定动作:golden_compare.py 头注「资产升档批换代时显式重制基准」;重制=变更面随批呈报)→ 复闸;**热区超预期面 → §8 L3 停机呈报**。若闸直接绿(徽标占比未越 2% 线)=登记即结。 - -**估时合计 ≈2–2.5d**(T6 含 golden 重制一次)。切分预案:T1 焦点视觉若在三类钮底可辨性上反复(超 0.5d 软盒),先落石纹钮+危险钮两处焦点,主钮焦点随 L2 记录继续;T5b 若调试浮窗挂载面比预期深,诊断钮先隐藏(visible=false)且转储入口落浮窗,不阻塞合并。 - -## 7. 验证闸(逐需求点验收清单) - -**能力验证(自动化;谁验=批末四闸闸机,全绿才合并)**——冒烟新增/改写断言: - -- V1 按钮五态覆盖:四工厂产物逐只断言 normal/hover/pressed/disabled/focus 样式盒非空;**hover≠normal**(乙案判据=hover 样式盒 modulate_color ≠ 常态的 WHITE);危险钮 pressed/disabled 为非石纹本族;**disabled≠pressed**(错配修正判据)。 -- V2 主题红线维持:Button 类型词条零接触+focus 族词条零定义(smoke_all.gd:5376-5385 原样绿)。 -- V3 纹理过滤:`ProjectSettings` 读 `default_texture_filter==0`;vignette/gradient_base 显式 LINEAR 断言(白名单两处在位);脚影/状态图标 LINEAR 不丢。 -- V4 对比度锚定:换墨后三处 vs 各自底色 ≥4.5:1(复用 smoke_all.gd:29-37 helper;色值冻结断言);RAP 行 vs PANEL_DATA ≥4.5:1。 -- V5 回归:冒烟全绿(基线 987/0,开工日复核)。 -- V6 诊断钮退役:main.gd 无 build_diag_button 调用残留;转储入口在 debug_overlay 可达(探针或源码断言二选一)。 -- V7 改前改后读数对拍:本批零游戏逻辑改动——对拍面=冒烟全量+探针结构断言零漂移(渲染设置不影响逻辑读数)+**渲染闸 golden 面按 T6 第 4 步处置**(预期内变更=重制基线+呈报;超预期=L3)。 - -**测试方式两分法**:V1-V6 归能力验证(调试接口/自动化闸);观感类(悬停反馈手感/焦点环可见性/光带过渡/布局均衡/Nearest 后全屏无劣化)归正常流程体验=用户目检,登记 07 不阻塞。 - -**正常流程体验(用户目检;谁验=用户自排)**:标题屏/营地/商店/设置/三选一逐屏——鼠标悬停/按下/禁用(余额不足钮)反馈可感;Tab 遍历焦点环可见不糊;全局 Nearest 后立绘/瓦片/图标/九宫格无新增糊感、暗角与地图渐变无像素块(白名单生效判据);光带无硬边梯形;商店卡片区不堆上半;营地四栏视觉等高;玩家画面无「诊断转储」钮。 - -## 8. 异常分级 - -- L1(自救):样式盒/词条名拼错、filter 值写错、色值算错——断言立红即修。 -- L2(记录继续):焦点环观感、光带衰减手感、图标槽明度、布局等感官微调——登记 07,随批内迭代或后批微调。 -- L3(停机呈报):触碰 §3 任一红线;全局 Nearest 后出现 §2 枚举外的存量观感意外劣化(漏枚举);主题层误触;**渲染闸 golden 热区超站桩徽标预期面**(T6 第 4 步)。 - -## 9. 代拍板白名单(超清单必呈报) - -1. hover 乙案提亮档位(modulate 值;硬约束=INK 字对比 ≥4.5:1;参考主钮现行 `lightened(0.06)` 量级)。 -2. 禁用态 α 值(基准 0.45,与文字禁用同档;目检可微)。 -3. 焦点环最终参数(INK 2px 内缩 1px 为裁值;三类钮底实比不达可调宽/内缩,不动色系、不动主题层)。 -4. 换墨具体值与 token 处置(Q6 裁换墨后定:同族亮档优先既有亮族 token;语义岗冲撞则立新 token 并登记反哺点③;机检锚定 ≥4.5:1)。 -5. 连续 alpha 的渐变曲线参数(过渡带宽度/纵向衰减梯度;目检可微)。 -6. BCard 图标槽明度档(白图标 ≥3:1 硬约束;不达回退「去槽底+图标深描边」案)。 -7. ③布局修具体值(商店 _cards_box 居中方式;营地四栏等高=统一 min 高 or EXPAND_FILL 拉伸)。 -8. 诊断钮在 debug_overlay 内的落点(行位/显隐形态;方向已裁=移入浮窗)。 - -## 10. 待裁点 - -**零待裁点,卡片成立**(2026-10-14 grilling 两轮八裁全落,用户令「按推荐」): -- 第一轮:①范围=六项捆一批;②悬停态=乙案 modulate 提亮;③焦点环=INK 2px 内缩 1px+引擎控件焦点不碰(归 Beta 键盘批裁决点③);④禁用态=本族底+α0.45 幽灵化;⑤氛围平滑件=保平滑挂 LINEAR 白名单(不一致性=反哺点④)。 -- 第二轮:⑥<4.5:1=换墨(站桩两处同族亮档 ≥4.5:1;RAP 行 STONE_DEEP);⑦光柱=连续 alpha 渐变(filter 归 LINEAR 白名单);⑧诊断钮=移入调试浮窗(dump_diagnosis 保留)。 - -**开工门=U0**(已编入迭代 26〔2026-10-14 用户令〕——用户新会话 /iter 26 四检发令)。收口=§5 同步闸+06 销号+反哺点四条呈裁。 diff --git a/design/research/需求卡片-UI全局主题批-2026-10-13.md b/design/research/需求卡片-UI全局主题批-2026-10-13.md deleted file mode 100644 index 54360548..00000000 --- a/design/research/需求卡片-UI全局主题批-2026-10-13.md +++ /dev/null @@ -1,137 +0,0 @@ -# 需求卡片:UI 全局主题批(引擎原生控件接管皮肤) - -- 版本:v1.2(2026-10-13 审核补充批——中文字体防御性条款+V5 基线数订正+CheckButton 词条名补注+两处目检观察点+08 未跟踪状态提示;**卡片成立**,零待裁点,开工门=U0) -- v1.2 记录:同日用户对卡片发起审核,发现六点,除两处「提请注意」外全部落文。①**新主题必须显式设 `default_font`**(必修,见 §6 T0 第 4 步+新增断言 V6)——挂上项目主题后 `project.godot` 既有的 `theme/custom_font` 是否仍然生效,无权威依据可证实(官方文档对应页缺失,未跑测试);一旦失效后果是**全游戏中文字形缺失**,直接违反 HUD框架可访问性基线「中文字体随包内置并设为默认」。指向同一字体文件=观感零变化,纯粹消除不确定性。②V5 基线数订正 864/0 → **938/0**(v1.1 自审声称该项已修正,但正文数字从未落实)。③CheckButton 图标词条名为 `on`/`off`,不是 CheckBox 的 `checked`/`unchecked`(Godot 4),两者不可共用一套名。④目检增补两个观察点(滑轨柄是否抢焦点、滚动条槽是否可见)。⑤§5 标注 08-Alpha版本标准 至今仍是 git 未跟踪文件。**另已跑结构审计闸=PASS**:新增 `game/assets/theme/` 与 `game/assets/art/ui/gen/*.png` 均命中图像白名单 `game/assets/`,**无需**修订 AGENTS.md Project Layout。**审核方订正**:其上一轮「界面美化三层诊断」称设置屏音量滑轨「已填段与未填段同一个深棕色」,实查两段为 #B8A582 与 #7A5232(对比 2.84:1,低于图形元素 3:1 参考线),「偏难辨」成立而「同色」不成立;且默认值 100 时无未填段。卡片 §2 末的疑点披露与此处理维持有效。 -- v1.1 记录:grilling 三裁点=①focus 族词条全不定义(弃 LineEdit focus 豁免案)②PopupMenu 并入预盖③色值卡审即冻结;自审修正=V5 基线数过期、新增 PNG 导入流程补写、LineEdit 占位文字色词条补入、.tres 溯源改 README;换代重验=状态面板改名批(master 7d1e9cb)后全部 file:line 逐一复验存活,pause_overlay.gd → status_panel.gd 一处文件名换代 -- 来源:[06-待办清单](../gdd/06-待办清单.md)「UI 全局主题资源缺失——引擎原生控件没有接管皮肤」(2026-10-13 登记,UI 美化三层诊断 · 第一层);[08-Alpha版本标准](../gdd/08-Alpha版本标准.md) 三·界面表同名行 -- 归属:呈现层表现批(纯工程改动,零美术素材,不动美术圣经 §7 定稿规格) -- 排期:**已编入迭代 25**(2026-10-13 用户令;卡片状态=**已编入**)——roadmap「迭代 25」表行卡①,前置=无(卡片零待裁点);**原占位「迭代 25+」的 M4 数值批顺延 26+**。**可与迭代 24(敌人表内容修批)并行开发**:两者 game/ 代码面零重叠(本批改 ui_kit/ui_assembler/debug_overlay/settings_overlay/camp_overlay_view/project.godot 与新增 assets/theme/;迭代 24 改 enemy.tres/skills.tres/enemy_table.gd/unit_container.gd/battle_orchestrator.gd),但**共享文档面有四处确定重叠**(`smoke_all.gd` 新增断言、`06-待办清单.md` 销号、`roadmap.md` 迭代行、`08-Alpha版本标准.md` 回填),后合入的一方须先 merge master 解冲突──详见卡片 §5 与 roadmap 迭代 25 表行注记。 - -## 1. 目标与完成定义 - -建一套全局主题资源(.tres 文件,挂 `project.godot` 的 `gui/theme/custom`),覆盖全部引擎自带控件的皮肤词条,使未被呈现层逐实例手工盖皮的控件不再显示引擎默认灰色圆角现代风。同时把既有两处局部做法(tooltip 主题、滑轨样式)迁入全局主题单点并退役旧挂载方式;顺手修掉设置面音量滑轨「已填充段与未填充段难分辨」缺陷(第三层细节修①,本批销号)。 - -**完成定义**:工程内不再存在引擎默认皮肤的可见控件(本批范围清单内);冒烟+单元+探针全绿;新增主题词条断言入冒烟;目检项登记 07(用户自排,登记不阻塞);06 两条销号、08 表行回填。 - -## 2. 现状事实(2026-10-13 代码级实查;行号复核于 master 7d1e9cb) - -- `game/project.godot:30` 界面样式相关仅一行 `theme/custom_font`(全局字体);**无 `gui/theme/custom`,全库零 Theme 资源文件**。引擎版本 4.7(`project.godot:15`)。 -- `game/presentation/main.gd:32` main extends Control,是全部覆盖层的祖先;全局主题走 project 设置,不依赖挂载点代码。 -- **tooltip 主题只覆盖标题屏**:`ui_kit.gd:753` `tooltip_theme()`(深底气泡+暖白字 14px 程序化 Theme),唯一挂载点 `ui_assembler.gd:105`(标题屏 overlay)。主题沿树向下传播,其余各屏(营地/商店/设置/状态面板/生涯/图例/结算/调试)均不生效,气泡为引擎默认灰。全站 10+ 文件挂 `tooltip_text`。 -- **滑轨两处做法不一致**:`ui_kit.gd:735` `styled_slider()` 盖了 HSlider 的 `slider`(槽轨暖石 #B8A582)与 `grabber_area`(填充深棕 #7A5232)两个词条(`ui_kit.gd:743-746`),**滑柄未盖=引擎默认灰圆**;`debug_overlay.gd:277` `_slider_row` 未走该工厂,裸 `HSlider.new()` 整条默认。 -- **滚动条裸奔清单**:营地 3 处滚动容器(`camp_overlay_view.gd:101` camp_scroll 横滚兜底、`:114` tree_scroll、`:152` ws_scroll)、调试浮窗 2 处 ScrollContainer(`debug_overlay.gd`)、战斗日志与结算回看 RichTextLabel 的自动滚动条(`battle_log_view.gd:50` scroll_active、`settlement_review_overlay.gd:18`)。营地右侧浅灰圆角滚动条=登记条目的实机例证。 -- **分隔线**:HSeparator 全站 15 处(ui_assembler 1、battle_end 1、settings 2、legend 3、confirm_dialog 1、debug_overlay 5、status_panel 2),引擎默认灰线;VSeparator 零使用。(原 pause_overlay.gd 已由状态面板改名批换代为 status_panel.gd,计数不变。) -- **调试面输入件**:LineEdit 种子框(`debug_overlay.gd:215`)、SpinBox 批量模拟数(`:246`)、RichTextLabel 输出(`:257`)全部默认皮肤。 -- **未在役控件**:OptionButton / CheckBox / CheckButton / TextEdit / ProgressBar / ItemList / Tree 游戏代码零使用(ProgressBar 已退役,`standee_body.gd:80` 仅存注释);CheckButton 仅冒烟探针 `probe_ui_util.gd` 使用——该处是按文字寻址节点的工具函数(`probe_ui_util.gd:32`),**零视觉断言,预盖对冒烟零风险**。2026-10-13 复扫 TextureProgressBar / PopupMenu / MenuBar / FileDialog / VideoStream 亦全库零使用,控件清单完备。 -- **素材库无滚动条/滑轨/勾选类贴图**(`game/assets/art/ui/` 仅按钮/面板/背景/图标),皮肤只能纯色程序化生成。 -- **冒烟探针零主题断言**(smoke 全目录 grep 零命中),无撞红风险;`ui_tune_probe.gd:213` 有一处 VScrollBar/HScrollBar 引擎滚动机构豁免注释(行为探针,非皮肤断言,不受影响)。 -- **按钮全部逐实例盖皮**(`ui_kit.gd:541` `_apply_button_skin` / `:575` primary / `:591` danger),`add_theme_stylebox_override` 优先级高于全局主题——本批不碰 Button 类型词条则按钮观感零变化。ui_kit 之外无对滑轨/滚动条/分隔线/SpinBox 的散装 override,T1 退役范围闭合。 -- **第三层①疑点披露**:诊断称音量滑轨「已填段与未填段同一个深棕色」,但代码面两段分别为暖石 #B8A582 与深棕 #7A5232(`ui_kit.gd:743-746`),差异明显;且默认值 100(`settings_overlay.gd:59`)时无未填段。诊断描述与代码面不符,需实机复核——本批不依赖该结论:滑轨词条迁主题时直接重配两段对比度,以「拖到中点一眼可辨」为准绳,重构即修复。 - -## 3. 设计契约(红线,违反=L3 停机呈报) - -- 🔴 **Button 类型词条零接触**:全局主题不得定义 `Button` 类型的任何词条。按钮五态矩阵(含悬停做法、键盘焦点)是 06 第一层第二条待办的地盘,其悬停态有未裁点(甲重产贴图/乙常态提亮),本批先行设默认必踩车。OptionButton 为独立主题类型,不受此条约束(预盖件)。 -- 🔴 **focus 族词条一律零定义**:凡名字带 focus 的词条(`LineEdit` 的 focus、滚动条的 `scroll_focus`、滑轨的 focus 等)一律不写,键盘焦点视觉维持引擎默认描边。焦点态整体纪律归按钮状态矩阵批+「棋盘战斗键盘/手柄输入」连带裁决点③,本批零预支(grilling Q1 裁:弃 LineEdit focus 豁免案,口径统一)。 -- 🔴 **不新增美术素材、不改美术圣经 §7**:全部皮肤用纯色 StyleBoxFlat+脚本生成的纯色/几何小位图,色值一律取自 [ui_kit.gd](../../game/presentation/views/ui_kit.gd) 既有常量(色值表见 §6/T0,已冻结);组件规格是否立条款入 §7 走反哺点(§5)。 -- 🔴 **全局纹理过滤不动**:本批不设置 `rendering/textures/canvas_textures/default_texture_filter`,那是 06 第一层第三条待办的地盘。生成的小位图各自单点设邻近采样(沿用 `ui_kit.gd:214` load_tex 同款做法),不等全局批。 -- 🔴 **旧实现同批删除**(2026-10-11 用户明令):`tooltip_theme()` 函数与 `ui_assembler.gd:105` 挂载行、`styled_slider()` 的样式词条段必须随批退役,禁止新旧并存。 - -## 4. 范围边界 - -**做**:VScrollBar / HScrollBar / ScrollContainer(panel) / HSlider / VSlider / TooltipPanel / TooltipLabel / LineEdit / SpinBox / HSeparator / VSeparator 的默认词条;CheckBox / CheckButton / OptionButton **及其弹层 PopupMenu** 预盖(用户 2026-10-13 裁预盖+grilling Q2 裁弹层并入——下拉框不盖弹层=展开后仍默认灰,预盖目的落空);音量滑轨两段对比度重配(销号第三层①)。 - -**不做**(去向): -- 按钮五态/焦点态 → 06 第一层第二条「UI 按钮状态矩阵缺档」(未裁点随其卡片)。 -- 全局邻近采样 → 06 第一层第三条「全局纹理过滤未设为邻近采样」。 -- RichTextLabel 正文字色不动(现状深底可读,未在登记清单;只随全局词条被动接管其滚动条)。 -- 营地滚动条观感之外的营地布局问题(第三层③留白失衡)→ 06 第三层条目。 - -## 5. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| [06-待办清单](../gdd/06-待办清单.md) | ①「UI 全局主题资源缺失」条;②「UI 元素细节修」条之①(滑轨两段难辨) | 两条随批收口销号(事项解决即移除);「UI 元素细节修」余下②③④保留。**机械面,随批** | -| [08-Alpha版本标准](../gdd/08-Alpha版本标准.md) | 三·界面表「UI 全局主题资源(引擎原生控件接管皮肤)」行状态=待做 | 入库后回填。**机械面,随批**。**实现前注意**:该文件**至今仍是 git 未跟踪文件**(并行会话 active.md 484 号条目明确「untracked 禁碰留置」——因其内含「暂停」字样,改名批故意不碰);本批改它前须先确认 git 状态,并在 worktree 内手工搬运(未跟踪文件不会随 worktree 自动出现) | -| [07-体验验证清单](../gdd/07-体验验证清单.md) | 本批新增目检观测项 | 随批登记:滚动条/滑轨/气泡/输入件全屏巡检+音量滑轨拖到中点两段一眼可辨+预盖件无实役(登记注记)。**机械面,随批**(登记不阻塞) | -| active.md | 批收口快照惯例 | 收口批登记。**机械面,随批** | -| roadmap | 本批尚未编入迭代行 | 编入时随编入批更新;本卡不动 roadmap | -| [美术圣经](../art/art-bible.md) §7 | 滚动条/滑轨/气泡/输入件组件规格目前无条款;本批实现色值=临时权威 | **反哺点**:迭代实现报告列「上述组件规格是否立条款入 §7」+「第三层①诊断描述与代码面不符」两点待用户裁决,另批落文。**设计权威文档,不随批更新** | - -## 6. 任务卡 - -### T0 主题资源与词条(≈0.5d) - -1. 新建 `game/assets/theme/main_theme.tres`;**色值溯源表放同目录 `game/assets/theme/README.md`**(每个字面量 ↔ ui_kit 常量名;.tres 内联注释语法不赌,不写在资源文件里)。 -2. 一次性生成脚本(Python,落 `tools/`,与既有生成脚本同惯例)产出小位图(滚动条柄 3 态、滑轨柄 3 态、SpinBox 箭头、勾选框空框/选中)至 `game/assets/art/ui/gen/`,纯色/几何、各自邻近采样,头注释注明生成脚本出处、可重跑。**新增 PNG 须触发一次资源导入(headless `--import` 或随冒烟首跑自导),`.import` 侧车随批入库**(worktree 缓存坑在册)。 -3. 词条落位(**色值已冻结**,grilling Q3 裁;后续观感微调走 §8 L2 通道): - -| 词条 | 冻结值 | 出处 | -|---|---|---| -| 滚动条槽 scroll | BG_OVERLAY #362B20 α0.35,直角 | BG_OVERLAY | -| 滚动条柄(常/悬/按) | PANEL_BORDER #786E58 / STONE_FAINT #8C7C64 / STONE_DEEP #554D41,约 8×8 方形 | 三常量 | -| 滑轨槽 slider | 暖石 #B8A582+PANEL_BORDER 边(承现值);**携带 (0,6,0,6) content margins**(槽轨 12px 实高引擎检查点,`ui_kit.gd:741` 在案) | styled_slider 现值 | -| 已填段 grabber_area(+highlight) | **BG_ROOT #3A2E22(换色——对槽 ≈5.5:1,顺手修③层①)**,同 margins | BG_ROOT | -| 滑轨柄(常/悬/按) | **CANDLE #F6C667 方柄+PANEL_BORDER 描边(换——弃引擎灰圆)**/ 提亮档 / GOLD_DEEP #B07A14 | CANDLE 等 | -| TooltipPanel / TooltipLabel | 承 `tooltip_theme()` 现值原样迁入(深底 0.96+边 #5A5044+WARM 字 14) | ui_kit.gd:757-760 | -| LineEdit normal | PANEL_DATA #E9D9B8 底+PANEL_BORDER 边+INK 字;**占位文字色=STONE_DEEP #554D41**(对底 ≈6:1;种子框用 placeholder,漏配会显示引擎灰) | PANEL_DATA 等 | -| SpinBox | 底同 LineEdit;箭头=生成 INK 色三角 | 同上 | -| HSeparator/VSeparator | PANEL_BORDER α0.6 单线 | PANEL_BORDER | -| CheckBox/CheckButton | 空框=PANEL_DATA+PANEL_BORDER 14×14;选中=INK 实心/对勾(生成图)。**⚠ 两者图标词条名不同**:CheckBox 用 `checked`/`unchecked`(+`_disabled` 两态),CheckButton 用 `on`/`off`(+`_disabled`),不可共用一套名,否则 CheckButton 预盖静默空转 | 同上 | -| OptionButton | normal/hover/pressed=button_stone 九宫格(与手盖按钮同观感,8px 边距同参)+INK 字 | 既有贴图与常量 | -| PopupMenu(OptionButton 弹层) | panel=PANEL_DATA+PANEL_BORDER;条目 hover=GOLD_LIT #E6BE5A 底+INK_ON_GOLD #3C2C14 字;字色 INK、字号 16 | 四常量(候选高亮语义沿用 GOLD_LIT 既有分工) | - -4. `project.godot` 挂 `gui/theme/custom="res://assets/theme/main_theme.tres"`。 - - 🔴 **同时在新主题内部显式设 `default_font`=`res://assets/fonts/ui_font_fusion_pixel_zh_hans.ttf`**(与 `project.godot` 既有 `theme/custom_font` 指向**同一个文件**)。理由:挂上项目主题后,原有的 `custom_font` 是否仍然生效,在 Godot 4.7 上无权威依据可证实(官方文档对应页缺失,本批不跑测试);而失效后果是**全游戏中文字形缺失**,直接违反 HUD框架可访问性基线「中文字体随包内置并设为默认」。指向同一文件=观感零变化,纯粹消除不确定性。**不设 `default_font_size`**——全站字号走 `UiKit.FS_*` 逐实例 override,设全局字号会顶掉既有六档。验收见 §7 V6。 - -### T1 换代退役与消费方收口(≈0.25d) - -1. 删 `ui_kit.gd` `tooltip_theme()` 函数与 `_tip_theme` 缓存、`styled_slider()` 的两个 stylebox 段(几何/量程职责并回两处消费方或删函数,两消费方仅 settings_overlay 与 debug_overlay `_slider_row`)。 -2. 删 `ui_assembler.gd:105` 挂载行及其注释行引用。 -3. `debug_overlay._slider_row` 改走与设置屏一致的构建方式(消双轨)。 - -### T2 断言、文档同步闸与全闸(≈0.25d) - -1. 冒烟新增主题词条断言(见 §7)。 -2. 文档同步闸:§5 机械面四件更新完毕+反哺点两条列明。 -3. 批末四闸全绿合并。 - -**估时合计 0.5–1d**。切分预案:若生成脚本依赖受阻,预案=手写最小 PNG(工具脚本本机跑一次),不动估时软盒。 - -## 7. 验证闸(逐需求点验收清单) - -**能力验证(自动化;谁验=批末四闸闸机,全绿才合并)**——冒烟新增断言: -- V1 挂载:`ThemeDB.get_project_theme()` 非空且类型集覆盖 §4「做」清单全部类型**(含 PopupMenu)**(`has_stylebox/has_color/has_icon/has_font_size` 抽查关键词条)。 -- V2 滑轨修复:grabber_area 与 slider 词条色值断言(冻结值 BG_ROOT 对 #B8A582 ≈5.5:1)。 -- V3 预盖件:临时实例化 CheckBox 读 `get_theme_icon("checked")` 非空+PopupMenu 词条存在(无实役控件的运行时证词)。 -- V4 换代退役:`UiKit.styled_slider` / `tooltip_theme` 引用全库零残留(删函数后编译期即闸)+ `ui_assembler` 无 `overlay.theme` 残留。 -- V5 回归:冒烟全绿(**基线以开工日实测为准**;最近记录 **938/0**——v1.2 订正,原写 864/0 系迭代 21 时代旧数)——按钮/面板逐实例 override 优先级保证存量观感零变化,存量断言即回归网。 -- **V6 中文字体防御**(v1.2 新增,对应 §6 T0 第 4 步):`ThemeDB.get_project_theme()` 的 `default_font` 非空,且实例化一个 Label 后取其实际字体非空——**防止项目主题顶掉 `custom_font` 导致中文字形缺失**(HUD框架可访问性基线硬条款,失效即全站豆腐块)。可直接并入 V1 断言段同批实现。 - -**正常流程体验(用户目检;谁验=用户自排,登记 07 不阻塞)**:营地滚动条、战斗日志滚动条、设置音量滑轨拖动全程、全屏悬停气泡、调试浮窗输入件、分隔线——巡检无引擎默认灰残留;音量滑轨拖到中点两段一眼可辨。 - -**两个专项观察点(v1.2 增补,属 L2 观感,不阻塞,记录即继续)**: -1. **滑轨柄是否抢焦点**——柄色取 CANDLE #F6C667,而 §7.2「琥珀双岗注记」把烛光黄定义为主操作色(主按钮/候选节点/钥石徽章底)。滑轨柄并非主操作,用它有违反 §3.4 焦点预算的嫌疑。目检判据:**设置屏上滑轨是否比「关闭」按钮还抢眼**;若是,走 §8 L2 通道微调(候选降档:STONE 灰石系)。色值已冻结,目检前不改。 -2. **滚动条槽是否看得见**——槽取 BG_OVERLAY #362B20 α0.35,叠在 BG_ROOT #3A2E22 背景上明度极接近,有可能根本看不出槽的存在。目检判据:**滚得动的内容里,能否一眼看出滚动条在哪**;若否,同上走 L2 微调(候选:提高不透明度或改取 SLOT_BACKDROP #3E362C)。 - -## 8. 异常分级 - -- L1(自救):手写 .tres 语法错导致加载失败/词条名拼错(Godot 4 词条名以引擎文档为准,拼写错=静默回退默认)——冒烟 V1 立红即修。 -- L2(记录继续):生成位图或冻结色值实机观感不佳(边缘锯齿/尺寸手感/对比不适)——登记 07 目检项,值微调随批内迭代或后批微调。 -- L3(停机呈报):触碰 §3 任一红线;或改全局设置后发现存量界面观感意外变化(说明有未盘点到的默认皮肤依赖面)——先停,实机截图呈报再动。 - -## 9. 代拍板白名单(超清单必呈报) - -1. 主题文件路径=`game/assets/theme/main_theme.tres`;溯源表=同目录 `README.md`;生成位图目录=`game/assets/art/ui/gen/`。 -2. 生成位图的尺寸/圆角细节(8×8 柄、14×14 勾选框等微观值)与生成脚本(Python,落 `tools/`)的文件名与参数形态。 -3. `styled_slider` 退役形态(删函数、几何内联两消费方)——两处消费方为上限,超出的新消费方走主题默认。 -4. 词条内字号沿用既有档位(tooltip 14 / 输入件与弹层 16),不新设字号档。 -5. focus 族词条零定义已升 §3 红线,不在白名单内;其余未列尽的同族微观词条(如 SpinBox 内嵌 LineEdit 继承面)按「值取 §6 冻结表同源常量」处理。 - -## 10. 待裁点 - -**零待裁点,卡片成立,开工门=U0**。裁点全部闭合: -- 三个范围裁点(2026-10-13 用户裁):载体=.tres 主题文件(乙案,代价=色值字面量与 ui_kit 常量双处存在,缓解=README 溯源表);未在役控件预盖;滑轨两段对比度顺手修(并销号第三层细节修①)。 -- 三个 grilling 裁点(2026-10-13 用户裁「按推荐」):①focus 族词条全不定义(统一归按钮批,弃 LineEdit focus 豁免);②PopupMenu 弹层并入预盖;③色值卡审即冻结(L2 通道兜微调)。 -- 自审事实修正(无涉裁决,已随 v1.1 落文):V5 基线数过期、PNG 导入流程补写、LineEdit 占位文字色补入、.tres 溯源表改 README、status_panel.gd 改名换代重验。 - -后续流程:编入迭代(用户点名)→ U0 开工(/iter 四检)→ 实现批(worktree+四闸)→ 收口(§5 同步闸+06 销号+反哺点)。 diff --git a/design/research/需求卡片-专长实装批-2026-10-11.md b/design/research/需求卡片-专长实装批-2026-10-11.md deleted file mode 100644 index 2d926218..00000000 --- a/design/research/需求卡片-专长实装批-2026-10-11.md +++ /dev/null @@ -1,166 +0,0 @@ -# 需求卡片:专长实装批(奇物) - -> 2026-10-11 立卡(用户发令写卡;同日用户纠正=本卡范围仅奇物线,秘宝实装系另批冻结条目不并入——原「专长秘宝实装批」错名撤销重立)。设计前置检查:奇物.md v3.15(设计+裁定+命名清零),满足设计定稿前置。本卡承接 [06-待办清单]「秘宝体系实现重构落地批」条目 **③专长侧联动**(拆出独立成卡)+ 本会话奇物线新增面(Boss 兑付换代/凭证五件/池结构案 D 实装/生命比例扩签前置)。 -> v1.1(2026-10-11):回补逐需求点验收清单(逻辑验收方法论批,用户令)。 - -## 1. 目标与完成定义 - -把奇物新设计从文档落进代码与数据表:新专长 27 件替换旧 27 件、资源凭证件表(新 5+留任 2)替换旧四项、池结构按案 D 换代(曝光槽 2+1+令牌语义+概率上限解耦)、Boss 通关兑付换代为专长三选一。 - -**完成定义**:①新 27 件专长全部可触发、行为与订阅行声明一致(MC 对拍留证);②池结构与四级档位按案 D 运转;③Boss 通关=回血+专长三选一;④旧 27 件数据行清零、两迁出行自 treasure_items 删除;⑤冒烟全绿+run_all 全绿+换代后 MC 新基线落档。 - -## 2. 现状事实(代码级,开工自行复核) - -1. `game/data/tables/feats.tres` = 旧 27 件行(feat_id/display_name/rarity/triggers 各 27 实证),订阅行 schema(on/when/do)在役。 -2. `game/core/effect_engine.gd:20-44` 封闭词表:EVENTS 16 / MINE_EVENTS 7 / EFFECT_KINDS 24 / FACTS 9 / OPS 10;`:106` 加载期 assert 出域即拒。 -3. `game/data/tables/adventure.tres:8-22` 旧三档配额结构(curio_quota_attack_common 18 等);`:31-34` 凭证四参(chance 20/quota 2/limit 1/pity 5);`adventure_table.gd:22` 注释仍写旧资源四项。 -4. `game/core/adventure_runner.gd:44` Boss 通关兑付=**提升三选一**(信号注释「非末关通关恰一次」)+部分回血——与目标设计(专长三选一+回血)不符,属换代非新增;`:411-440` `_apply_curio_pick`:kind="relic"→`_feats` 持有集、refresh→`_attune_refresh_x`、属性类走 CURIO_APPLY_ROUTES 声明式路由(新加算类零代码);`:93-95/:819-826` 凭证保底/限购/出现三计数器在役;`:218-219` 断点扩列先例(feat_ticket_pity/sold)。 -5. `game/data/tables/treasure_items.tres:76,111` 淬毒刃纹/封印爆裂(原标中殉爆)两行在役待迁(迁出即删)。 -6. 冒烟基线 840 项 0 失败(design/qa/iter19-card0 出口报告);MC 链=adventure_monte_carlo.gd+analyze_playtest.py 聚合。 -7. 06 在册:秘宝实装批条目(③专长侧联动由本卡承载)、生命比例扩签前置条、旧 MC 行为锚作废重锚归数值批条。 -8. 秘宝充能账在役(attunement.gd)——凭证件「同调电池」的跨层写入目标账已存在,不依赖秘宝实装批。〔**2026-10-18 注**:同调电池经用户裁**删除**,本条前提对后续批不再成立;`attune_charges` 账本本身作为秘宝基础设施保留〕 - -## 3. 设计契约(违反即返工;🔴 触碰=L3 停机呈报) - -1. 🔴 效果引擎四词表封闭——扩项只走本卡 T1 扩签任务,禁绕过加载 assert 运行时直加。 -2. 🔴 层级纪律:奇物不入同调位、秘宝不入当局随机渠道(adventure_runner.gd:85 注释承载面)。 -3. 🔴 棋盘事实不可变(秘宝 v2.4 承重契约):危险格位置/邻接数字不得移除增改。 -4. 配额是结构锚:令牌数与档配额改动须用户重裁(TP0 纪律)——本批换代系已裁换代,换代后的新配额数字如需偏离 GDD 占位须呈报。 -5. 排雷玩法零特判:对侧代码零为奇物而写的分支。 -6. 对外命名纪律(术语表):无「雷/插旗」字面;插旗=封印、危险格=陷阱/巢穴(风味层)。 -7. 数值纪律:全部 provisional 归调参批;占位值不得超 GDD 结构锚描述的形态。 - -## 4. 范围边界 - -做:T0-T10 所列(专长 27 件换代/凭证件/Boss 兑付换代/池结构案 D/两迁出行删除/存档与 MC 适配)。 -不做:秘宝 15 件实装与解锁条件表(秘宝实装批另批冻结)、秘宝命名与逐件解锁分配、魔法提灯拆线与卡④接线拆除(归秘宝批)、锻造工坊实装(另批)、配额正式数值扫描(归数值批)、game/ 内 UI 文案旧词清扫的与实装无关部分。 -不收件去向:秘宝面归秘宝实装批、命名二轮/数值批/锻造批均已在 06 在册,本批不新增登记面。 - -## 5. 关联文档同步面(同步闸 v2) - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| registry entities.yaml | curio/feat/adventure/relics 行、kind 词族 | **机械面**:随批更新,合并前完毕 | -| roadmap.md | 迭代行(编入后)/本批进度 | **机械面**:随批更新 | -| game/README.md | 数据表清单与批节 | **机械面**:随批更新 | -| 06-待办清单 | 本批条目状态/生命比例前置条/秘宝实装批③拆出注记 | **机械面**:随批更新(开工=已开工,收口=已入库销号) | -| 奇物.md | 实装后行为与数值反馈 | 反哺点:迭代实现报告列明,用户裁决后另批落文 | -| 冒险结构.md | 「关卡大奖励」节陈述(通关两层兑付→回血+专长三选一) | 反哺点:同上 | -| 难度曲线与Boss.md | 配额投放读数 | 反哺点:同上 | -| 02-系统清单.md | 奇物行状态 | 反哺点:同上 | - -## 6. 任务卡 - -| 卡 | 内容 | 估时 | -|---|---|---| -| T0 | 开工三查+件级跨事件状态账核实(攒层/计数类≈8 件的账本承载)+magic_vs_magic 交叉核对(决定锻造批③作废与否)+解耦三案实装侧选型(登记三案,依代码事实定,预期案②令牌池+提前退役计数器) | 0.5d | -| T1 | 效果引擎词表扩签:9 条新事实+生命比例+停手挂点+新效果类型(heal/直伤/AC 状态/减伤等按 27 件声明清单)+加载校验同步 | 1.5-2d | -| T2 | 池结构案 D 实装:令牌语义+曝光槽 2+1+子池回退+概率上限解耦落地+adventure.tres 四级配额表重构(70/25/3→四级) | 1.5-2d | -| T3 | 专长数据行换代:feats.tres 旧 27 行删除+新 27 行订阅行重建(含淬毒刃纹/封印爆裂自 treasure_items 迁入) | 1.5d | -| T4 | 凭证件实装:新 5 件数据行与兑付路由(刷新券先行 F-1 修复/储备金袋 RAP/时沙 AP/完美保险/同调电池跨层写充能账〔在役〕)+留任 2 件改名迁移+行动点上限归属性轴 | 1.5-2d | -| T5 | Boss 兑付面换代:通关提升三选一→专长三选一+回血(专长候选按档配比加权抽取;呈现层复用;奖励节点/商店不动)——Q1 已裁换代 | 1-1.5d | -| T6 | 件级跨事件状态账:攒层/计数类件账本承载(T0 结论落地) | 1d | -| T7 | 断点存档扩容:已拿计数器/新账面/池状态进断点附随件+存档键白名单登记 | 0.5-1d | -| T8 | MC 对账适配+基线重投:池换代行为变更后新锚落档(06 旧行为锚作废条联动) | 0.5-1d | -| T9 | 迁出收尾:treasure_items 两迁出行删除(venom_edge/flag_burst——迁出即删) | 0.25d | -| T10 | 空配置验收闸(三选一池空兜底/商店空货架)+**文档同步闸**(机械面全绿+反哺点逐条列明) | 0.5d | - -合计 ≈10-12d——**单迭代交付**(2026-10-11 用户裁 Q3=一个迭代跑完全量,不切多迭代):内部按三段顺序推进——A=T0-T2(引擎与池)、B=T3-T4+T6(专长内容线,做完即可玩)、C=T5+T7-T10(兑付与存档收尾),段末各设一次汇报停点;估时略超一周基准约 0.5-1 周,如实标注。 - -## 7. 验证闸 - -### 7.1 闸口径 - -- **测试方式两分法**:能力验证=调试接口直改游戏数据——经现役调试门控(DebugOverlay/DS_DEBUG)或在测试代码内直改数据表行、置计数器、直调核心写口构造状态,不经 UI、不走正常资源积累流程;体验验证=用户目检,观测项登记 07-体验验证清单(机械面随批)。本批以能力验证为主,用户目检面=Boss 专长三选一呈现、曝光槽三卡观感、卡面文案与稀有度档位显示(登记 07)。 -- **轻闸**=冒烟全绿(基线 840,换代后数字随断言增减但 0 失败)+行为探针;**重闸**=run_all 全绿+MC 新基线对拍+断点回放(新旧档兼容口径:旧档按 06 冻结令=破坏性废弃不迁移,开发阶段无存量玩家)+全仓旧件残留引用静态核查(V13/V14 出口条件);两入口铁规不破(自动验证只走 smoke_all.gd 与 tests/run_all 两个执行口,禁另开执行口);批末四闸(冒烟+单元测试+场景探针+改前改后读数对拍)全绿才合并;批末人闸=实机目检。 - -### 7.2 逐需求点验收清单 - -> 断言失败消息末尾带〔专长批 Vn〕编号尾缀,断言与清单互查靠 grep(code-conventions.md §3.5 第 2 条)。执行载体五选一:单元测试(tests/run_all)/冒烟断言(smoke_all.gd 对应场景段)/场景探针(smoke/ 下 *_probe)/MC 同种子对拍/人工核对(仅限无法自动化的纪律类需求点)。 - -| 编号 | 需求点/契约指针 | 测什么(具体断言或行为) | 怎么测(载体+注入粒度) | 谁验 | 任务卡 | -|---|---|---|---|---|---| -| V1 | 契约 1(四词表封闭) | T1 扩签后四词表仍封闭:新事件/新效果类型/新事实/新算子在册(effect_engine.gd:20-46),出域值全部被拒——加载期 validate_trigger_row 报错(effect_engine.gd:272-314)、运行期 dispatch fail-fast(effect_engine.gd:148) | 冒烟+单元。注入=测试直构订阅行字典:合法新词行过 validate 零违例;构造出域 on/fact/op/kind 各一行,断言加载报错与 dispatch 抛错 | 自动闸 | T1 | -| V2 | §1①④(新专长全量替换旧 27 件) | feats.tres 加载零违例、行数=落表实数(件数口径见待裁点 4:基础 27 件+迁入 2 件);每件 relic 令牌入牌库;旧 27 件 feat_id(清单=当前 feats.tres:7-545 行:arcane_ember…magma_body)全仓 grep 零残留 | 冒烟+静态核查。注入=直读表行与 _curio_deck 构成;残留面=静态 grep 旧 feat_id 清单 | 自动闸 | T3 | -| V3 | §1①(行为与订阅行声明一致) | 27+2 件逐件按附表 A 断言:正常效果命中、边界不触发、反例不发生 | 冒烟/单元。注入=测试构造持有集数组直调 EffectEngine.rebuild+dispatch(命中面直测),发射点行为段沿用现役 _fx_emit 直测法(smoke_all.gd:760-917 同构) | 自动闸 | T3(账本件联动 T6;附属表=7.3) | -| V4 | §1①(攒层/计数类件账本承载,T0 结论落地) | 攒层/计数类件(安全帽/疼痛记忆/连环陷阱/破封一击/血税等)跨事件计数:置计数→走事件路径→断计数值与清零点(round_start 重置/用后清零) | 单元。注入=直调 EffectEngine.counter_add/counter_spend 写口(effect_engine.gd:167-181)+dispatch 构造事件 | 自动闸 | T6 | -| V5 | §1②(四级档位案D 配额表);契约 4 | adventure.tres 四级配额结构锚:validate 零违例、四档各档张数=结构锚值、deck_total=新总量;占位形态在 GDD 结构锚描述内 | 冒烟。注入=直读表行;旧三档断言(smoke_all.gd:219-222 TIER_QUOTAS 三档锚+deck_total==98)同批摘除换代 | 自动闸 | T2 | -| V6 | §1②(令牌语义) | 令牌=出现次数上限三态:拿了消耗(选中摘牌单点 adventure_runner.gd:448-457)、没拿回池(未选候选再次可现)、只刷出不计次数 | 冒烟。注入=直改 _curio_deck 构成+直调 pick_curio | 自动闸 | T2 | -| V7 | §1②(曝光槽 2+1+子池回退) | 三选一呈现=2 格全池+1 格优秀档以上子池;高档子池空该格回退全池;池空走同族兜底;凭证不进子池(独立计数体系) | 冒烟。注入=直改 _curio_deck 档位构成(清空高档构造回退、清空全池构造兜底)后直调候选抽签面 | 自动闸 | T2 | -| V8 | §1②(概率与上限解耦) | 每成员概率位与已拿上限 cap 两属性独立可设:改 cap 不动概率、改概率不动 cap;cap 只在拿了才计、刷出不计 | 冒烟/单元。注入=直改表行 cap 字段+直调兑付写口计数对读 | 自动闸 | T2 | -| V9 | §1(凭证五件路由) | 新 5 件兑付路由逐件断言(附表 B):刷新券→刷新存量账、储备金袋→RAP、时沙→当前 AP 池、完美保险→完美资格标记〔**2026-10-18 改归专长**,本路由作废〕、同调电池→attune_charges 充能账〔**2026-10-18 删除**,本路由作废〕(adventure_runner.gd:79 账本在役,玩家选件交互面从未接线) | 冒烟+单元。注入=直调 _apply_curio_pick 各 kind(adventure_runner.gd:411-444 路由面) | 自动闸 | T4(附属表=7.4) | -| V10 | §1(留任 2 件迁移+AP 上限归属性轴) | 小金币袋/应急口粮改名迁移后路由与值不变(GP 钱包/当即回血);行动点上限自资源配额迁入属性轴(bonus 四轴 ap 落点 adventure_runner.gd:60 既有承载) | 冒烟。注入=直调 _apply_curio_pick+读加算区 | 自动闸 | T4 | -| V11 | §1③(Boss 通关=回血+专长三选一) | 非末关通关恰一次发出 curio_choice_presented(adventure_runner.gd:44):载荷含回血读数、候选全为专长;末关通关不发;奖励节点与商店兑付面零变化;旧提升三选一通道摘除后候选零非专长令牌混入 | 冒烟。注入=auto_player 驱动至通关停点+直读停点载荷 | 自动闸 | T5 | -| V12 | 奇物.md v3.1 档配比(契约 7 形态面) | Boss 三选一候选按档配比/加权抽取:同种子批量抽样各档出现频率出带(区间带,带=声明配比±容差) | MC 同种子对拍。注入=直调候选抽取面批量取样 | 自动闸 | T5 | -| V13 | §1④(两迁出行删除+全仓零残留) | treasure_items.tres 无 venom_edge/flag_burst 行(现役 treasure_items.tres:76-109/:111-127);全仓(game/ 内 .gd/.tres/.tscn)两 item_id grep 零残留;连带死面清理:battle_orchestrator.gd:919 attune_flag_burst 硬编码分支、treasure_item_table.gd:44/:52 venom_rider/flag_burst 效果类型词 | 静态核查+冒烟(删除后表加载零违例、同调目录收窄不缺行) | 自动闸 | T9 | -| V14 | §1④⑤(旧验证约束同生死,code-conventions.md §3.5 第 5 条) | 只验证旧专长/旧池/旧凭证结构的断言同批摘除或换代,摘除后冒烟仍全绿且新断言接管。本卡实查在案的摘除/换代清单:smoke_all.gd:639-650(旧 27 件入池 125/rarest 6)、:651(流派扫雷铁律 validate 语义——随 T1 加载校验同步按新框架落法,处置在实现报告留痕)、:654-674(FeatsEngine.tiers_for/is_formed 流派档位断言——流派框架 v2.9 已废)、:675-697(临时表夹具行随新行 schema 换代;渠道白名单断言本体保留)、:699-734(门票 A5/A6——凭证四参换代后按新表值重锚)、:740-754(relic 兑付/断点往返主语换代)、:760-917(七流派订阅面全段以旧 27 件为主语——含 :766-768 魔网织者 magic_vs_magic 与湛蓝誓约 magic_vs_heavy 的 clamp_check 断言、:805-807 猎手刺剑 pierce_vs_light 断言、:878 奥术余烬文案主语、:880-893 深挖钻头付费开掘回归)、:4176-4186(终局池读数六键三档聚合)、:4646-4658(同调装配 venom_edge/flag_burst 主语改留任他件)、:4764(unlock_item("venom_edge") 改他件)、adventure_monte_carlo.gd:52-57(MC formed 画像 14 旧件 seed_ids 随 T8 重锚) | 冒烟全绿出口+静态 grep(旧 id 清单在冒烟与单元段零残留) | 自动闸 | T2/T3/T5/T8/T9 | -| V15 | §1⑤(MC 新基线落档) | 池与兑付换代后 MC 同种子对拍:改前改后读数差异全部可归因(池换代/兑付换代/加权抽取),新行为锚落档;同种子重放逐位复现 | MC 同种子对拍(adventure_monte_carlo.gd 换代画像) | 自动闸 | T8 | -| V16 | §1(断点扩容) | 已拿计数器/新账面(攒层/血税等)/池状态(案D 新结构)入断点附随件且存档键白名单登记;同种子断点回放续接原时间线(计数恢复一致——breakpoint_resume_test P5 同构);feat_ticket_pity/sold 扩列先例同法(adventure_runner.gd:218-219) | 重放+快照比对。注入=构造断点快照直调 resume_adventure | 自动闸 | T7 | -| V17 | T10 空配置验收闸 | 三选一池空兜底/商店空货架——验证内容 T10 卡已写,本条为清单指针不重复展开 | 按 T10 卡执行 | 自动闸 | T10 | -| V18 | 契约 2(层级纪律) | 奇物不入同调位:同调目录只读 treasure_items(venom_edge/flag_burst 迁出后目录自然收窄,feats 表行零入目录);秘宝不入当局随机渠道:_curio_deck 零秘宝 item_id 种 | 冒烟。注入=直读同调目录投影与 _curio_deck kind 全集 | 自动闸 | T3/T9 | -| V19 | 契约 3(棋盘事实不可变) | 装配任意新专长组合(含全体件)开局,同种子棋盘快照(危险格位置/邻接数字)与零持有逐位一致;新件订阅行零棋盘改写类效果(净化工兵退役后 rewrite_board 效果类型去留随 T1 落法) | 重放+快照比对。注入=构造持有集全量 rebuild 后跑棋盘生成 | 自动闸 | T3 | -| V20 | 契约 5(排雷玩法零特判) | 棋盘生成/排雷结算侧代码无按奇物件名或 feat_id 写的分支;效果接入全部经效果引擎订阅面 | 人工核对——静态 grep 侧代码 feat/件名引用清单逐条过目,逐条注明属效果引擎消费面或误特判 | 用户(人工核对) | T3 | -| V21 | 契约 6(对外命名纪律) | feats.tres 全部 display_name/desc 字段无「雷/插旗」字面;插旗对外=封印、危险格对外风味=陷阱/巢穴;玩家可见文案零分类名(奇物.md 验收标准 5 同源) | 人工核对——静态 grep 禁字清单初筛+逐件文案过目(初筛可入冒烟静态段,裁决以人工过目为准) | 用户(人工核对) | T3 | -| V22 | 契约 7(数值纪律) | 全部 provisional 占位值不超 GDD 结构锚形态(陷阱爆发倍率>1、血蜜比值<1、石肤上限 M 在册、背水生命比例阈值等) | 人工核对——表值逐项对照奇物.md 件表「账」列与结构锚描述 | 用户(人工核对) | T3/T4 | -| V23 | 契约 4(配额结构锚重裁纪律) | 换代后新配额数字与已裁裁决记录一致;如偏离 GDD 结构锚须有呈报记录 | 人工核对——对照本卡待裁点裁决与奇物.md 池结构节核对四级配额数字 | 用户(人工核对) | T2 | - -### 7.3 附表 A:专长 27 件+迁入 2 件逐件表(V3 附属表;断言要点/边界/反例三列即 V3 每件的断言内容) - -| 件名 | 正常效果(断言要点) | 边界 | 反例(不该发生什么) | -|---|---|---|---| -| 双管镐 | on 付费挖格:每第 2 次返 1 AP(计数器取模判满) | 免费开格不计数;未满 2 次不返 | 不把免费开格计入;一次不多返 AP | -| 地质学家 | on 开格:每首开一种新类型资源格集 1 点,满 4 种→揭示 1 格 | 同类型重复首开不叠点;只揭真格 | 类型集不满就揭示;把非资源格计入类型集 | -| 安全帽 | on 开安全格攒 1 层;on 踩雷耗层每层减 1 伤害 | 攒层一次清零;零层踩雷全额扣血 | 踩雷后留余层;减伤超过当次伤害(负伤害/免伤) | -| 跳格采掘 | on 挖开空白 0 格(连锁展开)攒 1 点,3 点→任意揭示 1 格 | 普通开格不计点;未满 3 点不触发 | 揭示非真格;跳过计数直接揭示 | -| 爆破会计 | on 轮末:本轮挖格花费 AP≥5 → +1 GP | 花费不足不触发;每轮末判一次 | 按开格格数计而非花费;跨轮结转 | -| 边陲矿工 | on 挖开棋盘边缘格:产出 +1 | 非边缘格零产出 | 中心格触发 | -| 封印回响 | on 标中计数;on 轮末计数≥2 → 返 1 AP(下轮) | 计数不足不返;触发后清零 | 标中即时返 AP;占用既有兑付位 | -| 示警烟火 | on 标中:揭示该危险格周围 3×3 的资源类型(不揭危险格与安全格) | 只揭类型不揭安危;范围不出 3×3 | 揭示危险格/安全格位置;越出 3×3 | -| 封印匠 | on 标中每第 3 次 → 该危险格中立移除 | 第 1/2 次不移除;频率闸死 | 连续移除多格;移除非标中格 | -| 封印桩 | on 标中:本轮 AC +N | 本轮内有效、下轮清零 | 跨轮结转;未标中时生效 | -| 疼痛记忆 | on 踩雷攒 1 层;下场战斗攻击附加层值伤害,用后清零 | 层跨节点延续;用后清零 | 当轮即时出伤;层值不消耗可反复用 | -| 保险丝 | on 受伤单次 ≥5 攒 1 点,2 点→护盾 1 层 | 单次 <5 不攒;攒满 2 点才出盾 | 多次小额伤害累计成大额;1 点即出盾 | -| 见血开窍 | on 踩雷:揭示 1 格 | 每颗雷一次 | 揭示非真格;附带其他收益 | -| 陷阱本能 | on 踩雷:本轮攻击 +N(走攻击面板乘区) | 当轮即效、不结转 | 走必中附加通道(旧 rider 形态);跨轮生效 | -| 连环陷阱 | on 同轮第 2 颗及以后踩雷:每颗额外 +1 层(疼痛记忆同账) | 首颗不加层;同轮判定 | 给自身单独收益;跨轮累计 | -| 陷阱爆发 | on 踩雷:全体存活敌受雷伤×倍率直伤 | 倍率>1 结构锚;只伤敌 | 波及己方;不按倍率直伤 | -| 血蜜 | on 踩雷:回复 N 生命 | 比值<1 结构锚(净血账期望为负) | 回复量≥雷伤(防「见雷就踩」退化);非踩雷时回复 | -| 石肤 | on 受伤:AC +1(本场累计,上限 M) | 本场域、跨战重置;达上限不再涨 | 跨战累计;无上限成长 | -| 背水 | when 生命 ≤50%:受伤额外 −N | 过半血不减 | 无条件减伤;影响攻击面 | -| 破封一击 | on 挖开有旗的危险格:额外 +1 层(疼痛记忆同账) | 挂棋盘事实(挖开当时有旗),非玩家意图判定 | 对无旗危险格/安全格触发;按玩家意图判定 | -| 弃图兑换 | on 停手:剩余 AP≥3 → 剩余 AP 1:1 折为下轮伤害 | 不足 3 不触发;单向无环 | 折算进 AP/GP 等其他资源;形成兑换环 | -| 一滴不剩 | on 轮始:上轮 AP 耗尽 → +1 AP | 上轮有余不触发 | 憋 AP 未耗尽也发 | -| 收盘 | on 轮末:本轮开格 ≥8 → +1 GP | 不足不触发;每轮末判一次 | 按挖格花费计(与爆破会计混账);一轮连发 | -| 斩首学者 | on 击杀:揭示 1 格 | 每杀一次 | 揭示非真格;非击杀触发 | -| 处刑台 | on 敌血量阈值 ≤30%:主角对其伤害 +N | 阈值外不加;只对该敌 | 满血敌加成;波及其他敌 | -| 战地包扎 | on 战斗胜利:回复 N 生命 | 战败不回复;封顶生效上限 | 绑踩雷条件;超上限回复 | -| 血税 | 本局踩雷 −2 最大生命;标中 +1 攻击 | 双向同局账本;冒险收束清零 | 单向生效(只罚或只赏);跨冒险残留 | -| 淬毒刃纹(迁入) | on attack_commit when 克制(advantageous):追加 +N | 仅克制正面(矩阵值>0) | 克制负面/中性面触发;沿用旧 clamp_check magic_vs_* 挂点 | -| 封印爆裂(迁入) | on flag_hit:全体存活敌 N 群伤 | 每标中一次触发一次 | 无标中触发;波及己方 | - -### 7.4 附表 B:凭证件逐件表(新 5+留任 2,V9/V10 附属表) - -| 件名 | 正常效果(断言要点) | 边界 | 反例(不该发生什么) | -|---|---|---|---| -| 刷新券 | 刷新存量账(冒险级)+1;到手即结算消尽 | 不进持有集不进加算区;依赖刷新件写错账修复(F-1)同批落地 | 写进旧 _attune_refresh_x 账(写错账复发);可囤积 | -| 储备金袋 | 储备池 RAP +N(节点级) | 战斗结束清零系既有语义 | 写 GP 钱包;跨节点残留 | -| 同调电池〔**2026-10-18 删除**〕 | 已装配主动秘宝使用次数 +1(玩家选哪件,本次冒险) | 充能冒险开始重置(兼容);跨层写秘宝充能账 attune_charges | 自动替玩家选件;写当局加算区 | -| 时沙 | 下轮 AP +2(回合级) | 一次性节奏件;只改池不改上限 | 抬 AP 上限(与属性轴混账);当轮即时生效 | -| 完美保险〔**2026-10-18 改归专长**〕 | 本战下一次标错不破坏完美资格(节点级) | 只保一次;节点级 | 保护第二次标错;跨节点携带 | -| 小金币袋(留任) | GP 钱包 +20/+50 | 计价物不自售(不进商店货架) | 出现在商店货架;进持有集 | -| 应急口粮(留任) | 生命账当即回复 +6 | 在商店内(默认原则);封顶生效上限 | 进持有集;超上限回复 | - -## 8. 异常分级 - -L1 自救(断言失败自查表值/占位值);L2 记录继续(扩签落法与三案选型的代码事实冲突、呈现层组件复用受阻);L3 停机呈报(触碰 🔴 契约/池换代后发现 GDD 结构锚自相矛盾/旧档兼容面超出破坏性废弃口径)。 - -## 9. 代拍板白名单 - -效果引擎扩签的查询面落法映射;schema 新字段英文键命名;冒烟断言形态与种子选择;占位数值在 GDD 结构锚形态内取整;卡面文案直读行 desc;代称与注释措辞。超出清单必呈报。 - -## 10. 待裁点(Q1-Q3 已全裁清零——卡片成立,已编入迭代 20〔2026-10-11 用户令〕,开工门=U0 用户发令;v1.1 回补新增第 4 条件数口径待裁,不阻塞开工) - -1. **Q1 Boss 兑付换代口径=换代**(2026-10-11 用户裁):通关提升三选一整体退出、专长三选一进驻+回血保留。 -2. **Q2 数值占位策略=按 GDD 结构锚给 provisional 占位值**(2026-10-11 用户裁)。 -3. **Q3 迭代切分=单迭代交付全量**(2026-10-11 用户裁):不切多迭代;内部按 A/B/C 三段顺序推进+段末汇报;同批废「软时间盒 ≤3 工作日」自造规矩、迭代周期≈一周左右(roadmap 迭代粒度节随批改文)。 -4. **v1.1 回补新增(尚未裁决——逻辑验收方法论批登记,不阻塞已编入状态)**:新专长件数计数出入——卡文「新专长 27 件/新 27 行(含淬毒刃纹、封印爆裂自 treasure_items 迁入)」与奇物.md 计数(基础件表 27 件+迁入登记 2 件「实装批落地后并入件表」=feats.tres 换代后 29 行)不一致。推荐案=按设计权威计数落地:feats.tres 换代后 29 行(基础 27+迁入 2),卡文「27」视为标题口径未含迁入;淘汰依据=奇物.md 系设计权威且逐件可数(开格 6+插旗 4+踩雷 9+桥 1+节奏 3+战斗 3+尖点 1=27,另迁入 2)。V2/V3 断言按落表实数写,不硬编 27。 diff --git a/design/research/需求卡片-二三关棋盘观感批-2026-10-16.md b/design/research/需求卡片-二三关棋盘观感批-2026-10-16.md index bd006763..5944b450 100644 --- a/design/research/需求卡片-二三关棋盘观感批-2026-10-16.md +++ b/design/research/需求卡片-二三关棋盘观感批-2026-10-16.md @@ -1,9 +1,10 @@ # 需求卡片:第二 / 三关棋盘观感——亮度与对比度批(T1 定性人闸 · T2 按轴修法 · 验收三件套 · 文档面全走反哺点) - 版本:**v1.4(2026-10-17 开工前预授权 U1〔用户于开工前一次性决断,防开发中反复打断〕——①Q2 甲/乙由「延裁·T1 出口现场裁」改**判据自动裁**:甲案候选样张读数达标即直接走甲不停机,仅当读数证伪「纹理太碎」假说时才呈报裁乙;②V2 定向目标带数值授权批内按 T1 实测读数自定并随定性报告呈报,T1 出口人闸只确认轴归因与修法方向;③详见 §10 Q2 条与开工门 U1 预授权条);v1.3(2026-10-17 文档同步闸 v3 口径修订,纯文档批〔分支 carddoc-20261017〕按用户六条裁定执行——①本批(代码实现批)禁写 `design/` 整目录与根规则文件,§5 同步面的同步义务一律执行为「列进 `reports/iter30-反哺点-<完成日>.md`(哪个文件哪一节、改成什么、依据),用户会话裁决后归文档批落文」;②产出物落位换代:实现报告/代拍板追认单/反哺点清单三份落 `reports/`,不再 `design/qa/`;③T5 末卡改「产出物落位卡」(三份 reports/ 文件写齐才算收口);④闸口径按域选档:重闸 = `tools/run_all_gates.sh` 按改动域选档(本批 → `--code`),卡内不再写死闸件名单与「全量档」类字样;⑤实机目检项写进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单,「登记 07」转反哺点;§10 裁决留痕原文不动);v1.2(2026-10-16 裁决留痕版:三卡待裁项按用户令定案——Q3 已裁甲·同批、Q2 延裁留痕并将裁点挂至 T1 出口呈报硬流程步骤、排期栏定实「已编入迭代 30」与三卡串行序位、§4B 跨卡依赖按已裁事实改实、全卡零悬空待裁点;v1.1 同日 grilling 审查修订见 §11;v1.0 同日成文)** +- **指路订正(2026-10-20)**:徽章卡(迭代 30 卡①)已按 doc-conventions §11「吸收即死」退役,本卡对其三处指路句改为结论内联+提交号 `7ffd1dc0`,裁决内容零变更。 - 来源:[06-待办清单](../gdd/06-待办清单.md)「第二 / 三关棋盘观感——亮度与对比度」小节(2026-10-13 用户裁定条)+ [playnote](playnote.md) 用户试玩原始记录:「UI优化,第二第三关的棋盘看着太累了;不知道是因为亮度还是对比度的原因,看着非常费劲,非常不舒服」 - 归属:**表现层美术修批**(06 在册条目直接写卡;两轴归属 = [HUD框架](../gdd/systems/表现与支撑/HUD框架.md)(UI 轴)+ [美术圣经](../art/art-bible.md)(素材轴),定性前两方共裁——沿用 06 条裁决) -- 排期:**已编入迭代 30(2026-10-16 用户令编入,roadmap 行已在案;批内状态刷新列反哺点)**。同迭代三卡串行序位第 3:[未开格类型徽章批卡](需求卡片-未开格类型徽章批-2026-10-16.md)→[战斗一屏样张批卡](需求卡片-战斗一屏样张批-2026-10-16.md)→本卡(徽章→样张→观感)。**并行例外**:本卡 T1/T1b 采样与定性读数允许与前两卡并行穿插——依据=采样是只读动作(出帧/读数/样张均不触碰 golden 三张、样张主板、§5 同步面文档等汇聚文件),落码修改(T2 起)仍按上述序位串行。开工门 = U0,须用户 `/iter` 发令;且 T1 出口定性人闸未过之前禁止动码——该闸 = [06 本条](../gdd/06-待办清单.md)既有裁决硬步骤(「开工前先过『素材轴 / UI 轴』定性人闸」,2026-10-13 用户裁定;[08 版本历史](../gdd/08-Alpha版本标准.md) v0.3 同款注),**不是待裁点**(v1.1 撤销原 Q1,见 §10)。 +- 排期:**已编入迭代 30(2026-10-16 用户令编入,roadmap 行已在案;批内状态刷新列反哺点)**。同迭代三卡串行序位第 3:未开格类型徽章批卡(迭代 30 卡①,已入库合并 7ffd1dc0,卡片已退役)→[战斗一屏样张批卡](需求卡片-战斗一屏样张批-2026-10-16.md)→本卡(徽章→样张→观感)。**并行例外**:本卡 T1/T1b 采样与定性读数允许与前两卡并行穿插——依据=采样是只读动作(出帧/读数/样张均不触碰 golden 三张、样张主板、§5 同步面文档等汇聚文件),落码修改(T2 起)仍按上述序位串行。开工门 = U0,须用户 `/iter` 发令;且 T1 出口定性人闸未过之前禁止动码——该闸 = [06 本条](../gdd/06-待办清单.md)既有裁决硬步骤(「开工前先过『素材轴 / UI 轴』定性人闸」,2026-10-13 用户裁定;[08 版本历史](../gdd/08-Alpha版本标准.md) v0.3 同款注),**不是待裁点**(v1.1 撤销原 Q1,见 §10)。 - **立场前提(用户原话,本卡设计的第一约束)**:此条立项原因就是用户实机觉得现在的画面累眼、且对「纯程序化重产现状」明确不满——「如果还是用原有方式弄出来的东西,有没有可能还是我不满意的?」。本卡对此的正面回应 = ①第一步定性用**可量化的读数归因**(明度直方图 / 相邻格对比 / 高频能量 / WCAG 对),禁止凭感觉猜轴;②两条修法各自的产出物写清**相对现状新增什么**(§6 T2 两案效果上限表);③**诚实的效果声明**:观感是主观项,机检只能证伪(读数红 = 必有问题)不能证真(读数绿 ≠ 用户满意),**阻塞性人闸全部前置**(T1 定性闸 + 契约 4 方向闸),入库后实机目检按 2026-10-12 用户令口径**登记不阻塞**——目检项登记进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单(「入册 07」列反哺点;[AGENTS.md](../../AGENTS.md) 红线「真人检测只登记不阻塞——禁以等目检为停工理由」口径不变),用户复判否决走 §7 V4 回补机制(行回待做 + 06 立残留条,落文按 v3 口径归文档批)。防「改一轮还是不满意」的机制 = **先出改前/改后并排对比读数样张给用户定性确认方向,方向过了人闸才落码**(🔴 契约 4)——方向若被否决,返工停在样张层,不烧落码与基线。 --- @@ -105,7 +106,7 @@ ## 4B. 跨卡依赖(同迭代 30 的两张同板面批——v1.1 新增;v1.2 按 2026-10-16 三卡已裁定案改实) -本卡与**未开格类型徽章批**(`需求卡片-未开格类型徽章批-2026-10-16.md`)、**战斗一屏样张批**(`需求卡片-战斗一屏样张批-2026-10-16.md`)共用 L2/L3 板面,事实与已裁结果如下(只列事实与裁决留痕,他批未裁项仍不代裁): +本卡与**未开格类型徽章批**(迭代 30 卡①,已入库合并 7ffd1dc0,卡片已退役)、**战斗一屏样张批**(`需求卡片-战斗一屏样张批-2026-10-16.md`)共用 L2/L3 板面,事实与已裁结果如下(只列事实与裁决留痕,他批未裁项仍不代裁): | # | 交叠面 | 事实 | 本卡处置 | |---|---|---|---| @@ -285,7 +286,7 @@ | 6 | V 条判具 | V2=样张 v3(主板)+T1b 分关读数+shot_checker A–D**+F**(v1.0 漏 F 判据,2026-10-15 已入闸)+`terrain_tile_sets_test`/`ui_contrast_probe`(两探针实存);V3=`golden_baseline_refresh.sh` **实存**且用法查明:缺省模式=棋盘三张(probe 抓帧→crop→覆盖 `game/tests/golden/`),`--menu`=菜单全屏,素材缺位拒跑,呈现批 agent 自换代+提交说明强制写触发原因(其头注 Q5/Q6/S3 在册) | `tools/golden_baseline_refresh.sh:2-14, :52-76`;`tools/shot_checker.py:8-19` | C5/契约 6/T4/V2/V3 补齐实操步骤与 F 断言 | | 7 | Q1/Q3 已裁检索 | **Q1 属已裁项**:06:449 条内明文「开工前须先定性(沿用既有裁决)」+ 状态行「开工前先过定性人闸」(2026-10-13 用户裁定)+ 08 版本历史 v0.3 同款注——v1.0 一边在 P1 引该裁决、一边把同一闸列为 Q1 待裁,自相矛盾,触用户红线。Q3(同批与否)与 Q2(甲/乙)全库检索**无既裁**(06 单条覆盖两关但未裁批次数;playnote 无;git log 无)——保留为待裁 | 06:445-453;08:220(v0.3);playnote.md:5;git log 2026-10 检索 | Q1 从 §10 删除、改 P1/T1 出口/V1 流程硬步骤引用(§10 载明移除理由);Q2/Q3 保留 | | 8 | 中立性 | v1.0 四处「推荐」:Q1(已裁项附裁决,撤销后消失)、T1 出口句(撤销)、T3「推荐=同批」与 §10 Q3「推荐 甲」(**无既裁依据→中立化**)、Q2 立场句「开工默认先做甲案候选样张」(改写为白名单内样张层探针动作,非路线裁决) | 全文 grep 推荐=0 残留(仅剩「已删字样」自述与列名注) | 列头改「卡片立场(不代裁)」;§10/§6 T3 中立化 | -| 9 | 跨卡依赖 | 两卡同抢 L2/L3 板面:徽章批(类型微光实装者,其 T0-② 五组明度档以未开格底 L≥0.30 为基线——本卡改的正是该基线;art-bible :379 已册「格底与微光同在未开格面,邻近色相有吞没风险」互辨复测义务;其 §4「不动格底/瓦片/四槽」系单向避撞);样张批(Q1 丙案语义=样张反提素材规格、Q3 路线选型——本卡乙案重产与其冻结次序互锁) | `需求卡片-未开格类型徽章批:13/82/109`;`需求卡片-战斗一屏样张批:33/59/70-71/168/170`;art-bible:379 | 新增 **§4B 跨卡依赖**(X1/X2/X3 三行+结论笔:次序与规格联动问题,不新增裁点,随 Q2/Q3 呈报交用户定序);§8 L3 增⑥跨卡次序破裂停机型 | +| 9 | 跨卡依赖 | 两卡同抢 L2/L3 板面:徽章批(类型微光实装者,其 T0-② 五组明度档以未开格底 L≥0.30 为基线——本卡改的正是该基线;art-bible :379 已册「格底与微光同在未开格面,邻近色相有吞没风险」互辨复测义务;其 §4「不动格底/瓦片/四槽」系单向避撞);样张批(Q1 丙案语义=样张反提素材规格、Q3 路线选型——本卡乙案重产与其冻结次序互锁) | `徽章卡(迭代 30 卡①,合并 7ffd1dc0,卡片已退役):13/82/109`;`需求卡片-战斗一屏样张批:33/59/70-71/168/170`;art-bible:379 | 新增 **§4B 跨卡依赖**(X1/X2/X3 三行+结论笔:次序与规格联动问题,不新增裁点,随 Q2/Q3 呈报交用户定序);§8 L3 增⑥跨卡次序破裂停机型 | | 10 | 外加翻案(非清单内,敌意自查所得) | **契约 5/完成定义 3/V4/T5「目检未过禁宣布完成/在役」与 2026-10-12 用户令红线冲突**:AGENTS.md「真人检测只登记不阻塞——禁以等目检为停工理由」(入库先例:迭代 25/26/28 均入库翻行、07 目检留残,git 提交 d337c9e5 立规)。另:F1「L1 10×10」不全——`board_gen.tres` level_index 1 段含一行 **12×12 dungeon**;F10/C6:类型微光引擎未实装(徽章批 F2 引 HUD框架实装状态行佐证),v1.0 把它当实机可测层不成立 | AGENTS.md:68;git log d337c9e5;roadmap 迭代 25/28 行「残留人闸=目检」先例;`game/data/tables/board_gen.tres` 行段实查 | 契约 5 重写(阻塞闸全前置:T1 定性闸+契约 4;V4 改登记不阻塞+回补机制:否决→08 行回待做+06 记残留重开);F1 补两板型注;F10/T1 微光测面降为样张 v2 证据级别并注升级路径 | **词面合规自查**:v1.1 全部新增/改写文本已按仓库现行用语规范禁词表逐词 grep 复扫,命中 0(他文档引文原貌除外);本次修订同时把卡片里 v1.0 残留的两处旧措辞换代为规范词。**v1.2 增补**:本次裁决留痕新增/改写文本同口径 grep 复扫,禁词命中 0。**v1.2 留档注**:下表 §11 中「Q2/Q3 保留待裁」「随 Q2/Q3 呈报交用户定序」「无既裁→中立化」均为 v1.1 时点的审查动作实录,不作现行状态读——2026-10-16 用户令已定案(Q3=甲·同批;Q2=延裁挂 T1 出口呈报硬步骤),现行裁决状态一律以 §10 为准。 diff --git a/design/research/需求卡片-代码架构技术债修复批-2026-10-14.md b/design/research/需求卡片-代码架构技术债修复批-2026-10-14.md deleted file mode 100644 index 415b0a59..00000000 --- a/design/research/需求卡片-代码架构技术债修复批-2026-10-14.md +++ /dev/null @@ -1,187 +0,0 @@ -# 需求卡片:代码架构技术债修复批(场景拆分 · 局生命周期 · 战斗结算拆段 · 账本收口 · 类型闸 · 卫生件) - -- 版本:v1.2(2026-10-14 成文 v1.0;同日用户令**编入迭代 27 卡①**——roadmap 迭代行已更新,M4 数值批顺延 28+。v1.1→v1.2:**§10 三点待裁全裁**(2026-10-14 用户三裁,全按推荐案:①第三个 autoload/②单类持四账/③审计五段)——零待裁点,卡片成立) -- 来源:代码架构与实现质量审计报告-2026-10-14(双席审计,基线 master 97de02c;同日第三方逐条复核五处计数级瑕疵修正落文;**该报告已按退役规则于本批收口 git rm——吸收即死,修正后计数由本卡承载,收口结案=reports/iter27-实现报告-2026-10-14.md**) -- 归属:工程债/重构批(凭审计证据直接写卡,无设计定稿前置——2026-10-10 立规:缺陷修复/工程债/重构类工程需求无设计前置要求) -- 排期:**已编入迭代 27 卡①**(2026-10-14 用户令;用户裁决记录:全部技术债修复允许放行单一大迭代,12-14 个工作日在允许时间范围内;**开工门=U0 已满足**——三点已裁(见版本行)+用户 /goal+iter 27 发令,U0=2026-10-14 开工;M4 数值批顺延 28+) - -## 1. 目标与完成定义 - -把审计报告 2 条 P0 + 6 条 P1 + 7 组 P2 一次性收口,按审计裁定的批内顺序五波推进: - -1. **场景拆分 + 局生命周期物化**(P0-1/P0-2):按「屏」切场景壳(开始菜单根场景 + 营地场景 + 冒险场景内含关卡/战斗两容器),「一局」物化为可整体 `queue_free()` 的节点,手工复位清单消亡;13 个 smoke 探针挂载假设同批迁移; -2. **战斗域重构**(P1-1/P1-4):`_settle()` 五段拆 Segment 类(grant/aura/combat/decay/verdict),编排器退为段序编排 + 行发射;共享可变字典四本账收拢为显式 Ledger 类; -3. **账本收口**(P1-2/P1-3):刷新次数删 main 副本、HUD 只读快照;summary 增 `gp_final` 键、删 GP 影子账本; -4. **组合根可测化抽取 + 模态协议内聚**(P1-5/P2-7):main 的「模式状态机 + 输入锁 + 模态编排」抽无 UI 纯逻辑类;ModalStack 内聚「互斥域/排除组」; -5. **类型闸收尾 + 卫生件包**(P1-6/P2-1~6):project.godot 拉起 gdscript warning 闸 + 存量 73 处收口;死代码 16 处删除、绝对路径 autoload ×4、字符串 Callable 8 位、裸字符串状态机 enum 化、ConfigDB 越权退出归根、resolver 类型软环解耦。 - -**完成定义**:五波全落码;**重构前后同种子完整局输出逐位一致**(核心验收,见 §7);批末四闸(冒烟+单元测试+场景探针+改前改后读数对拍)全绿;10 个迁移探针 + run_all 套件全绿;render_gate golden 对基线零漂移;06 登记销号、active.md 快照、反哺点列明待裁。 - -## 2. 现状事实(2026-10-14 复核修正版审计证据,行号=当前树 master 1e5df2c〔迭代 26 已入库〕,与基线 97de02c 差异处另注;开工自行复核) - -### 2.1 P0 面(单场景 + 手工复位) - -- `game/project.godot`:`run/main_scene` 唯一(:14),autoload 仅 ConfigDB/RngService 两个(:19-20);全文无 gdscript warning 配置。 -- `presentation/main.tscn`:仅 1 个 Control 节点挂 main.gd(全文件 13 行);产品代码 `.instantiate()` 调用 **0 处**;全项目 14 个 .tscn 中 13 个在 smoke/ 下为测试探针。 -- `presentation/main.gd` 1385 行:`_build_ui()` :204-361(基线口径 160 行)程序化构建四区 + 12 个模态层(:358-360 登记清单);`_on_battle_end_continue` :647-657 手工置空 runner/settlement/adventure/_adventure_mode + `debug_overlay.reset_sliders()`;`_reset_run_scope` :555-559 只清 3 项;局态旗 ≥7 个散布类顶(:53-56,76-78,129-131);前科注释 :789-792(续玩分支 runner 未就绪实机崩值,2026-10-06 定位)。 -- smoke 探针 10/13 挂载整个 main.tscn 才能测任何 UI(ui_probe.gd:15 等;fx_shot/shot/t17_defer/ui_audit/ui_click/ui_input/ui_layout/ui_struct/ui_tune 同形态)。 - -### 2.2 P1 面 - -- **结算巨函数**(battle_orchestrator.gd,全文件 1725 行、类级状态 40 个 var :62-98 为主、≥5 层缩进行 80 行全项目最高):`_settle()` :632 起 259 行;嵌套 7 层 :562;`counter_add` 兑付三行组 ×5(:681-683,740-742,775-777,837-839,1191-1193);`grant_material` 兑付块 ×3(:690,782,1217);`reveal_tiles` 检查 ×3;效果 kind 字符串分派全文件 24 处(_settle 本体内 14 处)。姊妹病灶:`damage_controller.gd:272` `_resolve_hero_attack()` 148 行。fan-out 引用 core 类约 13 个。 -- **刷新双账**:权威计数 `battle_orchestrator.gd:73`(受理门槛 :1522 `can_refresh()`);呈现另计 `main.gd:129`,HUD 余量 = 表上限 − main 自计(:1240)。快照 :1487 已携带 `refresh_used`(修复通道现成)。 -- **GP 影子账**:`presentation/gp_shadow_ledger.gd` 全件(表现侧镜像,头注自认手工镜像);根因链:`adventure_runner.gd:1022-1035` summary 11 键无 final GP + :1046 `close_wallet()` 清零先于 :1052 `adventure_finished.emit(summary)`。 -- **共享可变字典**:`level_runner.gd:501-521` begin_battle 载荷携带 attune_charges/vision_counter/bonus_ref/adventure_counters 四共享 dict 引用;`battle_orchestrator.gd:79,86-88` 持引用直写(:79 注释自认「use_treasure 消费直改」);`level_runner.gd:50` `_ledger` 同为字典引用共享。 -- **组合根不可独立测试**:`curio_interact_controller.gd:35-37` 构造 16 参(11 个组合根 Callable);`camp_shop_presenter.gd:25-40` 13 参;`tests/unit/presentation/pacing_queue_test.gd:17` 必须 load 整个 main.tscn 挂整树驱动(tests 全库唯一直接 load main.tscn 的套件)。 -- **类型闸缺位**:无类型 Array/Dictionary 游戏代码 73 处(core 53 / data 9 / presentation 11,如 `adventure_runner.gd:78,95`、`effect_engine.gd:94-95`、`main.gd:69`);core 无返回类型函数 12 处(`reward_economy.gd:109,124,136,151` 等);无类型参数(`attunement.gd:12`、`board_generator.gd:18,83`)。`code-conventions.md` 第 4 章「语言纪律」第 2 条有明文(Dictionary 取值参与算术前显式声明类型),无机器闸。 - -### 2.3 P2 面(卫生件) - -- 死代码 16 处(复核抽查 10 处全部零调用确认):`_attune_row`(battle_orchestrator:216)、`_fx_dispatch`(damage_controller:102)、`clear_variants`(board_data:61)、`combo_of`(effect_engine:417)、`treasure_active_rows`/`treasure_live_ids`(config_db:253,273)、`attunement_counters`(save_manager:419)、`has_board`(minesweeper_rules:41)、`holding_count`/`discard_item`(treasure_items:68,83)、`has_pending`(curio_interact_controller:58)、`font_probe`(stage_world:17)、`selected_id`(curio_pick_overlay:170)等;**FeatsEngine 整文件零调用**(仅注释提及,class_name 仍全局注册)。 -- 绝对路径取 autoload ×4:`main.gd:174,190,481,1351`(Godot 4 有编译期注入全局名,字符串路径零防护)。 -- 字符串式 Callable ×8 个调用位(10 个字面实例):battle_orchestrator:105,390,391 / damage_controller:98 / adventure_runner:940,951(:951 一位 3 实例)/ level_runner:166 / main:191。 -- 裸字符串状态机:adventure_runner 12 行(:120,159,176,263,269,277,402,894,974,1049,1051,1071)+ standee_body 4 行(:334,373,380,387);正解示范在役 = `action_economy.gd:12-23`(内部 enum + match + 外部 String 契约 getter)。 -- 长函数 17 个:`main.gd:204` 160 行(基线口径)、`level_map_screen.gd:72` 155 行、`camp_overlay_view.gd:55` 152 行(基线 142,迭代 26 增长)、`debug_overlay.gd:159` 114 行(基线口径)、`treasure_item_table.gd:87` 149 行。 -- ConfigDB 越权退出 + resolver 类型软环:`config_db.gd:75-82` `_fatal` 直接 quit(1)/OS.crash(`main.gd:176-179` 已有同通道 fatal 屏);`config_db.gd:57` 持 ConfigDbResolver,`config_db_resolver.gd:14` 反向持 ConfigDb——双向类型耦合。 -- 模态「开态=可见性」:`modal_stack.gd:39-43` has_open() 遍历 visible 位;`main.gd:404-409` 输入锁 = 栈查询 + 三例外 + 排除式(:407-408 注释记录过棋盘永久锁死事故)。 -- lambda 连接 76 处(presentation 6 / smoke 62 / tests 8,复核修正值)——实读无泄漏,本批不动、仅登记防回归。 - -### 2.4 冒烟基线与验收设施 - -- 冒烟 1055/0、run_all 25 套(active.md 快照,2026-10-14 迭代 26 出口;开工日复核)。 -- 确定性 RNG:`core/rng_service.gd:95-108` 单盐派生 + 全事件日志,同种子逐位复现能力在役——**本批全部重构的验收手段基础**。 -- MC 对拍设施在役(迭代 24 先例:同种子配对 40 局×both 位移在带);render_gate golden 逐像素比对(容差灰度差 ≤16 且 changed ≤2%)。 - -## 3. 设计契约(红线,违反=L3 停机呈报) - -- 🔴 **零行为变更**:重构前后同种子完整局输出逐位一致为硬验收;任何输出漂移(含信号时序、结算行序、日志行)= L3。数值/表值/效果词表/难度零调整,纯结构重构。 -- 🔴 **只拆不重写**:场景拆分只拆屏容器 .tscn 壳,视图继续代码构建;**40+ 个 views/*.gd 不转 .tscn**(审计裁断④明确反对——破坏全部探针契约且收益为零);战斗屏视图代码原样搬。 -- 🔴 **探针契约零破坏**:13 个 smoke 探针挂载假设同批迁移(它们就是切分作业的回归保障);`board_view.gd:8-14` 探针零改造契约不破。 -- 🔴 **信号纪律不变**:信号连接唯一归组合根;core 零 presentation 反向依赖维持;runner 转发族命名方法 Callable 纪律(禁 lambda 捕获 self 成环)不破。 -- 🔴 **执行顺序锁**:①场景拆分与局生命周期先行 → ②战斗域重构 → ③组合根抽取(场景拆分后重估再动)→ ④类型闸收尾(其他重构全部落地后才拉得起 Error 级)→ ⑤卫生件随批顺手带。最大两件(场景拆分 / _settle 拆段)各自全量冒烟回归,分波提交、逐波全绿。 -- 🔴 **渲染零漂移**:render_gate golden 对基线零新增(观感零变化;场景拆分后节点树变更不得改变任何一帧输出)。 - -## 4. 范围边界 - -**做**(五波,见 §1):P0×2 + P1×6 + P2 七组全部。 - -**不做**(去向): -- views 全面 .tscn 化 → 审计明确反对,永不进批(除非用户另裁)。 -- 任何玩法/数值/内容/观感变更 → 不属本批;数值欠账归 M4 数值批(迭代 27+ 未排期)。 -- 长函数 17 个中非结算段的装配/校验函数(`_build_ui` 随场景拆分自然解体;schema 校验器群)→ 不单独修,登记 06 观察。 -- 关卡节点图重构、键盘/手柄输入等 06 在册项 → 各归其批。 -- 审计报告「用户场景预想评估」外的进一步架构演进(如 ECS 化、全面事件总线)→ 无此需求,禁越权发挥。 - -## 5. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| [06-待办清单](../gdd/06-待办清单.md) | 本卡登记条(「文档与结构」节);批入库后销号 | **机械面,随批** | -| active.md | 批收口快照惯例(五波分波记录) | **机械面,随批** | -| roadmap | 迭代 27 行=本批(2026-10-14 用户令编入,M4 顺延 28+) | **机械面**,已随编入更新 | -| [07-体验验证清单](../gdd/07-体验验证清单.md) | 新增目检节:全流程操作观感零变化走查 | **机械面,随批**登记(不阻塞) | -| design/dev/architecture/architecture.md | 场景分层/局生命周期物化/Ledger 类化/组合根抽取均改变其陈述 | **反哺点**(实现报告列明待用户裁决,另批落文;不随批更新) | -| design/dev/code-conventions.md | 类型闸拉起后 §4 语言纪律有了机器闸;模态「互斥域」新纪律 | **反哺点**(同上) | -| 审计报告本体 | 中间文档「吸收即死」——批入库后结论迁现行事实源,报告按退役规则处理 | **机械面,收口时** | -| 08-Alpha版本标准 | 无对应条目(技术债非内容项) | 无关联文档 | - -## 6. 任务卡 - -### T0 基线与复核(≈0.5d) - -1. §2 全部 file:line 开工复核(基线 97de02c 与当前树差异点重核)。 -2. 逐位一致对拍基线建立:同种子完整局输出落 sim-data 对拍锚(重构前锚),对拍脚本入 tools/。 -3. 探针挂载假设清单:10 个探针逐一列「挂 main.tscn 得到什么」迁移对照表。 -4. 冒烟/run_all/render_gate 三基线冻结登记。 - -### T1 场景拆分 + 局生命周期物化(≈4-5d,第一波) - -1. 屏容器 .tscn 切分:开始菜单根场景 + 营地场景 + 冒险场景(内含 level_map/battle 两容器);视图代码原样搬,零 .tscn 化改造。 -2. SaveManager/MetaProgression 升格跨场景持有者(形态见 §10 裁点①)。 -3. 「一局」物化:run-scope 节点持全部局态(7+ 局态旗收编),终局 `queue_free()` 即复位;`_on_battle_end_continue`/:647-657 与 `_reset_run_scope`/:555-559 手工清单删除。 -4. 10 个 smoke 探针挂载假设同批迁移。 -5. 每步对拍 + 全量冒烟回归(本波最大件,独立成提交波)。 - -### T2 _settle 拆段(≈1.5d,第二波) - -1. 五段各抽 Segment 类(grant/aura/combat/decay/verdict,段边界见 §10 裁点③);编排器退为段序编排 + 行发射。 -2. 24 处 kind 字符串分派随段归位;counter_add/grant_material 重复块随段单点化。 -3. `_resolve_hero_attack()` 148 行同批拆段(姊妹病灶)。 -4. 逐位一致 + 全量冒烟回归(独立提交波)。 - -### T3 账本收口(≈1.5d) - -1. 共享四本账收拢显式 Ledger 类(接口口径见 §10 裁点②);战斗侧只拿 read+append 原语;战末 export/开局 seed 时点语义不变。 -2. 刷新双账:删 `main.gd:129` 副本,HUD 只读快照(:1487 通道现成)。 -3. GP 影子账:summary 增 `gp_final` 键(清账前快照),删 `gp_shadow_ledger.gd` 全件;ui_probe 影子账断言换代为 summary 键断言。 - -### T4 组合根可测化抽取 + 模态协议内聚(≈1.5-2d) - -1. main 的「模式状态机 + 输入锁 + 模态编排」抽无 UI 纯逻辑类(依赖仅 ModalStack + 查询 Callable)——**场景拆分落地后重估抽取面再动**(审计原注)。 -2. 控制器构造参数收拢为 context 对象(curio 16 参/camp 13 参)。 -3. ModalStack 内聚「互斥域/排除组」概念,开态谓词随层登记;`main.gd:404-409` 排除式拼装消亡。 - -### T5 类型闸收尾(≈1.5d,**必须在 T1-T4 全部落地后**) - -1. project.godot 拉起 gdscript warning 级别让存量显形(untyped_declaration 等)。 -2. 存量 73 处无类型容器 + 12 处无返回类型 + 无类型参数随批收口;新码一律收口。 - -### T6 卫生件包(≈1.5d,随批顺手带) - -1. 死代码 16 处删除(FeatsEngine 整文件退役含 class_name 注销)。 -2. 绝对路径 autoload ×4 改编译期全局名引用。 -3. 字符串 Callable 8 位改 `self._method` 引用形式。 -4. 裸字符串状态机 enum 化(action_economy.gd:12-23 同款:内部 enum + match + 外部 String 契约 getter 零变化)。 -5. ConfigDB `_fatal` 退出归根(main.gd fatal 屏通道);resolver 对门面改持 Callable 诊断通道(validator 已成形先例)。 - -### T7 文档同步闸与全闸(≈0.5d) - -1. §5 机械面更新完毕+反哺点列明待裁。 -2. 07 登记目检节。 -3. 批末四闸全绿合并;审计报告退役处置。 - -**估时合计 ≈12-14d**(审计口径,T0 含对拍基建)。**切分预案**:天然切分点 = T1 出口(场景拆分单独可成批);若全批超软盒,T4 组合根抽取 + T5 类型闸 + T6 卫生件可拆出为后续批(审计原注:T4 场景拆分后重估、T5 必须在其他重构落地后)。T2/T3 不拆(战斗域重构半落比不落更危险)。 - -## 7. 验证闸(逐需求点验收清单) - -**能力验证(自动化;谁验=批末四闸闸机,全绿才合并)**: - -- V1 逐位一致对拍(**核心验收**):每波出口跑同种子完整局对拍(T0 冻结锚),输出逐位一致;任一波漂移 = 该波回炉。 -- V2 场景拆分:10 个迁移探针全绿 + run_all 全套;新增断言——各新屏场景可独立实例化(headless 挂屏壳断言关键节点在位);menu→camp→adventure 路径探针绿。 -- V3 局生命周期:新增 headless 连开局复位断言(终局→新开局两连局,局态旗/账本/模态栈全复位、无脏状态残留);续玩断点恢复路径回归(既有测试全绿 + :789-792 前科分支专项)。 -- V4 结算拆段:既有结算单测全绿 + 逐位一致;新增 Segment 类直接 new() 单测(进 run_all)。 -- V5 Ledger/双账/GP:既有 counters 回灌/导出断言全绿;新增冒烟断言——HUD 刷新余量 = 快照 `refresh_used` 推导值(与 `can_refresh()` 一致);summary 带 `gp_final` 键断言;gp_shadow_ledger.gd 删除后 grep 零命中。 -- V6 组合根/模态:新纯逻辑类直接 new() 单测进 run_all(25→26+ 套);既有模态探针全绿 + 互斥域断言(调试浮窗对局中可开不锁棋盘——:407-408 事故回归断言)。 -- V7 类型闸:`auditor_audit_type_hints.py` 产品码 untyped 归零(或显式白名单内);project.godot warning 配置在位(源码断言)。 -- V8 卫生件:死代码/绝对路径 get_node/字符串 Callable grep 零命中断言;裸字符串 state enum 化后外部 String 契约逐位一致(对拍兜底)。 -- V9 渲染零漂移:render_gate golden 对基线 0.00%(任何热区 = L3);冒烟全绿(基线 1055/0,开工日复核)。 - -**测试方式两分法**:V1-V9 归能力验证(自动化闸;对拍跑批沿用现役 sim-data/MC 设施,**跑批发起前须用户批准**——M4 同纪律);「全流程操作观感零变化」(菜单/营地/冒险/战斗逐屏走查)归正常流程体验=用户目检,登记 07 不阻塞。 - -**闸口径**:轻闸/重闸按 AGENTS.md 分级周期口径;五波各自出口全绿才并下一波;批末四闸全绿才合并;测试执行两入口铁规不破。 - -## 8. 异常分级 - -- L1(自救):迁移漏接线、断言拼写错、对拍锚取错——立红即修。 -- L2(记录继续):探针迁移方式取舍、Segment/Ledger 内部命名微调、类型标注写法——登记随批内消化。 -- L3(停机呈报):触碰 §3 任一红线;**逐位一致对拍任何一波漂移且半小时内定位不到根因**;render_gate golden 出现热区;场景拆分中发现某视图与 main 耦合到「原样搬」不成立(超审计预判);T4 重估后抽取面仍大到须改行为。 - -## 9. 代拍板白名单(超清单必呈报) - -1. 新场景文件命名与目录落点(menu/camp/adventure 等屏壳名、presentation/scenes/ 之类落位)。 -2. 屏容器内部节点分层命名。 -3. Segment 五段类命名与文件落点(不违背 §10③ 段边界前提下)。 -4. Ledger 类方法命名与 read+append 原语集形状(不违背 §10② 口径前提下)。 -5. run-scope 物化形态细节(场景节点 vs 子节点挂接方式,在裁点①落定框架内)。 -6. 探针迁移的最小改动方式(逐探针挂载面调整)。 -7. 类型标注具体写法(Array[X] 参数化元素型选择)。 -8. 死代码删除的随批位置与提交切分。 -9. enum 命名(承 action_economy 先例)。 - -## 10. 裁决记录(三点已裁,2026-10-14 用户令,全按推荐案) - -1. **SaveManager/MetaProgression 升格形态 → ✅ 甲:第三个 autoload**(RngService 先例现成,审计原话「模式现成」;跨场景天然存活,换场景零传参。乙案根场景常驻节点淘汰:换场景需手工传递引用,组合根传参链复杂化,与「场景壳薄」目标相悖)。 -2. **共享账本 Ledger 类接口口径 → ✅ 甲:单 Ledger 类持四本账**(bonus_ref/adventure_counters/attune_charges/vision_counter),战斗侧只拿 read+append 原语,战末 export/开局 seed 时点语义不变。乙案每账一小型对象淘汰:粒度细但类膨胀 ×4,注入签名更长,与「收拢」目标相悖。 -3. **`_settle` 段边界切法 → ✅ 甲:审计五段**(grant/aura/combat/decay/verdict),编排器退段序编排 + 行发射,24 处 kind 分支随段归位。乙案按效果词表域切三段淘汰:扫雷域/战斗域/奖励域与结算五段的时序语义不正交,aura/decay 跨域会被劈开。 - -**开工门=U0 已满足**(三点已裁 2026-10-14 + 用户 /goal+iter 27 发令)。卡片验收清单 §7 V1-V9 已过「测什么/怎么测/谁验」三问核验(谁验=批末四闸闸机,全绿才合并;目检项登记 07 不阻塞)。 diff --git a/design/research/需求卡片-启动装配与生命周期验收补全批-2026-10-15.md b/design/research/需求卡片-启动装配与生命周期验收补全批-2026-10-15.md deleted file mode 100644 index 2ccb99ff..00000000 --- a/design/research/需求卡片-启动装配与生命周期验收补全批-2026-10-15.md +++ /dev/null @@ -1,230 +0,0 @@ -# 需求卡片:启动装配与生命周期验收补全批 - -- 版本:v1.0(2026-10-15 成文;计划书经用户批准,两裁点全落) -- 来源:用户计划书《启动装配与生命周期验收补全批 · 计划书》(2026-10-15 对话呈交并批准)+本卡 §2 代码级坏事实三件 -- 归属:测试基建/工程债批(缺陷修复+验收补全;零玩法行为变更,装配顺序修复除外) -- 排期:**已编入迭代 28**(2026-10-15 用户令「迭代 28 插队」——M4 数值批占位行顺延 29+);**开工门=U0 已满足**(用户令「交卡后连做全批」=卡片预批;grilling 多轮复核门由用户预批豁免,实施期仍按复核审点自检「测什么/怎么测/谁验」三问,见 §10) - -## 1. 目标与完成定义 - -把「启动后玩家该看到什么、状态对象何时该活何时该死」变成**可执行验收函数**:今后任何一笔改动犯同类错(装配序错/层被盖/对象早释放/时序倒置),闸必红。每条新验收函数以**变异验证**(故意改坏→看红→还原)证明拦截能力,**无变异红记录的断言不算验收成立**。 - -完成定义(六项,全绿方收口): - -1. **坏事实三件修复并钉住**:装配顺序修复(冒险屏先挂、菜单屏后挂);V2 断言不再保护错误顺序;菜单截图有内容断言(探针自检+墨色判据+golden 三件)。 -2. **装配语义合同单点化**:全视觉层顺序唯一事实源=单一合同常量;builder 的 add_child 与 register 同源派生。 -3. **冒烟新增两段**:`_smoke_boot_chain`(boot 链路时序后置条件六断言)、`_smoke_lifecycle_matrix`(阶段×引用面存活性矩阵,十阶段全引用面)。 -4. **渲染面三件**:shot_probe 两自检、shot_checker 墨色占比断言、启动态菜单 golden 入 render_gate。 -5. **变异验证记录表**:每条新验收函数≥1 个缺陷类注入实验(变异点 file:line+跑的闸+红输出),落迭代实现报告。 -6. **规范三处落文**:AGENTS.md 硬规则、code-conventions.md 测试节细则、req-card 技能验收闸。 - -批末四闸全绿(冒烟全量+run_all+probe_gate --click/--full+render_gate);冒烟断言数增量呈报;F5 实机目检登记 07(登记不阻塞)。 - -## 2. 现状事实(2026-10-15 代码级实查;开工自行复核) - -### 2.1 坏事实一·装配顺序错(F5 见战斗界面) - -- `main.gd:207-210`(_build_ui 内):先实例化菜单屏并 add_child(:207-208)、后实例化冒险屏并 add_child(:209-210)——树序后者绘制在上,冒险屏盖住菜单屏;启动态 `_start_overlay.visible=true`(:194)被遮,F5 直接见战斗界面。 -- `main.gd:203-206` 注释把该顺序写成设计意图(「树序 = [菜单屏, 冒险屏, 模态层...]——层内先后零视觉差」)——与玩家可见事实相悖:菜单屏启动态必须可见。 -- 启动链全貌(_ready,:174-197):ConfigDB 加载(:175-180,fail-fast)→ settings_store 加载+应用(:184-186)→ _build_ui(:191)→ _begin_session(false) 闲时会话(:192)→ _refresh_resume_button(:193)→ _start_overlay.visible=true(:194)→ DS_DEBUG 门控(:195-197)。 - -### 2.2 坏事实二·V2 断言保护 bug - -- `smoke_all.gd:176-177`:`check(kids.find(main._menu_screen) == 0 and kids.find(main._adventure_screen) == 1, "V2 组合根树序=屏壳在前(menu@0 adventure@1——视觉共存对全模态在其上)")`——把错误顺序写成期望值;冒烟全绿与 F5 见战斗界面并存(测试在保护 bug)。 -- 同段其余断言(:178-187:营地屏壳夹商店与设置层之间/冒险屏壳在全模态之下/句柄指向/闲时会话在座)均为正确保序类,本批只改 :176-177 一句及周边注释。 -- 断言先改(对现役 bug 立红)→ 装配后改(转绿)——红转绿过程写进实现报告(🔴 契约 4)。 - -### 2.3 坏事实三·菜单截图无内容断言 - -- `shot_probe.gd`:启动态菜单截图段(:45-49——_meta 记 menu_title/menu_sub 全局矩形后 _snap("menu"));`_problems` 自检清单(:21)全程无「启动态顶层可见层=start_overlay」类断言——菜单被埋时探针仍绿。 -- `shot_checker.py`:菜单段仅一条副标题对比度断言(:132-136)+帮助文腿已退役(:135-136 注);判据=WCAG≥4.5 且背景纹理幅度 std≤18(:59-77)——只判反差不判「字在」:被埋菜单坐标处若有亮光柱过反差线即放行。 -- `render_gate.sh` 段①(:53-67):shot_probe 七屏+shot_checker A-D,无菜单内容判据、无 shot_menu golden 段。 - -### 2.4 合同常量基底与特殊插位(T1 设计面) - -- 现役登记单点:`main.gd:378-379` 十二模态登记数组(legend/node/level_screen〔TAG_SCREEN_STATE〕/curio/end/shop/camp/settings/status/career/confirm/debug〔TAG_NON_LOCKING〕)——登记序=树序=z 序纪律(缺陷⑤)的现役单点,但只覆盖模态层,不含屏壳与全屏态。 -- 特殊插位三处(合同必须显式数据化,禁散落 move_child): - - **level_screen**:住冒险屏壳内(main.gd:220 句柄指向;登记位夹 node 与 curio 之间,:256-258 注)——树序在模态之下、登记序在模态之间;boot 态隐藏(level_map_screen.gd:209,_init 内置 visible=false)。 - - **camp_screen**:实例化后 move_child 插位(main.gd:264-268——add_child 后 move_child(_camp_screen, shop_overlay.get_index()+1));camp_overlay 为其成员(:266);屏壳=MOUSE_FILTER_IGNORE 纯容器(camp_screen.gd _ready),boot 态透明、无输入截获。 - - **curio_overlay**:move_child 对位终局层之下(main.gd:291-293)。 -- 全屏态两个:`_start_overlay`(菜单屏成员,main.gd:211)与 `_inter_overlay`(独立全屏过场层,main.gd:332-335;树序在确认弹窗之前,:337-338 注)。 -- 三屏壳均全矩形 Control + MOUSE_FILTER_IGNORE 纯容器(menu_screen.gd/camp_screen.gd/adventure_screen.gd 各 _ready;三个 .tscn 均无 visible=false)——**诊断订正①:屏壳是容器不是视觉层**。「顶层可见层」断言必须遍历合同**内容层**(两全屏态+battle_root/level_screen 两容器+12 模态),禁把屏壳当选样——否则 boot 态自树顶向下第一个可见 Control 会命中透明的 camp 壳(camp_screen 树序在菜单之上),断言恒假。 - -### 2.5 boot 链路可断言面(T2 判据源) - -六断言判据(headless 全可判): - -1. ConfigDB.is_ready 且表已载(main.gd:175-180)。 -2. 设置已应用:settings_store.apply()(main.gd:186)→ Master 总线 mute/volume_db(settings_store.gd:44-46)+UiKit.motion_scale=0.5/1.0(settings_store.gd:47)——断言=引擎态与 settings_store 现值一致。 -3. `_start_overlay.visible == true`(main.gd:194)。 -4. 续玩钮可见态 == SaveManager.has_breakpoint()(_refresh_resume_button,main.gd:448-456;_resume_btn=菜单屏 resumebtn,:308)。 -5. run_scope 非空且 is_adventure==false(闲时会话,main.gd:192;run_scope.gd:13)。 -6. DS_DEBUG 未设时调试浮窗隐藏(main.gd:195-197;debug_overlay 仅 DS_DEBUG=1 启动即开)。 - -### 2.6 生命周期存活性面(T3 判据源) - -- 会话物化(迭代 27 T1):_begin_session(main.gd:166-171)——旧会话 queue_free(:168,全 main.gd 唯一销毁调用点,其余命中均为注释)+RunScope.new()+add_child;_ready 即建闲时会话永非 null(:56/:192)。 -- 引用面全量清单(随会话更替而失效的面,共五个承载物): - - `_treasure_ui`:settlement/runner 两个现值 lambda(main.gd:234-235)。 - - `_bonus`:6 个现值 lambda(meta/save_manager/adventure/runner/is_adventure/gp_summary,main.gd:296-300)。 - - `_camp_pres`:3 个现值 lambda(meta/save_manager/runner,main.gd:313-315)。 - - `_modal_flow`:4 个查询 Callable(start_visible/inter_visible/settlement/rows_empty,main.gd:364-367)。 - - `_row_pacer`:**5 个视图句柄**(log_view/stage/board_zone/settlement_fx/board_view,row_pacer.gd:19-23)+2 Callable(refresh_request/pump_ended,:24-25;注入点 main.gd:224-230)——**诊断订正②:计划书枚举「6 视图句柄」,代码实查 5,以代码面为准**。 - - `run_scope` 13 成员(run_scope.gd:10-22:adventure/runner/settlement/is_adventure/level_active/level_screen_active/boss_active/was_settling/hints_shown/settlement_stop_timer/pending_candidates/locked_click/last_gain_amount)。 -- 现役 V3 断言(smoke_all.gd:193-246):开局建会话/放弃受理/终局到达/会话收束/局态旗复位/两连局零泄漏——本批矩阵在其上扩阶段×引用面,驱动复用不另起点击链。 -- 收束路径:_on_battle_end_continue(main.gd:623-646)——_begin_session(false) 新闲时会话(:642)+_start_overlay.visible=true(:644)+续玩钮刷新(:645)。 -- 终局面:_on_adventure_finished(main.gd:596-620)——settlement=null(:599)、_exit_level_screen(:600)、终局面板(:612-615)。 - -### 2.7 渲染闸与 golden 现状(T4 判据源) - -- `golden_baseline_refresh.sh`:仅棋盘三张基线路径(board_shot_probe 抓帧→golden_board_crop.py 裁剪→game/tests/golden/ 三张,:30-41)——缺全屏基线刷新路径。 -- `golden_compare.py`:支持任意同尺寸 PNG 对拍(render_gate.sh:129-130 现役用法;容差=灰度差≤16 且 changed≤2%,render_gate.sh:15 注)。 -- `render_gate.sh` 段构成:①shot_probe 七屏+shot_checker(:53-67)②fx/board 取证(:69-105)③棋盘 golden(:107-136)④基准档 1280 单档(:17-19 注)。 -- 菜单光柱:ui_assembler.gd:107 `UiKit.beams_rect()`(程序生成静态贴片;迭代 26 T4 连续 alpha 后仍为静态纹理);静态考证 menu_screen.tscn/ui_assembler.gd/menu_screen.gd 零 AnimationPlayer/ShaderMaterial/create_tween 命中——**运行期仍须帧差复核**(T4 前置验;非零则 golden 收窄左列文字/按钮区)。 -- 菜单几何 meta 现役:shot_probe.gd:47-48(menu_title/menu_sub 全局矩形)——收窄区取样坐标源,禁硬编码像素。 - -### 2.8 冒烟与单测基线 - -1081/0(迭代 27 收口读数,roadmap 迭代 27 行;开工日以 active.md 快照复核);run_all 27 套(迭代 27 收口径)。 - -## 3. 设计契约(🔴 触碰=L3 停机呈报) - -1. 🔴 **零玩法行为变更**:除装配顺序修复(本批行为修复本体)外,玩法/数值/逻辑零改动;对拍面=冒烟全量+探针结构断言零漂移;本批无数值改动,MC 零跑。 -2. 🔴 **合同单点化**:全视觉层顺序唯一事实源=单一合同常量(屏壳序+两全屏态+12 模态一表);builder 的 add_child/move_child/register 必须同源派生;禁第二处硬编码层序(三处特殊插位必须经合同数据表达)。 -3. 🔴 **断言禁裸下标**:「A 在 B 之上」类二元关系一律语义断言(find+序数比较/树遍历+visible+矩形判据);禁 `kids[0]==menu` 式裸下标(现役 smoke_all.gd:176 即反例)。 -4. 🔴 **测试先行**:V2 断言先改(对现役 bug 立红)→ 装配后改(转绿);红转绿过程写进实现报告。 -5. 🔴 **变异验证门槛**:每条新验收函数≥1 个对应缺陷类注入实验,走最窄闸见红;记录(变异点 file:line+闸+红输出)落实现报告;无变异红记录的断言不算验收成立。 -6. 🔴 **只加不重构**:T1-T6 之外代码零触碰;shot_probe/shot_checker/golden 工具链只增不断(既有断言语义不窄化、既有基线不删除)。 -7. 🔴 **闸机轮次纪律**:新断言先 standalone 直跑红/绿(30 秒级)→ 最窄确认 → 全批收口跑一次全套;禁修一处跑全套(AGENTS.md 闸机轮次纪律原文)。 - -## 4. 范围边界 - -**做**:T1-T6 六任务(§6)。 - -**不做**(去向): - -- GDD 设计面零改动(反哺点除外——architecture 若因合同常量/启动链/生命周期矩阵产生陈述差,列反哺点呈裁,另批落文)。 -- M4 数值批占位行内容零改动(只顺延编号 28+→29+)。 -- 四类同类错(装配序错/层被盖/对象早释放/时序倒置)之外的玩法缺陷——另见另立,不顺手带。 -- 顺手重构 T1-T6 之外代码(🔴 契约 6)。 -- 既有 06 在册项(引擎原生控件键盘焦点/九宫格切片/对比度残余位等)与本批无关,不碰。 - -## 5. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| [roadmap](../../roadmap.md) | 迭代行:本批编入迭代 28(2026-10-15 用户令);原「迭代 28+」M4 占位行顺延改记 29+;「当前位置」节迭代进度/近期主战场两句更新 | **机械面,随批**(定义登记笔已落 master;收口 T6 换代) | -| [06-待办清单](../gdd/06-待办清单.md) | 新登记条:本卡片名/文件指针/状态(已编入) | **机械面,随批**(定义登记笔已落;收口按批结论销号或改写为反哺点登记) | -| [AGENTS.md](../../AGENTS.md) | 批次工作流「实施」段第 7/8 条(:102-103)旁:新增硬规则「验收函数无变异红记录不算验收成立」 | **机械面,随批**(T6) | -| [code-conventions](../dev/code-conventions.md) | §3 测试纪律(:108-144):补变异验证操作细则(注入实验设计/最窄闸跑法/记录格式) | **机械面,随批**(T6) | -| req-card 技能(`~/.workbuddy/skills/req-card/SKILL.md`,仓外用户级) | §7 验证闸:补「每条验收测试须配变异验证项」要求 | **机械面,随批**(T6;仓外文件,随批改不入 git) | -| [07-体验验证清单](../gdd/07-体验验证清单.md) | 新增目检节:F5 启动态(主菜单在顶层、按钮可点) | **机械面,随批**登记(不阻塞) | -| [active.md](../../active.md) | 收口快照+状态记录 | **机械面,随批**(收口时) | -| design/qa/iter28-实现报告-2026-10-15.md | 收口产物:各卡状态+代拍板追认单+GDD 反哺点节+变异验证记录表+冒烟断言数增量 | **机械面,随批**(收口时产出) | -| design/dev/architecture/architecture.md | 装配合同常量成为层序唯一事实源、boot 链路后置条件成文、run_scope 生命周期矩阵——若与现行陈述有差(iter27 反哺点在册:06 登记「场景分层/会话生命周期陈述滞后于实态」) | **反哺点**(列实现报告待用户裁决,另批落文;设计权威文档不随批更新) | -| [08-Alpha版本标准](../gdd/08-Alpha版本标准.md) | 测试基建四行(冒烟套件/单元测试套件/界面探针/机器可读的呈现断言,:128-132)状态不因本批改变——本批只加断言不加新设施类 | **无关联文档**(四行在役不变) | - -## 6. 任务卡 - -### T0 开工基线与事实复核(≈0.25d) - -1. 建独立 worktree(分支 iter28-bootlife-20261015);拷 `.godot/`+字体 `.import` 边车(worktree 缓存三件套;本批零素材依赖——artwork 不入 git 无涉)。 -2. 基线三查:冒烟全绿数(现 1081/0)、run_all 套数(现 27)、探针现行绿面——对拍口径记档。 -3. §2 全部 file:line 复核(含 2.4 三处特殊插位的运行期树序实采=合同常量现序真值;2.7 光柱静态结论复核)。 -4. 计划书存档 `.zcode/plans/启动装配与生命周期验收补全批-loop-plan-2026-10-15.md`(中间产物,不入 git)。 - -### T1 装配语义合同+顺序修复+V2 断言重写(≈1.0d) - -1. **合同常量**:单一有序表覆盖——屏壳序(冒险屏<菜单屏)、两全屏态(start/inter)、12 模态;三处特殊插位数据化(level_screen 宿主+登记 between node/curio;camp_screen after shop;curio before end);builder 从合同派生 add_child/move_child/register 全链(main.gd:202-268 装配段与 :378-379 登记段同源改写)。 -2. **顺序修复**:冒险屏先挂、菜单屏后挂(main.gd:207-210 调序;:203-206 注释按新序改写)。 -3. **V2 断言重写**(smoke_all.gd:176-177 及周边;尾缀〔装配生命批 V1〕): - - 删裸下标期望,新断言组: - - V1a 启动态顶层断言:boot 后遍历合同**内容层**(§2.4 诊断订正①——屏壳是容器不当候选),自树顶向下第一个可见层=start_overlay(headless 可判); - - V1b 语义关系:start_overlay 树序在 battle_root 之上(菜单屏在冒险屏之上); - - V1c 12 模态逐对保序(合同邻接对树序两两比较); - - V1d 登记序=树序逐对相等(ui_struct_probe.gd:330 career 专属断言推广到全部模态+屏壳层;level_screen/camp_screen 两特例经宿主/成员间接比较,写法见代拍板项 2)。 -4. **变异项**(随 T5):翻装配序(菜单先挂)→V1a/V1b 红。 - -### T2 boot 链路(≈0.5d) - -1. `_smoke_boot_chain` 新段,挂 `_split_tail`(smoke_all.gd:92 摘要行前;按 :88 协程纪律 await 调用)。 -2. 六断言(§2.5;尾缀〔装配生命批 V2〕)。 -3. **变异项**:续玩钮状态源倒置(visible=not has_breakpoint)→红。 - -### T3 生命周期矩阵(≈1.5d) - -1. `_smoke_lifecycle_matrix` 新段(挂 _split_tail;尾缀〔装配生命批 V3〕)。 -2. 十阶段(闲时/开局停点/地图选路/战斗中/结算后/终局面/回菜单收束/两连局/续玩断点/各模态开合后)× 五引用面(§2.6):回调逐个调用→命中对象 is_instance_valid 且符合该阶段存活态;专项判据——战斗中 settlement 活;_on_adventure_finished 后 settlement==null 且无悬挂;收束后旧局经 queue_free 消亡但 main.run_scope 已指向新闲时会话;_begin_session 后新会话即刻 is_inside_tree(无真空窗)。 -3. 驱动复用:V3 debug seed 开局路径(smoke_all.gd:206-207 同款)+现役 _smoke_full_battle/_smoke_level 夹具;不另起点击链。 -4. **变异项**:注释 _begin_session 的 add_child / 提前 queue_free→红。 - -### T4 渲染面(≈1.0d) - -1. **shot_probe 两自检**(进 _problems;尾缀〔装配生命批 V4〕):①boot 态顶层可见全屏层=start_overlay(树遍历,判据同 V1a);②菜单标题/副标题 label is_visible_in_tree 且 rect 落屏内。 -2. **shot_checker 墨色断言**(尾缀〔装配生命批 V5〕):菜单文字框内墨色像素占比在案(对比度只判反差、新判据判「字在」;墨色定义与阈值实施期按实测定 provisional,代拍板项 4)。 -3. **菜单 golden**(尾缀〔装配生命批 V6〕):先验光柱帧差(§2.7——静态零动画在案,运行期复核:连续两帧光柱区像素差为 0)→golden_baseline_refresh.sh 扩全屏基线路径(shot_menu 启动态抓帧→game/tests/golden/menu_boot.png)→render_gate.sh 补 shot_menu 对比段;帧差非零=收窄左列文字/按钮区(menu_title/menu_sub meta 矩形外扩,禁硬编码像素),收窄不成立=L3。 -4. **变异项**:藏菜单层(start_overlay.visible=false 或 move 到冒险屏下)→V1a/V4 红。 - -### T5 变异验证(≈0.5d,横切随批) - -1. 每条新验收函数≥1 注入实验(T1-T4 各变异项),走最窄闸见红后还原。 -2. 记录表落实现报告:变异点 file:line+跑的闸+红输出原文。 -3. 随批同步,不集中补做。 - -### T6 规范落文+文档同步闸+收口(≈0.5d) - -1. 三处规范落文:AGENTS.md 批次工作流实施段(:102-103 第 7/8 条旁)硬规则「验收函数无变异红记录不算验收成立」;code-conventions.md §3 测试节(:108-144)补变异验证操作细则;req-card 技能 §7 验证闸补同款要求。 -2. §5 机械面更新完毕+反哺点逐条列明待裁决。 -3. 批末四闸全绿(冒烟+run_all+probe_gate --click/--full+render_gate)。 -4. 收口五步(active.md 快照/状态记录/roadmap 换代/批末闸留痕)+实现报告(含变异验证记录表+冒烟断言数增量呈报)。 -5. F5 实机目检登记 07(主菜单顶层、按钮可点;登记不阻塞)。 - -**估时合计 ≈5.25d**(需求卡片 0.5d 已成文)。切分预案:T3 最可能超盒(矩阵组合面大)——先落五核心阶段(闲时/开局停点/战斗中/终局面/收束)全引用面+两连局,续玩断点/各模态开合两阶段与逐模态深回调面为续补位;**收口定义含十阶段全引用面,批末未齐=不收口,L3 呈报**。T4 菜单 golden 帧差非零且收窄不成立=L3。 - -## 7. 验证闸(逐需求点验收清单) - -**能力验证(自动化;谁验=批末四闸闸机,全绿才合并)**: - -| # | 需求点 | 测什么 | 怎么测(载体+落点) | -|---|---|---|---| -| R1 | 合同单点化(T1-1) | 合同常量覆盖全视觉层(屏壳序+两全屏态+12 模态);builder 的 add_child/move_child/register 同源派生;无第二处层序硬编码 | 冒烟结构断言(smoke_all.gd _smoke_scene_split 改版段:合同表层序==运行期树序全对,含三处特殊插位)+源码计数断言(main.gd 的 add_child/move_child 调用点数=合同派生点数——仿 _smoke_hygiene_gates 源码扫描范式,smoke_all.gd:108-143) | -| R2 | 装配顺序修复(T1-2) | boot 后自树顶向下第一个可见**内容层**=start_overlay(headless 可判;屏壳=容器不当候选,§2.4 订正①) | 冒烟 V1a/V1b(_smoke_scene_split 改版段或新 boot 段;树遍历+visible+全屏矩形判据) | -| R3 | V2 断言重写(T1-3) | 旧裸下标断言(smoke_all.gd:176-177)删除;新断言组 V1a-V1d 在位;红转绿过程有记录 | 冒烟断言换代+实现报告记录(🔴 契约 4) | -| R4 | 模态保序+登记序=树序(T1-3) | 12 模态逐对保序;登记序=树序逐对相等(level_screen/camp_screen 两特例经宿主/成员间接比较) | ui_struct_probe.gd 推广段(:330 career 契约模式扩全部模态)+冒烟 V1c/V1d | -| R5 | boot 链路(T2) | §2.5 六断言:ConfigDB 就绪+表载/设置已应用/start_overlay 可见/续玩钮态==断点档态/闲时会话/DS_DEBUG 未设浮窗隐藏 | 冒烟新段 _smoke_boot_chain(挂 _split_tail,协程纪律) | -| R6 | 生命周期矩阵(T3) | 十阶段×五引用面:回调可调用且命中对象 is_instance_valid+阶段存活态;四专项判据(战斗中 settlement 活/终局后 null 无悬挂/收束换会话/新会话无真空窗) | 冒烟新段 _smoke_lifecycle_matrix(复用 V3 驱动+现役夹具) | -| R7 | shot_probe 自检(T4-1) | boot 顶层可见层=start_overlay;菜单标题/副标题可见且 rect 落屏内 | 场景探针 game/smoke/shot_probe.gd(render_gate 段①窗口化跑) | -| R8 | shot_checker 墨色断言(T4-2) | 菜单文字框墨色像素占比在案(判「字在」) | tools/shot_checker.py 菜单段(render_gate 段①机检) | -| R9 | 菜单 golden(T4-3) | 启动态菜单全屏(或收窄区)逐像素对拍基线;render_gate 有 shot_menu 对比段 | tools/golden_baseline_refresh.sh 扩路径+render_gate.sh 新段+game/tests/golden/menu_boot.png | -| R10 | 规范落文(T6-1) | 三处落文在位可 grep:AGENTS.md 硬规则/code-conventions 细则/req-card 技能验收闸 | 机械核对(收口人工核对+doc 三闸零新增违例) | - -**变异验证(T5;怎么测=人工注入+最窄闸;谁验=批末闸机跑红记录)**: - -- R11 每条新验收函数≥1 缺陷类注入实验:翻装配序→R2/R3 红;注释 _begin_session/提前 free→R6 红;藏菜单层→R2/R7 红;续玩钮状态源倒置→R5 红。记录(变异点 file:line+闸+红输出)落实现报告变异验证记录表。 - -**测试方式两分法**:R1-R10 归能力验证(自动化闸——测试代码直调核心写口构造状态,冒烟现役做法);R11 归人工执行记录(不走常驻闸);F5 启动态目检(主菜单顶层、按钮可点)归正常流程体验=用户目检,登记 07 不阻塞。 - -**闸口径**:轻闸每轮(冒烟全量+ui_input_probe;触碰 presentation 加跑 ui_click_probe+ui_layout_probe);重闸批末(轻闸+probe_gate --click/--full+render_gate+run_all+doc 三闸+熵增闸);新断言先 standalone 直跑(🔴 契约 7)。 - -## 8. 异常分级 - -- L1(自救):断言键名/尾缀拼错、helper 取数错、golden 收窄矩形取值偏差——立红即修。 -- L2(记录继续):墨色占比阈值初值不当(过严误红/过松漏判)——批内调值注记;T3 阶段驱动链比预期深——记录继续(收口定义不变)。 -- L3(停机呈报):触碰 §3 任一红线;发现计划书事实面之外的第四件坏事实(如 inter_overlay 层序/续玩路径装配问题);菜单光柱帧差非零且收窄方案不成立(基线抖动无法稳定);冒烟基数与 active.md 快照不符且原因不明。 - -## 9. 代拍板白名单(超清单必呈报) - -1. 合同常量的数据形态(有序数组+特例字段 vs 分层字典表——约束=单点化+同源派生,形态自选)。 -2. 登记序=树序断言对 level_screen/camp_screen 特例的表达方式(经宿主屏壳/成员间接比较的具体写法)。 -3. boot 顶层断言的「内容层」候选集构造方式(合同层过滤 vs 显式清单——约束=屏壳不当候选)。 -4. shot_checker 墨色定义与占比阈值(灰度阈值取法;实施期按菜单文字实测定 provisional,终值列反哺点呈报)。 -5. 菜单 golden 收窄区矩形取法(光柱动画时:menu_title/menu_sub meta 矩形外扩值,禁硬编码像素)。 -6. 变异实验最小注入手段选型(注释/改值/visible=false/move_child——以能表达缺陷类且可还原为准)。 -7. 新冒烟段挂载顺序(_smoke_scene_split 与 _smoke_run_lifecycle 之间或之后——以断言依赖为准)。 -8. 计划书存档文件名(.zcode/plans/ 下命名,T0-4 已落)。 - -## 10. 待裁点 - -**零待裁点**(2026-10-15 用户两裁全落:①迭代编号=迭代 28 插队、M4 数值批顺延 29+;②执行范围=交卡后连做全批——卡片经用户预批,grilling 多轮复核门由用户预批豁免;实施期仍按 req-card 复核审点自检:逐需求点过「测什么/怎么测/谁验」三问——§7 表 R1-R11 逐条可答,无回炉项)。 - -**开工门=U0(已满足)**。收口=§5 同步闸+06 销号/改写+反哺点呈裁+实现报告。 diff --git a/design/research/需求卡片-天赋树实装批-2026-10-11.md b/design/research/需求卡片-天赋树实装批-2026-10-11.md deleted file mode 100644 index d756d83d..00000000 --- a/design/research/需求卡片-天赋树实装批-2026-10-11.md +++ /dev/null @@ -1,211 +0,0 @@ -# 需求卡片:天赋树实装批 - -> 日期:2026-10-11(2026-10-12 完备性审查后修订) | 状态:**v1.7** 已编入迭代 21(2026-10-11 用户令整卡编入;grilling Q1-Q5 已裁、歧义扫描六裁已落 GDD v0.4——v1.4 攻防所有权切分换代〔29→21〕、v1.5 一线一节点换代〔21→15〕、**v1.6 Fork 一节点双态换代〔15→12:开局姿态/危险直觉/财富之道三天赋=三节点、购买解锁后 A/B 双态可切〕**;开放待裁点 R1〔schema「等级阈值前置」形态去留,推荐裁撤〕不变)|v1.3 回补逐需求点验收清单(逻辑验收方法论批,用户令——§7 升格两段式)|**v1.7 = 2026-10-12 grilling 完备性/跨系统歧义审查十一裁**(逐条见 §10 末「2026-10-12 完备性审查裁决表」:①攻防空窗期接受〔Alpha 开发阶段口径〕②折扣只覆盖商品购买价、不含刷新③限次承载选型④危险直觉结算时序与守侧失误补偿定性⑤末轮标错不返⑥开发阶段无视文档层条款、不做豁免⑦生涯页三投影整行删⑧AP 上限不 clamp ⑨三选一软上限另立待办、不进本批⑩Y 不入断点登记欠账⑪文档清扫不做加法) -> 设计权威文档:[天赋树](../gdd/systems/跨局循环/天赋树.md) v0.8(2026-10-11 设计会话终裁+同日攻防所有权切分/一线一节点/Fork一节点双态三轮落文;开放待裁点 R1 在册) -> 在册条目:[06-待办清单](../gdd/06-待办清单.md)「天赋树实装批」(原「已建未接面两件」+「结构重构批」合并条) -> 关联批:「锻造工坊实装批」(共用面,时序见 Q5;2026-10-11 系统更名,时名「武器锻造系统实装批」)|「秘宝体系实现重构落地批」(槽位定序点) - -## 1. 目标与完成定义 - -把天赋树 v0.8 定案落进代码与数据表:**12 节点结构换代(攻防所有权切分+一线一节点+Fork 一节点双态)+ 营地统一(树=营地本体,四柜台呈现)+ 三组 Fork 双态真效果 + 旧档破坏性废弃**。完成定义: - -- `meta_tree.tres` 12 节点过 schema 零违例;树上购买面(上限/行门槛〔节点第 N 级〕/点亮前置〔阈值形态视 R1〕/Fork 未解锁)可玩。 -- 营地四柜台并排:树淬炼柜台=树脊柱界面形态(生命/命中淬炼唯一入口,一线一节点;攻/AC 唯一入口=锻造工坊路线——所有权切分红线);锻造工坊/秘宝匣柜台钥匙点亮前=锁定态、点亮=展开工作间;图鉴常开;旧属性锻造柜台购买面退役。 -- 三组 Fork 各为一节点双态开关(购买解锁·默认 A 态·营地零币切换),六键真效果按激活态生效,开局窗/限次语义按设计权威文档生效。 -- 注入公式换代(基础值+树生命/命中淬炼 flat+锻造路线加值+局内加算);旧柜台 flat 项退役移除。 -- 旧存档破坏性废弃(开发阶段无迁移,2026-10-11 用户裁);同调位槽位数量判定源切树节点+旧条件(按击杀 Boss 次数自动涨)整体删除;树上刷新升级写同账(双入口并存,2026-10-11 用户裁)。 -- 验证闸全绿(§7)。 - -## 2. 现状事实(代码级,开工自行复核) - -| # | 事实 | 出处 | -|---|---|---| -| F1 | 节点表 33 行在役(16 脊柱+3 锻造 stat+2 钥石脉+3 socket+8 fork+1 彩蛋;fork 系 A/B 双行结构) | `game/data/tables/meta_tree.tres:7-407` | -| F2 | schema:VEINS/KINDS/CURRENCIES/STAT_KEYS 四词表+RULE_KEYS 两键+FORK_GROUPS 四组+SPINE_ROW_GATE=4;requires 只认点亮(`tree_level(req)>=1`);无等级阈值形态 | `game/data/schemas/meta_tree_table.gd:26-38,96-99` | -| F3 | 购买校验四件套在 `tree_can_buy`(cap/行门槛/requires 点亮/互斥);写口 `tree_buy`/`tree_buy_fork`(购侧激活)唯一 | `game/core/meta_progression.gd:168-239` | -| F4 | 属性注入现役公式 = `forge_flat + tree_stat_flat` 三字段(atk/max_hp/armor_class);命中线在账不注入 | `game/core/meta_progression.gd:149-154` | -| F5 | 旧属性柜台购买面现役:`buy_forge`(钥石几何递增价)+营地属性锻造柜台列 | `game/core/meta_progression.gd:56-64`、`presentation/views/camp_overlay_view.gd:86` | -| F6 | 规则键消费=效果引擎 rebuild 硬编码两合成订阅:posture_first_strike(round_start+round_index==1→grant_ap)/ posture_bulwark(damage_taken→shield) | `game/core/effect_engine.gd:92-101` | -| F7 | 效果引擎事实词表无「关卡内第几场战斗」;`_counters` 为 battle 域账本(rebuild 清零),无跨战斗持久计数 | `game/core/effect_engine.gd:40-61,75` | -| F8 | 事件词表含 flag_hit/flag_settle/mine_hit/round_start/round_end 等 16 事件(扫雷侧 6);效果类型闭集 24(含 grant_ap/shield/grant_gp/bias_wallet/counter_add/counter_spend/refresh_pick) | `game/core/effect_engine.gd:20-37` | -| F9 | 树规则键下传链在役:build_adventure_params→adventure_runner→level_runner enc.tree_rules→battle_orchestrator→rebuild | `presentation/main.gd:503-517`、`core/adventure_runner.gd:86,938`、`core/level_runner.gd:609-614`、`core/battle_orchestrator.gd:254-257` | -| F10 | 迁移现役=forge_levels 三对三映射到锻造枝节点+工坊点亮+socket 点亮,幂等 | `game/core/meta_progression.gd:318-352` | -| F11 | 同调位槽位判定源=谓词表实时求值(Attunement.slots 单点收口);树上 socket 节点无消费面 | `game/core/attunement.gd:24-27` | -| F12 | 刷新升级 Y 账本独立在役:`attune_refresh_level`+行族定价(同调段购买口),树节点 ks_refresh 无消费面 | `game/core/meta_progression.gd:395-406` | -| F13 | 存档 v6:meta 域 tree_nodes/fork_sides/attune_refresh_level/forge_levels 并存;`_normalize` 缺键补齐 | `game/core/save_manager.gd:42,89-99,126-127` | -| F14 | 营地 UI=三柜台列(属性锻造/秘宝匣/奖励格图鉴),树面板程序占位挂图鉴柜台下段;同调装配段+Y 升级行挂秘宝匣柜台 | `presentation/views/camp_overlay_view.gd:86-126` | -| F15 | 彩蛋觉醒判定=requires 三锻造节点全 cap(`_check_easter_egg`);地脉共鸣 requires=[forge_atk,forge_hp,forge_ac] | `game/core/meta_progression.gd:330-339` | -| F16 | 冒险开局参数面两入口同参(开新/续玩)在役;hero_override 同源现算 | `presentation/main.gd:503-517` | - -## 3. 设计契约(🔴 违反=L3 停机呈报) - -1. 🔴 两币分工:树内唯一币=钥石;GP 局内清零永不互兑。任何购买面不得引入第二币。 -2. 🔴 层级纪律:树 effects 禁 archetype 键(schema 加载致命);流派件只走局内随机渠道。 -3. 🔴 写口唯一:扣币/升级/激活/切换/写盘只经 MetaProgression(tree_buy 族/toggle 族);UI 只发意图信号。 -4. 🔴 开发阶段存档纪律:结构换代允许破坏性废弃旧存档(2026-10-11 用户裁——Alpha 未出、无存量玩家);旧结构检测=废弃重置,**禁做数据迁移与折算**。**2026-10-12 用户裁:开发阶段无视任何文档层条款**——权威文档(含 `存档序列化.md` 迁移纪律句、`:170`「改版不弃档」验收条目、`:187` 版本语义句)一律不因本批增设豁免条款、不做同步改写;冲突处按"开发阶段总前提"直接越过。**禁为本批新增任何文档豁免/例外条款。** -5. 🔴 效果类型闭集不加新词:树六规则键效果走现有 24 类型+既有事实/参数词表组合;确需扩闭集(效果类型/EVENTS/FACTS/新参数位)→ L2 记录继续+反哺点呈报,禁静默扩。 -6. 🔴 命中线维持不注入(归数值批,本批不动其消费面)。 -7. 🔴 数值全 provisional:行值沿旧表或量纲锚投值,终值归 M4 数值批;禁自行定终值。 -8. 🔴 冒险开局参数面两入口(开新/续玩)同参同值——任何新参数(关卡域状态初值等)两入口必同传。 -9. 🔴 攻防所有权切分:树零攻防来源——树脊柱只持生命/命中淬炼;攻击唯一入口=锻造工坊武器路线、AC 唯一入口=锻造工坊甲路线(2026-10-11 用户裁)。树上任何数值项再带攻/护分量=违规。 -10. 🔴 一线一节点:一个内容一个节点、等级在节点内(生命淬炼/命中淬炼各一节点×4 级,2026-10-11 用户裁);脊柱不得再把同一内容拆成多节点。 -11. 🔴 Fork 一节点双态:三组各一节点(开局姿态/危险直觉/财富之道,2026-10-11 用户裁)——购买解锁 cap1、零重复购买;态切换只走零币切换口;节点行持 a/b 双效果键、效果按激活态取值;不得把同组拆回 A/B 双行。 -12. 🔴 守侧=失误补偿(2026-10-12 用户裁):**单个格子标错最多返还一次**。触发主语=「**当回合发生的标错动作**」——不是「在场标错旗」这个状态。双条件同时成立才触发:①当回合新插的旗在结算阶段被判为标错;②结算阶段该标错旗仍在场(未被挖开)。**旗不可逆导致的后续每轮在场不再触发**;**末轮(战斗结束轮)判出的标错不返**(战斗已结束,合法作废态)。 - -## 4. 范围边界 - -**做**:§1 全部——schema/节点表/购买与切换面/六键效果/注入/退役/旧档废弃与旧逻辑删除/槽位收编/刷新接线/营地 UI 重排(程序占位)。 - -**不做**(去向): - -- 武器/护甲三路线的等级、定价、满级特效实装 → 「锻造工坊实装批」(本批只预留注入项位,见 Q5)。 -- 秘宝匣工作间内的目录重设计实装(15 件/解锁混合制/代价轴)→ 「秘宝体系实现重构落地批」;本批秘宝匣柜台**仅改挂载位置与钥匙门**,段内功能原样保留。 -- 视觉终稿(营地四柜台美术/工作间面板视觉)→ HUD 营地视觉批;本批程序占位重排。 -- 命中线消费面、全部数值终值 → M4 数值批。 -- 奖励格图鉴内容 → Alpha(现结构位不动,仅移出柜台宿主位)。 - -**不做·2026-10-12 完备性审查新增(用户逐裁)**: - -- **账号层攻防空窗期**:T4 退役 `buy_forge` 后、锻造工坊实装批落地前,攻击/AC 无永久强化入口——**知情接受,不设过渡、不登记 06 欠账**(2026-10-12 用户裁:Alpha 开发阶段接受任何空窗与不一致,本就是要分步解决)。局内商店货架仍为攻击来源(当局清零)。 -- **三选一刷新软上限**(付费价基础值随关卡进度小幅递增维)→ **另立待办,不进本批**(2026-10-12 用户裁方向:不加硬上限,走"停点内倍率增长 × 停点间基础价随进度小幅递增";商店货架刷新共享同一对旋钮、同步跟涨)。属秘宝/奇物域,数值归 M4。 -- **Y(`_attune_refresh_y`)不入断点的存档漏洞**(用完退菜单再续玩可满血复活)→ **登记 06 欠账,本批不修**(2026-10-12 用户裁)。出口报告须点名,避免 V15「两入口写同账」被误读为刷新升级整条链路已可用。 -- **AP 上限 clamp**(树+AP 件+时沙走同一条 `_pending_ap_delta`、无上限 clamp 会打出 AP 10/8)→ **登记 06 欠账,本批不碰**(2026-10-12 用户裁甲)。出口报告须写明「新叠加源使该既有缺陷可观测化」。 -- **文档层旧表述清扫(§5 之外另查到的 42 处)**→ **不做**(开发阶段口径 + 不做加法);仅修正 §5 内一处写错的路径。 - -## 5. 关联文档同步面(同步闸 v2) - -| 文档 | 关联点(本批改变它的哪条陈述) | 同步义务 | -|---|---|---| -| design/dev/architecture/architecture.md | 模块图三处:MetaTreeTable schema 词表换代(含 row 字段退役/Fork 单行双态);效果引擎扩关卡域状态(battle_index 事实+跨战斗计数承载);营地呈现层四柜台重排 | **机械面**随批更新 | -| design/registry/entities.yaml | 术语登记:危险直觉/财富之道/开局姿态窗/锻造工坊(工作间) | **机械面**随批更新 | -| roadmap.md | 迭代 21 行**已编入**(2026-10-11 用户令),但行内登记仍停在卡片 v1.1 / 29 节点 / GDD v0.4 旧态 → **机械面**随批更新为 v1.7 / 33→12 节点 / v0.8,并删除已作废的「T0 标错 contingency」句 | -| active.md | 状态记录随批记账 | **机械面**随批更新 | -| design/gdd/06-待办清单.md | 本批条目状态随批推进 | **机械面**随批更新 | -| game/README.md | 营地/柜台描述句(如有)随实态换 | **机械面**随批核对 | -| design/gdd/systems/跨局循环/天赋树.md | 「已建未接面」三条清账;P0 段 33→12 落地态;验收实态 | **设计权威文档**=反哺点(收口呈报,用户裁决后另批落文) | -| design/gdd/systems/跨局循环/元进度.md | 注入公式终态句;属性柜台退役终态(v1.14 已预登记过渡态) | **设计权威文档**=反哺点 | -| design/gdd/systems/跨局循环/秘宝.md(**路径更正**:原写 `排雷循环/秘宝.md`,该文件 2026-10-10 已迁入 `跨局循环/`) | 同调位判定源终态(条件表→树节点,Q2 已裁:旧条件删除) | **设计权威文档**=反哺点(旧条件句删除经本批 T5 用户明令豁免随批扫改) | -| design/gdd/systems/跨局循环/锻造工坊.md | 「树侧解锁门」接线落地态(钥匙无前置,v0.4 已落);注入公式「锻造路线加值」项落地态 | **设计权威文档**=反哺点 | -| design/gdd/systems/表现与支撑/存档序列化.md | ~~旧档废弃规则终态(旧结构检测=废弃重置)+旧域清理(forge_levels/迁移函数删除)~~ | **不随批更新**(2026-10-12 用户裁:开发阶段无视任何文档层条款;**禁为本批增设豁免/例外条款**——见契约 4) | -| design/gdd/systems/跨局循环/生涯.md | 「三柜台解锁完成度概览」行**整行删**(三个数据源 `forge_level` / `workshop_status` / `tree_nodes` 全删——2026-10-12 用户裁:**生涯页不统计天赋树与账号成长态**,只统计终身计数) | **机械面**随批更新 | -| design/gdd/07-体验验证清单.md | ⑲「属性锻造已购合计」观测项随生涯行删除同步摘除 | **机械面**随批更新 | -| design/gdd/systems/表现与支撑/HUD框架.md | 营地四柜台并排结构终态 | **设计权威文档**=反哺点(视觉终稿另批) | - -## 6. 任务卡 - -> 估时合计 ≈ 7.0-8.0d(2026-10-11 三轮换代连带复核:T1 随 12 行重排与 R1 去留下修、行门槛判定主语换行与 Fork 单行双态工作量中性,其余 T 项复核不动;原 ≈7.0-8.5d)。**2026-10-11 用户令:整卡编入迭代 21、不切分(迭代容量放宽容纳全卡)**;原切分预案(子批 A=结构与接线≈5.0d/子批 B=营地 UI≈1.5d)降为应急备案,仅在批内遇不可抗停机时启用。 - -- **T0 前置实查与冻结核对(≈0.5d→≈0.25d,两项已预查结案)**:②GP 获取结算点乘算位实查(聚侧——口径已定,见 T3:落在 `_roll_gp_drop()` 内即**入账前**,结算框显示实得);③踩雷伤害结算乘算位实查(锋侧——案C 战斗段末兑付点);④锻造工坊 17 裁点——**已清零(2026-10-12 B 组逐裁落文 v0.5,06 在册;2c/5a 于 v0.4 结案)**,**本项免查**,Q5 排期前置条件已满足(锻造工坊实装批开工门只剩用户发令)。改为**读一次 v0.5 的「裁决结果清单」+「工作间内容清单」两节**(实装批需求卡片输入),确认本批预留 0 的锻造加值位与其「4a 前缓后陡 / 6 满级特效本期不做留扩展位」两条不冲突;⑤冒烟基线实查记录。 - - **①标错机制存在性——已预查结案(2026-10-12),T0 免查**:**查实存在且有代价**。`minesweeper_rules.gd:410` 插旗动作零事件外发(呈现层对 `is_mine` 零引用);判定唯一入口=`battle_orchestrator.gd:1117-1135` 标错分支(负向兑付 + `perfect_broken` 归因锚 + 完美保险豁免 `_fx_insurance`),位于 `_settle()` 授予段 `_judge_flag` 内 ⇒ **探索阶段不可知对错,只有结算阶段才揭晓**,契约 12 成立。**原「查无标错→守侧换安全网向等价效果经用户裁」contingency 流程作废**(§8 L3 相应项已删)。 - - **⑥`boss_kill_count` 消费面核查——已预查结案(2026-10-12),T0 免查**:查实 **5 个非槽位消费面**(生涯页 `main.gd:1080` Boss 总击杀行、迭代 22 卡 V4 解锁条件 `boss_kill_count≥3/≥4`、`存档序列化.md:92` owner 登记、`registry:73`、07-体验验证清单⑲观测项)⇒ **计数域保留,不可删**。`clear_count` 另有工坊解锁(`meta_progression.gd:78`)+ 生涯页各关通关次数(`main.gd:1068`)两处硬消费,**同样保留**。**可退役的只有 `attunement_growth` 谓词表的槽位求值职责**(`attunement.gd:24-27` 判定源 + 表体随 V14/V21 清退)。 -- **T1 schema 换代(≈0.75-1.0d)**:meta_tree_table.gd——FORK_GROUPS 4→3(删 fg_mastery)+fork 单行双态(行持 a/b 双效果键、validate 改校验每组恰一节点;tree_buy_fork 语义=购买解锁默认 A 态、tree_toggle_fork=零币切态);RULE_KEYS 2→6(新增 sense_sharp/sense_guard/economy_hoard/economy_spend,键名 T0 后可调);row 字段随一线一节点退役(行门槛判定主语=节点当前等级:买第 N 级需全树总等级 ≥4×(N−1),tree_can_buy 门槛分支改判定行);requires 等级阈值形态——**视 R1 裁决:裁撤(推荐)则本项删除、schema 只保留点亮前置**,留任则新字段 requires_level: {node_id: n}+validate 加载校验(悬空/出域即拒);meta_tree.tres 重排 12 行(节点 id/前置/价格沿 v0.8 结构——**脊柱 2〔一线一节点 cap4:生命淬炼/命中淬炼〕+ 锻造脉 2〔锻造工坊钥匙 free 无前置 + 彩蛋地脉共鸣 easter〕+ 钥石脉 2〔秘宝匣/刷新升级〕+ 同调脉 6〔同调位 1/2/3 + Fork 3 双态节点〕= 12;彩蛋含在「锻造 2」内,非第 13 行**;价格 provisional 沿旧量纲)。**彩蛋行硬要求(契约 9 红线落点)**:`easter_ley` 的 effects **只保留 max_hp / hit 两键**——现役表行 `meta_tree.tres:402/405` 仍带 `atk` / `armor_class`,换代时必须摘除;requires 改由 `_check_easter_egg` 特化判定承载(「两节点 4 级拉满 + 同调位全解锁」,不依赖 requires 点亮形态,故不受 R1 影响)。 -- **T2 购买与彩蛋面(≈0.5d)**:锻造工坊节点接入(无前置=初始即可点亮;阈值分支视 R1);Fork 节点购买=解锁+默认 A 态、切换钮走零币切态;_check_easter_egg 判定改「生命/命中两节点 4 级拉满 且 同调位 1/2/3 全解锁」特化判定;树 UI 行板随表换代(12 行;Fork 行=双态切换钮;阈值前置呈现视 R1)。 -- **T3 Fork 六键效果接线(≈1.5d)**:rebuild 扩四合成订阅行。 - - - **开局姿态组(先手压制 / 稳健拓荒)**:改「**每关首轮窗**」语义——关卡首战判定需 `battle_index` 事实,**现役 FACTS 词表无此键、全仓 `game/core/` 零引用**(现役 `posture_first_strike` 实为「每战首轮」,因 `round_index` 每战从 1 重开);选型 = 扩 FACTS 加 `battle_index`(契约 5 L2 呈报)或走等效参数位(`enc.node_depth` / `LevelRunner.visited.size()` 推算,注意编号空间陷阱:图形态=node_depth、单链=数组下标,混用会碰撞)。**连带注意**:`posture_first_strike` 与迭代 10 的 AP 件、时沙走同一条 `_pending_ap_delta`,会打出 AP 10/8(`action_economy.gd:253` 只有 `maxi(0,…)` 下限 clamp)——**本批不做 clamp**(见 §4 不做清单)。 - - **危险直觉·锋(踩中危险格伤害减半·每关限次)**:**挂点现成、无需新事件**——`{"on":"mine_hit","do":{"kind":"damage_mult","value":50}}`,与现役「惊巢反制」(`battle_orchestrator.gd:933-940`)同路径。时序:挖到危险格时 `cell_revealed` 即时揭示格子(视觉),但伤害在结算授予段 `:617` 开单、被案C 闸(`:540`)暂存、**战斗段末**统一结清 ⇒ 锋本就在结算段内,**不需要改语义**。 - - **危险直觉·守(标错返还行动点·每关限次)**:**按契约 12 落**——挂点 = `_judge_flag` else 分支内 **`_flag_miss_seen` 去重闸之后**(与 `:1131` 归因行同位),效果 `{"kind":"grant_ap","mode":"queue"}` ⇒ 走 `_pending_ap_delta`,**下一轮 `notify_round_start()` 才兑现**(先例「封印回响」`:756`)。**注意 `round_start` 面的 queue 是紧接着那次开轮兑现、且 payload 无标错信息,不可挂**;`round_end` payload 同样无标错信息,不可挂。需**扩 EVENTS 加一个标错事件**(L2 呈报)——**命名须避让已占用的 `flag_miss`**(`_emit_row` 的 source_class,`:1131` 战斗日志行),建议 `flag_missed`。换图 `_flag_miss_seen.clear()`(`:401`)后同坐标再插错会重触发 = 新板新算(合理态)。 - - **限次承载(锋/守共用)**:**复用现成 `adventure_counters` + `domain:"adventure"`**(`effect_engine.gd:86-87/216-228`;seed/export/断点三件套现成,迭代 20 已入断点 `adventure_runner.gd:1245/:230-232`)⇒ **不新增存档域、不升 v7**(卡片 F7 那句「无跨战斗持久计数」仅对 `_counters` 成立,对冒险级已过时)。**缺口只有一处**:`domain:"adventure"` 是冒险级重置,而设计要求「**按关重置**」⇒ 需在**关卡切换点**(`adventure_runner.gd:1056` `_start_current_level()`)对限次 counter_id 做一次清零。生命周期四态(随冒险持久/按关重置/新冒险清零/断点保留)由此闭合。 - - **财富之道·聚(战斗掉落 GP 增益)**:**乘算落在入账前**——`battle_orchestrator.gd:1470` `_roll_gp_drop()` 的 return 表达式内,使结算框「GP 增量」行显示的就是实得值(落在 `level_runner.gd:517` 之后则显示值与实得不符)。范围=**仅战斗掉落渠道**(不含三选一 GP 袋件、店内 escrow)。 - - **财富之道·散(GP 消费折价)**:**范围=只覆盖商品购买价格,不含刷新**(2026-10-12 用户裁:不是因为「避让在册旋钮」,而是**折扣的定义边界就是商品标价**——商店刷新价与三选一刷新价不在此列)。**实现选型=范围口径特判**(`level_runner._spend_discounted` 内 `_tree_rules.has("economy_spend")`,覆盖 legacy `current_price` + 池货架 `pool_price` 两处商品标价面),**不走效果引擎合成订阅、故无效果键名**——若将来改走合成订阅,则须避让已被 `yield_mult` 占用的 `cost_mult`(`battle_orchestrator.gd:585`)、另起 `gp_cost_mult`。**GDD `天赋树.md:111` 那句「设计避让:不触碰商店刷新语义与 GP 换算两处在册旋钮」须改写**为定义边界口径(反哺点)。 - - tree_rule_keys 按激活态键集随新词表自然扩。**若需扩 EVENTS/FACTS/效果类型闭集→按契约 5 L2 呈报**(本批已预知两处:守侧 `flag_missed` 事件、姿态组 `battle_index` 事实)。 -- **T4 注入换代与退役(≈1.0d)**:hero_override 换公式(树生命/命中淬炼 flat〔命中在账未注入〕+锻造路线加值位〔预留 0,随锻造工坊批填充〕);旧属性柜台退役(buy_forge 购买面下线+营地属性锻造柜台列移除+forge_flat 注入项移除);同调位槽位收编(槽位数量=树点亮节点数,Q2 裁甲——旧条件链删除);树上刷新升级购买写同账(Q1 裁乙——双入口并存,树上+秘宝匣装配段按钮都能买)。 -- **T5 旧档废弃与旧逻辑删除(≈0.5d)**:①旧结构存档处理——加载检测到换代前结构(已删节点 id 残留)即废弃树域重置(开发阶段破坏性变更,Q3 用户裁),三体系迁移函数 `migrate_tree` 删除;**禁做数据迁移与折算,也禁为文档层增补任何豁免/例外条款**(契约 4)。②旧逻辑删除——forge_levels 旧柜台域清退;**生涯页三投影整行删**(`career_overlay.gd:26/69/89`「属性锻造」行 + `main.gd:1071-1073` `forge_total` 计算与 `:1082` `forge_levels_total` 键 + `生涯.md:43`「三柜台解锁完成度概览」行的三个数据源 `forge_level`/`workshop_status`/`tree_nodes` 全删——2026-10-12 用户裁:**生涯页不统计天赋树与账号成长态,只统计终身计数**);同调槽位旧条件链(条件表判定)退役;fork A/B 双行购买路径(tree_buy_fork 购侧激活语义)随单行双态换代。**保留**:`boss_kill_count` / `clear_count` 计数域(各有 5 处/2 处非槽位硬消费,见 T0⑥)。③文档同步——**只做 §5 机械面清单内已登记项**(含 `秘宝.md` 路径更正;`存档序列化.md` 按契约 4 **不更新**);**§5 之外另查到的 42 处旧表述不做清扫**(开发阶段口径 + 不做加法),版本历史行一律不动。 -- **T6 营地统一 UI 重排(≈1.5d,程序占位)**:营地四柜台并排(2026-10-11 A② 裁)——树淬炼柜台=树脊柱的界面形态(主界面,脊柱两行一线一节点行板内升级、Fork 行=双态切换钮);锻造工坊柜台钥匙点亮前=锁定态、点亮=展开工作间面板(面板暂显「随锻造工坊批开放」占位);秘宝匣柜台=现工坊柜台内容整体迁入+钥匙门;图鉴常开独立位;宽度不足横向滚动条;刷新升级按钮双入口并存(Q1 裁乙——秘宝匣装配段按钮保留)。**占位面板硬要求(2026-10-11 用户令)**:打开/关闭零副作用——零写档、零报错、面板内无任何可交互购买路径。 -- **T7 文档同步闸+回归收口(≈1.0d)**:冒烟 run_all 全绿+行为探针逐条(§7);§5 机械面文档更新完毕;反哺点逐条列进迭代实现报告;06 状态推进。 - -## 7. 验证闸 - -### 7.1 闸口径 - -- **测试方式两分法**(仓库口径,code-conventions.md §3.5 第 4 条):能力验证=调试接口直改游戏数据——经现役调试门控(DebugOverlay/DS_DEBUG)或在测试代码内直改数据表行、置节点等级/激活侧/钥石余额、直调核心写口构造状态,不经 UI、不走正常资源积累流程;体验验证=用户目检,观测项登记 07-体验验证清单(机械面随批)。本批以能力验证为主,用户目检面=营地统一形态与树购买交互(见 V22)。 -- **轻闸(随卡)**:冒烟 run_all 全绿(基线=T0 实查值,断言随换代增减但 0 失败);schema 校验零违例单测(12 行+词表出域即拒;阈值前置形态视 R1)。 -- **重闸件**:原「行为探针」8 条已升格为 7.2 逐需求点验收清单 V2/V9/V8/V6/V12/V16/V10/V18(对应原①-⑧),随清单由任务卡执行,不再单列。 -- **MC 配对锚**:三组两侧通关率差 <~3pp——六键落位后重跑一轮呈报(随 T7,读数归验证记录)。 -- **人闸**:实机目检营地统一形态(用户)。 -- 两入口铁规不破:自动验证只走 smoke_all.gd 与 tests/run_all 两个执行口,禁另开执行口;批末四闸(冒烟+单元测试+场景探针+改前改后读数对拍)全绿才合并。 - -### 7.2 逐需求点验收清单 - -> 断言失败消息末尾带〔天赋树批 Vn〕编号尾缀,断言与清单互查靠 grep(code-conventions.md §3.5 第 2 条)。执行载体五选一:单元测试(tests/run_all)/冒烟断言(smoke_all.gd 对应场景段)/场景探针(smoke/ 下 *_probe)/MC 同种子对拍/人工核对(仅限无法自动化的纪律类需求点)。注入一律走调试口径:直改 meta_tree.tres 表行或 save 存档域(set_tree_level/set_fork_side/add_keystone 置数据),直调 MetaProgression(tree_buy 族/toggle 族)与 EffectEngine(rebuild/dispatch/counter 写口)构造状态,不走正常游玩积累。 - -| 编号 | 需求点/契约指针 | 测什么(具体断言或行为) | 怎么测(载体+注入粒度) | 谁验 | 任务卡 | -|---|---|---|---|---|---| -| V1 | §1①(12 节点 schema 零违例) | meta_tree.tres 行数=12(**脊柱 2〔生命淬炼/命中淬炼,一线一节点 cap4〕+ 锻造脉 2〔锻造工坊钥匙 + 彩蛋地脉共鸣——彩蛋含在此 2 内,非第 13 行〕+ 钥石脉 2〔秘宝匣/刷新升级〕+ 同调脉 6〔同调位 1/2/3 + Fork 3 双态节点〕**)且 MetaTreeTable.validate 零违例(脉/类型/币词表出域即拒、Fork 三组每组恰一节点且持 a/b 双效果键、彩蛋 ≤3、effects 键封闭、零 archetype);出域行逐类构造各一行(vein/kind/currency/effects 键/悬空 requires)全部被拒 | 单元测试。注入=直读表行调 validate();反例=测试复制 rows 副本塞出域行逐类断言报错 | 自动闸 | T1 | -| V2 | §1①(购买面可玩,原探针①升格) | 购买校验四件套逐条:cap 满拦截(脊柱第 4 级后不可续购、Fork 解锁后重复购买=拒绝);行门槛(脊柱节点第 N 级需全树总等级 ≥4×(N−1)——节点等级可区分可计数,买第 2 级时查 <4 拒、恰达当刻开放;总等级口径=tree_nodes 全部节点等级之和、免费点亮与分叉解锁计入);点亮前置任一未亮即拒;锻造工坊钥匙无前置=初始(零余额、零已购)即可点亮;余额不足购买失败且存档零副作用。反例:前置未亮可购=红、门槛恰达不开放=红。(若 R1 留任阈值形态→恢复「指定线累计等级达标前不可购」断言。) | 冒烟+单元。注入=save.set_tree_level 逐节点置等级+add_keystone 置余额→tree_can_buy 逐节点判定→tree_buy 受理写账读回 | 自动闸 | T2 | -| V3 | 契约 1(两币分工) | 任一付费节点购买只扣钥石(GP 侧零购买入口);余额不足时 tree_buy 返回 false 且 tree_nodes/fork_sides/keystone_balance 读回逐位不变 | 冒烟。注入=add_keystone(0) 后直调 tree_buy 断拒绝三域零变化;购买成功断余额 −price 且 GP 账零触碰 | 自动闸 | T2 | -| V4 | 契约 2(层级纪律) | effects 含 archetype 键=加载致命(validate 报 load_bearing);12 行换代表零 archetype 键 | 单元测试。注入=复制 rows 副本塞一行 effects.archetype 断 validate 报错(meta_tree_table.gd:80-82 护栏面) | 自动闸 | T1 | -| V5 | 契约 3(写口唯一) | 扣币/升级/解锁/切换/写盘只经 MetaProgression 写口(tree_buy 族/toggle 族/buy_attune_refresh),UI 只发意图信号 | 人工核对——静态 grep 呈现层(presentation/)对 save.set_tree_level/spend_keystone/set_fork_side 的直调清单,逐条注明属组合根转发或违例 | 用户(人工核对) | T2/T4/T6 | -| V6 | §1②(营地统一,原探针④升格) | 工作间钥匙门:锻造工坊/秘宝匣未点亮=入口锁定态、点亮=展开工作间面板;图鉴常开无门槛;占位面板开/关零副作用——零写盘(存档文件内容快照比对不变)、零报错输出、面板内无可交互购买路径;旧属性锻造柜台列自营地移除 | 场景探针。注入=隔离存档+save.set_tree_level 置两钥匙节点点亮态→实例化营地→断锁定/展开/图鉴三态与开闭前后存档快照一致 | 自动闸 | T6 | -| V7 | §1②(属性唯一入口+旧柜台退役) | 营地生命/命中强化购买面=树脊柱淬炼节点唯一(一线一节点;攻/AC 购买面不在本批——归锻造工坊实装批路线实装);buy_forge 旧柜台购买面下线后全仓零调用残留(meta_progression.gd:56-63、camp_shop_presenter.gd:101、camp_overlay_view.gd:86-126 柜台列随之清退) | 静态核查+探针。注入=静态 grep buy_forge/forge_price 调用面;探针断营地无属性锻造柜台行 | 自动闸 | T4/T6 | -| V8 | §1②(彩蛋觉醒,原探针③升格) | 生命/命中两节点均 4 级拉满 且 同调位 1/2/3 全解锁→地脉共鸣自动点亮且零消费(钥石余额不动、不经购买);任一条件不满足不亮(任一节点未拉满=红、任一同调位未点亮=红)。反例:未满可手动购亮=红、觉醒扣币=红。**另加契约 9 落点断言**:`easter_ley` 行 effects 键集 ⊆ {max_hp, hit}——**含 atk 或 armor_class 即红**(现役 `meta_tree.tres:402/405` 带着这两个分量,换代必须摘除) | 冒烟。注入=save.set_tree_level 置两节点 cap4/点亮同调位→tree_buy 任一节点触发 _check_easter_egg(meta_progression.gd:304-312 换代判定)→断 tree_level("easter_ley")==1 且余额不变;effects 键集=直读表行断言 | 自动闸 | T2 | -| V9 | §1③(Fork 一节点双态与切换,原探针②升格) | Fork 节点购买解锁(tree_nodes 入档 1 级、默认 A 态);零币切换(tree_toggle_fork)换态、切换后 tree_rule_keys==新激活态效果键;同态重复切换零操作(存档零变化);已解锁 Fork 重复购买=拒绝;未解锁 Fork 切换=拒绝 | 冒烟。注入=add_keystone→tree_buy_fork 解锁→tree_toggle_fork 换态→逐断解锁态/激活态/键集/余额 | 自动闸 | T2 | -| V10 | §1③(Fork 六键真效果,原探针⑦升格) | 六键各一条正例+反例:先手压制=每关首轮 AP+1、第二轮不触发、第二关首轮窗口刷新再触发;稳健拓荒=首轮窗内受击出盾、窗外不出;锋=踩中危险格伤害减半·每关限次、限次耗尽全额、安全格不减(**伤害在结算战斗段末兑付**,挖到瞬间只有格子揭示、不扣血);**守=按契约 12 五场景断言(失误补偿,2026-10-12 用户裁)**:①当回合标错且结算时旗仍在场→**下一轮** AP+N(本轮 AP 逐位零变化);②当回合标错但随后挖开该格→结算**不触发**;③之前回合标错、本回合无新标错动作→**不触发**(旗仍在场也不返);④同一格标错**最多返还一次**;⑤末轮(战斗结束轮)标错→**不返、合法作废**。聚=战斗掉落 GP 乘算,三选一 GP 袋件/店内 escrow 等非战斗掉落渠道不乘(范围仅此渠道),**乘算落在入账前——结算框「GP 增量」显示实得值**;散=GP 消费折价 `gp_cost_mult`,**只覆盖商品购买价格——商店刷新价与三选一刷新价不折**(反例:刷新价被折=红;键名不得复用已被 `yield_mult` 占用的 `cost_mult`)。限次计数生命周期四态各一断言(随冒险持久/按关重置/新冒险清零/断点保留) | 冒烟+单元。注入=直构 tree_rules 键集数组直调 EffectEngine.rebuild(effect_engine.gd:73-101 合成订阅面)+dispatch 发射事件;限次=复用 `adventure_counters`+`domain:"adventure"`(**不新增存档域、不升 v7**),直调 counter_add/counter_spend 置关卡域计数后走事件路径断计数值,**按关重置=在 `adventure_runner.gd:1056` `_start_current_level()` 断清零点**;守侧五场景=直构 flag_judged 序列经 `_settle()` 授予段注入,断 `_pending_ap_delta` 与下一轮 `notify_round_start()` 后的 AP | 自动闸 | T3 | -| V11 | 契约 5(效果类型闭集不加新词) | **四键合成订阅行**(开局姿态 2 + 危险直觉 2)的 on/when/do 键全部落在 EVENTS/FACTS/OPS/EFFECT_KINDS/DO_KEYS 在册词表内(validate_trigger_row 零违例);**聚/散两键无合成订阅行**——实现为范围口径特判(`level_runner._spend_discounted` / `battle_orchestrator._roll_gp_drop` 内 `tree_rules.has(...)`),其验收归 V10 范围断言(含反例:刷新价被折=红)。**断言须显式登记聚散两键「无行可验」并断其确实无合成行,禁空跑冒充覆盖**〔v1.7 修正:原表述「六键」与 T3「rebuild 扩四合成订阅行」矛盾,导致 `tree_rules_v11_test.gd` 的 `synth` 字典缺聚散两项、`synth.get(key, [])` 返回空数组使循环静默跳过——测试全绿但实际只覆盖四键〕。若实现需扩闭集=L2 呈报留痕,本条断言以在册词表为准转红 | 单元测试。注入=直构四键合成订阅行调 EffectEngine.validate_trigger_row(effect_engine.gd:272-314)断零违例;另断 `economy_hoard`/`economy_spend` 在合成订阅段无行(防空跑) | 自动闸 | T3 | -| V12 | §1①(注入公式换代,原探针⑤升格) | hero_override 逐字段对拍=树淬炼 flat(生命线注入——Σ 节点 effects×等级;命中线在账未注入)+锻造路线加值位(本批预留 0)+局内加算区;forge_flat 旧项退役后不再出现在公式(旧「买 atk 1 级→override==行 flat」断言摘除,见 V20);开局 runner effective_atk/max_hp/ac==表值+override 各轴逐位;全新存档(树全零)override 全零=白板 | 冒烟+单元。注入=save.set_tree_level 置脊柱节点等级→直读 hero_override 手算对拍→start_adventure 带 override 断首战读数 | 自动闸 | T4 | -| V13 | 契约 6(命中线不注入) | 命中淬炼节点购若干级→hero_override 无 hit 字段位移、effective 面零命中变化(命中等级在账不入注入面——消费面归数值批) | 冒烟。注入=save.set_tree_level 置命中线等级→断 override 与首战读数与零购基线逐位一致 | 自动闸 | T4 | -| V14 | §1①(同调位槽位收编,Q2 裁甲) | 槽位数量=树上同调位节点点亮数:点亮 n 个→Attunement.slots 读数==n、未点亮=0;旧条件(按击杀 Boss 次数/通关次数自动涨)判定链删除后 clear_count/boss_kill_count 计数不再进槽位判定(attunement_growth 表与访问器的去留随 T0⑥ boss_kill_count 消费面核查结论,本条断言主语=槽位判定源只剩树点亮态) | 冒烟。注入=save.set_tree_level 逐个点亮 att_socket1..3→Attunement.slots 读数阶梯断言 | 自动闸 | T4 | -| V15 | §1①(刷新双入口同账,Q1 裁乙) | 树上刷新升级节点购买写 attune_refresh_level 同账:树上买一级→账本+1→attune_refresh_charges 涨;秘宝匣装配段按钮买一级→同一账本;两入口交替购买累计不串账、断账本读回一致。**⚠ 本条只验「账本一致性」,不代表刷新能力链路已可用**:`_attune_refresh_y` 不入断点(用完退菜单再续玩即满血复活)系**已知缺陷、本批不修**(登记 06 欠账),出口报告须点名此边界 | 冒烟。注入=add_keystone→分别走 tree_buy(树上节点)与 buy_attune_refresh(装配段口)→逐断 save.attune_refresh_level 累计 | 自动闸 | T4 | -| V16 | §1①(旧档破坏性废弃,契约 4;原探针⑥升格) | 构造换代前结构存档(tree_nodes 含已删节点 id、fork_sides 指向已删 fork 节点 id、forge_levels 非零)→load_from_disk→断:树域废弃重置(tree_nodes/fork_sides 回默认空)、禁迁移(migrate_tree 已删、无任何折算——钥石余额不因加载变动)、后续 tree_buy 正常受理、无残留脏节点(tree_nodes 键集 ⊆ 换代后 12 节点 id 集) | 冒烟+单元。注入=测试直写换代前结构 JSON 夹具到隔离存档路径→load_from_disk→断重置态与后续购买 | 自动闸 | T5 | -| V17 | 契约 7(数值全 provisional) | 12 行价格/cap/effects 取值/限次值全 provisional:行值沿旧表或量纲锚投值(生命 +5 量级/命中 +1 量级、每线 cap4),本批不定终值、无终值口径文案 | 人工核对——表值逐项对照 meta_tree.tres 旧行值量纲与天赋树.md 节点总表效果方向列 | 用户(人工核对) | T1 | -| V18 | 契约 8(两入口同参,原探针⑧升格) | build_adventure_params 开新/续玩两入口:tree_rules/attunement/attune_refresh_y/hero_override(含新公式字段)同源同值;断点续玩受理面 runner._tree_rules 与传入一致(现役断言段 smoke_all.gd:4700-4727 主语随批次延续) | 冒烟。注入=隔离档 set_fork_side/set_tree_level→两入口直呼 build_adventure_params 逐键对拍+resume_adventure 受理读回 | 自动闸 | T7 | -| V19 | §7.1 MC 配对锚 | 三组 Fork 两侧通关率差 <~3pp(六键落位后同种子配对重跑;「不同强非强弱」设计判据) | MC 同种子对拍(adventure_monte_carlo.gd 画像面,slots 主语随 V14 换代) | 自动闸 | T7 | -| V20 | §1④(旧验证约束同生死,code-conventions.md §3.5 第 5 条) | 只验证旧树结构/旧迁移/旧柜台/旧槽位条件的断言同批摘除或换代,摘除后冒烟仍全绿且新断言接管。本卡实查在案的摘除/换代清单:smoke_all.gd:4735-4736(33 节点断言→换代 12)、:4761-4772(迁移幂等三断言→随 migrate_tree 删除整段摘除)、:4773-4775(树 flat 并入 override——迁移夹具主语→随 V12 换代)、:230-232(attunement_growth 谓词表读数源断言→随 V14 摘除/换代)、:4652-4655(通关 1 关→Slots=1 且 boss_kill_count==1——旧槽位条件主断言→换代为树点亮断言)、:4665-4671(AttunementGrowthTable 白盒 clamp 断言→随谓词表退役摘除)、:4488-4517(几何定价+buy_forge 购买段→随柜台退役整段摘除)、:4525-4527(buy_forge+override==行 flat→摘除;:4532-4551 白板断言保留主语换代)、:4400-4401/:4418-4419(**生涯页 forge_levels_total 投影→整行摘除,非换代**——2026-10-12 用户裁:生涯页不统计天赋树与账号成长态;连带摘除 `career_overlay.gd:26/69/89`「属性锻造」行、`main.gd:1071-1073` `forge_total` 计算与 `:1082` `forge_levels_total` 键、07-体验验证清单⑲「属性锻造已购合计」与「天赋树已购概览」两观测项)、ui_probe.gd:41-42(_forge_rows.size()==3→随柜台退役摘除/换代)、ui_click_probe.gd:63-88(营地柜台购买点击路径→换代为树购买/双态切换点击路径)、verifier_batch.gd:178-185/:200-201(forge_levels 读数+buy_forge 购买模拟→换代)、adventure_monte_carlo.gd:72(attunement_growth.slots 硬编码计数源→随 V14 换代)、tests/unit/data_config/config_db_test.gd:158-164(forge_products 行族断言→随 forge_products 表清退摘除/换代) | 冒烟全绿出口+静态 grep(被删标识符清单在冒烟与单元段零残留) | 自动闸 | T4/T5/T7 | -| V21 | §1④(旧实现删除全仓残留核查) | 被删面全仓(game/ 内 .gd/.tres/.tscn)grep 零残留:migrate_tree(meta_progression.gd:318-344)、buy_forge(:56-63)、forge_flat(:39-40)、**生涯三投影(career_overlay.gd:26/69/89「属性锻造」行、main.gd:1071-1073/:1082 forge_total 与 forge_levels_total 键、07-体验验证清单⑲两观测项)**、fg_mastery 组(meta_tree_table.gd:38 词表+meta_tree.tres fork_mastery_a/b 行)、三组 fork_*_a/b 旧行与购侧激活路径(单行双态并轨后残留)、旧槽位条件链(attunement.gd:24-27 判定源+attunement_growth_table.gd+attunement_growth.tres+config_db.gd:29/:52/:144/:282-286,表体去留随 T0⑥)、forge_atk/forge_hp/forge_ac 旧锻造枝节点、脊柱攻/护淬炼线 8 节点(29→21 换代删除件)+生命/命中层行旧 id(sp_hp_r1~r4/sp_hit_r1~r4 层行并级收编后残留)、row 字段消费面(一线一节点退役后)、save_manager forge_levels 域(FORGE_ATTRS :45/默认档 :119/访问器 :232-241/_normalize 补齐 :416-420) | 静态核查(grep 清单逐项过目+删除后表加载与冒烟零违例) | 自动闸 | T5 | -| V22 | §7.1 人闸(营地统一形态) | 实机目检:营地四柜台并排(树淬炼柜台=树脊柱界面形态=主界面,一线一节点行板+Fork 双态切换钮)、锻造工坊柜台锁定/展开态、秘宝匣柜台迁入+钥匙门、图鉴常开位、刷新升级双入口按钮并存、树购买交互顺手、占位面板观感 | 用户目检,观测项登记 07-体验验证清单(机械面随批) | 用户(目检) | T7 | -| V23 | §1⑤(验证闸全绿出口) | 批末四闸全绿:冒烟 run_all 全绿(基线=T0 实查值、0 失败)+单元测试全绿+场景探针全绿+MC 配对锚读数在带(V19 呈报);全仓旧件残留核查(V21)零残留为合并前置 | 批末统一执行(T7 回归收口) | 自动闸+用户(呈报过目) | T7 | - -## 8. 异常分级 - -- **L1 自救**:行值/文案/信号命名/程序占位布局微调;探针夹具修正。 -- **L2 记录继续**:需扩效果类型/EVENTS/FACTS/参数位闭集(契约 5);T0 实查结论与预期不符但不触设计红线(含 boss_kill_count 另有消费面的处置选型);R1 留任案下 requires_level 字段校验细节选型。 -- **L3 停机**:触碰 §3 任一红线(含契约 12);发现 v0.8 设计与代码实态冲突无解。(~~标错机制查无且守侧 contingency 需用户裁~~ —— **2026-10-12 完备性审查预查已查实标错机制存在且有代价**,该停机项删除;守侧按契约 12 直落,不再走 contingency 流程。) - -## 9. 代拍板白名单 - -节点 id 命名(沿用现役命名法);规则键常量名(语义对表即可);程序占位布局与控件复用;价格沿旧表值/量纲锚;探针夹具构造细节;旧档废弃检测的实现选型(节点 id 残留检测/结构版本标记);_normalize 补键细节;Fork 行双效果键的字段形态(effects_map/effects_a+effects_b 等承载选型)。 - -## 10. grilling 裁决记录(2026-10-11 用户逐裁,卡 v1.1 落卡) - -| # | 裁点 | 裁决 | -|---|---|---| -| Q1 | 刷新升级购买入口去留 | **乙 双入口并存**——树上节点修好接线+秘宝匣装配段按钮保留,两处都能买、写同一账本。附带:秘宝侧功能重复的后续审查轮=用户自办,届时功能重复件优先删秘宝侧——本批不做预判性删除 | -| Q2 | 同调位数量判定源 | **甲 树说了算**——槽位数量=树上同调位节点点亮进度;旧条件(按击杀 Boss 次数自动涨)**作废删除**,文档未删=错误、随 T5 清扫(用户明令),需求卡片同步登记旧逻辑删除义务 | -| Q3 | 旧档数据折算 | **不做折算**——开发阶段无存量玩家(Alpha 未出),旧存档直接废弃重置;原「迁移重做」需求整体删除,契约改「破坏性废弃」红线 | -| Q4 | 营地 UI 重排归属 | **甲 本批程序占位重排**——树主列+两工作间入口+图鉴常开,视觉终稿归 HUD 营地视觉批 | -| Q5 | 与锻造工坊实装批时序 | **转排期规则(默认已定)**——默认本批先行(旧柜台 flat 项随 T4 移除——Q3 废弃旧档后无过渡保留价值,原「过渡保留」表述作废;锻造路线加值位预留 0 待锻造工坊批填充);若锻造会话(17 裁点裁决)先完成,排期时合并评估同场填充。发令时可一句话推翻 | - -**遗留设计债(非本批阻塞项)**:锻造工坊 17 裁点(另会话进行中,A 组已定案落文 v0.4、B 组 15 点挂起);标错机制查无时的守侧 contingency(T0 实查后触发,经用户裁)。 - -**回补待裁点(2026-10-11 v1.3 逐需求点验收清单回补时登记)**:零硬编不可测条目;两条目的断言终稿内容随 T0 实查结论对齐,先行按在册待裁流程承接——①V10 守侧(标记错误返还行动点):标记错误机制存在性 T0 实查未决,查无则该键断言随守侧 contingency 换安全网向等价效果重写(本卡 §8 L3 既有流程);②V14/V21(attunement_growth 谓词表与 boss_kill_count 计数域去留):T0⑥ 消费面核查未决,表体保留他用的断言主语已写明(槽位判定源只剩树点亮态),表体退役则 grep 清单随行扩列。 - -**歧义扫描六裁(2026-10-11 /grilling,用户逐裁)**:①分叉文案回归「危险格/安全格」正主词(废「陷阱/危险标记」自造词);②地脉共鸣效果改生命/攻击/护甲三线(命中分量待命中线注入随批加回)——**后随 v0.6 攻防所有权切分换代为生命/命中两线**;③行门槛总等级口径=tree_nodes 全部节点等级之和(免费点亮与分叉解锁计入);④聚=仅战斗掉落渠道、散=全部 GP 消费面;⑤限次计数生命周期=随冒险持久/按关重置/新冒险清零/断点保留;⑥GDD 三处旧裁决换代落 v0.4——已全部落 [天赋树](../gdd/systems/跨局循环/天赋树.md) v0.4,T3 措辞随行对齐。 - -**攻防所有权切分连带换代(2026-10-11 锻造工坊裁决会话定案,卡 v1.4 落卡)**:来源=A 组三裁(生命归树脊柱/营地四柜台并排+攻防独立柜台/工作间两区并列)+攻防所有权切分(攻击唯一入口=武器路线、AC 唯一入口=甲路线,树零攻防来源=红线,树 29→21)+锻造工坊钥匙改无前置直接可点亮——树侧落文归天赋树会话交接批。**新开放待裁点 R1:schema「等级阈值前置」新形态去留**——钥匙改无前置后该形态现无消费者:**裁撤(推荐)**=T1 删 requires_level 设计项、schema 只保留点亮前置、V2 阈值断言取消,将来需要时随批重立;**留作机制位**=保留字段与校验(零消费者的机制容量,随批零消费落地)。裁决前 T1/T2 按「视 R1」双态执行,默认按裁撤案排程,用户推翻即先改文档。 - -**一线一节点换代(2026-10-11 用户裁,卡 v1.5)**:用户明裁「一个内容一个节点,等级在节点内、不拆多节点」——脊柱淬炼收编为生命/命中各一节点×4 级(层=级,原「4 层×层内 3 购」作废;「内含 12 级」系落文批从旧表临时 cap 机械推算的误读,已纠正);行门槛不删(用户驳「合并破坏统计/门槛」之疑——节点等级可区分可计数),主语平移=节点第 N 级需全树总投入 ≥4×(N−1)(SPINE_ROW_GATE=4 公式不变,row 字段退役);全树 21→15;契约 10 立红线(脊柱同一内容禁再拆多节点);R1 不变。 - -**Fork 一节点双态换代(2026-10-11 用户裁,卡 v1.6)**:用户明裁「开局姿态/危险直觉/财富之道三天赋=三节点、解锁之后可以切换形态」——现役 A/B 双行结构(迭代 12 沿袭)收编为单行双态:购买解锁 cap1、解锁默认 A 态、营地零币切换(互斥由单态承载);行持 a/b 双效果键、效果按激活态取值;fork_sides 存档语义不变(组→激活态);同调脉 9→6、全树 15→12;契约 11 立红线(同组禁拆回 A/B 双行);R1 不变。grilling 五裁+歧义扫描六裁(除②随 v0.6 换代为两线外)+契约 9/10 不动。 - ---- - -## 11. 2026-10-12 完备性审查裁决表(卡 v1.7) - -> 来源:2026-10-12 grilling 完备性/跨系统歧义审查(针对本卡的「概念是否闭环 + 与其他系统是否有冲突」)。三路事实核查(GDD 权威文档 / 代码侧 / 跨系统文档)后逐条呈报,用户逐裁。下表为**最终口径**,卡片正文已按此改写。 - -| # | 议题 | 裁决 | 落点 | -|---|---|---|---| -| ① | **账号层攻击/AC 空窗期**(T4 退役 buy_forge 后、锻造工坊实装批冻结未排期 ⇒ 无永久强化入口) | **知情接受**。不设过渡、不登记欠账——Alpha 开发阶段接受任何空窗与不一致,本就是要分步解决。局内商店货架仍为攻击来源(当局清零) | §4 不做清单 | -| ② | **财富之道·散的折价范围**(GDD `天赋树.md:111`「避让商店刷新在册旋钮」vs 原卡 T3「全部 GP 消费面」) | **只覆盖商品购买价格,不含刷新**。理由改为**「折扣的定义边界=商品标价」**——原「避让在册旋钮」这个理由被否(不能因为旋钮在册待裁就回避设计)。键名改 `gp_cost_mult`(`cost_mult` 已被 `yield_mult` 占用);聚的乘算落**入账前**(结算框显示实得)。GDD 那句须改写=反哺点 | T3 / V10 | -| ③ | **限次计数承载**(原卡挂 T0 选型未决) | **复用 `adventure_counters` + `domain:"adventure"`**(seed/export/断点三件套现成)⇒ **不新增存档域、不升 v7**;唯一缺口=「按关重置」,在 `adventure_runner.gd:1056` `_start_current_level()` 加清零 | T3 / V10 | -| ④ | **危险直觉结算时序** | 锋与守**都在结算阶段**:探索阶段无法知道标记对错(插旗零事件外发、呈现层对 `is_mine` 零引用),只有结算才揭晓。**锋不用改**(`mine_hit` 挂点现成,本就在结算段内);**守改下轮给 AP**(`grant_ap mode:queue`,挂 `_flag_miss_seen` 闸后) | T3 / V10 | -| ⑤ | **守侧触发语义**(我原判「旗不可逆 ⇒ 每轮返还 = 永动机」——**理解错误,已纠正**) | **触发主语=「当回合发生的标错动作」,不是「在场标错旗」这个状态**。双条件:①当回合新插的旗结算时判为标错;②结算时该旗仍在场。三场景:当回合标错且旗在场→触发 / 标错后挖掉该格→不触发 / 之前回合标错→不触发。**单格最多一次=失误补偿** | 契约 12 / T3 / V10 | -| ⑥ | **末轮标错** | **不返、合法作废**——战斗都结束了不该有奖励。不设兜底 | 契约 12 / V10 | -| ⑦ | **存档破坏性废弃 vs `存档序列化.md` 8 条反向条款**(含 `:170`「改版不弃档」验收条目) | **开发阶段无视任何条款**。不为本批新增任何豁免/例外条款,文档层一律不改写 | 契约 4 / §5 / T5 | -| ⑧ | **生涯页「属性锻造」行去向** | **整行删**,不换代。`生涯.md:43` 三个数据源 `forge_level` / `workshop_status` / `tree_nodes` **全删**——**生涯页不统计天赋树与账号成长态,只统计终身计数**。07-体验验证清单⑲两观测项同步摘除 | T5 / V20 / V21 / §5 | -| ⑨ | **AP 上限被击穿**(树+AP 件+时沙走同一条 `_pending_ap_delta`,无上限 clamp ⇒ AP 10/8) | **甲:本批不碰**,登记 06 欠账;出口报告写明「新叠加源使该既有缺陷可观测化」 | §4 不做清单 | -| ⑩ | **三选一刷新软上限**(原付费无次数上限) | **不加硬上限,改软上限**=「停点内 GP 倍率增长 × 停点间基础价随关卡进度小幅递增」。**现役缺的是第二维**(基础价恒 20、与进度无关 ⇒ 后期 GP 更多而刷新不涨价,软上限自动失效)。**另立待办,不进本批**;商店货架刷新共享同一对旋钮、**同步跟涨** | §4 不做清单 | -| ⑪ | **Y(`_attune_refresh_y`)不入断点的存档漏洞** | **本批不修**,登记 06 欠账;出口报告须点名,避免 V15 被误读为刷新链路已可用 | §4 不做清单 / V15 备注 | -| ⑫ | **§5 之外另查到的 42 处旧表述** | **不做**(开发阶段口径 + 不做加法)。仅修正 §5 内一处写错路径:`排雷循环/秘宝.md` → `跨局循环/秘宝.md` | §5 / T5③ | - -**审查中已澄清、此前怀疑不成立(存档备查)**:①12 节点构成自洽,彩蛋含在「锻造 2」内非第 13 行;②GDD 彩蛋已是生命/命中两线(脏的是现役表行 `meta_tree.tres:402/405`,故 V8 补了 effects 键集硬断言);③`boss_kill_count` 有 5 个非槽位消费面、**域不可删**,`clear_count` 同样不可删,可退役的只有 `attunement_growth` 谓词表的槽位求值职责;④标错机制查实存在且有代价 ⇒ T0① 免查、L3 相应停机项删除。 diff --git a/design/research/需求卡片-战斗一屏样张批-2026-10-16.md b/design/research/需求卡片-战斗一屏样张批-2026-10-16.md index b7f82e1e..3a2abc7c 100644 --- a/design/research/需求卡片-战斗一屏样张批-2026-10-16.md +++ b/design/research/需求卡片-战斗一屏样张批-2026-10-16.md @@ -1,6 +1,7 @@ # 需求卡片:战斗一屏样张批(整屏样张判定物首跑 · 四屏样张排程 · 防不满意工序重排) - 版本:**v1.4**(2026-10-17 开工前预授权复查:本卡**不适用** U1 预授权——两处人闸(T1 方向稿选划/T3 气质终审)是防不满意机制本体,取消即拆机制;四项 L3 经分类**全部属「触既有裁决面/超出本批面」类,维持停机呈报**,详见 §6 分类结论注);**v1.3**(2026-10-17 文档同步闸 v3 口径修订,纯文档批〔分支 carddoc-20261017〕按用户六条裁定执行——①本批(代码实现批,此处含样张工具面)禁写 `design/` 整目录与根规则文件,§8 同步面的同步义务一律执行为「列进 `reports/iter30-反哺点-<完成日>.md`(哪个文件哪一节、写成什么、依据),用户会话裁决后归文档批落文」;冻结记录段全文、目标规格清单、H1–H11 逐项处置、徽章明度档复核转正记录等**成文内容本体随反哺点条目交付**;②产出物落位换代:实现报告/代拍板追认单/反哺点清单三份落 `reports/`,不再 `design/qa/`;③T5 末卡改「产出物落位卡」(三份 reports/ 文件写齐才算收口);④闸口径按域选档:重闸 = `tools/run_all_gates.sh` 按改动域选档(本批触碰 `tools/` 样张面 → `--code`),卡内不再用「全量档全绿」类字样;⑤实机目检项写进 `reports/iter30-实现报告-<完成日>.md` 目检总清单,「入册 07」转反哺点;§7 裁决留痕原文不动,其落文类表述的执行口径随本版换代);**v1.2**(2026-10-16 用户裁决回写:Q1–Q6 六项全部已裁——裁决来源统一措辞「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」,§7 逐条留痕;本版改动:§7 由「待裁点」改为「裁决记录」(选项原文保留+裁定案+一句理由),排期改实(迭代 30 已编入、roadmap 同步在批;三卡串行位第 2=徽章→样张→观感),§0/§1/§2/§3/§6/§7.5/§8 按裁定口径改实,T0 承接 Q5 甲案死指涉处置(指代稿候选 v31/v32/v33-draft 实查拍板),T1 新增 Q3 乙案试验件前闸(半天,不过闸退甲案预设退路),T2/T3 承接徽章卡 Q2 甲案之明度档复核转正义务(§7.5 D1 改实),T4 随 Q2 甲案退役为登记行(06 三屏排队行=本批交付义务,写入文档时点=批次出口),估时随 Q3 乙案重算为 **≈5–6d** 并改软盒拆批线,全卡不留已裁 Q 项的「待裁」字样)。v1.1(2026-10-16 grilling 对抗审查修订;v1.0 同日成文)v1.0→v1.1 改动八项,逐条证据见文末「grilling 审查记录」:①**事实面订正七处**——整屏四项的机检代码并非「从无」(`tools/shot_checker.py` 头注自述承载 §1.4 整屏闸机检,迭代 9 T8 已首跑实测 PASS,git 053baeee;缺的是样张判定物与③焦点预算);死指涉行号 527→**562**;v1 四否决原因补全四条(②封印色冲突、④微光格只留微光此前漏列);playnote 引文改逐字;P5「worktree 不可直接跑」证伪(两级回退+自动建目录);旧锚 §5.1 另存于 06:41(此前只登记看板一处);战斗表现内容清单仍写「四区」(现行三区 B/C/D)。②新增 **P10**(关卡屏样张 v1 已冻结 2026-09-28,系立闸前产物)与 **P11**(§1.4 的执行时机已被屏级落码批越过,本批性质=闸后补跑)。③新增 **§0.5 样张批继承的既有待裁义务清单**(全库检索「待样张批冻结/终审/追认」得十项,本批禁止静默丢弃)。④新增 **§0.6 已裁项核收表**(Q 清单据此收敛,已裁面不复问;同时关闭本卡三处隐性重问)。⑤Q1 补乙案连带(A4 尺寸基线须显式解冻重校)、Q2 补关卡屏既有件、目标句与完成定义去掉「并集单闸」预设(合体方式归 Q6 未裁)。⑥新增 **§7.5 跨卡依赖**(与迭代 30 并行两卡的次序耦合+触碰面重叠禁三线并行)。⑦估时加总订正(T4 上限与合计重算)+补先例出处。⑧验收 V 条逐条改挂实存工具,判不了项降级并注明手段。 +- **指路订正(2026-10-20)**:徽章卡(迭代 30 卡①)与测试分层卡(迭代 29)已按 doc-conventions §11「吸收即死」退役,本卡对两卡的三处指路句改为结论内联+提交号(`7ffd1dc0`/`fff4f120`),裁决内容零变更。 - 来源:[06-待办清单](../gdd/06-待办清单.md)「战斗一屏样张 P0 未开工——界面成品是否过审的那把尺子还没建(2026-10-13 登记,UI 美化三层诊断 · 第二层)」条(:37-43;注:该条「尺子到现在还没造出来」的措辞与 P1 读数有差——机检代码在位,缺的是样张判定物,T0 订正面连带此句);依赖素材取自同清单相邻条「UI 贴图重构批」(:21-27)「UI 字体补完」(:29-35)「资产升档重产批」(:465-471)「立绘清晰度回退评估」(:473 起)「迭代 26 反哺点④」(:78)「美术资产链路审计两项 P0」(:609-615) - 归属:**美术线**(06 原条归属栏:战斗屏样张的验收标准归[战斗表现](../gdd/systems/战斗循环/战斗表现.md)与[美术圣经](../art/art-bible.md)共裁);样张生产脚本与机检面归呈现层工具面(工程) - 排期:**迭代 30 已编入**(2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕),[roadmap](../../roadmap.md) 编入行已在案、批内状态刷新列反哺点);三卡串行序位第 2(徽章→样张→观感,§7.5 D3 改实);开工门 = U0〔用户 `/iter` 发令——Q1–Q6 已全部裁决(见 §7),无遗留待裁项〕;v1.1 之「Q1 必须先裁」前提随其裁决(丙案)关闭,本批依赖链与任务顺序已按丙案口径改实(见 §0/§3) @@ -10,7 +11,7 @@ ## 0. 前置依赖与并行性 -**串行位**:按 roadmap 执行纪律「一迭代一 loop、单迭代串行」(roadmap.md:93),本批**已编入迭代 30**(2026-10-16 用户令,roadmap 编入行已在案、状态刷新列反哺点),前置=迭代 29([需求卡片-测试分层与门禁语义修正批-2026-10-15.md](需求卡片-测试分层与门禁语义修正批-2026-10-15.md))完成后开工;三卡串行序位第 2(徽章→样张→观感,2026-10-16 用户令裁定,§7.5 D3 改实)。**两处限定(v1.1 补)**:①迭代 29 已于 2026-10-16 合入 master(合并提交 fff4f120,roadmap.md:88 状态=✅ 已入库;本卡原「迭代 29 U0 未解」读数随之作废,见 §7.5 D4),该前置已满足;本批开工时点仍取决于用户 `/iter` 发令,禁把「迭代 29 完成后」读成排期承诺;②触碰面重叠除 iter29(`tools/`、06、08、07、roadmap、active.md)外,**还包括另两张迭代 30 卡**(徽章卡动 `presentation/views`+06/08/07+art-bible 修订行;棋盘观感卡动 `tools/recolor_terrain_tiles.py`+golden 基线+art-bible §4.1/§4.3+08 表现行)——三卡各写 06/08/07/art-bible/roadmap/active.md,序位既裁则「禁三线并行」转为逐批串行执行,详见 §7.5。**v1.3 注**:三卡文档直写义务已按 2026-10-17 文档同步闸 v3 全部转为反哺点(落 `reports/`,见 §8),上列汇聚文件重叠随之消解,但 2026-10-16 串行序位裁定不因此失效——序内仍有 golden 基线先后(§4B/§7.5 D2)与 art-bible 冻结内容先后(D1)依赖,禁三线并行维持。 +**串行位**:按 roadmap 执行纪律「一迭代一 loop、单迭代串行」(roadmap.md:93),本批**已编入迭代 30**(2026-10-16 用户令,roadmap 编入行已在案、状态刷新列反哺点),前置=迭代 29(需求卡片-测试分层与门禁语义修正批(迭代 29,已入库合并 fff4f120,卡片已退役))完成后开工;三卡串行序位第 2(徽章→样张→观感,2026-10-16 用户令裁定,§7.5 D3 改实)。**两处限定(v1.1 补)**:①迭代 29 已于 2026-10-16 合入 master(合并提交 fff4f120,roadmap.md:88 状态=✅ 已入库;本卡原「迭代 29 U0 未解」读数随之作废,见 §7.5 D4),该前置已满足;本批开工时点仍取决于用户 `/iter` 发令,禁把「迭代 29 完成后」读成排期承诺;②触碰面重叠除 iter29(`tools/`、06、08、07、roadmap、active.md)外,**还包括另两张迭代 30 卡**(徽章卡动 `presentation/views`+06/08/07+art-bible 修订行;棋盘观感卡动 `tools/recolor_terrain_tiles.py`+golden 基线+art-bible §4.1/§4.3+08 表现行)——三卡各写 06/08/07/art-bible/roadmap/active.md,序位既裁则「禁三线并行」转为逐批串行执行,详见 §7.5。**v1.3 注**:三卡文档直写义务已按 2026-10-17 文档同步闸 v3 全部转为反哺点(落 `reports/`,见 §8),上列汇聚文件重叠随之消解,但 2026-10-16 串行序位裁定不因此失效——序内仍有 golden 基线先后(§4B/§7.5 D2)与 art-bible 冻结内容先后(D1)依赖,禁三线并行维持。 **闸已立、机检面已跑过实机帧、样张判定物从未出**:整屏样张闸条款已于 art-bible v3.0(2026-09-29)写入 §1.4(L64)——四屏各出一张整屏样张、验收四项、闸形「方向稿目检先行」、执行时机 = 屏级视觉落码开工前;§7.1 占位完成条款同步在位(L411,程序化占位 = 临时态,终稿闸 = §1.4 整屏样张过闸,占位态禁止跨里程碑)。**机检面并非空白**:`tools/shot_checker.py` 头注自述「整屏样张闸机检(迭代 9 卡⑤/T8 2026-09-30)」,四项中 ①文字对比 ②明度三档带 ④文字禁压纹理 已有实现(B/C/D 段,另 F 段补「文字在判据」),③整屏焦点预算明文「语义面无法机检 → 归实机目检人闸」(E 段);该断言集 2026-09-30 已对**实机渲染帧**首跑实测 PASS(git 提交 053baeee:「实测 PASS——WCAG 5.79-13.14/三档 204>79>55/骨架四屏过;焦点预算=目检项归段闸人闸」),随闸三裁决亦已裁毕(见 §0.6;呈报单原文件 design/qa/m3-iter9-t8-rulings-2026-09-30.md 已按吸收即死纪律在提交 8e02dcf0 删除,结论以各权威文档现行为准),现挂在 `tools/render_gate.sh` ①段周期跑。**本批要补的是剩下的半截**:出 §1.4 意义上的整屏**样张判定物**(目标图,非现状截图)、走「方向稿目检先行→精制→冻结」的闸形、补 ③焦点预算的判定、按屏扩取样点位、立四屏冻结记录(**v1.2 按已裁范围收窄:Q2 裁甲案,本批只出战斗屏判定物与其冻结记录,余三屏登记 06 排队行归后续批**)。**不新立闸条款。** @@ -26,7 +27,7 @@ | P6 | 样张 v1 曾被用户**四原因整体否决**(2026-09-28),四条已全部断言化。**权威映射表在脚本写报告的那段代码里(L1156-1160),不在头注**——头注只逐条标了 ①③ 的编号,②④ 需从映射表补:①**显示太丑(总纲)**→ A6 观感密度+装饰变体 ≥2 种;②**封印色冲突**→ 封印黑 #000000(A1a 色板对表自动覆盖);③**立体感不够**→ A3 图底分离阈值上调+F6 顶面/立面双明度带 Δ≥18+F7 整板悬崖 DEPTH_PX 与游戏渲染常量同源;④**微光格只留微光**→ F5c 微光段零 draw_inlay(另见 art-bible v2.12 角嵌退役批)。注:脚本头注 L23 仍写 A3 Δ≥55、L1157 仍写「整板明度 std ≥50.9」,两处均是**旧口径残留文本**,现行定值以圣经 §1.4 v3 记录为准(A3b Δ≥30、A6 明度梯度均值 ≥4.70) | 脚本 L12-26(F1–F7/A1–A6 头注)+L1156-1160(四否决映射表);art-bible L68(Δ≥30 定值)/L570(v2.13「v1 四否决原因断言化收官」)/L569(v2.12 ④) | | P7 | 用户气质否决另有两例点名先例:①站桩排版旧格式「盒顶固定 y 与盒内居中在高盒下拉开血条-立绘空洞」2026-10-06 用户点名否决,由 art-bible §8.2「站桩立绘排版 = 方案二」代替(L496);②playnote 立绘批评,**逐字原文**:「现在的立绘太丑了,像素化的粒度太低了,导致根本看不清立绘;看是否可以改回用较为高清的图片?」(playnote.md:9,文件本身无日期;日期系 06「资产升档重产批」条 2026-10-06 注所记「同日 playnote 立绘批评」,裁定日为 2026-10-13 归美术线) | [playnote.md](playnote.md):9;art-bible §8.2 L496;06:465-471/06「立绘清晰度回退评估」条 | | P8 | 氛围层两派并存(平滑渐变件 vs Bayer 有序抖动)——**已裁半**:vignette/gradient_base/beams 三件保平滑连续 alpha(2026-10-13 grilling Q5 裁,已入 §7.6(三)+§8.2 LINEAR 豁免清单);**未裁半** = 两派是否统一,明文「留整屏样张批统一裁决」——本批承接的正是这未裁半(**Q3 已裁乙为主**:统一结论在引擎实拍图上呈报、落 T3 裁决记录,见 §7) | art-bible §7.6(三) L465、§8.2 L486;06:78(迭代 26 反哺点④)/06:82(用户裁「全部按呈报写入文档」) | -| P9 | 渲染手段现状:**全仓 `.gdshader` 实测仅一枚**(`game/presentation/views/desaturation.gdshader`,结算去饱和),`ShaderMaterial` 消费面实测仅 `board_view.gd` 一处(:111 声明/:170-172 创建/:194 tween 参数),`.tscn` 内无 shader 节点;样张面全部为 PIL 代码绘制;「Godot shader 能否胜任特效」是用户已提出的未验证疑问(已由 Q3 裁定乙案承接:开工先半天试验件坐实,见 §7;另卡亦载,见 §7.5) | 2026-10-16 全仓检索(`find *.gdshader`+grep `ShaderMaterial`);[徽章卡](需求卡片-未开格类型徽章批-2026-10-16.md) F5/用户立场前提行 | +| P9 | 渲染手段现状:**全仓 `.gdshader` 实测仅一枚**(`game/presentation/views/desaturation.gdshader`,结算去饱和),`ShaderMaterial` 消费面实测仅 `board_view.gd` 一处(:111 声明/:170-172 创建/:194 tween 参数),`.tscn` 内无 shader 节点;样张面全部为 PIL 代码绘制;「Godot shader 能否胜任特效」是用户已提出的未验证疑问(已由 Q3 裁定乙案承接:开工先半天试验件坐实,见 §7;另卡亦载,见 §7.5) | 2026-10-16 全仓检索(`find *.gdshader`+grep `ShaderMaterial`);徽章卡(迭代 30 卡①,已入库合并 7ffd1dc0,卡片已退役)F5/用户立场前提行 | | P10 | **关卡屏并非零样张**:关卡画面样张 v1 已于 2026-09-28 冻结(机检 11/11 全绿,闸形 A=机检全绿即冻结,气质终审走 M-2 出口闸真人目检八项过),产物 `artwork/mockups/level-map-sheet-v1-2026-09-28.png` **在盘**。它立闸于整屏样张闸条款(v3.0,2026-09-29)之前,**从未按整屏四项判定过**——Q2 若裁含关卡屏,动作是「按四项补判既有样张」而非从零出图 | art-bible v2.14 L565、§7.2 L418;[level-map.md](../gdd/ux/level-map.md):3/:222/:244;roadmap.md:21(M-2 出口闸目检通过);2026-10-16 目录实查 | | P11 | **闸的执行时机已被越过,本批性质=闸后补跑**:§1.4 明文执行时机 =「屏级视觉落码开工前」,而屏级落码已发生四轮(迭代 9 视觉落码段、迭代 16 UI 设计对齐、迭代 25 全局主题、迭代 26 交互与观感),Alpha 亦已于 2026-10-03 到手(M-3 关闭);08「三 · 界面」多行已标在役、五 · 表现仍载「战斗一屏样张=待做」——即 §7.1「占位态禁止跨里程碑」在事实上已被跨。此定性直接影响完成定义第 1/3 条的语义(过闸≠事前定方向,而是对已在役形态出目标图判定物)与 T3 回炉半径 | art-bible §1.4 L64、§7.1 L411;roadmap.md:53/:68/:84-85;08:100-118/:158;美术审计-cursor会话存档-2026-10-14.md:168 | @@ -240,7 +241,7 @@ | # | 耦合点 | 谁的前提 | 次序与理由 | |---|---|---|---| -| D1 | **类型微光色值与明度档的冻结口径** | [徽章卡](需求卡片-未开格类型徽章批-2026-10-16.md) Q2 与其 S6 行 | **已改实(2026-10-16 用户令:三卡全部待裁项按推荐方案裁决〔用户将裁权授出,由主线会话代拍板留痕〕——徽章卡 Q2 已裁甲案:明度档取 provisional 值)**:「徽章卡 Q2 先裁」义务随其裁定关闭;**其复核转正义务落本卡样张冻结件**——本卡 T2 新增 H5 组间明度档复核+组间互辨抽测、T3 呈转正结论、写入完成定义第 2 条交付义务(见 §1/§3)。事实核对保留为对表依据:五组**色相**确已随样张 v2 定稿(art-bible §4.2 L218「样张 v2 定稿(2026-09-28)」+HUD框架:140 同记——「样张 v2 已冻结」与 08「战斗一屏样张=待做」并不矛盾:前者是**格子样张**序列(§1.4 L66/L68),后者是**整屏样张**序列(§1.4 L64),两条序列各有其闸),本卡不承接色相重冻义务;「徽章卡若裁乙(等本卡总闸)」分支不再发生。**本卡禁把色相值列进 Q 项**(已按契约 6 关闭) | +| D1 | **类型微光色值与明度档的冻结口径** | 徽章卡(迭代 30 卡①,已入库合并 7ffd1dc0,卡片已退役)Q2 与其 S6 行 | **已改实(2026-10-16 用户令:三卡全部待裁项按推荐方案裁决〔用户将裁权授出,由主线会话代拍板留痕〕——徽章卡 Q2 已裁甲案:明度档取 provisional 值)**:「徽章卡 Q2 先裁」义务随其裁定关闭;**其复核转正义务落本卡样张冻结件**——本卡 T2 新增 H5 组间明度档复核+组间互辨抽测、T3 呈转正结论、写入完成定义第 2 条交付义务(见 §1/§3)。事实核对保留为对表依据:五组**色相**确已随样张 v2 定稿(art-bible §4.2 L218「样张 v2 定稿(2026-09-28)」+HUD框架:140 同记——「样张 v2 已冻结」与 08「战斗一屏样张=待做」并不矛盾:前者是**格子样张**序列(§1.4 L66/L68),后者是**整屏样张**序列(§1.4 L64),两条序列各有其闸),本卡不承接色相重冻义务;「徽章卡若裁乙(等本卡总闸)」分支不再发生。**本卡禁把色相值列进 Q 项**(已按契约 6 关闭) | | D2 | **棋盘瓦片重产 vs 换色**(素材线同一入口) | [二三关棋盘观感卡](需求卡片-二三关棋盘观感批-2026-10-16.md) Q2(甲 recolor 换色 / 乙 远程生图重产) | **已改实(2026-10-16 用户令)**:序位裁定=徽章→样张→观感、本卡位第 2——观感卡排本卡之后,「同窗呈报两案代价」义务关闭;该卡 L2/L3 落地对本卡整屏②明度三档带与 A6 观感密度读数的复核,属该卡开工时按其 V2(A6 ≥4.70 保持)自跑的复验项,本卡冻结记录注明本样张基线读数供其对表即可;本卡 Q1 已裁丙案(非乙案),与其 Q2 各案不再有工期串行耦合 | | D3 | **触碰面重叠与合入次序** | 三张卡共同 | 三卡都写 06/08/07/art-bible 版本历史/roadmap/active.md,徽章卡另动 `presentation/views`+冒烟,本卡另动 `tools/` 样张面。按 roadmap.md:93「单迭代串行」与 roadmap.md:101「一迭代 = 一次合并登记」⇒ 三卡禁止三线并行。**已改实(2026-10-16 用户令):三卡串行序位=徽章→样张→观感,本卡位第 2**;「一次合并、批内分波」组织方式随序位裁定确定,v1.1「不预设结论、归用户排期令」呈报框架关闭。**v1.3 注**:三卡文档直写义务已按文档同步闸 v3 全部转反哺点(落 `reports/`),汇聚文件重叠消解,但串行序位裁定不失效——golden 基线与冻结内容的先后依赖仍在(D1/D2) | | D4 | **门禁语义改动的先后** | 迭代 29 测试分层与门禁语义修正批 | **已结案(2026-10-16 合入 master,合并提交 fff4f120;roadmap.md:88 状态=✅ 已入库)**:该批改的 `tools/run_all_gates.sh`/探针判定/退出码权威语义(其契约 2「三硬闸不可绕过」)已在现行闸内生效,本卡 V7 的闸口径直接按当期语义执行(本批 → `--code`)并按其当期读数采基线;原「该批先行/本卡先行」两种分支随之消解,本卡仍不改写任何判定脚本。(原两分支表述留档供沿革查 git log) | diff --git a/design/research/需求卡片-敌人表内容修批-2026-10-13.md b/design/research/需求卡片-敌人表内容修批-2026-10-13.md deleted file mode 100644 index 68af2481..00000000 --- a/design/research/需求卡片-敌人表内容修批-2026-10-13.md +++ /dev/null @@ -1,232 +0,0 @@ -# 需求卡片:敌人表内容修批(三关) - -- 版本:**v1.1**(2026-10-13;v1.0 成文后经 grilling 复核,Q1–Q9 已按推荐案全裁,2026-10-13 用户令「按推荐方式进行」) -- 来源: - - [06-待办清单](../gdd/06-待办清单.md)「第一关遭遇表数值异常——难度曲线倒挂与敌种疑似填错」(第 232 行,2026-10-13 登记,Alpha 阶段需完成) - - [06-待办清单](../gdd/06-待办清单.md)「第二关技能池与投放」(第 216 行,P1 待办) - - [06-待办清单](../gdd/06-待办清单.md)「锻造工坊实装批」迁移面⑥「敌方攻击类型轴填值(3b 裁连带,跨系统汇合点)」(第 126 行)——本卡承接其执行面 - - 实证来源:[Alpha未完成事项梳理-2026-10-13](Alpha未完成事项梳理-2026-10-13.md)「附 · 内容投放实证」 -- 归属:[敌人系统](../gdd/systems/战斗循环/敌人系统.md)(遭遇表行值、敌种归属、技能池)+ [难度曲线与Boss](../gdd/systems/冒险循环/难度曲线与Boss.md)(难度曲线单调性与投放节奏) -- 排期:**已编入 roadmap 迭代 24 卡①**(2026-10-13 用户令;卡片状态=已编入,开工门=U0)。迭代 24 位预留,用户将追加其他卡。 -- **设计前置声明**:N1、N3 属**缺陷修复 / 结构补列**类,凭 06 在册条目与代码级证据直接写卡;**N2 属新内容类**,[敌人系统](../gdd/systems/战斗循环/敌人系统.md) v0.13 只定了「Boss 独占技随关错峰」,普通敌一轨未定稿——其设计内容已由 Q2 落裁(见 §10),本卡按裁定结果执行。 - -## 1. 目标与完成定义 - -| 需求点 | 一句话 | -|---|---| -| **N1** | 第一关 (1,2) 熊地精 50 血是一堵 5 倍墙,与前后节点(总量 10 / 35)严重不协调。**降档**(敌种不动) | -| **N2** | 第二关与第三关的**普通敌零新招**——所有新技能只挂在 Boss 身上。**补两行普通敌技能** | -| **N3** | 敌方攻击类型轴从未填值,敌方伤害单据恒不查克制矩阵,导致锻造工坊选甲路线在受伤侧**零战斗意义**。**加列并全填 normal** | - -**完成定义**:`enemy.tres` / `skills.tres` 改毕;`smoke_all.gd` 的 `expect_pools` 契约同步;新增断言入冒烟;改前/改后同随机种子 MC 配对读数完成且位移随批呈报;批末四闸(冒烟+单元+探针+读数对拍)全绿;06 三条销号(含一处措辞更正与一处沿革补注)、08 表行回填;目检项登记 07。 - -## 2. 现状事实(2026-10-13 代码级实查) - -### N1 · 第一关 (1,2) - -`enemy.tres` 按 `(level_index, node_depth)` 索引,第一关五行(「总量」= hp × 中位数量): - -| 行号 | 坐标 | 敌种 | display_name | hp | ac | 数量 | 总量 | -|---|---|---|---|---|---|---|---| -| :8 | (1,0) | goblin | 地精 | 8 | 0 | 1-2 | 12 | -| :28 | (1,1) | goblin | 地精一伙 | 4 | 1 | 2-3 | 10 | -| **:48** | **(1,2)** | **bugbear** | **熊地精** | **50** | **3** | 1(定值,无 max) | **50** | -| :70 | (1,3) | hobgoblin | 大地精 | 14 | 2 | 2-3 | 35 | -| :93 | (1,4) | ogre_chief | 食人魔酋长 | 72 | 8 | 1 | 72 | - -**(1,2) 完整字段**:`unit_count 1`(无 `unit_count_max`)、`hp 50`、`atk 1`、`atk_min 0`、`atk_max 2`、`pool = attack6/charge2/heavy2`、`armor_type light`、`armor_class 3`。 - -**⚠ 两条推翻 v1.0 判断的事实**: - -1. **(1,2) 不是填错,是 2026-09-24 用户裁决的设计**。`enemy.tres:594-600` 注释原文: - > 实体名修正批(2026-09-24——用户裁决,DND 阶梯对齐):**(1,3) 熊地精双雄 → 大地精**(enemy_id bugbear→hobgoblin,仅本行;L2 bugbear 三行熊地精系不动)。依据:① DND 阶梯 地精(goblin)→大地精(hobgoblin)→熊地精(bugbear) 与实测每只血量 4-8→14→50 严格同构——**单只熊地精 50 血在前、三只 14 血在后,同族每只血量倒挂的观感由阶名归位化解** - - 即:当时两行都是 bugbear,出现同族血量倒挂,解法是**把后面那行改名成低一阶的大地精**,用阶名化解观感;(1,2) 的 50 血**是明知道并保留**的。故 v1.0「敌种疑似填错 / 整行错位实锤」的定性**作废**——那不是错误,是裁决,只是在 2026-10-13 实机验证下未达预期。 -2. **`hobgoblin` 没有立绘**。`game/assets/art/character/` 八敌立绘齐全(bugbear / drider / duergar / duergar_king / giant_spider / goblin / hook_horror / ogre_chief),但 `enemy.tres` 有 **9 个 enemy_id**,多出的正是 `hobgoblin`。故 v1.0 甲案((1,2) 改 hobgoblin)会新增一个无立绘显示位——**已否决**。 - -**关于「第二个节点」的登记偏差(如实记录,供复核)**:06 条目把 [playnote](../research/playnote.md):9 的「第一关的第二个节点数值有问题」对应到了 (1,2)。但 `level.tres` 注释明载「L1 奖励/休整禁入前三位」、五张模板前三位均为纯战斗,故**按字面计数第二个战斗节点 = (1,1)**(地精一伙 hp4),而非 (1,2)。本卡**按实查确证的客观崩坏取 (1,2)**(总量 10 → 50 是 5 倍墙,玩家感知最强的正是它),并**不擅自修 (1,1)**(其 hp4 按总量算 10 与 (1,0) 的 12 持平,属群怪「单只薄、数量补」设计)。**若原意确为 (1,1),N1 需重裁后重开**——该偏差已随批补注 06。 - -### N2 · 第二/三关技能投放 - -`skills.tres` 共 **12 行**(`pity_threshold = 4`),字段样例:`lunge`=damage / 1.5 / CD2;`heavy`=damage / 2.0 / CD3;`bite`=damage / 1.5 / CD1;`charge`=buff / buff_ref empower / CD3;`harden`=buff / fortify / CD4。 - -| 关 | 该关首次出现的新技能 | 落点 | -|---|---|---| -| L1 | lunge / charge / heavy / harden / quake_smash | harden、quake_smash = Boss 独占;lunge/heavy 普通敌有 | -| L2 | **bite** / venom_burst / web_snare / venom_curb | 后三个**全是 Boss drider 独占**(`enemy.tres:277`);普通敌新增**只有 bite** | -| L3 | earth_pulse / rockslide | **全是 Boss duergar_king 独占**(`enemy.tres:441`);普通敌**零新招** | - -L2 熊地精池(attack/lunge/heavy)对比 L1 熊地精池(attack/charge/heavy)**只是 charge↔lunge 对调**;L3 灰矮人与钩爪恐魔用的全是 L1/L2 旧技能。**结论:池可用(不是 Alpha 阻塞项),问题在「独占技随关错峰」只做在 Boss 侧。** - -### N3 · 敌方攻击类型轴 - -- `enemy.tres` **全文无 `attack_type` 列**;`enemy.tres:527` 是注释行,原文「敌方技能攻击类型轴仍未开(全部 normal 档)」。 -- `enemy_table.gd:110-113` 只校验 `armor_type`(域 {light, ward, heavy}),无 attack_type 校验。 -- `unit_container.gd:119` 敌人快照有 `armor_type`、`:120` 有 `armor_class`,**无 attack_type**;主角侧 `:66` 两轴齐全(空串回退 `db.forge_default_*()`,默认值 `normal` / `light`)。 -- `battle_orchestrator.gd:1406-1407` 敌方伤害技开单 `open_ticket(...)` **第 9 位 attack_type 恒传 `""`**。 -- `damage_controller.gd:187`:`matchup_o = (attack_type + "_vs_" + armor_b) if attack_type != "" else ""`——空串即不查矩阵。 -- 克制矩阵(`settlement.tres:31-48`)`armor_effectiveness`,**点数制**:`normal` → light 0 / ward **+1** / heavy **−1**(另 pierce / magic 两档本卡不启用)。 -- 主角 `armor_type` 现由锻造甲路线注入(`forge.tres` 默认 `light`),故全填 normal 的实际影响=**穿重甲受伤 −1、穿魔法护甲 +1、穿轻甲 0**,与 06:126 迁移面⑥「全局平移主角受伤点数」精确一致。 - -### 关联面(本批不动,但须知道) - -- ⚠ **`smoke_all.gd:3211` `expect_pools` 是 20 键的硬编码契约**,逐行钉死 `(关_节点_敌种) → 池内容`,含 `"1_2_bugbear": {"attack": 6, "charge": 2, "heavy": 2}`、`"2_4_giant_spider"`、`"3_0_duergar"` 等。**改池=改契约**,必须同步(见 §3 红线、§6)。 -- `smoke_all.gd:2478` `_level_active_nodes` 只取 `tpls[0]`——「每个战斗节点有精确行集」那条断言只覆盖每关第一张模板;全模板校验由 `level_table.gd validate` + `config_db` 跨表通道承担。不构成缺陷,登记为观察项,本批不修。 -- `level.tres` 注释:L2/L3 战斗节点编号恒 ∈ `{0,1,4,5,6,7}`(2=奖励、3=休整、8=商店、9=Boss),故遭遇表不含 2/3/8 是正常的。 -- 冒烟基线 **938/0**,`run_all` **24 套**;MC 读数工具 `tools/run_smoke.py` + `tools/analyze_playtest.py` / `balance_verifier.py`,读数落 `sim-data/`。 - -## 3. 设计契约(红线,违反=L3 停机呈报) - -- 🔴 **池与敌种键属契约级**:任何改动 `enemy.tres` 的 `enemy_id` 或 `pool`,必须**同一批内**同步 `smoke_all.gd:3211` `expect_pools` 对应键,禁止先改表后补断言。 -- 🔴 **(1,2) 敌种不动**:保留 `bugbear`,只降 `hp` 与 `armor_class`。理由:① 它是 2026-09-24 用户裁决的设计,推翻敌种需另立裁决;② `hobgoblin` 无立绘。 -- 🔴 **不改节点图拓扑**:不触碰 `level.tres` 任何模板与节点编号——那是 A1 关卡节点图重构的地盘。 -- 🔴 **首遇教学位 (2,4) 池不动**:巨蜘蛛首遇位保持 `attack6/bite2/charge1`;新技能从 (2,5) 起投。钩爪恐魔 (3,0)/(3,1) 数量与敌种零改动。 -- 🔴 **池构成纪律零违反**(敌人系统 v0.13 结构冻结):每池恰一行普攻、增益类 ≤1、妨害类 ≤1、权重 > 0、冷却 ≥ 0、`skill_id` 悬空致命。 -- 🔴 **行集构成纪律零违反**(敌人系统 v0.15):行集内 `enemy_id` 唯一、同坐标多行文件内相邻、行序=声明序=生成序、行集实例总数 ≤ 4。 -- 🔴 **克制矩阵数值零触碰**:`settlement.tres` `armor_effectiveness` 本卡不改;N3 只做「让敌方单据参与查表」。 -- 🔴 **N3 全填 normal,不做差异化**:挂敌种行、20 行同值。差异化填值(pierce/magic)属新设计,另立项。 -- **N1 不含全局标定**:只动 (1,2) 一行的 hp 与 ac;其余行的高低一律归 M4 数值批,本卡不借机调。 - -## 4. 范围边界 - -**做**: - -- **N1**:`enemy.tres:48` 一行改两值——`hp` 50 → **22**、`armor_class` 3 → **2**。其余字段(敌种、display_name、数量、atk 区间、pool)**全部不动**。 -- **N2**:`skills.tres` 新增 **2 行**(`venom_spit` / `shield_bash`,完整字段见 §6 T1),并按 §6 T1 的挂点表调 **6 个池**。 -- **N3**:`enemy.tres` 20 行各加 `"attack_type": "normal"`;`enemy_table.gd` 加枚举校验;`unit_container.gd:119` 加快照;`battle_orchestrator.gd:1406` 第 9 参改传 `String(u.get("attack_type", "normal"))`。 - -**不做**(去向): - -| 不做的 | 去向 | -|---|---| -| (1,1) 地精一伙 hp4(若原意确为「第二个节点」) | 已如实登记偏差于 §2 与 06,**本批不动**,需重裁则另开 | -| (1,2) 改敌种 / hobgoblin 立绘 | 敌种不动(§3 红线);立绘属美术线,用户已令暂不管 | -| 三关其余行的血量/atk/ac 高低(标定) | M4 数值批(Beta) | -| 节点图拓扑与模板池 | A1 关卡节点图重构批(Alpha,须先做文档设计) | -| 混编遭遇第二批(Boss 多行)、精英节点 | 06 在册,P2 后置 | -| 敌方技能图鉴 / 学习呈现 | 06 在册,P2(与生涯期三「敌人图鉴优先」同源) | -| 差异化攻击类型(pierce / magic) | 另立项 | -| 削弱档位终值、旧 MC 行为锚重锚 | M4 数值批 | -| `expect_pools` 覆盖面(只取 tpls[0]) | 观察项,本批不修 | - -## 5. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| [06-待办清单](../gdd/06-待办清单.md) | ① 第 232 行「第一关遭遇表数值异常」;② 第 216 行「第二关技能池与投放」;③ 第 126 行锻造工坊条迁移面⑥ | 三条随批销号。**另**:① 现状段须更正——去「敌种疑似填错」定性(改「2026-09-24 阶名化解方案实机未达预期,2026-10-13 重裁」)、去「三处异常」中的难度倒挂一条、补「第二个节点」字面指向 (1,1) 而本卡取 (1,2) 的偏差注。**机械面,随批** | -| [08-Alpha版本标准](../gdd/08-Alpha版本标准.md) | 二 · 内容量「敌种池」行注「第一关遭遇表数值待修」 | 随批摘除(08 为定稿 v1.0,改动记一行版本历史)。**机械面,随批** | -| `game/smoke/smoke_all.gd` | `:3211` `expect_pools` 20 键契约 | N2 同步 6 键(见 §6 T1);N1 因池与敌种键不变,**零改动**。**机械面,随批** | -| [07-体验验证清单](../gdd/07-体验验证清单.md) | 新增目检观测项 | 随批登记:① L2/L3 普通战斗是否见到新招;② 选重甲挨打是否可感更轻、魔法甲更疼;③ 第一关第三节点不再是墙(登记不阻塞)。**机械面,随批** | -| `design/registry/entities.yaml` | enemy 行新增 attack_type 字段;skills 新增 2 条条目 | 随批登记。**机械面,随批** | -| roadmap / active.md | 本批尚未编入迭代行 | 编入时随编入批更新;本卡不动 | -| [敌人系统](../gdd/systems/战斗循环/敌人系统.md) | ① 调参表敌人表字段集需增 `attack_type`;② 技能池节「三代错峰」口径需扩为「Boss 独占技 + 普通敌错峰」两轨;③ 敌种表技能池构成列随 N2 变动;④ 「八敌种」表缺 `hobgoblin`(有数据行、无立绘、不在敌种表) | **反哺点**:迭代实现报告列此四条待裁决,另批落文。**设计权威文档,不随批更新** | -| [难度曲线与Boss](../gdd/systems/冒险循环/难度曲线与Boss.md) | N2 投放后 L2/L3 难度带位移;N3 全局平移 | **反哺点**:同上;数值终值归 M4 | -| [Alpha未完成事项梳理-2026-10-13](Alpha未完成事项梳理-2026-10-13.md) | 附.2(1)「A2 新证据」定性需改;附.3「node_depth 缺 2/3/8」 | 随批加注订正。**机械面,随批** | - -## 6. 任务卡 - -### T0 · N1 第一关 (1,2) 降档(≈0.25d) - -1. `enemy.tres:48-68` 改两值:`"hp": 50 → 22`、`"armor_class": 3 → 2`。**其余字段一字不动**。 -2. 复核曲线:总量 12 → 10 → **22** → 35 → 72;相邻比最大 2.2(10→22)≤ 2.5 ✓。ac 序列 0/1/2/2/8 单调不回撤 ✓。 -3. `expect_pools` **零改动**(敌种键 `1_2_bugbear` 与池内容均未变)。 -4. 冒烟新增 N1 断言(§7 V1)。 - -### T1 · N2 第二/三关普通敌技能投放(≈0.5–1d) - -1. `skills.tres` 新增 2 行(字段完整,无 rider): - -| skill_id | display_name | type | damage_mult | cooldown_beats | rider_mult | -|---|---|---|---|---|---| -| `venom_spit` | 毒吐 | damage | 1.6 | 2 | **不带**(见注) | -| `shield_bash` | 盾击 | damage | 1.7 | 3 | 不带 | - -> **为什么不带 rider**:`skill_table.gd:19` 域 (0,1],但实际值 `max(damage_floor=1, floor(atk × rider_mult))`——L2/L3 敌 atk 仅 1–3,`floor(1 × 0.4) = 0` 会被地板兜成 1,与 0.75 档**效果完全相同**,白占字段。「毒绕开护甲」由 damage 直伤表达已足够。 - -2. 挂点与池改动(**6 个 `expect_pools` 键**): - -| 坐标 | 敌种 | 现行池 | 改后池 | -|---|---|---|---| -| (2,4) giant_spider | 巨蜘蛛(**首遇位**) | attack6 / bite2 / charge1 | **不动** | -| (2,5) giant_spider | 巨蜘蛛巢群 | attack6 / bite2 / charge1 | **+ venom_spit 2** | -| (2,6) giant_spider | 巨蜘蛛巢群 | attack6 / bite2 / charge1 | **+ venom_spit 2** | -| (2,7) giant_spider | 巨蜘蛛巢群 | attack6 / bite2 / charge1 | **+ venom_spit 2** | -| (3,0) duergar | 灰矮人 | attack6 / charge2 / heavy2 | **+ shield_bash 2** | -| (3,5) duergar | 灰矮人重装手 | attack5 / lunge2 / heavy2 | **+ shield_bash 2** | -| (3,7) duergar | 灰矮人小队 | attack6 / charge2 / heavy2 | **+ shield_bash 2** | - -钩爪恐魔族 (3,1)/(3,4)/(3,6) 与熊地精族 (2,0)/(2,1)/(2,5 bugbear) **不动**。 - -3. 逐池复查 §3 纪律:改后每池仍「恰一普攻 / 增益 ≤1 / 妨害 ≤1」——巨蜘蛛族增益仅 charge 1 个 ✓;灰矮人族增益仅 charge 1 个(3,5 无 buff)✓;两族妨害 0 ✓。 -4. 同步 `smoke_all.gd:3211` `expect_pools` 上述 **6 键**的键值(键名不变)。 -5. 冒烟新增 N2 断言(§7 V3/V4)。 - -### T2 · N3 敌方攻击类型轴(≈0.5d) - -1. `enemy.tres` 20 行各加 `"attack_type": "normal"`(挂在**敌种行**,与 `armor_type` 同位;全填 normal,不做差异化)。 -2. `enemy_table.gd` 增枚举校验:域 `{normal, pierce, magic}`,可省略 + 缺省 `normal` 向后兼容,未知枚举报错——写法沿用 `:110-113` 的 `armor_type` 同款。 -3. `unit_container.gd:119` 附近加单位快照 `"attack_type": String(row.get("attack_type", "normal"))`。 -4. `battle_orchestrator.gd:1406` 第 9 参由 `""` 改为 `String(u.get("attack_type", "normal"))`。 -5. 冒烟新增 N3 断言(§7 V5)。 - -### T3 · 读数、文档同步闸与全闸(≈0.5d) - -1. 改前/改后同随机种子 MC 配对读数三组(N1 / N2 / N3 各一组),工具 `tools/run_smoke.py`,种子沿用既有基线,位移随批呈报(不设自动阈值,超预期即 L2)。 -2. 文档同步闸:§5 机械面五件更新完毕+反哺点四条列明。 -3. 批末四闸全绿合并。 - -**估时合计 1.75–2.25d**。切分预案:若 N2 的 MC 位移需回调倍率,T1 上浮 0.25d 并另呈报,不动其余卡。 - -## 7. 验证闸(逐需求点验收清单) - -**能力验证(自动化,随批)**——冒烟新增断言: - -- **V1(N1)**:`enemy.tres` (1,2) 行 `hp == 22` 且 `armor_class == 2`;`enemy_id` 仍为 `bugbear`、`pool` 仍为 `attack6/charge2/heavy2`(防顺手改多);第一关相邻节点「hp × 中位数量」总量**比值 ≤ 2.5**(现行 12/10/22/35/72 全绿)。 -- **V2(N1)**:改前/改后同随机种子 MC 配对——第一关单关通关率与承伤中位,逐位对拍,位移随批呈报。 -- **V3(N2)**:`skills.tres` 行数 == **14**;`venom_spit` / `shield_bash` 两行字段域合法、`type` ∈ 枚举、**无 `rider_mult` 字段**;全库 `pool` 引用 `skill_id` 零悬空。 -- **V4(N2)**:`expect_pools` 6 键键值与表一致(`2_5/2_6/2_7_giant_spider` 含 venom_spit 2、`3_0/3_5/3_7_duergar` 含 shield_bash 2);**`(2,4)` 首遇位池仍为 attack6/bite2/charge1**(防误加);逐池复查「恰一普攻 / 增益 ≤1 / 妨害 ≤1」。 -- **V5(N3)**:20 行 `attack_type` 均非空且 == `normal`;敌人单位快照 `attack_type` 非空;敌方伤害技单据载荷 `attack_type` 非空;**构造穿重甲主角跑一次敌方攻击,实测受伤点数 == 基线 −1**(矩阵命中证词,不是查表存在性证词);穿轻甲 == 基线、穿魔法护甲 == 基线 +1。 -- **V6(N3)**:改前/改后同随机种子 MC 配对——全局承伤中位位移随批呈报。 -- **V7(回归)**:冒烟基线 **938/0** 全绿、`run_all` **24 套**全绿、探针 `--click`/`--full` 全绿。 - -**正常流程体验(用户目检,登记 07 不阻塞)**: - -1. 第二关与第三关的普通战斗,是否真的见到「第一关没见过」的招式(不是只有 Boss 变花)。 -2. 营地选重甲进战斗,挨打是否比选轻甲**可感知地**轻一点;选魔法护甲是否更疼。 -3. 第一关第三个节点不再是「打不动的一堵墙」,推进节奏顺畅。 - -## 8. 异常分级 - -- **L1(自救)**:新技能行字段拼错 / 枚举值写错导致加载期拒绝;`enemy.tres` 加列漏行——校验立红即修,不改批结构。 -- **L2(记录继续)**:MC 配对位移超出预期带;新技能倍率手感不佳——登记 07 与实现报告,值微调随批内迭代,不自行改设计。 -- **L3(停机呈报)**:触碰 §3 任一红线;或 N3 落地后主角承伤出现非「−1/0/+1」量级的位移(说明矩阵消费面有未盘点的第二落点);或 N1 落地后 (1,2) 观感仍判「是墙」——先停,截图与读数呈报再动。 - -## 9. 代拍板白名单(超清单必呈报) - -1. `skills.tres` 两新行的 `skill_id` / `display_name` 命名形态(小写下划线 / 中文双字,与既有 12 行同风)——取值已定,形态细节自理。 -2. `enemy_table.gd` / `unit_container.gd` 的写法沿用 `armor_type` 同款(可省略 + 缺省回退 + 未知枚举报错)。 -3. MC 配对读数的种子沿用既有基线种子,报告落 `sim-data/` 或 `design/qa/` 随既有命名惯例。 -4. N1 落值后若发现 (1,2) 需连带微调 `atk_min/atk_max`(现行 0-2)——**仅限本行**,且须登记。 -5. `expect_pools` 6 键的键值同步写法(保持既有字典风)。 - -## 10. 待裁点 - -**零待裁点,开工门=U0。** Q1–Q9 已于 2026-10-13 经 grilling 复核后由用户令「按推荐方式进行」全裁,落定如下: - -| # | 裁定 | 落定结论 | -|---|---|---| -| Q1 | N1 对象 | 取 **(1,2)**。依据=实查确证的客观崩坏(总量 10→50=5 倍墙);「第二个节点」字面指向 (1,1) 的偏差已如实登记于 §2 与 06,**本批不动 (1,1)**。若原意确为 (1,1),N1 需重裁后重开 | -| Q2 | N1 定性 | **推翻 2026-09-24 的阶名化解方案**,但不写「修复配置错误」——改写为「该方案实机验证未达预期,按 2026-10-13 体验反馈重新裁定」;06 补注裁决沿革 | -| Q3 | N1 修法 | **保留 bugbear,只降档**:hp 50→22、ac 3→2。敌种/立绘/display_name/池/数量全部不动(hobgoblin 无立绘,改敌种案已否决) | -| Q4 | 契约同步 | 池与敌种键属**契约级**,改必同步 `expect_pools`;N1 因键值不变故零改动,N2 同步 6 键 | -| Q5 | V1 断言 | 改为「相邻节点总量比 **≤ 2.5**」(12/10/22/35/72 全绿),不用「单调不回撤」(会红在 (1,0)→(1,1)) | -| Q6 | 首遇位 | **(2,4) 池不动**,venom_spit 从 (2,5) 起投 | -| Q7 | 新技能字段 | 补齐 weight(均 2)/ display_name(毒吐、盾击);debuff 未入选故无 buff_ref 问题(主角侧减益 `off_guard` 已被蛛网束缚占用,`sapped` 留作后续) | -| Q8 | rider | **两新行均不带 rider**(低 atk 下恒被 damage_floor 兜成 1,与 0.75 档等效,白占字段) | -| Q9 | N3 挂载 | **挂敌种行 + 全填 normal**(乙案)。与 06:126「全局平移:重甲 −1 / 魔法甲 +1」精确一致,且已足够让锻造甲路线有战斗意义;差异化填值另立项 | - ---- - -**残留风险(非待裁点)**:M4 数值批若后续重标 (1,2) 血量,本批的 22 会被覆盖——属预期内,本批只负责消除当前的 5 倍墙。 - -卡片成立前置:~~grilling 复核门~~(2026-10-13 已过)+~~用户卡审~~(2026-10-13 已过)。 diff --git a/design/research/需求卡片-未开格类型徽章批-2026-10-16.md b/design/research/需求卡片-未开格类型徽章批-2026-10-16.md deleted file mode 100644 index 41c54177..00000000 --- a/design/research/需求卡片-未开格类型徽章批-2026-10-16.md +++ /dev/null @@ -1,310 +0,0 @@ -# 需求卡片:未开格类型徽章批(类型微光实施)——迭代 30 - -- 版本:**v1.4**(2026-10-17 开工前预授权 U1〔用户于开工前一次性决断,防开发中反复打断〕——①T0-③ shader 原型帧改**判据自判**:三条像素判据过即自行推进铺码,调参轮次上限 2 轮、超则停线回 Q1 复议;②L3 分类预授权:可自动处置类(shader 与 `_desat_mat` 共存撞墙退 a 案程序绘制兜底/色弱抽检五组灰度不可分先在 provisional 梯度内自调一轮再判/golden 换代按契约 6 显式流程执行)由批内处置+留痕,触既有裁决面类维持停机呈报;③详见 §10 开工门 U1 预授权条);**v1.3**(2026-10-17 文档同步闸 v3 口径修订,纯文档批〔分支 carddoc-20261017〕按用户六条裁定执行——①本批(代码实现批)禁写 `design/` 整目录与根规则文件,§5 同步面的同步义务一律执行为「列进 `reports/iter30-反哺点-<完成日>.md`(哪个文件哪一节、改成什么、依据),用户会话裁决后归文档批落文」;②产出物落位换代:实现报告/代拍板追认单/反哺点清单三份落 `reports/`,不再 `design/qa/`;③T4 末卡改「产出物落位卡」(三份 reports/ 文件写齐才算收口);④闸口径按域选档:重闸 = `tools/run_all_gates.sh` 按改动域选档(本批只碰 `game/` 代码与断言面 → `--code`),卡内不再写死闸件名单、不再用「全量档全绿」「文档三闸」类字样;⑤实机目检项写进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单,「入册 07-体验验证清单」转反哺点;§10 裁定留痕原文不动,其落文类表述的执行口径随本版换代);v1.2(2026-10-16 裁决五项+排期定档——「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」:Q1 丙/Q2 甲/Q3 甲/Q4 丙/Q5 甲,逐条留痕见 §10 各 Q 裁定行;排期定档迭代 30 已编入);v1.1(2026-10-16 成文;同日 grilling 对抗性审查修订——事实五处复核/Q2 缩窄为明度档裁点(五组色相属已裁项不再问)/全部推荐语中立化/轮次承诺与性能预判撤下/验证闸判具补全/跨卡次序依赖单列——修订清单见 §11 审查记录) -- 来源:[06-待办清单](../gdd/06-待办清单.md)「未开格类型徽章呈现时机」条(:429-435;裁决史三段:2026-09-22 T1 采纳彩色常显微光并重选五组色相/2026-09-30 口径校正=英雄周围 8 格内/2026-10-07 组粒度简化=组间五色相、组内不细分,art-bible v3.12) -- 归属:呈现层升级批(06 归属行口径:[地图战斗资源](../gdd/systems/战斗循环/地图战斗资源.md)类型提案实施批与 [HUD框架](../gdd/systems/表现与支撑/HUD框架.md) 共裁);概念权威定义 = [HUD框架](../gdd/systems/表现与支撑/HUD框架.md)「未开格类型微光」节(:130-142,本文只指路不复述) -- 排期:**迭代 30 已编入**(2026-10-16 用户令编入,roadmap 行已在案;批内状态刷新列反哺点);三卡串行序位第 1(徽章→样张→观感,禁并行依据=汇聚文件冲突)。开工门 = U0:用户 `/iter` 发令(Q1–Q5 已于 v1.2 全裁,见 §10)。 -- 用户立场前提(正面回应,不回避):用户对既有程序化产出明确不满(「很丑」「原有方式再产一遍可能还是不满意」),并专门质疑「你是否会用 Godot 的 shader 做特效」。据此本卡把**渲染技术路线列为第一裁点 Q1**,各案的天花板与代价摊开对比;v1.2 依「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」裁定**丙案**(shader 为主、程序绘制兜底)。对 shader 能力边界**如实交底**(见 Q1 能力行)——canvas_item shader 代码写得出来,视觉调优必须走目检迭代,无法一次到位,故 T0 内置「路线原型先行」步骤,先出一帧给用户看再全线推进。 - ---- - -## 0. 前置依赖与并行性 - -- **设计面已闭合**:概念定义(HUD框架权威节)、五组色相(art-bible §4.2,样张 v2 四冻结②既裁入库——见 F3/S6,本卡不再问)、呈现约束(§4.6.3 与 §1.4 验收 2)、信息口径(只类型、不泄雷/安、不表极性)全部成文;[地图战斗资源](../gdd/systems/战斗循环/地图战斗资源.md) v0.17 类型层身份裁决已把「微光实施归呈现批」写定(:12/:205)。**本批无设计定稿前置,是纯实施卡**——Q1(路线=丙)/Q2(明度档值来源=甲——五组色相已冻结不入裁)/Q3(收编=甲·不并入)/Q4(开关=丙)/Q5(动效=甲·静态)五点已于 v1.2 依「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」全部裁定,逐条见 §10。 -- **数据链已在位**(零 core 层新接口):装板摇号后 `query_identity(cell)` 返回 `{reward_id, cell_type, tier}`(`game/core/reward_economy.gd:109`),组合根已把该只读回调注入棋盘(`board_view.set_identity_resolver`,`game/presentation/views/board_view.gd:206-208`);生效格集合 = `_diggable`(英雄 8 向相邻未开格,`board_view.gd:102`——与 HUD 框架「与可挖域同一圈」逐字同圈)。 -- **并行面**:与在役的接触带微光(`board_view.gd:838-875`)、视野迷雾(`board_view.gd:137` FOG_RADIUS=8)触碰同一 `board_cell_unit.gd` `_draw` 面——两役件契约零改动是红线(§3 契约 6)。微光环(切比雪夫 1 邻,曼哈顿距离 ≤2)恒在灯光区(曼哈顿 ≤8)内,**与迷雾零遮挡冲突**(区外未开格全黑不渲染条款触不到本批作用格;art-bible §6.5)。 -- **前置卡片关系**:与 [需求卡片-测试分层与门禁语义修正批-2026-10-15](需求卡片-测试分层与门禁语义修正批-2026-10-15.md)(迭代 29)无文件冲突面预判(那批动测试基建/闸判定,本批动 presentation/views 与 game/smoke 断言新增);若 iter29 先行完成合入,本批 T0-④ 按其契约以当期读数重采基线。 - ---- - -## 1. 目标与完成定义 - -**目标**:把已定稿未实装的「未开格类型微光」落进游戏——英雄周围 8 格内的未开格,在格面显示该格资源类型的组粒度微光(通用增益芥末黄/治疗黄绿/穿刺青/魔法紫罗兰/群伤绯红,art-bible §4.2 五组),纯呈现层、零玩法数据写入;渲染技术路线按 Q1 既裁丙案(shader 为主、程序绘制兜底)实施,效果以「玩家一眼分清五组且不伤数字可读性」为唯一及格线。 - -**实施规格闭合清单**(T0 逐项确认,缺一即开工不成立): - -| # | 规格项 | 现行口径 | 出处 | 闭合状态 | -|---|---|---|---|---| -| S1 | 生效范围 | 英雄周围 8 格内未开格;已开格不显示;封锁格恒无 | HUD框架 :136 | 已成文 | -| S2 | 分组粒度 | 九型 → 五组,组间分、组内不细分(attack/defense/weaken/action/gp 同芥末黄) | art-bible §4.2 :218;06 :435 v3.12 | 已成文,**代码侧无归组表**(见 F6) | -| S3 | 生命周期 | 入圈亮/出圈灭/开格灭/换图重置;身份装板期摇定、微光只显示不改数据 | HUD框架 :138 | 已成文 | -| S4 | 信息禁令 | 只类型;不表极性、不泄雷/安、不泄收益档位 | HUD框架 :137 | 已成文 | -| S5 | 泛光参数 | 内缘带状泛光 α170/带宽 cell÷8(v2 呈现参数) | art-bible §4.2 :218 | 已成文;**组间明度档值从未定义**——色弱通道「各组一档明度互辨」(§1.4 验收 2 :58、§4.5 第 9 项 :248)只有方向没有数值(v3.12 版本历史 :551 自证「逐型明度映射从未定义」),数值来源与冻结路径 = Q2 裁点(v1.2 已裁甲案:本批取 provisional 值、样张批复核转正) | -| S6 | 色值冻结态 | **五组色相 = 既裁项**:样张 v2 四冻结②色板「类型微光五组定稿」(art-bible :66,2026-09-28,闸形 A 批末用户目检拍板 2026-09-27);v3.0 批「四冻结之②③维持冻结不变」(:563);v3.12 用户裁「五组色相本身不动(样张 v2 冻结维持)」(:551)。06 :431「候选值,样张批冻结」系该条状态叙述中的滞后复述——06 :431 本身 2026-09-30 校正注已声明「本条此后只承载实施状态、不再承载定义」,措辞修正属批内机械面不入裁(2026-10-16 用户令后按 Q2 甲案于批内机械修正入同步面);**本案裁点只剩明度档值**(无值可冻,v2 未承诺数值)——v1.2 已裁甲案 | art-bible :66/:218/:551/:563;06 :431;HUD框架 :140 | **色相=既裁;明度档值=已裁(Q2 甲案:provisional 取值、样张批复核转正)** | - -**完成定义**: -1. S1–S6 全闭合;Q1–Q5 裁决落进代码。 -2. 呈现上线(Q4 已裁丙案:默认开入库):五组微光在真机战斗屏可见;实机目检项登记进 `reports/iter30-实现报告-<完成日>.md` 实机目检总清单(登记不阻塞;「入册 07-体验验证清单」列反哺点)。 -3. 机检全绿:重闸 = `tools/run_all_gates.sh` 按本批改动域选档(本批只碰 `game/` 代码与断言面 → `--code`)全绿;冒烟新增断言段(微光集合正确性 + 零玩法写入 + off 态基线逐位一致)与 golden 棋盘基线默认态漂移判读(判据见 §7)由该脚本闸段承载。 -4. 文档义务全部反哺点化:§5 同步面所列每条写进 `reports/iter30-反哺点-<完成日>.md`(哪个文件哪一节、改成什么、依据),零直改 `design/` 与根规则文件,落文归文档批;含 06 条目状态改写、HUD框架 :140 实装状态行+:269 验收行、08 表现表新增行(按 Q2 甲案注 provisional 待样张复核)、art-bible 明度档 provisional 登记条(§2.1 修订条目不追加——Q5 已裁甲案静态,该分支不触发)各一条。 -5. 反哺点清单逐条待用户裁决,本批不擅落文。 - ---- - -## 2. 现状事实(2026-10-16 实查;开工日 T0-④ 复核行号) - -| # | 事实 | 出处 | -|---|---|---| -| F1 | 06 条目状态 = 待办(Alpha 阶段需完成,2026-10-13 归「UI 美化三层诊断」第三层观感提升);:435 明写「本条(格面未开格类型徽章)与卡顶色带同族不同落点,**不并入**(迭代 16 批)」 | `design/gdd/06-待办清单.md:429-435` | -| F2 | 权威定义节五要素齐备;实装状态行原文:「呈现契约已定稿(五组色相经样张 v2 冻结 2026-09-28);**游戏内待实施批**(2026-09-30 核证:呈现层仅接触带微光在跑,类型微光无独立实现)」;配套拍板「类型微光不随视野扩大(仍贴身 8 格)」(2026-10-09 提灯退役后由阔视野带承接,微光仍不扩) | `design/gdd/systems/表现与支撑/HUD框架.md:130-142/:167/:269` | -| F3 | 五组色相值:芥末黄 `#D6C13A`/黄绿 `#5CB83A`/青 `#2E9E9E`/紫罗兰 `#7B5BD6`/绯红 `#FF2D55`(后两值避 300°–345° 禁入带、绯红刻意错开危险红);v2 呈现参数 α170/带宽 cell÷8;§4.6.3 呈现约束 = 微光单通道、格内零角嵌/箭头/加号附加形(2026-09-28 用户裁);§1.4 验收 2:微光禁止侵入数字字形占位区、明度梯度禁止压破格底明度档、三态分类不受扰;§2 明度分层:微光明度梯度属信息面层内梯度、不扰世界层明度档;§1.2:微光 = 底效泛光层、**不入遮挡栈、不遮任何元素、不作焦点** | `design/art/art-bible.md:218/:325/:58/:76/:25` | -| F4 | 类型判定数据链:九型封闭枚举(attack/defense/heal/blast/weaken/pierce/magic/action/gp);`reward.tres` 各行带 `cell_type` 字段(:9-:195);`query_identity` 未开格恒可查(雷安同权);**kind→五组归组的权威文本表只存在于 art-bible §4.2 条文里,代码与数据侧无机读表**——九值闭合的归组函数需新建 | `地图战斗资源.md:22/:73-79`;`game/data/tables/reward.tres`;`game/README.md:476` | -| F5 | 渲染通道现状:格子 = 每格一个 `CellUnit`(Node2D/CanvasItem),`_draw()` 内 `draw_texture_rect`(瓦片素材)/`draw_rect`/`draw_style_box`(程序化回退)+ 接触带微光同面绘制;呼吸 = `BoardView._process` 正弦(0.48Hz,:846 注 3 rad/s)改 `contact_col` 后 `queue_redraw`。**全库唯一 shader 先例**:结算去饱和 `_desat_mat`(CanvasItem shader `desaturation.gdshader`,挂在世界根 CanvasItem 整体,`board_view.gd:111/:170-172/:196`)——每格尚无独立 ShaderMaterial。grilling 复核(2026-10-16):全仓 `*.gdshader` 仅一枚、`ShaderMaterial` 引用面仅 board_view.gd 单点、`shader_type` 仅 desaturation 一处命中——「唯一先例」成立 | `board_cell_unit.gd:124-199`;`board_view.gd:838-875` | -| F6 | `TG_*` 常量现况:迭代 16 N4c(2026-10-06,提交 af5f317a)已立五族常量与 `tg_band()` 子串归带(常量实存 `ui_kit.gd:51-55`、判定函数 :60-69、E5 回滚注 :58-59),消费面 = 卡顶色带(`curio_pick_overlay.gd:101`/`shop_overlay_view.gd:216`)。**06 :435 所指「`bonus_pick_overlay.gd:96-102`/`shop_overlay_view.gd:189` 裸 Color8」是 2026-10-05 旧读数——该文件已不存(git 8e2694de 奇物批改名 curio_pick_overlay,Glob 复核零命中),呈现层裸 Color8 现值为 0(ui_kit 之外),守卫 = ui_contrast_probe 静态段(:107-130,R1 白名单机制在、现零消费)。grilling 复核(2026-10-16)口径声明:`Color8(` grep 限定 `game/presentation/` 目录 = 104 处全在 ui_kit.gd;`game/smoke/` 另有 5 处(smoke_all 2 + ui_contrast_probe 3)属测试面不在呈现层守卫域。TG_BUFF=Color8(194,178,100) 逐值核 = #C2B264 无误。附带发现:`curio_pick_overlay.gd:101` 行注仍写「aoe/blast 归 TG_AOE」——与 ui_kit.gd:65 现行行为(blast 归 TG_MAGIC)不符的滞注——Q3 已裁甲案(不并入),该滞注记 L1 卫生面处置)。卡带与格面微光是**两套色值两套归组**:卡带用 demo 冻结值(如 `TG_BUFF #C2B264`)且 E5 回滚把 blast 子串归 TG_MAGIC,圣经典故五组用 `#D6C13A` 系且 blast 应归群伤组绯红——**不可直接复用 tg_band 作格面归组** | `ui_kit.gd:49-69`;`presentation` 全目录 grep `Color8(` 计数 = 104 处且全在 ui_kit.gd | -| F7 | 动效纪律在位:art-bible §2.1「挖掘期棋盘唯一体感在动的是接触带呼吸微光」(:84/:170);类型微光若做呼吸态即破该条——**静态是缺省合规态,呼吸是需裁决的修订面**(Q5) | `design/art/art-bible.md:84/:170` | -| F8 | 机检工具链可承接本批:`tools/shot_checker.py`(A 屏级骨架/B 文字 WCAG ≥4.5:1/C 明度三档带/D 文字禁压纹理/F 文字在判据,坐标源 shot_meta.json 禁硬编码像素);`tools/golden_compare.py`(灰度差 >16 像素占比 ≤2% 判据);`tools/render_gate.sh` 四段(shot_probe 七屏→shot_checker;fx/board_shot_probe L1-L3 抓帧取证;golden 棋盘区裁剪对比;1280 单档)——明度档/禁侵入类断言一律走**截图像素判读**,与本批禁整格染色、不遮数字的验收同型 | 三脚本头注(2026-10-16 实读) | -| F9 | roadmap「迭代 30+」= 位空·无批次(原 M4 数值批已废,禁止再引用);编入本批 = 用户发令——**v1.2 更新:2026-10-16 用户令已编入(roadmap 行已在案;批内状态刷新列反哺点)** | `roadmap.md:88-89` | -| F10 | 08-Alpha版本标准「五 · 表现」表现表无「未开格类型微光」独立行(棋盘观感/UI 贴图重构/战斗一屏样张等行在表)——本批完成后按 Q2 甲案新增行并注 provisional(见 §5),06 :429 条为登记事实源 | `design/gdd/08-Alpha版本标准.md:139-160` | - ---- - -## 3. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 纯呈现层零玩法写入**:微光只读身份不改身份;同板同动作序列的结算结果与微光 on/off 两态逐位一致(迷雾批先例同款断言)。 -🔴 **契约 2 · 信息口径零越线**:微光承载且仅承载组粒度类型;禁止表达极性、雷/安、收益档位(HUD框架权威节 :137)。 -🔴 **契约 3 · 数字可读性硬指标零破坏**:1–8 全档对格底 ≥4.5:1 恒成立;微光禁止侵入数字字形占位区(未开格砖心留白纪律同型);明度梯度禁止压破格底明度档——三态灰度分类不受扰(art-bible §1.4 验收 1/2)。 -🔴 **契约 4 · F5 呈现纪律**:接触带泛光(内缘带),**禁止整格均匀染色**;微光层为底效泛光,不入遮挡栈、不遮任何元素、不作第二焦点;格内禁止新增角嵌/箭头/加号类附加图形(2026-09-28 用户裁,§4.6.3)。 -🔴 **契约 5 · 色值零自决**:五组色相恒按 art-bible §4.2 样张 v2 冻结值取值(既裁项,本批无重开资格,翻动=L3);明度档值只许取 Q2 裁定的来源;禁止实施中自调色值「看着更好」。 -🔴 **契约 6 · 在役件契约零破坏**:接触带微光、视野迷雾、去饱和 shader、`_diggable`/`query_identity` 回调契约、既有冒烟/探针断言面只增不减。 -🔴 **契约 7 · 频闪与减动效**:任何态每秒闪烁 ≤3 次(可访问性基线);本批 Q5 已裁甲案静态、呼吸态不启用——若出口后追加裁决重议呼吸,减动效开启必须停格(接触带先例 `board_view.gd:844-845`)。 - ---- - -## 4. 范围边界 - -**做**:路线裁决执行(Q1 已裁丙案)、归组机读表与五族色值常量新建、CellUnit 微光绘制面/shader 叠加实施、生命周期接线(入圈/出圈/开格/换图)、开关与灰度(Q4 已裁丙案)、机检断言新增(冒烟 + 渲染取证段扩)、文档义务=反哺点清单(§5 全部条目,含 Q2 甲案下 06 滞后措辞修正条)。 -**Q3 已裁甲案(不并入)**:TG_* 两带统一迁移(原 T3 条件卡)不启动;「卡顶带与格面带分工」说明写入文档并另登 06 一条的动作列入本批同步面清单(§5),执行=列进反哺点清单、归文档批落文。 - -**不做**(明示去向): -- **不做样张正式冻结动作**——冻结归样张线(08「战斗一屏样张」行);本批只按 Q2 甲案取 provisional 值实施、复核移交样张卡(见跨卡依赖 v1.2 注记)。 -- **不动卡顶色带视觉**——Q3 已裁甲案(不并入);两带统一归反哺点清单所列的 06 新条(文档批落文)。 -- **不做探宝罗盘/预读道具重定**——归秘宝内容批(06 :431 裁决③)。 -- **不动格底明度档、棋盘瓦片素材、图类型换皮四槽**(art-bible §4.3 不变槽含类型微光五组——换皮不触发微光变色,棋盘生成 board_type 词表零触碰)。 -- **不扩微光环半径**——贴身 8 格是已拍板口径(HUD框架 :167),阔视野带类道具一律不扩微光。 - ---- - -## 5. 关联文档同步面 - -> **v1.3 执行口径(2026-10-17 文档同步闸 v3)**:本批是代码实现批,**禁写 `design/` 整目录与根规则文件**,唯一可写目录 = `reports/`(`active.md` 是唯一例外,会话状态源)。下表「同步义务」列一律执行为「**列进 `reports/iter30-反哺点-<完成日>.md`**:写清哪个文件哪一节、改成什么、依据,用户会话裁决后归文档批落文」——下表保留原关联点事实供写反哺点条目时对表。 - -| 文档 | 关联点(本批改变其哪条陈述) | 同步义务(v1.3 全部=反哺点列清单) | -|---|---|---| -| `design/gdd/06-待办清单.md` | :429-435 条目状态:待办 → 完成;:431「候选值,样张批冻结」色相措辞修正(五组色相既有冻结依据 art-bible :66/:551,Q2 甲案裁定确认按此路径修正);:435 旧读数(bonus_pick_overlay 位点)刷新;明度档登记去向按 Q2 甲案(provisional 值入 art-bible 修订条目、复核义务移交样张卡) | 反哺点 · 列清单待裁 | -| `design/gdd/systems/表现与支撑/HUD框架.md` | :140 实装状态行「游戏内待实施批」→「已实装(本批)」;:269 验收行去「待实施批落地后验收」括注转正式验收;版本历史追加一行 | 反哺点 · 列清单待裁 | -| `design/gdd/08-Alpha版本标准.md` | 「五 · 表现」表:新增「未开格类型微光」行(待做→在役)——写法按 Q2 甲案:行内注「明度档 provisional 值,样张批复核转正」;版本历史追加 | 反哺点 · 列清单待裁 | -| `design/art/art-bible.md` | §4.2/§4.6.3 零改动(权威面);§2.1 修订条目不追加(Q5 已裁甲案静态,条件分支不触发);明度档 provisional 值按 Q2 甲案以修订条目登记 | 反哺点 · 列清单待裁(Q2 项) | -| `roadmap.md` | 迭代 30 行编入笔已在案(2026-10-16 用户令);批内状态更新 | 反哺点 · 列清单待裁 | -| `design/gdd/06-待办清单.md`(Q3 甲案追加动作) | ①「卡顶带与格面带分工」说明写入文档(art-bible/HUD框架 注记面);②另登 06 一条「卡顶色带与格面微光两带统一」新待办 | 反哺点 · 列清单待裁 | -| `active.md` | 状态快照与本批条目 | **本批更新(唯一例外 · 会话状态源)** | -| `design/gdd/07-体验验证清单.md` | 新增实机目检人闸条(五组互辨观感/不遮数字/出圈灭) | 反哺点 · 列清单待裁(目检项另进 reports/ 实现报告目检总清单) | -| `game/presentation/views/*`、`game/smoke/*` | 代码与断言(见 §6) | 实施本体(可写) | - ---- - -## 6. 任务卡 - -> 估时按工作日口径;每卡出口自跑轻闸;批末重闸 = `tools/run_all_gates.sh` 按改动域选档(本批 → `--code`)全绿才合入(脚本即唯一闸清单,卡内不另列);开工日 T0-④ 复核本卡全部行号。 - -### T0 证据坐实、规格闭合与路线原型(≈1–1.5d,必先做;Q1 丙案下 shader 原型帧+共存实测为新增先行件,估时上限相应上调) - -- **T0-① 归组表新建落点确认**:写定九 cell_type → 五组封闭表(通用增益 {attack, defense, weaken, action, gp}/治疗 {heal}/穿刺 {pierce}/魔法 {magic}/群伤 {blast}——art-bible §4.2 成员集合逐字照抄,禁止子串匹配复用 `tg_band`);大宝箱(未来第十型)按地图战斗资源 :106 归通用增益组、不新增色相。 -- **T0-② 明度档 provisional 值设计**:五组各一档明度(色弱互辨通道,S5 缺口)取值方案——以 §4.1 硬指标(未开格底 L≥0.30 档不被压破)为约束给出候选梯度,按 Q2 已裁甲案执法(本批定 provisional 值、样张批复核转正)。 -- **T0-③ 路线原型先行(对「很丑」质疑的实证步骤)**:**按 Q1 已裁丙案执行——「shader 接触带柔光原型帧」为本件先行产出物**:CellUnit 共享 ShaderMaterial 距离场柔光渐变原型帧(微光 on/off + 五组并列 + 相邻格泛光接触),同时给出 shader 参数面板(uniform 暴露带宽/α/衰减形状),后续调优可直接改参数表不改代码;程序绘制(a 案)兜底件同帧出对比,供 §8 L3 回退判据留样。**v1.4 预授权(2026-10-17 用户裁):原型帧改判据自判,不再逐轮等回话**——满足三条像素判据即视为过闸、自行推进铺码:①五组并列在去色相模拟下仍可分(V6 同口径抽检);②砖心数字字形占位区灰度扰动 ≤阈值(V4);③接触带不越圈、非生效格像素零变化(V4)。**调参轮次上限 = 2 轮**(出帧+改参各记一轮),超上限即停线回 Q1 复议,禁批内自开第三轮;未过原型判据禁止全线铺码。批末 V10 仍是唯一终审人闸(登记不阻塞)。能力申报保留:视觉调优不承诺一次到位。 -- **T0-④ 基线与行号复核**:本卡 §2 全部出处复核一遍;冒烟/golden 当期读数冻结为改前锚(golden 基线 2026-09-30 代,若判失效按 iter29 卡先例呈报,禁擅自重制)。 - -### T1 实施主卡(≈1–1.5d,内容按 Q1 丙/Q3 甲/Q4 丙 既裁案收敛) - -- **色值与归组单点**:`ui_kit.gd` 新增五族泛光常量(拟名 `TG_GLOW_*`,命名归代拍板)+ `glow_group_for_cell_type(type)` 九值闭合函数(清单外值返回错误并显式占位「?」——图标键错误处理同款纪律,禁静默空光)。 -- **shader 面**(Q1 丙案主路径):CellUnit 挂共享 ShaderMaterial(每格 uniform:色相/α/带宽/呼吸相位——相位通道仅预留,Q5 已裁甲案静态不启用),canvas_item 距离衰减柔光渐变;与 `_desat_mat` 共存方案(世界整体 vs 每格材质叠加次序)实测验证后进断言。 -- **绘制面**(Q1 丙案兜底路径,仅当共存/性能实测撞墙按 §8 L3 回退时启用):`board_cell_unit.gd` `_draw()` 瓦片之下/泛光档新增微光泛光层——内缘带状(带宽 cell÷8 起、provisional 可调),砖心留白(数字字形占位区禁入),`draw_rect`/`draw_circle` 参数化半透叠层;叠层序遵守 §1.2「底效不入遮挡栈」。断言面两案通用。 -- **生命周期接线**(Q1 两案共用):微光作用集 = `_diggable` ∩ 身份可查格;`refresh()` 与英雄移动路径挂点重算;开格/连锁开/踩雷随格态灭;出圈灭、复亮走回;换图随 rebuild 清零;结算相位灭(与 `set_dig_glow_enabled` 同款相位门控,Q4 细则)。封锁格恒无(不在摇号清单 ⇒ query 为 null,天然惰性,仍进断言)。 -- **开关**(Q4 丙案):呈现态布尔入 `board_view`(探针/夹具/调试浮窗可显式 off),生产写入面组合根单点,不新增设置项。 - -### T2 机检断言批(≈1d) - -- **冒烟(数据侧)**:新段断言——微光格集合恒等于 `_diggable` 中身份可查者;九 cell_type 全值域归组五组封闭;封锁格/已开格零微光;**同板同序列 on/off 两态结算逐位一致**(契约 1,MC 触发细则内以探针级断言承载,不新起跑批)。 -- **静态段**:ui_contrast_probe 静态段守卫延续——新增色值一律入 ui_kit 单点,呈现层裸 Color8 保持 0。 -- **渲染闸(像素侧)**:渲染取证段扩——board_shot_probe 夹具板加微光 on/off 双帧:①on 帧逐格取样判定「非生效格像素零变化」(禁整格染色/禁越圈);②微光格砖心区(数字字形占位区等效域)灰度差 ≤阈值;③五组两两灰度带互辨抽检(shot_checker 同型 WCAG/灰度工具复用);④off 帧对 golden 基线 ≤2% 带(**Q4 丙案默认 on**,golden 棋盘三基线判读呈报——预期漂移在生效格集合内,超出即红)。 -- **代码域闸(批末重闸)**:`tools/run_all_gates.sh --code`(本批只碰 `game/` 代码与断言面;脚本即唯一闸清单)对基线零新增红。文档域闸不属本批改动域,不进本批闸面。 - -### T3(条件卡·Q3 已裁甲案不并入——本卡不启动,内容留档)TG_* 两带统一迁移(≈0.5d) - -卡顶色带取值改圣经五组值、归组输入改 cell_type 精确值、E5 回滚注记清偿(curio_pick/shop 消费面视觉回归 + 相关对比度对断言刷新)。**影响面**:三选一与商店货架观感变化 + 既有断言改写(触碰「只增不减」契约须按 §8 L3 先呈报)。 - -### T4 产出物落位卡(≈0.5d,末卡——三份 reports/ 文件写齐才算收口) - -轻闸全绿后、合并前,把本批三份 `reports/` 产出物写齐(零 `design/` 与根规则文件直改;`active.md` 状态记录照常更新): - -1. `reports/iter30-实现报告-<完成日>.md`——各卡状态+**实机目检总清单**(五组一眼可分/不遮数字/出圈灭/整屏不脏;登记不阻塞)+遗留读数义务+变异验证记录表(§7 新建断言段的注入实验:变异点 file:行、跑的闸、红输出、还原结论); -2. `reports/iter30-代拍板追认单-<完成日>.md`——§9 白名单内代拍板逐项留痕; -3. `reports/iter30-反哺点-<完成日>.md`——§5 同步面所列每条都要有落点(哪个文件哪一节、改成什么、依据),含 07 入册条、Q2 甲案明度档 provisional 值登记条、Q3 甲案「两带分工说明+06 新条」条目。 - ---- - -## 7. 验证闸(逐需求点验收清单) - -| # | 需求点 | 测什么 | 手段(实存工具 + 新建判具标注) | -|---|---|---|---| -| V1 | 生效范围 S1 | 微光格集合 == `_diggable` ∩ 有身份;已开/封锁/出圈零微光 | `tools/run_smoke.py` 承载 `game/smoke/smoke_all.gd` 新增数据断言段(判具现成,断言新建) | -| V2 | 组粒度 S2 | 九值 → 五组封闭、组内不分色;清单外值返回错误 + 诊断 | 同上冒烟归组表断言(判具现成) | -| V3 | 生命周期 S3 | 移动复亮/开格灭/换图灭/结算相位灭 | `tools/run_smoke.py` + `game/smoke/ui_input_probe.gd`(实存)走查段扩 | -| V4 | 禁侵与不遮(F5/契约 3/4) | 砖心留白区灰度扰动 ≤阈值;数字 ≥4.5:1 复核零降档;格内零附加图形 | 渲染取证段扩(`game/smoke/board_shot_probe.tscn` L1-L3 实存,双帧断言 = T2 新建)+ `tools/shot_checker.py`;注:「微光格零墨色附加像素」先例 = 样张侧机检(art-bible v2.12 版本历史 :569),格面像素版断言本批新建 | -| V5 | 明度档不压破 | 三态灰度分类抽检(on/off 两帧灰度逐格分类结果一致);shot_checker C 明度三档带零破坏 | `tools/shot_checker.py` C 段实存;「两帧逐格分类一致」取样段 = T2 新建判具(依托 board_shot_probe 双帧) | -| V6 | 五组互辨 | 组间色相 + 明度双码在去色相模拟下仍可分组(误读率指标归样张线,本批只跑机检抽检) | 去色相抽检脚本 = T2 新建段(沿 `tools/shot_checker.py` 的 PIL 取样同型,挂渲染取证段);**判不稳时降级**:目检辅助 + 实现报告登记缺口,误读率终判恒归样张批(§4.6.3 :325 既裁) | -| V7 | 零玩法扰动 | on/off 两态结算逐位一致;off 态 golden 零漂移 | `tools/run_smoke.py`(逐位一致断言,迷雾批先例同款)+ `tools/golden_compare.py`(render_gate 第三段实存,`game/tests/golden/` 三基线,差 ≤16/占比 ≤2% 带) | -| V8 | 频闪/减动效 | 呼吸态 ≤3 次/秒且减动效停格(原「仅 Q5 乙」预案条款) | 冒烟相位断言(频率由 `_process` 参数直查,`board_view.gd:846` 先例)+ `UiKit.motion_scale` 停格路径断言(:844-845 先例同款)+ 目检;**Q5 已裁甲案(静态),本案空转**(无呼吸态;若出口后追加裁决重议呼吸再启用本判据) | -| V9 | 反哺点清单 | §5 所列每条在 `reports/iter30-反哺点-<完成日>.md` 有落点(哪个文件哪一节、改成什么、依据),清单条数 = §5 反哺点行数;文档落文与链接/废止词复核归文档批(不进本批 `--code` 域) | 件核:反哺点清单逐条对表 §5 | -| V10 | 目检人闸 | 用户实机看过并点头(「很丑」质疑的终审位) | 实现报告目检总清单登记(人闸不可代,登记不阻塞);「入册 07」列反哺点 | - -**目检与机检两分**:V1–V7 机检自动化(其中 V4/V5/V6 的断言段为 T2 新建——工具管线实存、判定件新建,开工前不存在「直接可用」假象);V8 半机检;V10 唯一人闸不可代。T0-③ 原型帧是目检第一道,批末 V10 是第二道。 - ---- - -## 8. 异常分级 - -- **L1(自救)**:断言写法、取样坐标源选择、内部命名、注释补漏。 -- **L2(记录继续)**:明度档 provisional 值微差(在 Q2/Q3 裁定域内)、泛光分段绘制的具体参数写法(Q1 裁定域内)、夹具板构造细节。 -- **L3(停机呈报)**:偏离 Q1–Q5 既裁案(丙/甲/甲/丙/甲,v1.2)或未经追加裁决重开裁点先动;原型帧调参超 2 轮上限、或实施判为路线级存疑(停线回 Q1 复议);on/off 两态结算出现任一位差(契约 1 破);色弱抽检自调一轮后仍判五组灰度不可分(S5 值域重裁);T3 触发既有断言改写;实施中任何翻动 art-bible §4.2 五组色相既裁冻结面的诉求(Q2 复核结论)。 -- **L3 预授权类(2026-10-17 用户裁:批内处置+留痕,不停机等话)**:①shader 与 `_desat_mat` 共存实测撞墙 → 直接退 Q1 丙案兜底路径(a 案程序绘制),断言面两案通用,留痕即可;②golden 基线判失效 → 按契约 6 显式流程重制并呈报换代面(脚本逐项守卫+提交说明写明触发原因),不再停机等批令;③色弱抽检首次判五组灰度不可分 → 先在 Q2 甲案 provisional 明度梯度域内自调一轮再判,仍不可分才升 L3 停机。 - ---- - -## 9. 代拍板白名单(超清单必呈报) - -1. 新常量与函数命名、文件落点(ui_kit vs 新建泛光单点件)。 -2. 泛光实现细节:draw_rect 分段叠层 vs `draw_polygon` 渐变近似的取舍(Q1 裁一域内)。 -3. shader uniform 命名与参数表组织(Q1 裁二域内)。 -4. 呼吸相位驱动写法(Timer vs `_process` 累积,沿接触带先例)。 -5. 冒烟/探针断言的具体取值与夹具板配置。 -6. 取样阈值 provisional 数值(砖心扰动带/灰度抽检带)——首版取严,实现报告登记。 -7. 提交切分与 worktree 分支命名。 - -(Q1–Q5 本体**不在**白名单——2026-10-16 用户令裁权授出、由主线会话代拍板留痕完成裁决,五项裁定见 §10,本批不再开放重裁。) - ---- - -## 10. 裁点(v1.2:Q1–Q5 全部已裁) - -> **裁决来源(统一措辞·代拍板追认单形态,逐条留痕)**:「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」。五项裁定:Q1 丙/Q2 甲/Q3 甲/Q4 丙/Q5 甲。各 Q 选项原文保留备查,裁定行附后。 -> **v1.3 执行口径注(2026-10-17 文档同步闸 v3)**:本节裁定行中「写入文档/另登 06/批内机械面修正入同步面/写入时点=批次出口」类落文表述,一律执行为「列进 `reports/iter30-反哺点-<完成日>.md`,用户会话裁决后归文档批落文」——裁定内容(做什么)不变,落文方式随 v3 换代。 - -### Q1 · 渲染技术路线(第一裁点;v1.2 已裁=丙) - -**a) 既有 CanvasItem 通道内程序绘制(渐变参数化泛光,零新依赖)** -- 效果上限:**中**。半透矩形/圆叠加近似柔光,α170/带宽 cell÷8 可直落;无内建模糊图元,光晕「柔」有天花板——存在「又是程序化、还是不满意」的复发风险(用户既有不满正源于此类平色产出)。 -- 性能代价:**低(通道先例外推,非实测)**。与接触带同通道同预算;静态态每帧零成本,呼吸态 ≤8 格逐帧重绘(现接触带 1 格在跑)——量级估算以 T0-③ 原型帧实测读数(帧耗时)为准,卡片不承诺帧时数字。 -- 圣经 F5 符合度:**良**。带宽/α/留白区皆可参数守死;但渐变细腻度受限,「接触带微光不整格染色」靠人工叠层纪律维持。 -- 机检可行性:**优**。现状同型,像素断言直接可用。 -- 能力边界:**可一次到位**(几何与参数都在代码里,调参即所得)。 - -**b) shader_material(每格 CanvasItem shader:接触带柔光渐变/可选呼吸态)** -- 效果上限:**高**。距离场平滑衰减、柔光晕、渐变边缘一步到位,是「不像程序化平色」的正解;呼吸态天然平滑。 -- 性能代价:**未实测 = T0-③ 实测义务项,本卡不预判档位**。理论面 = ≤8 格激活、共享材质+uniform;但每格 ShaderMaterial 实例化成本、首帧着色器编译微抖与预热效果、与全世界 `_desat_mat` 双层 canvas_item shader 共存的叠加次序(全库先例仅单层,2026-10-16 grilling 全仓复核坐实:`*.gdshader` 仅 desaturation 一枚、`ShaderMaterial` 引用面仅 board_view 单点)——均无本仓实测值,原型阶段逐件记录(帧耗时/编译耗时/共存帧比对)随原型帧一并交用户,实测数字不进裁前依据。 -- 圣经 F5 符合度:**最高**。带宽/α/衰减形状全在 shader 参数域,砖心留白可用距离阈值硬保证;渲染参数即文档参数(α170/cell÷8 一一对应)。 -- 机检可行性:**良**。验收面在截图像素侧(工具链已具备),代码侧新增「材质参数表」可读断言;shader 内部逻辑不可直接单测,判定权交给像素闸。 -- 能力边界(**如实交底——义务申报,不承诺轮数**):Godot 4 的 `shader_type canvas_item` 代码我可以写;**视觉调优我无法一次到位**——渐变曲线、柔和度属主观审美,必须走「出帧→用户目检→改参→再出帧」迭代直至用户过目;本卡**不预设迭代轮次**(一轮即过或多轮皆以用户每轮判定为准),T0-③ 原型帧 + uniform 参数表是为压低每轮成本而设。 - -| 案 | 一句话 | -|---|---| -| **甲 = 纯 a** | 零新依赖最稳,但效果天花板可能重蹈「不满意」 | -| **乙 = 纯 b** | 效果上限最高,接受目检迭代节奏(轮数不设承诺,逐轮由用户判定去留) | -| **丙 = b 为主、a 兜底** | shader 过闸走 b;若共存/性能实测撞墙(§8 L3)回退 a,断言面两案通用 | - -(v1.1 历史陈文备查:本卡当时不出推荐案——路线无既有裁决可引:全库 shader 先例仅一枚是现状事实而非路线裁定;用户「你是否会用 shader 做特效」的质疑抬升 b 的关注优先级,不构成路线拍板;原拟 T0-③ 两路线各出一帧对比原型再裁。) - -**裁定(v1.2·已裁)=丙**(b 为主、a 兜底)。裁决来源:「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」。一句理由:丙案取 shader 效果上限之高为主路径,同时保留共存/性能实测撞墙(§8 L3)时回退程序绘制的既定退路,断言面两案通用、进可推退可守。任务面同步:T0-③ 已增「shader 接触带柔光原型帧」先行件(兜底案对比帧同帧留样);能力申报保留——视觉调优必须走「出帧→目检→改参」迭代直至用户过目,不承诺轮数。 - -### Q2 · 明度档值来源与样张线联动(五组色相已冻结,非本案裁点;v1.2 已裁=甲) - -**复核结论(先立事实)**:五组色相 = 既裁项,本卡不再问——art-bible §1.4 样张 v2 记录(:66,2026-09-28)「四冻结②色板:小人蓝 #2E86DE/接触带微光 #D6ECFF/**类型微光五组定稿**(§4.1/§4.2)」,机检 16/16、气质终审 = 批末用户目检(闸形 A 2026-09-27 拍板);v3.0 批注「四冻结之②③(色板/动画)维持冻结不变」(:563);v3.12 用户裁(2026-10-07)明写「**五组色相本身不动(样张 v2 冻结维持)**」(:551);HUD框架 :140 同读数。06 :431「候选值,样张批冻结」= 该条状态叙述里的滞后复述,且 06 :431 自身的 2026-09-30 口径校正已声明「本条此后只承载实施状态、不再承载定义」——措辞修正属 §5 批内机械面,不进裁。 -**真未决面**:§4.2「各组一档明度互辨」的**档值**从未定义(v3.12 自证 :551「逐型明度映射从未定义」);§4.6.3(:325)与 06 :431 裁决④把「微光组间互辨抽测(含明度档互辨;误读率指标出处=《地图战斗资源》极性提案)」保留在样张线,而 08 :158 战斗一屏样张 = 待做。色相已裁、明度无值,本批绕不开(色相+明度双码是 2026-09-28 角嵌退役批既裁通道)。 -- **甲** = 本批定明度档 provisional 值:T0-② 以 §4.1 硬指标(未开格底 L≥0.30 档不被压破,:205)为约束出五档候选梯度,按 art-bible 修订条目登记;组间互辨抽测本批跑像素抽检预判(V6),误读率终判仍归样张批复核。影响 = 本批自成闭环、样张批为下游复核方。 -- **乙** = 明度档值归战斗一屏样张批先冻结再实施:本批只落色相单通道、明度双码待样张冻结后补。影响 = 过渡期呈现偏离 §1.4 验收 2 双码条款与 §4.5 第 9 项色弱主通道条款(均 2026-09-28 既裁),偏离时长随样张批排期;且与本批「目检一眼分清五组」及格线正面冲突(无明度档时色弱玩家通道缺失)。 -- **丙** = 同甲取值实施,但微光默认关,待样张过闸后转正(挂在 Q4 开关案上)。影响 = 验收读数保护最彻底,玩家侧功能延后生效。 -(v1.1 历史陈文备查:本卡当时不出推荐案——既有裁决只锁色相与双码方向,档值归属无先例裁决可引。) - -**裁定(v1.2·已裁)=甲**(本批取 provisional 值、样张批复核转正)。裁决来源:「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」——06 :431「候选值」措辞滞后按批内机械修正入同步面(§5 已列)。一句理由:甲案让本批自成闭环(T0-② provisional 梯度 + V6 像素抽检预判),复核义务移交样张批有既成承接面,乙案的色弱双码通道缺失与本批「一眼分清五组」及格线正面冲突、且串行放大风险(见跨卡次序依赖),丙案默认关又与 Q4 既裁丙案(默认开)相抵。 - -**若实施中用户翻色相**:触 art-bible §4.2 既裁冻结面,按 §8 L3 停机呈报,本批无预授权。 - -**跨卡次序依赖(与 [需求卡片-战斗一屏样张批-2026-10-16](需求卡片-战斗一屏样张批-2026-10-16.md) 前提耦合,单列备查)**: -- 样张卡 Q1(素材输入级别)裁**甲**(纯占位资产合成)或**丙**(样张=设计目标图)→ 样张线不前置阻塞本批:色板②既冻结(v3.0「维持冻结不变」条款),本批按 §4.2 现值执法成立;本批 Q2 若裁甲,样张 v4 冻结记录须加注复核本批明度档 provisional 值。 -- 样张卡 Q1 裁**乙**(等贴图重构批/素材终稿出件)→ 样张冻结以周计后移:本批 Q2 裁甲/丙时明度档已定,样张批仍是下游复核方、零阻塞;本批 Q2 裁乙时则串行放大——样张批顺延直接改期本批完工,此风险即 Q2-乙案的固有代价,裁乙前须与样张卡 Q1 结果对表。 -- 样张批先冻结且明度档值与本批 provisional 值不一致 → 以 art-bible 修订条目为终,本批走 ui_kit 色值单点改值 + 冒烟色值断言同步(机械面,不构成路线翻案)。 -- 样张卡终审若主张**色相**重定(其 Q1 丙案「样张反提规格」语义扩至微光带)→ 触 art-bible §4.2 既裁面 = 本批 §8 L3,两卡口径冲突呈报回炉,禁止各自解释。 -- **v1.2 裁定生效注记**:本卡 Q2 已裁甲案(2026-10-16 用户令代拍板留痕),明度档 provisional 值的**复核义务移交样张卡**(由其 Q1/Q3 产物承接复核)——上列各条中「本批 Q2 若裁甲/乙/丙」等假设语气自此失效,仅按甲案联动路径执行。 - -### Q3 · TG_* 收编是否并入本批(v1.2 已裁=甲·不并入) - -现况比 06 :435 登记前进了一步(F6):裸 Color8 已清零、TG_* 常量已立,**残留问题变成「两套色带两套归组并存」**——卡顶带(demo 值 + tg_band 子串、blast 归魔法带)vs 圣经典故格面带(#D6C13A 系 + cell_type 精确、blast 归群伤绯红)。原裁决 =「同族不同落点、不并入」(2026-10-05 注)。 -- **甲** = 维持不并入:本批只新建格面五族单点,两带并存、分工在 art-bible/HUD 注记成文;卡顶带统一另登 06。 -- **乙** = 并入本批:格面 + 卡顶一次归一(取值圣经五组、归组 cell_type 精确),T3 全量迁移 + 观感回归(触既有断言改写,L3 先呈报)。 -- **丙** = 并入但只统一归组函数、不改卡顶色值(最小合并)。 -(v1.1 历史陈文备查:本卡当时不出推荐案。)复核补注两条:① 2026-10-05 注「不并入本批」= 迭代 16 批的范围记录(未并入**该批**),非跨批禁裁裁决——本 Q 为新增裁点、不构成再问;② 两套并存证据位点(2026-10-16 逐文件核实)——`ui_kit.gd:51-55` 五族常量(TG_BUFF=Color8(194,178,100)=#C2B264,demo 冻结值)、`:60-69` tg_band 子串归带(:65 blast→TG_MAGIC,:58-59 E5 回滚注)、`curio_pick_overlay.gd:101` 与 `shop_overlay_view.gd:216` 两消费点;格面侧 #D6C13A 系(art-bible :218)与 cell_type 精确归组在代码侧零实存(F4/F6)。06 :435 文本含 2026-10-05 旧读数(bonus_pick_overlay 裸 Color8 位点已不存在),无论甲乙丙均须批内刷新该段(机械面)。 - -**裁定(v1.2·已裁)=甲**(不并入本批)。裁决来源:「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」——「是否翻 2026-10-05 口径」即本案所裁:甲案与原文径一致,口径不翻。一句理由:本批只新建格面五族单点、不触在役卡顶带的既有断言改写面(免 T3 的 L3 先呈报负担),两带分工以成文+另登 06 承接统一路径。执行落点:「卡顶带与格面带分工」说明写入文档并另登 06 一条的动作已列入本批同步面清单(§5),**写入时点=批次出口**;curio_pick_overlay.gd:101 滞注按甲案记 L1 卫生面处置(见 F6);T3 条件卡不启动。 - -### Q4 · 开关与实施窗口口径(v1.2 已裁=丙) - -06 :431 裁决⑥原文:实施窗口 = 表现层升级批,「切片期默认不开、保护验收读数基线」。该句写于 2026-09-22,其保护对象(验收读数基线)现由 off 态逐位一致断言 + golden 双帧承接(T2),本批为迭代 30 正式实施批。**切片期前提现行性复核(grilling 2026-10-16)**:roadmap 执行记录 2026-09-24「垂直切片转正(prototypes/ → game/)」(:16)、2026-09-28「M-1 切片表现阶段完结」(:20)——「切片期」为已闭合的历史阶段;该「默认不开」条款无明文作废痕迹,但其前提(护切片验收读数)已随阶段终结而消失,条款可否随阶段过期解除 = 本 Q 的实质裁点(非再问已裁:原裁决只约束切片期)。 -- **甲** = **默认开**:游戏内恒可见(这是设计意图「玩家能针对护甲类型规划开格」的兑现前提);探针/夹具显式 off 态;off 态基线逐位一致进冒烟硬断言;若 Q2 裁甲,无需再留「样张前默认关」状态。 -- **乙** = 默认关 + 设置面板开关:保护读数最彻底,但玩家侧功能实际不生效,与设计意图相悖,目检也需先开设置。 -- **丙** = 默认开但不新增设置项、仅组合根布尔(调试浮窗可切)——界面无感、工程有闸。 -(v1.1 历史陈文备查:本卡当时不出推荐案——开关默认态无先例裁决:06 :431 裁决⑥只约束切片期,2026-10-13 用户令「Alpha 阶段需完成」只定完成义务、未定开关载体。)参考事实留档:甲/丙案与 HUD框架 :132「玩家由此读到相邻格类型」的设计意图(06 :431「针对护甲类型规划开格」)直接兑现;乙案玩家侧功能实际不生效。 - -**裁定(v1.2·已裁)=丙**(默认开、组合根布尔+调试浮窗可切、不新增设置项)。裁决来源:「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」。一句理由:默认开直接兑现设计意图且界面无感、工程有闸,原「切片期默认不开」条款的验收读数保护义务由 off 态逐位一致断言+golden 双帧承接(契约 1/T2),基线保护不丢。呼吸态停格义务仅 Q5 追加裁决重议呼吸时生效(契约 7,Q5 已裁甲案静态)——减动效承载面为既存在役设置项(08 :152,事实源 [设置与本地化](../gdd/systems/表现与支撑/设置与本地化.md)),不新增设置载体。 - -### Q5 · 呼吸态与 §2.1 唯一在动元素纪律(v1.2 已裁=甲·静态) - -art-bible §2.1 已裁:挖掘期画面里唯一在动的是接触带呼吸微光。类型微光若也呼吸(选项 b 的卖相之一),即破该条;且「>3 次/秒」频闪红线恒在。 -- **甲** = **静态**:微光常亮不呼吸(零纪律修订、零减动效面;v2 呈现参数本就按静态 α170 定)。 -- **乙** = 呼吸:须 art-bible §2.1 修订条目先行(接触带失去唯一动效位,两光同动是否仍守「画面在动=可交互」语义需重审),减动效停格 + ≤0.48Hz 沿接触带参数。 -案位说明(v1.1 陈文备查,当时标注「非裁决」):**甲 = 现行条款的默认合规态**——依据为既有裁决而非本卡取向:art-bible §2.1「画面里唯一在动的是玩家的思路」承载元素=接触带呼吸微光(:84),且 §3.2 接触带条明写「呼吸=§2.1 挖掘期唯一在动元素,减动效停格」(:170,2026-09-25 用户拍板批);v2 呈现参数本就按静态 α170 定(:218)。**乙 = 须先获 §2.1 修订条目的明确授权**(接触带失去唯一动效位,两光同动是否仍守「画面在动=可交互」语义需重审),减动效停格 + ≤0.48Hz 沿接触带参数(`board_view.gd:844-846` 先例)。 - -**裁定(v1.2·已裁)=甲**(静态)。裁决来源:「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」。一句理由:静态即 §2.1 既裁的默认合规态,零纪律修订零减动效面,乙案需先获 §2.1 修订条目授权而本批不预授权。追加裁决面重议路径保留原文:**补充事实——shader 路线(Q1 乙/丙)下呼吸实现成本低;若用户看过静态效果后想重议乙,迭代 30 出口后追加裁决,本批不预授权。** - -**开工门**:U0 = 用户 `/iter` 发令——Q1–Q5 已于 v1.2 全裁(「2026-10-16 用户令:三卡全部待裁项按推荐方案裁决(用户将裁权授出,由主线会话代拍板留痕)」),迭代 30 编入同令定档(roadmap 编入已在案)。T0-③ 原型帧(Q1 丙案:shader 接触带柔光先行件)过目检后方可进 T1 全线铺码(若回退兜底案,断言面两案通用)。 - -**U1 预授权(2026-10-17 用户于开工前一次性决断,防开发中反复打断)**: -1. **原型帧判据自判**——满足三条像素判据(五组去色相可分/砖心不遮数字/接触带不越圈且非生效格零变化)即自行推进铺码,不等回话;调参上限 2 轮,超限停线回 Q1 复议(§6 T0-③)。 -2. **L3 分类预授权**——可自动处置三件(共存撞墙退 a 案/golden 换代走契约 6/色弱不可分先自调一轮)批内处置+留痕;触既有裁决面类(翻动五组色相、on/off 位差、T3 触发、重开裁点)维持停机呈报(§8)。 -3. 上述两点之外,批内不再停机等话;三卡串行序位不变(徽章→样张→观感),本卡位第 1。 - ---- - -## 11. grilling 审查记录(v1.1,2026-10-16,对抗性审查) - -> 审查方式:卡片每个实查断言独立复跑检索复核;每处含糊/预判/越权表述按敌意主张逼问后处置。证据位点均为审查当日全库检索所得(工具:Glob/Grep/Read + git log 只读)。 -> v1.2 时点注:本节为 v1.1 历史记录原文留档;其中 B 表标「存留」的 Q1–Q5 待裁点已全部于 v1.2 依 2026-10-16 用户令代拍板裁定(见 §10 各裁定行),本节不再具有裁前效力。 - -### A. §2 事实五断言复核(必查攻击面 1) - -| 项 | 卡片宣称 | 复核方法与证据 | 结论/处置 | -|---|---|---|---| -| 1a | bonus_pick_overlay.gd 已不存 | Glob `game/**/bonus_pick_overlay.gd` 零命中;`*pick_overlay*` 仅 curio_pick_overlay.gd;git 8e2694de(奇物批)载明 bonus_pick_overlay→curio_pick_overlay 改名沿革 | **成立**,F6 补 git 出处 | -| 1b | 呈现层裸 Color8 现为 0 | Grep `Color8(` 限定 `game/presentation/` = 104 处全在 ui_kit.gd(ui_kit 自身为色板工厂,守卫域外);全 `game/` 另有 smoke_all.gd 2 处 + ui_contrast_probe.gd 3 处 = 测试面,不在「呈现层」口径内;守卫条款实存(ui_contrast_probe.gd:107-130 R1 白名单,现零消费);git af5f317a 提交说明自证「探针白名单清零=呈现层裸Color8=0」 | **成立**,F6 补口径声明(哪些目录、什么正则计入) | -| 1c | TG_* 已随迭代 16 N4c 入库 | 通读 ui_kit.gd:五常量实存 :51-55(TG_BUFF=Color8(194,178,100) 逐值换算 = #C2B264 ✓)、tg_band() :60-69、E5 回滚注 :58-59(blast→TG_MAGIC 与代码 :65 行为一致 ✓);git af5f317a = N4c 立项笔 | **成立**;附带发现:curio_pick_overlay.gd:101 行注「aoe/blast 归 TG_AOE」与现行代码行为不符(滞注)——已写入 F6,Q3 裁丙随修、裁甲记 L1 | -| 1d | 九 cell_type→五组归组表代码侧缺失 | Grep `glow_group`/归组相关函数零命中;唯一近似件 = tg_band()(输入为 id/kind 小写子串,非 cell_type 精确值,且 blast 归属与圣经五组相左);「不可复用」论据另有 art-bible :218(blast→群伤绯红)vs ui_kit :65(blast→TG_MAGIC)直接对照 | **成立**,T0-① 新建义务维持 | -| 1e | 组间明度档值从未定义 | 逐读 art-bible §4.2 :218:只有「各组一档明度互辨」方向、无任何 L/α 数值;§1.4 验收 2 :58、§4.5 第 9 项 :248 同状态;v3.12 版本历史 :551 自证「逐型明度映射从未定义」;§4.6.3 :325 把明度档互辨抽测保留在样张线 | **成立**,且由此引出 Q2 缩窄(见 B) | - -### B. 待裁点存留/关闭清单(禁再问已裁项核查) - -| Q | 处置 | 证据(既有裁决检索面:06 裁决史/art-bible §4.2·§4.6.3·§2.1·版本历史/HUD框架 :130-142·:167·:269/08/roadmap/git log) | -|---|---|---| -| Q1 路线 | **存留**(用户「是否会用 shader」质疑只是关切非拍板;全库 shader 路线零先例裁决) | 卡片不拍板声明保留;修订三处越权表述:b 案性能「低-中」→ 实测义务项(a 案「低」同步标注为先例外推待实测);「预计 2–3 轮」与「接受 2–3 轮节奏」→ 义务申报不承诺轮数;§8 L3「调参两轮仍不达标」→ 去轮次数值、每轮去留归用户判;「推荐:丙」删除 | -| Q2 冻结 | **缩窄**:五组色相部分 = 已裁项删除不再问——样张 v2 四冻结②「类型微光五组定稿」(art-bible :66,2026-09-28,闸形 A 批末用户目检、2026-09-27 拍板)+ v3.0「②③维持冻结不变」(:563)+ v3.12 用户裁「五组色相本身不动(样张 v2 冻结维持)」(:551);06 :431「候选值」措辞按 06 自身 2026-09-30「不再承载定义」注降级为批内机械修正。真未决 = 明度档值来源(无值可冻)+ 互辨抽测(§4.6.3 :325 归样张线而 08 :158 样张待做)联动路径——Q2 按此重写,原乙案(整批等样张总闸)因与②冻结既裁冲突而撤销;推荐语删除;新增「跨卡次序依赖」小节(样张卡 Q1 裁甲/乙/丙 三口径的联动规则逐条陈明) | -| Q3 收编 | **存留**:核查认定 06 :435「不并入本批」= 迭代 16 批范围记录(该批未并入),非跨批禁裁;两带并存证据位点逐点开文件核实行号(ui_kit.gd:51-55/:58-59/:60-69、curio_pick_overlay.gd:101、shop_overlay_view.gd:216、art-bible :218);「推荐:甲」删除,改为事实陈明+「是否翻口径归用户」 | -| Q4 开关 | **存留**:06 :431 裁决⑥「切片期默认不开」前提复核——roadmap :16(2026-09-24 垂直切片转正)/:20(2026-09-28 M-1 切片表现完成)证明「切片期」已闭合;该条款无明文作废记录、但保护对象已随阶段终结(off 态逐位一致断言+golden 双帧承接,卡片原论据成立),「条款可否随阶段过期解除」即本 Q 实质——已写入卡内;「推荐:丙」删除(「开关=工程件而非玩家件」系卡片自裁理由,撤销);减动效承载面为既存在役项(08 :152 + 设置与本地化.md 事实源 + board_view.gd:844-845 停格先例),不随本案新设 | -| Q5 呼吸 | **存留(甲案有既有裁决支撑,按铁律例外保留依据)**:§2.1 条文原文核实——:84「画面里唯一在动的,是玩家的思路」承载元素=接触带呼吸微光、:170「呼吸=§2.1 挖掘期唯一在动元素,减动效停格」(2026-09-25 用户拍板批);「减动效停格」条款实存性另经 08 :152/battle.md §Transitions/iter28 冒烟断言三处旁证;「推荐:甲」改述为「甲=现行条款默认合规态(依据 §2.1 既裁,非卡片取向);乙=须 §2.1 修订条目明确授权」 | - -### C. 其余攻击面处置汇总 - -- **Q1 共存表述核查**:`_desat_mat` 挂世界根 CanvasItem(board_view.gd:111/:170-172/:196 `_world.material` 写入点补入 F5);「每格尚无独立 ShaderMaterial」经全仓 `ShaderMaterial` 引用面检索成立;「双层共存须实测」保留为义务(单层先例经复核属实,未见第二枚 gdshader)。 -- **§0 行号抽检**:reward_economy.gd:109 query_identity 返回键 `{reward_id, cell_type, tier}` 逐字核对 ✓;board_view.gd:102/:206-208/:838-875/:844-846、HUD :136-138/:140/:167/:269、08 :139-160 表域/:158、roadmap :89、art-bible :25/:58/:76/:205/:218/:248/:325 全部命中且读数与卡片一致——零翻案。 -- **V1–V10 判具**:工具五件(run_smoke.py/probe_gate.sh/render_gate.sh/golden_compare.py/shot_checker.py)+ 三文档闸 + ui_input_probe/board_shot_probe/ui_contrast_probe 均实存;V4/V5/V6 断言段标注「T2 新建」(工具管线现成、判定件新建),V6 补降级方案(抽检判不稳→目检辅助+报告登记,误读率终判恒归样张批),V8 条件化(Q5 甲时空转)。 -- **术语与中立性**:全文复扫新规用语表词形零命中(对照 2026-10-16 用语换代批 A 表的九组词形——含「阶段完结」类替换;本轮修订自撰文本全部按新规写,历史引文两处词形已改写规避);buff 仅存代码标识符域(TG_BUFF/通用增益措辞合规);五处「推荐」全部按 B 表处置(四处删除中立化、一处改为既裁依据标注)。 -- **契约 5 改写**:色相取值依据从「Q2 裁定来源」更正为「art-bible §4.2 既冻结值 + 明度档按 Q2」,消除把已裁项挂进待裁项的口径倒置。 -- **翻案记录**:本轮复核 v1.0 五断言(1a–1e)全部成立、零翻案;被修订的是表述层(性能预判/轮次承诺/推荐语/Q2 裁域/判具落点),非事实层。v1.0 唯一实质口径升级 = Q2 缩窄(发现 v3.0/v3.12 版本历史两处「②冻结维持」直接裁住了色相重问空间,v1.0 未检出版本历史即把已裁面留进了待裁清单)。 - -> **v1.3 口径换代注(2026-10-17 文档同步闸 v3)**:本节为 v1.1 时点的审查实录,原文不重写;其中「三文档闸」一类闸件枚举字样按 v3 口径只读为历史记录,不作闸清单引用——闸清单与域划分的唯一出处恒为 `tools/run_all_gates.sh`,本批按改动域跑 `--code` 档。 diff --git a/design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md b/design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md deleted file mode 100644 index 63f244a6..00000000 --- a/design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md +++ /dev/null @@ -1,306 +0,0 @@ -# 需求卡片:测试分层与门禁语义修正批(本地闸三硬闸 · L2 集成层建承载 · L3 屏壳切换探针 · 覆盖补洞 · 术语订正 · 台账清理) - -- 版本:v2.0(2026-10-15 成文 v1.0 → v1.1 → v1.2 → v1.3 → v1.4 → v1.5 → **v2.0**) - - v1.1:①**CI 从未执行**(`git remote -v` 无输出)⇒ T1 主体由 CI 改为本地闸;②**用户立规:历史决策文档只是变更记录、不是架构文档** ⇒ 🔴 契约 5 重写为「历史决策文档不回改」,Q1 由「是否改决策文档」改为「在役架构事实如何**迁出**」,新增 Q7;③修正「smoke_all 不被执行」的错误表述(它本就在本地轻闸首项)。 - - v1.2(用户令后执行态):①**用户裁「CI 没有用、后面也不用、不留死配置」** ⇒ `.github/workflows/` 全数删除(分支 `ci-removal-20261015`),AGENTS.md 硬性红线立「不建/不留/不参考 CI 配置,改门禁只改本地闸」;本卡 T1④「CI 同步对齐」、T2「CI job 改名」、Q2「是否并入 CI」、§5 同步面 CI 行**全部删除**;②**架构事实源纪律已成文**(AGENTS.md 硬性红线 + doc-conventions);③排期订正:迭代 28 位已被「启动装配与生命周期验收补全批」占用。 - - **v1.3(2026-10-15 用户令「放到迭代 29」)**:①排期定为 **迭代 29**;②新增 **§0 前置依赖与并行性**——裁决**串行**(须等 iter28 收口),四条依据,并标明**例外**(CI 清除 4 文件建议先行合并);③T0-③/T0-④ 加注「开工日重采基线 + 复核 iter28 是否已改过相关行」。 - - **v1.4(2026-10-15 用户令「决策记录归 git commit log、不另存决策文档」)**:①历史决策文档体系整体废除,在效事实已由 10-15 文档批迁入 `design/dev/architecture/architecture.md`;②🔴 契约 5 改写为「架构事实唯一源」口径;③Q1 闭环、§5 同步面改写为 architecture.md;④全文引用清除。 - - **v1.5(2026-10-16 roadmap 编入笔)**:roadmap 迭代 29 行改写为本批+新增「迭代 30+ 位空」行;§5 `roadmap.md` 同步行与排期行更新;订正 v1.3 条目尾部重复段。 - - **v2.0(2026-10-16 三轮复查后定稿笔;用户令「实现相关的都可以用你推荐的,但重新检查一遍」)**:①**事实面改指针(N1 甲)**——§2 不再自持门禁/扫描域事实表,一律指 `design/dev/architecture/architecture.md`「测试与质量域」节(:135-178)三张表(五模块归属表/「三条判定硬闸现行状态」×5 闸矩阵/S1–S8 承接表),本卡只留**本批专属增量事实**;②**首轮 11 问按推荐案全裁**(Q1 闭环·Q2 作废·Q3–Q7 依推荐);③**第二轮 N1/N2 亦按甲**:N1=§2 改指针,N2=T6 收 S3 路径修正(+0.25d);④**订正四处事实**:PASS 串判定面实为 **8 件探针**(轻闸 4+`--full` 4,仅 `ui_click_probe` 查退出码)非 4;`game/smoke/` 实为 **29 个 `.gd`**(17 个无 `.tscn` 宿主)非 38;T5 的 `status_container` **不是零覆盖**(2 个单测已指名)→ 换 **`board_generator`**;README「门禁节已由 ci-removal 批改写」前提不成立(分支未合入)→ CI 残留 8 处改由本批 T2 清除;⑤**订正死引用**:`AGENTS.md:21/:106/:116` 与 §0 的 `:102-103`(该计数指当时 `CLAUDE.md` 压到 71 行;2026-10-19 改名后文件为 75 行,节号仍不存在)、`.github/workflows/tests.yml`(F3/F5/F6 直引已删文件)、`golden_compare.py:11`(实际 :13);⑥**新增架构文档回写义务**:本批落地后须把「三条判定硬闸现行状态」矩阵的「缺失」改「在位」、S 表 S3/S5 随之更新(§5)。 -- 来源:[测试审计 — 单测覆盖与验收门禁标准 v1.1](../qa/测试审计-单测与验收门禁标准-2026-10-15.md)(`design/qa/`,2026-10-15;加载 `godot-builder` + `godot-auditor` 双技能审计产出) -- 归属:**测试基建批**(req-card §3:缺陷修复/工程债/**测试基建**/重构类工程需求凭 bug 证据或 06 在册条目直接写卡,**无设计定稿前置要求**——本批凭据即审计报告 A 类证据) -- 排期:**迭代 29**(2026-10-15 用户令;**2026-10-16 已写入 roadmap 迭代 29 行**——原「M4 顺延 29+」行随 M4 数值批废除改写为「迭代 30+ 位空」记录)。开工门=U0,须用户 `/iter` 发令。 -- **并行性前提已满足**:iter28「启动装配与生命周期验收补全批」已于 2026-10-15 入库收口(冒烟 1086→1125/0),串行裁决的阻塞条件不复存在。开工即建 worktree 分支,主区只读铁律不变。 -- **卡片成立状态(2026-10-16)**:三轮复查完毕、**零待裁点**(见 §10)——**仅欠用户 `/iter` 发令即达 U0**。唯一待补输入=Q3 的轻闸墙钟上限(开工后 T0-② 实测前给即可,不阻塞开工)。 - -### 0. 前置依赖与并行性(2026-10-15 裁决;2026-10-16 复核:前提已满足) - -**原裁决**:不能与迭代 28「启动装配与生命周期验收补全批」并行,四条依据(保留作裁决沿革): - -| # | 冲突面 | 具体情况 | -|---|---|---| -| 1 | **`AGENTS.md` 汇聚文件** | iter28 T6 要在「批次工作流」加硬规则;本批可能动「硬性红线」节与闸口径句。同一汇聚文件两批改,顺序一乱即互相覆盖 | -| 2 | **`game/smoke/` 是 iter28 主战场** | iter28 改 `smoke_all.gd` / `ui_struct_probe.gd` / `main.gd`;本批 T4 要在同目录新建 `screen_flow_probe.gd/.tscn`,T7 还要给 15 个游离脚本定性 | -| 3 | **基线读数会作废** | 卡片冻结的旧读数(冒烟 1086/套件 27/探针数)在 iter28 加断言后失效——T0 白冻结,V11 改前锚失去意义 | -| 4 | **`08-Alpha版本标准` 会自相矛盾** | iter28 写「测试基建四行状态不变——只加断言不加新设施类」;本批恰恰动测试设施本身。并行则该文档无法陈述真话 | - -⇒ **串行裁决维持,但阻塞已解除**(iter28 已于 2026-10-15 入库)。**T0-③ 一律以开工日 master 当读数为基线**——卡片旧数字全部作废,§2.1 只留待填空表,不再写死预估值。 - -**⚠ 引用订正(2026-10-16)**:原依据里 `AGENTS.md:102-103`(批次工作流)与 `:115-116`(硬性红线)两处行号**已失效**——该文件经 2026-10-15 规则文件审计批压缩,纪律节现为「硬性红线」(2026-10-19 根规则文件改名 `CLAUDE.md`→`AGENTS.md`,只改名未改行,现共 75 行;闸口径在 `:19`/`:59`)。**本卡一律不引 AGENTS.md 行号,只引节名。** - -**例外段已作废**:原「CI 清除 4 文件先合并」的例外不再成立——`ci-removal-20261015` 分支**未合入**(其 ADR 定位两条已被 2026-10-15 决策文档体系废除取代,分支去留待用户裁)。其中 `game/tests/README.md` 的门禁节改写**改由本批 T2 自吃**(见 §2.2 F6)。**本批开工不依赖该分支。** - -- 用户原始诉求(本批要兑现的三条):①最单元的逻辑代码有它的单元测试;②整体的模块有它的接口测试;③整体的系统在执行之后,也有它 UI 方面的和场景切换相关的测试。**并且验收不能只是"冒烟"——可以是冒烟,但更重要的是逻辑正确性** - ---- - -## 1. 目标与完成定义 - -把验收语义从「**跑一遍没崩 = 冒烟通过**」扭转为「**三层完备 + 判定可靠**」。四件事: - -1. **门禁判定语义修正(本批第一优先)**:本地闸判定从「无超时 + 日志含 PASS 串」改为**三硬闸**——①退出码为唯一权威判据(PASS 串降级为日志);②`SCRIPT ERROR` / `Parse Error` 扫描命中即红;③断言数为零即红。 -2. **L2 接口层从零建承载**:新建 `game/tests/integration/`,把现成但游离的 `parity_anchor` 确定性对拍收编为**条件闸件**;补「存档 ⇄ RNG 快照往返」集成用例(README 章程登记四类之一)。 -3. **L3 补上屏壳切换**:新建屏切换探针(菜单→营地→冒险→战斗→结算→回营地),断言屏壳 `visible` 互斥与流程状态,入**轻闸默认段**。 -4. **L1 补洞 + 术语订正 + 台账清理**:4 个真零指名 core 模块补单测;「冒烟」一词回归本义(秒级存活检查);`game/smoke/` 游离脚本定性、golden 基线时效判定、**S3 路径修正与零命中自检**、补 S5 扫描规则。 - -**完成定义**: -- 三硬闸在位且**有反例实证**(造必然失败的套件/探针,闸判定必红——不是推断,是跑出来的证据,留档); -- 三层各有在册承载(L1 `unit/` 27 套 + 本批新增 7 套;L2 `integration/` 从 0 到 ≥1 套入 manifest;L3 `screen_flow_probe` 入轻闸默认段); -- 判定可靠的**同类缺陷一并清零**:8 件 PASS 串探针改退出码优先、`run_all`/`test_kit` 补断言下限与错误扫描、`static_scan` S3 静默空转修复; -- 术语订正落到机械面(本地闸脚本注释/README 索引与术语小节/`run_all.gd` 头注);**README 与 `run_all.gd` 的 CI 残留全数清除**(CI 已删,文档不得继续教人配 CI); -- 重闸 `tools/run_all_gates.sh` 全量跑批**全绿且回执零新增红**(现役唯一验收入口,见 `AGENTS.md`「运行与验证」节);06 登记销号;反哺点列明待裁。 - ---- - -## 2. 现状事实(2026-10-16 重核;**事实面只作指针**) - -> 🔴 **本节不自持门禁/扫描域事实表**(N1 裁决)。测试域的**唯一事实源 = `design/dev/architecture/architecture.md`「测试与质量域」节(:135-178)**,三张表即权威: -> ①**五模块归属表**(`run_smoke`/`run_all`/`probe_gate`/`render_gate`/`static_scan` 各自判定口径与**缺失项**); -> ②**「三条判定硬闸现行状态」×5 闸矩阵**(退出码优先/SCRIPT ERROR 扫描/断言数下限,逐闸标注**缺失**或**不适用**); -> ③**S1–S8 承接状态表**(含 S3「未落地…扫描路径 `core/` 不存在、现行实跑恒零命中」的登记)+ S9/S10 域外扩充。 -> **本批落地后须回写这三张表**(§5 义务)——现在它们写着「缺失」,本批做的就是改成「在位」。 - -### 2.1 开工日实测读数区(T0-③ 填;本卡不预估值) - -> **2026-10-16 开工日实采**(master `752c9a0a`——开工当日调试入口批刚合入,冒烟由 1126 升 1127;本批 worktree 与该提交同点实测,主区与 worktree 读数一致)。 - -| 项 | 开工日 master 读数 | 出处 | -|---|---|---| -| 冒烟项数/失败数 | **1127 / 0** | `tools/run_smoke.py`(`game/tests/.gates/smoke.log`) | -| `run_all` 套件数 | **27** 套(全绿) | `run_all.gd` manifest | -| 在闸探针数 | **9**(轻闸默认 4 + `--click` 1 + `--full` 4);`game/smoke/*.tscn` 共 **12** | `tools/probe_gate.sh` | -| 轻闸/重闸墙钟 | **run_all 全套 34s / smoke_all 71s / 轻闸 `--quick` 363s**(重闸待 T8 实测) | `tools/run_all_gates.sh` | -| 各闸存量红清单 | **01/02/03/04/05/06/07/08/08b/10 全绿;09 静态扫描 exit=1(S10 文件头存量 127 处,指纹 `4354b2aa72a7`)** | `game/tests/.gates/baseline.json` | - -### 2.1b T0-① 反例实测留档(缺陷坐实证据,2026-10-16) - -三个靶子在 **未修的现行闸** 上实跑,全部**判绿**=三硬闸缺陷坐实(不是推断,是跑出来的): - -| 靶子 | 构造 | 现行闸判定 | 结论 | -|---|---|---|---| -| a · 零断言套件 | `Kit.finish()` 时 `checks==0` → `quit(0)` | `run_all` 输出 `[run_all] PASS …(exit=0)`,汇总 `all green (29 suites)` | **断言数下限缺失**坐实(V3) | -| b · 脚本错误套件 | 断言中途触发 `SCRIPT ERROR: Invalid call. Nonexistent function 'nonexistent_method' in base 'Nil'` 后继续退出 0 | 同上 → PASS | **SCRIPT ERROR 扫描缺失**坐实(V2);该错误类型**未**中断后续断言(`all green (2 checks)`),但退出码与汇总仍全绿——只有外部扫描能抓 | -| c · PASS 后 `quit(1)` 探针 | 临时令 `ui_input_probe` 打印 PASS 后 `get_tree().quit(1)` | `probe_gate.sh` 输出 `[probe_gate] 全绿` | **退出码优先缺失**坐实(V1) | - -> 三件靶子均为临时注入,验证后已删除/`git checkout` 还原(`game/tests/run_all.gd`、`smoke/ui_input_probe.gd` 回到 HEAD 态)。T1 落地后须用同三靶子复跑,判红才算修好。 - -### 2.2 本批专属增量事实(架构文档未载;A 类直读,2026-10-16 复核) - -| # | 事实 | file:line | -|---|---|---| -| F1' | **8 件探针**走「超时 → FAIL;否则 `grep -q "PASS"` → 绿」,**退出码不参与**:轻闸默认 4(ui_input/ui_struct/layout/ui_contrast)+`--full` 4(ui_probe/ui_tune/t17_defer/fx_probe);**仅 `ui_click_probe` 段查退出码**=本批对齐样板 | `tools/probe_gate.sh:54-147`(ui_click 段 :101-102) | -| F2' | `example_test.gd`(样板件)在生产 manifest 实跑;**同类摘除有先例**=`fog_lantern_wiring_test` 随载体退役已从 manifest 摘除 | `run_all.gd:29`;`run_all.gd:48` | -| F3' | core 层**真零指名** 7 个(实扫 23 个 core 文件):`board_data`/`board_generator`/`config_db_cross_validator`/`config_db_resolver`/`minesweeper_rules`/`reward_economy`/`skill_lottery`。⚠ **`status_container` 不是零覆盖**(2 个单测已指名——v1.x 选面有误,本版已更正) | `game/core/`;`game/tests/unit/` | -| F4' | 呈现层零指名(实查):`hud_presenter`、`battle_narrator`;三屏壳无直接单测(由 T4 探针覆盖) | `game/presentation/` | -| F5' | 全库 `change_scene` **零命中**(项目走三屏壳 `visible` 互斥)。T4 可沿两处现成断言源:`smoke_all._smoke_scene_split()` 与 `ui_click_probe._exit_level_screen` | `smoke_all.gd:157`;`ui_click_probe.gd:483,503` | -| F6' | **CI 残留(CI 已删,文档仍在教人配 CI)**:`game/tests/README.md` 6 处(头注 CI/gdUnit4 行、目录布局「CI 冒烟统一入口」、Running「CI 调用点」「CI 旁必须配外部 wall-clock 超时」、Static Scan「提交前双跑:本地+CI」、`## CI` 整节含 gdUnit4 安装说明)+`run_all.gd` 头注 2 处(:2「CI 侧包装外部超时」、:7「由 CI/轻闸单独步骤调用」)。README 另记「18 套件」(现 27) | `README.md:4,5,16,33,39-40,68,73-77`;`run_all.gd:2,7` | -| F7' | `integration/` **不存在**(空壳已删)。README 章程登记四类集成用例(Core-Core/回放确定性/存档⇄RNG 往返/A1×A2 端到端),并注「各 GDD 登记的 deferral 集成用例以对侧登记为生效条件」 | `game/tests/`;`README.md:20` | -| F8' | `game/smoke/` 29 个 `.gd` 中 **17 个无 `.tscn` 宿主**(除 `smoke_all`/`probe_ui_util` 外 15 个待定性):adventure_monte_carlo、auto_player、battle_driver、board_stat_probe、calibrate_boards、damage_probe、defense_scan、dump_battle、experiment_density、level_autoplay、monte_carlo、reward_expectation、rhythm_batch、skill_rhythm_probe、verifier_batch。⚠ **其中 `adventure_monte_carlo`(parity 载体)与 `verifier_batch`(balance_verifier 采集端)是 `AGENTS.md`「运行与验证」登录在册的手动入口,禁当死件退役** | `game/smoke/`;`AGENTS.md`「运行与验证」节 | -| F9' | golden 视觉基线冻结于 **2026-09-30**(v3.5 视觉落码后),工具头注已载「资产升档批换代时显式重制基准」 | `tools/golden_compare.py:13` | -| F10' | **S3 静默空转**:`static_scan.sh` 的 S3 扫裸路径 `core`——仓根无此目录(实际 `game/core`;iter27 T5 修过整个脚本的 cd 基线却漏此路径)⇒ 恒零命中恒绿、什么都不扫。架构文档 S 表已登记「未落地…现行实跑恒零命中」;该规则守的是**数值单一事实源**红线 | `game/tests/static_scan.sh` S3 段 | -| F11' | `parity_anchor.py` 载体=`adventure_monte_carlo.gd` 同种子 20 局×3 变体(base/attune/shop)RUNSUM+JSONL 双面字节级对拍;**不在任何闸表**;调的正是 MC 脚本(受 `AGENTS.md`「MC/模拟:无数值改动零跑」红线管辖) | `tools/parity_anchor.py:1-23` | - -> **灾害先例(只留指针,不复制事实)**:GDScript 运行时脚本错误不改退出码、不计失败数、静默中断所在函数剩余断言——2026-09-19 实证「309 项 0 失败」实为断言未跑全,沿革见 `architecture.md:157` 与 git 提交史。这是 SCRIPT ERROR 扫描必须存在于判定层的理由。 - -## 3. 设计契约(红线,违反=L3 停机呈报) - -🔴 **契约 1 · 零玩法行为变更**:本批只动测试、门禁、注释、文档、脚本判定。**任何「必须改被测代码才能转绿」的断言 = L3 停机呈报**(唯一例外:断言本身写错且与现行设计冲突,走 §9 白名单 7)。 - -🔴 **契约 2 · 三硬闸不可绕过**:退出码是唯一权威判据,PASS 串只作日志不作判据;脚本错误扫描命中即红;断言数为零即红。**禁止为了让某件历史探针转绿而给它开豁免口**(需豁免=L3 呈报)。 - -🔴 **契约 3 · 现有断言面只增不减**:27 套件 + 冒烟项数(开工日读数)零删减。删任何一条断言须呈报并给依据(iter28 退役 3 条把错误顺序写成期望值的裸下标断言=既有先例)。 - -🔴 **契约 4 · 不引入第三方测试框架**:gdUnit4 维持 deferred 状态。本批在既有双载体(`--script` 套件 + 探针场景)内解决。 - -🔴 **契约 5 · 架构事实唯一源**:架构事实只认 `design/dev/architecture/architecture.md`。本批不得回改任何历史文档、不得另立决策文档体系;历史沿革只作引用。**§2 事实面只作指针**(N1 甲);本批落地后按 §5 回写该节三张表。术语订正只动机械面。`game/smoke/` 改名见 §10 Q7。 - -🔴 **契约 6 · 探针契约零破坏**:现存 9 个在闸探针(轻闸 4+`--click` 1+`--full` 4;`game/smoke/*.tscn` 共 12)的挂载面与断言语义不改(T1 只改判定,不改断言内容)。 - -🔴 **契约 7 · 测试执行两入口铁规不破**:本批跑测属「迭代 loop 开发」入口(开工后合法);**对拍收编按条件触发**(Q2 甲)——`parity_anchor` 仅在本批 diff 触数值/存档/RNG/结算面时跑,其余批 SKIP;只作收编验证,**不得借机重锚**。MC/统计类跑批仍须用户批准。 - -🔴 **契约 8 · 本批新写测试件全类型标注**(Q5 甲):S9 对 smoke/tests 的**存量豁免维持不动**(本批不扩大范围);但本批新写的套件/探针/集成用例一律参数/返回值/容器类型齐全,并把该纪律写进 README 新区示例。 - ---- - -## 4. 范围边界 - -**做**(对应审计 §六 A/B/C/D/F 级): -- A 级全部:三硬闸(8 件探针改退出码优先 + 错误扫描闸件 + 断言数下限);术语订正**含 README/`run_all.gd` 的 CI 残留清除 8 处** -- B 级:L2 建承载 + parity 条件收编 + 首个集成用例 -- C 级:屏壳切换探针 -- D 级:4 个 core 补单测(`minesweeper_rules`/`board_generator`/`config_db_resolver`/`config_db_cross_validator`);呈现层三件(`hud_presenter`/三屏壳/`battle_narrator`) -- F 级:游离脚本定性、golden 时效判定、**S3 路径修正 + 零命中自检**、补 S5 规则 - -**不做**(明示去向): -- **不重写 `smoke_all.gd`**——只做入闸与改名裁点,不拆不重构;拆分区登记 06。 -- **不做行覆盖率度量**(Godot 无内建,第三方属新基建);补洞靠「零指名清单 + 人工判定」。 -- **架构事实以 `architecture.md` 为准**,本批不回改历史文档。 -- **不清理 E 级卫生件**(test_kit static var、4 套件自建断言出口、157 处 untyped 容器、76 处 lambda)——登记 06;本批只统一**新写**断言的出口。 -- **不修 07 人闸**(实机目检六批)。 -- **不改 `run_all_gates.sh` 的「存量红零新增不判失败」容忍机制**(2026-10-15 用户自定口径)——T0 记录当时存量红清单即可,暴露的存量红走 L3 呈报。 -- **不收 S7/S8**(维持 TODO,登记 06)。 - ---- - -## 5. 关联文档同步面 - -| 文档 | 关联点(本批会改变它的哪条陈述) | 同步义务 | -|---|---|---| -| ~~`.github/workflows/tests.yml`~~ | —— | **已删除**(2026-10-15 用户令);本卡不再涉及 | -| `tools/probe_gate.sh` | **8 件**探针判定从「PASS 串」改为「退出码 + 错误扫描 + 断言下限」;T4 新探针加入默认段 | **机械面·随批更新** | -| `game/tests/run_all.gd` | manifest 增 7 套件 + 集成件(expect 协议扩);`_run_suite` 增断言数校验与错误扫描;`example_test` 摘除;**头注 CI 残留 2 处清除** | **机械面·随批更新** | -| `game/tests/unit/test_kit.gd` | `finish()` 零断言判红 | **机械面·随批更新** | -| `game/tests/README.md` | 目录布局增 `integration/`;「逻辑冒烟」→「单元套件」;**CI 残留 6 处全清(门禁节改本地闸口径)**;断言计数双口径与「18 套件」按开工日读数;新增术语小节(冒烟=秒级存活检查)+游离脚本台账节+新区类型标注示例 | **机械面·随批更新**(T2,+0.25d) | -| `AGENTS.md` | 「运行与验证」节轻/重闸口径句(**不引行号**——文件已压到 71 行):仅当 T4 入闸改变分级口径时才改 | **机械面·视需要更新** | -| `tools/run_all_gates.sh` | 新增「回放确定性对拍」**条件闸件**(diff 触面判定 + 未触面 SKIP 记回执) | **闸清单唯一定义处·随批更新**(禁在文档另列清单) | -| `game/tests/static_scan.sh` | **S3 路径修正 + 零命中自检**;补 S5 规则(视余量 S6) | **机械面·随批更新** | -| `design/dev/architecture/architecture.md`「测试与质量域」节 | ①**「三条判定硬闸现行状态」矩阵**:落地后把 run_all/probe_gate/render_gate 的「缺失」改「在位」;②**S1–S8 表**:S3 改「在位(路径修正后)」、S5 若落地改「在位」;③五模块归属表的判定口径列随之更新 | **必做·随批回写**(v2.0 新增义务——事实源必须在批末反映真实状态) | -| `roadmap.md` | 迭代 29 行已编入;估时/状态变化时同步 | **已完成**(v1.5 编入笔);T8 复核 | -| `design/gdd/06-待办清单.md` | 本卡登记条(**按用户 10-15 令缓行至批末统一登记**);新登记:余下 3 个 core 零指名模块、S7/S8、E 级卫生件、覆盖率度量、`smoke_all` 拆分 | **机械面·随批更新**(登记时机听用户令) | -| `active.md` | 状态快照与状态记录 | **机械面·随批更新** | -| `design/dev/code-conventions.md` | 测试纪律节 | **设计权威文档·不随批更新** → **反哺点三** | -| `design/gdd/07-体验验证清单.md` | 屏切换探针转机检的条目改写;golden 若重制登记观测项 | **反哺点四** | - ---- - -## 6. 任务卡 - -> 估时按 Claude 工作日口径;每卡出口自跑轻闸,全批出口跑重闸 `tools/run_all_gates.sh`(`AGENTS.md`「运行与验证」节)。 - -### T0 证据坐实与基线冻结(≈0.5–1d,**必先做**) - -- **T0-① 反例实测(关键)**:造两个必然失败的靶子——(a) 零断言套件(走 `quit(0)` 的恒假路径/模拟脚本错误中断);(b) 探针先打印 `PASS` 再 `quit(1)`。分别跑 `run_all.gd` 与 `probe_gate.sh` 判定,**记录是否判绿**。判绿=缺陷坐实,留档作 T1 验收基准;判红=我读错了,立即回报改结论。 -- **T0-② 时长预算实测**:实测 `run_all` 全套、`smoke_all`、轻闸 `--quick` 与重闸的墙钟;**并入用户给定的轻闸上限**(Q3 待补输入)作判据——超阈才议分层或并发(并发有 test_kit static var 串台风险,E-11 在册)。 -- **T0-③ 填 §2.1 读数表**:冒烟项数、套件数、在闸探针数、各闸墙钟、**存量红清单**。一律以开工日 master 为准,卡片不写死预估值。 -- **T0-④ 复核行号**:§2.2 全部 file:line 复核一遍,漂移即订正;外加 CI 残留 8 处行号复核,并确认 iter28 是否已改过 `game/smoke/` 相关行。 -- **T0-⑤ 存量红留档**:记录当次 `baseline.json` 各闸状态——三硬闸修好后若暴露存量红,走 L3 呈报由用户定归属。 - -### T1 本地闸判定三硬闸(≈0.5–0.75d,**本批改造成效最大的一卡**) - -- **① `probe_gate.sh` 探针判定**:**8 件**探针判定从「超时 + `grep -q "PASS"`」改为「**退出码优先** + PASS 串降级为日志」,全部对齐 `ui_click_probe` 段现役口径(:101-102)。 -- **② 脚本错误扫描闸**:抽成**闸件脚本**(复用 `tools/run_smoke.py` 的 `ERROR_MARKERS` 逻辑,不复制代码),同时作用于 `run_all.gd` 各子套件输出与 `probe_gate` 各探针日志。 -- **③ 断言数下限闸**:`Kit.finish` 在 `checks == 0` 时判红;`run_all` 汇总校验实跑套件数 == manifest 条目数。 -- **④ `example_test.gd` 退出生产 manifest**(T0-④ 确认无其他依赖后删条目,文件保留作样板;同类先例 `run_all.gd:48`)。 - -> **注意**:`run_smoke.py` 三闸**已完整**,不在 T1 改动范围——它是本批的**参照样板**,②的闸件逻辑从它抽,不是重写它。 - -### T2 术语订正 + CI 残留清除(机械面)(≈0.25d **+0.25d ≈0.5d**) - -> 前提:历史决策文档不回改(🔴 契约 5)。本节只改机械面文本。 - -- `run_all.gd` / `README.md` / `AGENTS.md` 口径句中「逻辑冒烟」→「单元套件」。 -- 定义「冒烟(smoke)」在项目内的**唯一保留语义=秒级存活检查**(能否启动、能否加载表、能否进主屏),写进 README 术语小节;同步写明 `run_smoke.py` 之名是历史遗留、**其承载的是系统级断言面**(改名与否走 Q7)。 -- **CI 残留清除 8 处**(Q8 甲,本批自吃):`README.md` 6 处(头注 CI/gdUnit4、「CI 冒烟统一入口」、「CI 调用点」、「CI 旁必须配外部 wall-clock 超时」、「提交前双跑:本地+CI」、`## CI` 整节)+ `run_all.gd` 头注 2 处。门禁节同步改本地闸口径。**不等 `ci-removal` 分支。** - -### T3 L2 接口层建承载(≈1–1.5d) - -- 建 `game/tests/integration/`(README 章程早有规划,一直空壳)。 -- 把 `tools/parity_anchor.py` 收编为**条件闸件**入 `tools/run_all_gates.sh`(Q2 甲):本批 diff 触 `data/tables`/meta/save/rng/settlement 面才跑全三变体,否则整闸 SKIP 并在回执记 skip;README 登记为「回放确定性」集成用例。**不得借机重锚。** -- 新增首个集成用例:**存档 ⇄ RNG 快照往返**——存→读→同种子续跑,输出与未存档一路逐位一致。**并入 `run_all` manifest**(Q4 甲)。 - -### T4 L3 屏壳切换探针(≈1–1.5d) - -- 新建 `game/smoke/screen_flow_probe.gd/.tscn`:走 menu→camp→adventure→战斗→结算→回营地 主流程,**断言屏壳 `visible` 互斥**(任意时刻最多一屏可见)+ 每步流程状态位 + 回退路径(放弃二击→终局→回营地)。 -- **入轻闸默认段**(与 ui_struct/ui_contrast 同段;若 Q3 实测超轻闸上限则改入 `--full` 段)。 -- 断言源沿 F5':`ui_click_probe._exit_level_screen` 已实证路径 + `smoke_all._smoke_scene_split()`(:157)现有断言面,不另起炉灶。 - -### T5 L1 覆盖补洞(≈1–1.5d) - -- 4 个 core 补直接单测:`minesweeper_rules`(揭示/扩散判定)、**`board_generator`**(棋盘生成——Q9 更正项,替代已被 2 个单测指名的 `status_container`)、`config_db_resolver`、`config_db_cross_validator`。 -- 呈现层三件:`hud_presenter`、三屏壳(`adventure_screen`/`camp_screen`/`menu_screen`)、`battle_narrator`。 -- 全部进 `run_all` manifest;**新写件全类型标注**(🔴 契约 8)。 - -### T6 扫描域:S3 修复 + 补 S5(≈0.5d **+0.25d ≈0.75d**) - -- **S3 路径修正**(N2 甲):`core` → `game/core`,并加**零命中自检**(规则扫描面为空即判红,防「路径写错=恒绿」的静默空转)。该规则守的是数值单一事实源红线,架构文档已登记「现行实跑恒零命中」。 -- **补 S5 规则**(core 禁裸引用 autoload 全局标识符)——按 code-conventions「新违规案例必须先补扫描规则再修码」,F10 的 Parse Error 已是真实反面案例却无规则。 -- S6 视余量决定;S7/S8 仍留 TODO 并登记 06。 - -### T7 台账与时效清理(≈0.5d) - -- `game/smoke/` **15 个**游离脚本逐个定性:在役的写进 README 台账(用途 + 触发方式 + 结果由谁判);失效的退役(走 doc-conventions §10 退役规则)。存疑者按**在役**登记并标注(Q10 甲)。 -- golden 基线时效判定:跑一次 render_gate 判别「三代换代面是否落在裁剪区」——判有效则留并加注,判失效则显式重制并呈报(**先判再动,禁先动后判**)。 - -### T8 文档同步闸与全闸(≈0.5d,**末卡**) - -- §5 全部**机械面**文档更新完毕。 -- **`architecture.md`「测试与质量域」三张表回写**:三硬闸矩阵「缺失」→「在位」;S 表 S3(及 S5 若落地)状态更新;五模块归属表判定口径列更新。 -- **反哺点**逐条列明进实现报告(测试术语、code-conventions 测试纪律、07 人闸项转机检)。 -- 06 登记销号 + 新登记(余下 3 个 core 零指名、S7/S8、E 级卫生件、覆盖率度量、`smoke_all` 拆分)。 -- 重闸 `tools/run_all_gates.sh` 全量全绿且**回执零新增红**。 - -**估时合计 T0–T8 ≈ 6.0–7.5d**(原 5.5–7d + T2 CI 清除 0.25 + T6 S3 修复 0.25);天然切分点:**T1 末**(门禁语义已修,可单独交付见效)、**T4 末**(三层齐备)。软盒 **7d 维持**,超盒按切分点拆两批——超盒时**优先切出 S6、T7 的 golden 重制、T5 呈现层第三件**。 - ---- - -## 7. 验证闸(逐需求点验收清单) - -**能力验证(自动化;谁验=批末重闸闸机,全绿才合并)** - -| # | 需求点 | 测什么 | 落点 | -|---|---|---|---| -| V1 | 三硬闸-退出码 | **反例实证**:探针打印 PASS 后 `quit(1)` → 闸判红(8 件改完后逐段验) | T0-① 留档 + T1 探针判定段,新增进 probe_gate 自检 | -| V2 | 三硬闸-脚本错误 | **反例实证**:注入一处 `Parse Error` 的套件 → 闸判红(而非绿) | 新增闸件单测(进 `run_all`) | -| V3 | 三硬闸-断言下限 | **反例实证**:零断言套件 → 判红 | `test_kit.finish` 断言 + `run_all` 套件数校验 | -| V4 | 术语订正(机械面) | 本地闸脚本注释 / README 术语小节 / `AGENTS.md` 口径句 到位;「冒烟=秒级存活检查」定义小节在册;**README 与 `run_all.gd` 的 CI 措辞零命中** | 源码断言(grep 旧措辞零命中) | -| V5 | L2 承载 | `integration/` 在册 + ≥1 套进 manifest;**parity 条件闸件入 `run_all_gates.sh`,触面批实跑一次、非触面批正确 SKIP** | 新集成套进 `run_all`;条件闸件进重闸 | -| V6 | L2 存档往返 | 存→读→同种子续跑,与未存档一路输出逐位一致 | 新集成套断言 | -| V7 | L3 屏切换 | 六步主流程 + 三屏壳 `visible` 互斥(任意时刻 ≤1 可见)+ 放弃回退路径 | 新探针 `screen_flow_probe`,**入轻闸默认段** | -| V8 | L1 补洞 | 4 个 core(含 `board_generator`)各 ≥3 条真值断言;呈现层三件各有断言面;**新写件类型标注全数在** | 新单测进 `run_all`(27 → 34) | -| V9 | 扫描域 | **S3 路径生效 + 零命中自检在位**(造反面案例触发);S5 规则在位且有反例 fixture | `static_scan.sh` S3 修正段 + 自检段 + S5 新段 | -| V10 | 台账与 golden | 15 个游离脚本全定性(在役入台账/失效退役);golden 时效判定结论留档 | README 台账节;render_gate 结论进实现报告 | -| V11 | 零回归 | 重闸 `run_all_gates.sh` 全量**全绿且回执零新增红**;冒烟/套件数与开工日基线对拍零漂移;render_gate golden 对基线零漂移 | 全闸 | - -**测试方式两分法**:V1–V11 全部归**能力验证**(自动化闸,调试接口沿用现役 DebugOverlay/DS_DEBUG 门控);本批**无用户目检项**(纯基建,不改变玩家可见行为)——若 T7 golden 判失效需重制,该处置登记 07 观测项并呈报。 - -**闸口径**:轻闸=`tools/run_all_gates.sh --quick`,重闸=全量并写回执(`AGENTS.md`「运行与验证」节);每卡出口自跑轻闸(触碰 presentation 加跑 ui_click);测试执行两入口铁规不破(开工后属迭代 loop 入口,跑测合法);MC/统计类跑批仍须用户批准,对拍按条件闸件跑(契约 7)。 - ---- - -## 8. 异常分级 - -- **L1(自救)**:断言拼写错、反例 fixture 没造对、manifest 条目漏登记、注释订正漏处——立红即修。 -- **L2(记录继续)**:探针判定改法的具体写法、`integration/` 目录内部分类、新单测文件命名与落位、游离脚本定性存疑(先按"在役"登记并标注存疑)——登记随批内消化。 -- **L3(停机呈报)**:触碰 §3 任一红线;**T0-① 反例实测判定为「判红」**(即我读错了,缺陷不成立,须重估全批范围);`smoke_all` 入 CI 后超时撞墙且无解;golden 基线判失效;新探针与 `ui_click_probe` 走查路径冲突到必须改现有探针契约;改判定后现有某探针/套件暴露**真实存量红**(不是本批引入的)——须呈报由用户定归属。 - ---- - -## 9. 代拍板白名单(超清单必呈报) - -1. 三硬闸的具体实现写法(闸件是独立 `.sh` 还是并入既有脚本;错误扫描正则沿用 `run_smoke.py` 的 `ERROR_MARKERS`)。 -2. 断言数下限的具体阈值(每套件 ≥1 还是 ≥3;倾向 ≥1,防误伤小套件)。 -3. `integration/` 内部目录分类方式(按系统分 vs 按用例类型分)。 -4. 新集成套并入 `run_all` manifest 的执行细节(Q4 已裁甲,expect 协议如何扩)。 -5. 新单测/新探针的文件命名与落点(不违背 code-conventions 命名纪律前提下)。 -6. 4 个 core 模块单测的断言面取舍(覆盖到什么粒度)。 -7. **断言本身写错且与现行设计冲突**时的修法(契约 1 的唯一例外:须在报告中逐条列明改了哪条断言、依据哪份设计)。 -8. 游离脚本「在役/失效」的判定(存疑者按在役登记并标注;`AGENTS.md` 在册入口禁当死件)。 -9. S5 规则的正反例 fixture 构造方式。 -10. 提交切分与 worktree 分支命名(走既有 worktree 纪律)。 -11. **S3 零命中自检的实现形态**(如何判定「扫描面为空」:目录存在性校验 + 命中数为 0 的显式标注)。 -12. **条件闸件的 diff 触面路径表**(哪些目录/文件算「触数值/存档/RNG/结算面」——写进 `run_all_gates.sh` 内,不自造第二份清单)。 - ---- - -## 10. 待裁点(2026-10-16 三轮复查后**全裁**) - -| # | 事项 | 裁决 | -|---|---|---| -| **Q1** | 测试域在效架构事实的承载去向 | **已闭环**:迁入 `design/dev/architecture/architecture.md`「测试与质量域」节(:135-178) | -| ~~**Q2**~~ | ~~`smoke_all` 是否写进 CI~~ | **作废**:CI 已删;`run_smoke` 本就是轻闸首项 | -| **Q3** | 套件增长致闸超时怎么办(原问 CI `timeout 120s`) | **甲(改铸)**:CI 前提已死 → T0-② 实测轻/重闸墙钟,**超用户给定上限**才议分层或并发;并发(static var 串台)与分层归 06。**待补输入:轻闸墙钟上限**(不阻塞开工,T0-② 前给即可) | -| **Q4** | `integration/` runner 形态 | **甲**:并入 `run_all` manifest(零新机制) | -| **Q5** | S9 类型闸是否收回 smoke/tests 豁免 | **甲+**:存量豁免维持;**本批新写测试件全类型标注**(升 🔴 契约 8) | -| **Q6** | golden 基线若判失效如何处置 | **甲**:显式重制 + 呈报 + 复闸(iter26 T6 先例);**先判再动、禁先动后判** | -| **Q7** | `run_smoke.py`/`smoke_all.gd` 是否改名 | **甲**:不改名,README/AGENTS.md 加注「名是历史遗留,实为系统级断言面」 | -| **Q8**(第二轮) | README/`run_all.gd` 的 CI 残留 8 处归谁 | **甲**:本批 T2 吸收(+0.25d);**不等 `ci-removal` 分支** | -| **Q9**(第二轮) | T5 补洞选面 | **甲+更正**:维持四 core 选面,但 `status_container` 已证非空覆盖 → 换 **`board_generator`**;余下 3 个真零指名(`board_data`/`reward_economy`/`skill_lottery`)登记 06 | -| **Q10**(第二轮) | 游离脚本存疑默认 | **甲**:存疑按在役登记并标注;`AGENTS.md` 在册入口(`adventure_monte_carlo`/`verifier_batch`)禁当死件 | -| **Q11**(第二轮) | v2.0 重核时机 | **甲**:U0 前只读重核(已完),裁点落定后一次性升版=本版 | -| **N1**(第二轮) | 卡片 §2 自持事实表 vs 架构文档 | **甲**:§2 改指针,事实面归 `architecture.md` 三张表 | -| **N2**(第二轮) | T6 是否收 S3 路径修正 | **甲**:收(+0.25d),含零命中自检 | - -**其他已裁项(首轮推荐案全采纳)**:L2 充分性=承载+2 例(Core-Core/A1×A2 随属主批增量);parity 收编=条件闸件(MC 红线不放宽);新写测试件类型标注=是;README CI 残留=本批吸收。 - -**开工门 U0 = 零待裁点 + 卡片 v2.0 成立 + 用户 `/iter` 发令。** -**现状(2026-10-16)**:前两项**已满足**——待裁点全清零、本版即 v2.0。**仅欠用户 `/iter` 发令。** Q3 的墙钟上限属 T0-② 所需输入,不阻塞开工。 diff --git a/design/research/需求卡片-秘宝体系实现重构落地批-2026-10-11.md b/design/research/需求卡片-秘宝体系实现重构落地批-2026-10-11.md deleted file mode 100644 index f4a5243b..00000000 --- a/design/research/需求卡片-秘宝体系实现重构落地批-2026-10-11.md +++ /dev/null @@ -1,161 +0,0 @@ -# 需求卡片:秘宝体系实现重构落地批(2026-10-11) - -> 状态:**定稿 v1.3(C1-C6 全裁落卡,开工门=U0)**——C1-C5 经用户 2026-10-11 逐点裁决全落(裁决记录见 §10);v1.2=测试方式与 07 体验清单登记义务补入(用户定:能力验证走调试接口直改游戏数据、正常流程体验归用户目检);v1.3=回补逐需求点验收清单(逻辑验收方法论批,用户令),回补登记三条回补待裁点(§11——1 条件数口径待用户裁、2 条开工时按序落定,均不阻塞开工) -> 来源:06-待办清单「秘宝体系实现重构落地批」条(2026-10-10 用户令登记);设计正主=秘宝.md v2.9(裁点已清零,2026-10-11 grilling 收官) - -## 1. 目标与完成定义 - -把秘宝从旧目录(14 行退役数据)整体换代到新目录 12 件:数据行重建、解锁混合制(钥石购买+条件解锁)、装配不可变(冒险开始前配置、冒险中零更换)、使用代价各形态(战斗级/关卡级限量、转化获取)、旧数据行与旧装配关系清理、验收闸落地。 - -**完成定义**:新 12 件全部可解锁、可装配、可生效且效果与订阅行声明逐件一致;旧 14 行与旧装配关系清除(开发期直接废弃旧存档,无迁移代码);护栏校验/覆盖检查/装配不可变断言全绿;冒烟全绿零回归。 - -## 2. 现状事实(代码级,2026-10-11 实查) - -| # | 事实 | 出处 | -|---|---|---| -| F1 | 数据表现行 14 行全部为旧目录件(probe_dust/sapper_order/loot_compass/nest_pendulum/catacomb_scroll/blast_kit/venom_edge/flag_burst/nest_counter/dawn_order/dig_charge/luck_coin/pick_refresh/fog_lantern),无一行属新 12 件 | `game/data/tables/treasure_items.tres`(grep item_id=14) | -| F2 | 同调位数量=秘宝侧里程碑谓词表实时求值(Σ达成 grant clamp slot_cap)——树侧接线前的过渡基座 | `game/core/attunement.gd:24-27` | -| F3 | 消费口=spend_keystone(钥石);装配写口=toggle_attunement(装配/换装唯一写口,满位禁选) | `game/core/meta_progression.gd:351`、:59/:194/:223 | -| F4 | meta.tres 三行族现役:forge_products(:7 属性锻造三档)/workshop_items(:39 旧工坊解锁行)/attune_refresh_upgrade(:80 Y 刷新升级行族) | `game/data/tables/meta.tres` | -| F5 | 效果引擎三词表封闭:EVENTS(:20)/EFFECT_KINDS(:31)/FACTS(:38)——新件效果行只能用现役词或扩签 | `game/core/effect_engine.gd` | -| F6 | 存档 v6:meta 域含 attunement_equipped(v4,装配关系有序数组)/attune_refresh_level(v4)/tree_nodes+fork_sides(v5);旧档缺键补空 | `game/core/save_manager.gd:13/:42` | -| F7 | treasure_inventory(过渡形态关卡域库存)现役在册但机械惰性(投放渠道全退役恒空),仍被 adventure_runner 引用 | `game/core/adventure_runner.gd:601-620` | -| F8 | feats.tres 含 magic_vs_magic 死条件行(:25-33,clamp_check+matchup eq);该行所属件是否在素材库表二 27 件删除名单内=本批 T0 核对点 | `game/data/tables/feats.tres` | -| F9 | 旧件订阅行在役(淬毒刃纹=attack_commit/标中殉爆=flag_hit/惊巢反制=mine_hit 等按件声明)——删旧行时订阅行随行消亡,效果引擎零特判 | `treasure_items.tres` 各行 + `effect_engine.gd` | -| F10 | 营地秘宝匣柜台现役=解锁进度呈现+同调装配段(toggle_attunement)+Y 刷新升级行购买;树面板为程序占位 | `meta_progression.gd` + `design/gdd/ux/camp.md` | - -## 3. 设计契约(违反即返工,🔴=L3 停机呈报) - -1. 🔴 **装配不可变**:装配只在冒险开始前于营地配置;冒险中不存在任何更换途径(拾取与效果均不产生装配变化)——实现不得出现任何运行中装配写口。 -2. 🔴 **槽位约束**:槽位共 3 格(由天赋树同调位节点提供:1=普通格/2=优秀格/3=稀有格递增),槽位可装 ≤ 槽位档位的件;每件固定占 1 格。**本批不实现槽位来源**(只留树接口接缝;无槽位即不可装配——2026-10-11 用户裁);谓词表槽位求值职责随批移除;测试经调试功能注入槽位,不走正常流程。 -3. 🔴 **棋盘事实不可变**:秘宝效果不移除/不增改危险格位置与邻接数字——效果只允许信息呈现与开格动作。 -4. 🔴 **真视窄域 ≤3×3**、零随机、排雷玩法零特判、危险格与安全格分布同池冻结(资源面件只动权重投影)——承重契约全条(秘宝.md 速览)。 -5. 🔴 **两域正交**:秘宝件经同调位装配生效,不入局内道具背包,与奇物背包互不混装。 -6. 解锁=混合制(基础件钥石购买/特定件条件解锁),逐件分配按 C1 裁决;旧「档位谓词分级」口径作废。 -7. 全部数值(价格/阈值/充能数/面值)provisional——本批可投占位值,终值归调参批。 -8. 🔴 **逐件分配锁定表**(2026-10-11 用户裁 C1): - -| 件 | 解锁方式 | 条件(阈值 provisional 归调参批) | -|---|---|---| -| 晨操令 / 阔视野带 / 试炼镐 / 储备罐 / 巢穴预告 / 线香 | 钥石购买 | — | -| 双管装填 | 钥石购买 | — | -| 远程镐 | 条件解锁 | 通关 1 次(=打通整局冒险,adventure_cleared 计数器) | -| 刷新执照 | 条件解锁 | Boss 击杀 3 次 | -| 天眼 | 条件解锁 | 通关 3 次(=打通整局冒险 ×3)且 Boss 击杀 4 次 | -| 信标网络 | 条件解锁 | 真视类工具累计使用 10 次(行为条件——使用计数器随批新增) | - -9. 🔴 **命名锁定**(C2):12 件代号即正式名(晨操令/阔视野带/试炼镐/储备罐/巢穴预告/线香/双管装填/远程镐/刷新执照/天眼/信标网络——11 件有效名,随 C1 表)。 - -## 4. 范围边界 - -**做**:新 12 件数据行与效果订阅行;解锁混合制与秘宝匣柜台换代;装配/充能账(各使用代价形态);旧 14 行删除与存档迁移;装配不可变与空配置验收闸(装配面部分);效果引擎接入与词表核实。 - -**不收件(去向)**:③专长侧 feats 27 旧行删除+新专长框架衔接→**奇物侧需求卡片另行写卡**(06 条目保留该行);⑤奇物池结构选型三案与配额数字→奇物侧(同上);④空配置验收闸的三选一池空兜底/商店空货架两部分→奇物/商店侧(本批只做装配面空目录断言);旧件玩家可见 UI 文案清扫→代码文案批(另批);槽位来源实现→天赋树实装批(本批只留接缝,C4 裁);存档迁移→不存在(C3 裁:开发期删档)。 - -## 5. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| `design/registry/entities.yaml` | aux_items 条目(表名/行数/字段/解锁口径全换代)+treasure_items 新行登记+attunement_growth→解锁条件表条目 | **机械面:随批更新** | -| `design/gdd/06-待办清单.md` | 实装批条状态(已开工/已入库)、magic_vs_magic 交叉核对结果销号 | **机械面:随批更新** | -| roadmap | 秘宝实装批行状态 | **机械面:随批更新** | -| `design/gdd/07-体验验证清单.md` | 新增观测项「秘宝解锁-装配正常流程体验」(攒钥石→购买/条件解锁→装配→生效全程;验证人=用户) | **机械面:随批新增** | -| active.md | 批次状态记录 | **机械面:随批更新** | -| `design/gdd/systems/跨局循环/秘宝.md` | 逐件效果格归属与使用代价形态登记、表名换代、解锁条件表实录 | **设计权威:反哺点**(实现报告列明,用户裁决后另批落文) | -| `design/gdd/systems/跨局循环/元进度.md` | 秘宝匣行实现态、同调装配段呈现 | **设计权威:反哺点** | -| `design/gdd/ux/camp.md` | 秘宝匣柜台呈现细则(解锁购买面/条件解锁状态/分档呈现) | **设计权威:反哺点** | -| `design/gdd/systems/表现与支撑/存档序列化.md` | 迁移规则(v6→v7 若扩域) | **设计权威:反哺点**(若本批扩存档域则随批机械更新+文档换代归反哺) | - -## 6. 任务卡 - -| # | 任务 | 估时 | -|---|---|---| -| T0 | 现状复核与四项核实:X/Y 字母与两账对表;magic_vs_magic 所属件×表二名单交叉核对(决定锻造工坊批③是否作废);效果引擎扩签清单(12 件效果逐条比对 EFFECT_KINDS——缺词列扩签面与停手挂点);件级跨事件状态账/秘宝参数注入面两疑似漏项核实;真视使用计数器接入点核实(信标网络行为条件的数据源) | 0.5d | -| T1 | 数据层:treasure_items.tres 新 12 行(订阅行 on/when/do+档位+使用代价形态+解锁方式字段)重建;旧 14 行删除;attunement_growth.tres 改造为解锁条件表(游玩里程碑/行为计数行——槽位求值职责移除) | 1d | -| T2 | 核心层:解锁服务(钥石购买走 spend_keystone/条件解锁读解锁条件表);装配扩档位格约束(toggle_attunement 校验件档≤格档)+槽位树接口接缝(默认 0、调试注入面);充能账各形态(战斗级/关卡级限量按周期重置、转化获取积点账本、常时件零账);装配不可变(运行中零写口) | 1.5d | -| T3 | 效果引擎:12 件订阅行接入与行为对拍(每件配最小行为断言);扩签词表落地(T0 清单若需);停手挂点 | 1d | -| T4 | 呈现:秘宝匣柜台换代(钥石购买钮/条件解锁进度/分档装配呈现/槽位档位显示);旧件文案清除;装配不可变(无任何运行中调装入口) | 1d | -| T5 | 存档面:旧存档直接废弃(开发期删档,C3 裁——零迁移代码);attunement_equipped 域保留、写新件 id;treasure_inventory 惰性面随批拆除或保留注记 | 0.25d | -| T6 | 验收闸与冒烟:护栏校验(真视≤3×3)/覆盖检查(三方向)/装配不可变断言(冒险全程快照)/装配面空目录合法态断言/全量冒烟回归 | 0.5d | -| T7 | **文档同步闸**:机械面五件更新完毕+反哺点四条逐条列明待裁决;轻闸全绿后合并 | 0.5d | - -合计 6d(区间 5-7d;超 8d 触发切分预案:T3 效果引擎拆独立批) - -## 7. 验证闸 - -### 7.1 闸口径 - -- **轻闸**=冒烟全绿+本批新断言全绿;**重闸**=全量冒烟。批末四闸(冒烟+单元测试+场景探针+改前改后读数对拍)全绿才合并。 -- **测试方式(2026-10-11 用户定)**:能力验证一律通过**调试接口直接修改游戏数据**进行——改钥石数量→验证购买解锁;改同调位槽位数量→验证装配;直接置解锁状态→验证条件件;不走正常资源积累流程(调试面沿用现役 DebugOverlay/DS_DEBUG 门控)。 -- **正常流程体验验证=用户目检**(攒资源→解锁→装配→生效的完整流程体验):本批登记 07-体验验证清单观测项一条(机械面随批),验证人=用户。两入口铁规不破(仅 /iter 开发与用户点名跑测试)。 -- **执行载体五选一,逐条声明**(code-conventions.md §3.5):单元测试(tests/run_all)/冒烟断言(smoke_all.gd 对应场景段)/场景探针(smoke/ 下 *_probe)/MC 同种子对拍(本批零随机无概率面,备用)/人工核对(仅限无法自动化的纪律类需求点)。换代出口=合并后冒烟全绿且全仓无旧件残留引用(V12/V13/V14/V16 出口条件)。 - -### 7.2 逐需求点验收清单 - -> 断言失败消息末尾带〔秘宝批 Vn〕编号尾缀,断言与清单互查靠 grep(code-conventions.md §3.5 第 2 条)。注入一律走调试接口直改游戏数据口径(现役 DebugOverlay/DS_DEBUG 门控;自动化测试=测试代码直改数据表行/计数器/存档域、直调核心写口构造状态,不经 UI、不走正常资源积累流程);槽位按 §10 C4 裁决用调试注入、不走正常流程。T6 已列的验收闸任务(护栏校验/覆盖检查/装配不可变断言/装配面空目录断言)不重复展开,清单条目指针即可。 - -| 编号 | 需求点/契约指针 | 测什么(具体断言或行为) | 怎么测(载体+注入粒度) | 谁验 | 任务卡 | -|---|---|---|---|---|---| -| V1 | §1(新 12 件数据行重建);契约 8 | treasure_items.tres 加载零违例、行数=落表实数(件数口径见 §11 回补待裁点 1——卡文 12 件/契约 8 表 11 件有效名,断言不硬编);每行 form/slot_cost/解锁方式字段在册且活行非 retired/deferred;逐行解锁方式与契约 8 分配一致(钥石购买件带价格字段、条件件带解锁条件表指针行) | 冒烟+静态核查。注入=直读表行逐键比对;分配面=静态 grep 行解锁方式字段对照契约 8 表 | 自动闸 | T1 | -| V2 | 契约 9(命名锁定) | 12 件 display_name 逐件=正式名(晨操令/阔视野带/试炼镐/刷新练习*/储备罐/巢穴预告/线香/双管装填/远程镐/刷新执照/天眼/信标网络——*刷新练习归属见 §11 回补待裁点 1);零自造名、零旧件名残留 | 人工核对——静态 grep display_name 全集逐件过目(初筛可入冒烟静态段,裁决以人工过目为准) | 用户(人工核对) | T1 | -| V3 | §1+契约 6(解锁混合制·钥石购买) | 钥石购买解锁:余额足→购买成功、解锁态落档、余额扣减正确;余额不足→拒绝且零副作用;已解锁重复购买拒绝 | 单元+冒烟。注入=直调 save.add_keystone(save_manager.gd:220)改钥石数量→直调解锁服务购买写口(内走 spend_keystone,save_manager.gd:225)→断 save.item_unlocked 与余额读数 | 自动闸 | T2 | -| V4 | 契约 8(逐件分配锁定表·条件解锁) | 条件件逐件断言:远程镐=adventure_cleared≥1(save_manager.gd:278 计数在役);刷新执照=boss_kill_count≥3(save_manager.gd:264);天眼=adventure_cleared≥3 且 boss_kill_count≥4;信标网络=真视类工具累计使用≥10 次(行为计数器随批新增,T0 核实接入点)。未达标不解锁、达标恰解锁一次(幂等);阈值读解锁条件表值不硬编(provisional 归调参批) | 单元。注入=直置存档生涯计数(adventure_cleared/boss_kill_count/真视使用计数——存档域直改或计数写口)→调解锁服务条件刷新面→断解锁态;幂等面=重复刷新零重复入账 | 自动闸 | T2 | -| V5 | 契约 2(槽位约束) | 默认 0 槽=装配全拒(无槽位即不可装配——合法定义态);调试注入槽位后:件档≤格档可装、件档>格档拒绝;满位禁选;非同调行拒绝(meta_progression.gd:351 toggle_attunement 现役守卫延续);每件固定占 1 格 | 单元+冒烟。注入=调试注入槽位(T2 调试注入面置档位 1/2/3——C4 裁不走正常流程)→直调 toggle_attunement 构造合法/越档/满位三态 | 自动闸 | T2 | -| V6 | 契约 1(装配不可变) | 冒险全程装配快照逐位不变+运行中零装配写口——T6 卡已列装配不可变断言(冒险全程快照),本条为清单指针不重复展开 | 按 T6 卡执行 | 自动闸 | T6 | -| V7 | §1(生效一致·效果与订阅行声明逐件一致) | 新 12 件逐件按 7.3 附表断言:正常效果命中、边界不触发、反例不发生;被动件走订阅行(on/when/do)、主动件走受理分发通道,词表出域即加载报错(effect_engine.gd:20-46 封闭词表) | 冒烟/单元。注入=测试构造装配集数组直调 EffectEngine.rebuild+dispatch 直测命中面;主动件经受理面构造事件;发射点行为段沿用现役 _fx_emit 直测法 | 自动闸 | T3(附属表=7.3) | -| V8 | §1(使用代价各形态) | 充能账逐形态断言:线香=战斗级限量(每场战斗开始重置);天眼=关卡级限量(每关开始重置);试炼镐=转化获取(开 4 安全格积 1 点、满 2 点换当轮 +1 AP——counter_add/counter_spend 现役词汇);被动常时件零账本;充能每冒险开始重置(breakpoint.attunement_charges 附随件语义不变) | 冒烟/单元。注入=直调充能账写口+dispatch 构造事件计数(smoke_all.gd:4672-4676 充能重置段同构、换代主语);重置面=推进战斗/关卡边界后断读数回满 | 自动闸 | T2/T3 | -| V9 | 契约 3(棋盘事实不可变) | 装配任意新件组合(含 12 件全量)开局,同种子棋盘快照(危险格位置/邻接数字)与零装配逐位一致;新 12 件订阅行 do.kind 全集零棋盘改写类词(rewrite_board/remove_mines/cell_removal) | 重放+快照比对+静态核查。注入=构造装配集全量 rebuild 后跑棋盘生成;词表面=静态 grep 新 12 行 do.kind 全集 | 自动闸 | T3 | -| V10 | 契约 4(真视窄域/零随机/分布同池冻结);覆盖检查 | 真视护栏:新 12 件逐件过加载校验(真视类目标域>3×3 加载报错——treasure_target_violation_test.gd 护栏本体保留、注入主语换代新真视件行);零随机=同操作序列重放两遍,装配与充能账、叠加层投影逐位相同;分布同池冻结=效果不改危险格/安全格分布(资源面件只动权重投影);效果三方向覆盖检查——T6 卡已列,本条指针不重复展开 | 冒烟+单元+重放。护栏注入=构造越域行断言加载报错;重放=同种子两遍操作序列快照对比 | 自动闸 | T6/T3 | -| V11 | 契约 5(两域正交) | 秘宝不入局内道具背包:三选一牌库 _curio_deck 零秘宝 item_id 种(smoke_all.gd:588-596 池收缩断言同构延续);奇物不入同调位:同调目录只读 treasure_items form 非空行、feats 表行零入目录 | 冒烟。注入=直读 _curio_deck kind 全集与同调目录投影(treasure_attunement_rows) | 自动闸 | T3/T1 | -| V12 | §1(旧 14 行删除+全仓零残留) | treasure_items.tres 旧目录行全删(表内唯新 12 件);全仓(game/ 内 .gd/.tres/.tscn)旧 item_id grep 零残留。静态核查面(本卡实查在案):meta_table.gd:28(WORKSHOP_ITEM_IDS 旧六件——随解锁混合制换代)、treasure_item_table.gd:44/:52(venom_rider/flag_burst 效果词——venom_edge/flag_burst 两行系专长批迁出行,见 §11 回补待裁点 2)、battle_orchestrator.gd:919(attune_flag_burst 硬编码分支)、main.gd:852-890+board_view.gd:139-148(fog_lantern 呈现桥接线——随行删除同批摘除或换代)、effect_engine.gd:113/:302(dawn_order 注释面);smoke/tests 引用面见 V13 | 静态核查+冒烟(删除后表加载零违例、同调目录收窄不缺行) | 自动闸 | T1 | -| V13 | §1(旧验证约束同生死,code-conventions.md §3.5 第 5 条) | 只验证旧秘宝件/旧机制的断言同批摘除或换代,摘除后冒烟仍全绿且新断言接管。本卡实查在案的摘除/换代清单——smoke_all.gd::230-232(同调位读数源=attunement_growth 谓词表断言——随 V14 移除)、:235-252(fog_lantern 行加载/目录投影——换代新件主语)、:254-260(fog_lantern 装配贯通/空装配基线——空装配基线本体保留换主语)、:575-576/:609-610(treasure_unlocked 夹具 blast_kit)、:4627-4628(工坊阈值解锁 probe_dust/sapper_order/loot_compass——随解锁混合制换代)、:4644-4647(白板档 slots=0+满位禁选 venom_edge 主语)、:4654-4659(谓词里程碑 Slots=1+venom_edge/flag_burst 装配持久)、:4661-4664 与 :4692-4704(luck_coin 装配夹具——换新件 id)、:4666-4671(AttunementGrowthTable 谓词 clamp 单测面——随 V14)、:4672-4676(充能重置 dig_charge/nest_pendulum 主语——见 V8 换代)、:4677-4688(刷新双计数器 pick_refresh 主语——机制本体保留换主语)、:4764(unlock_item("venom_edge") 树迁移夹具换他件);tests:fog_lantern_wiring_test.gd 全文件(run_all.gd:46 注册行同批摘除或换代)、treasure_items_test.gd:27-95(TreasureItems 夹具——随 V16 处置)、treasure_target_violation_test.gd:24-33(护栏主语换代——护栏本体保留归 V10)、reward_dangling_treasure_test.gd:24-25(loot_compass 悬空投放探针——投放面已退役随行清亡)、reward_overlay_test.gd:72(open_replace probe_dust 主语——随 V16 处置)、breakpoint_resume_test.gd:94 与 :138-148(blast_kit 夹具/fog_lantern 断点主语)、ui_input_probe.gd:395-434(case⑮ fog_lantern 载体装配链) | 冒烟全绿出口+静态 grep(旧 id 清单在冒烟/单元/探针段零残留) | 自动闸 | T1/T2/T3/T4/T5 | -| V14 | F2(谓词表槽位求值职责移除) | attunement_growth.tres 改造为解锁条件表后:旧槽位求值断言摘除(smoke_all.gd:230-232/:4644-4645/:4654-4655/:4666-4671——milestones m1/m2/m3 谓词语义退役);Attunement.slots 消费面(attunement.gd:24-27 服务本体、meta_progression.gd:357 满位判断/:381 营地投影)按 T2 新槽位口径换代(树接口接缝默认 0+调试注入);新槽位口径断言=V5 | 冒烟+单元。摘除后解锁条件表加载零违例;注入=调试注入槽位断言新口径 | 自动闸 | T1/T2 | -| V15 | §1+C3(存档面:旧档废弃零迁移) | 装配关系读回断言写新件 id(smoke_all.gd:4661-4664 换代主语后即兜);旧档直接废弃零迁移代码=save_manager.gd 零新增迁移分支(C3 裁——SAVE_FORMAT_VERSION 现役 v6 口径,save_manager.gd:42) | 冒烟+人工核对(迁移分支面静态过目) | 自动闸+用户 | T5 | -| V16 | F7(treasure_inventory 惰性面处置) | 拆除路线:adventure_runner.gd:601-620/:1059-1060、level_runner.gd:65/:300-303 引用面清理+关联验证同批摘除(treasure_items_test.gd 全文件、reward_overlay_test.gd:72、断点 treasure_snapshot 消费面),删除后冒烟仍全绿且新断言接管;保留路线:机械惰性注记在案=人工核对(投放渠道恒空在册) | 冒烟+静态核查(拆除)/人工核对(保留)——双路线并写,按 T5 执行口径落一条(见 §11 回补待裁点 3) | 自动闸或用户 | T5 | -| V17 | 契约 7(数值 provisional) | 全部占位值在册(价格/阈值/充能数/面值/转存率 1.25/微光 12 格等)且结构形态不超 GDD 目录表与代价轴描述 | 人工核对——表值逐项对照秘宝.md「目录(重设计 v1)」件表与「设计骨架·代价轴」节 | 用户(人工核对) | T1/T2 | -| V18 | §1(空配置验收闸·装配面) | 装配面空目录合法态断言——T6 卡已列,本条为清单指针不重复展开(池空兜底/商店空货架两部分归奇物/商店侧另批,§4) | 按 T6 卡执行 | 自动闸 | T6 | -| V19 | §1(正常流程体验+柜台换代呈现) | 秘宝匣柜台换代呈现:钥石购买钮/条件解锁进度/分档装配呈现/槽位档位显示;正常流程体验=攒钥石→购买/条件解锁→装配→生效全程 | 用户目检——观测项登记 07-体验验证清单(机械面随批);场景探针(ui_input_probe 载体链换代主语)兜可达性 | 用户目检 | T4 | - -### 7.3 附表:新 12 件逐件表(V7 附属表;三列即 V7 每件的断言内容——正常效果/边界/反例) - -| 件名 | 正常效果(断言要点) | 边界 | 反例(不该发生什么) | -|---|---|---|---| -| 晨操令 | 每场战斗第 1 轮 AP +1(round_start 订阅) | 每场各发一次、仅第 1 轮 | 第 2 轮起仍发;整局只发一次;触碰战斗结算机制 | -| 阔视野带 | 类型微光范围 8 格→12 格(视野参数常时) | 只扩微光半径参数(12=表值 provisional);不揭示安危 | 真视化(标出危险格位置);全图显形;越出参数面直改棋盘 | -| 试炼镐 | 每开 4 安全格积 1 点,满 2 点换当轮 AP +1(counter_add/counter_spend) | 只数安全格;积点滑动消耗、用后清账 | 危险格计数;跳过积点直接给 AP;积点换 GP 等其他资源 | -| 刷新练习 | 三选一刷新存量账 +1(装配即得一次性加仓) | 加仓=存量账一次性;临时账不动 | 写临时账;每节点重复加仓;随刷新消耗再回充 | -| 储备罐 | 停手转存率 1:1→1.25:1(RAP 转存率参数) | 只改转存率参数(1.25=表值 provisional) | 改 AP 上限;直接给 RAP 存量;越参数面改停手结算 | -| 巢穴预告 | 装板后揭示本板危险格数量(装板时一次) | 只报数量、不标位置;不碰危险格分布 | 标出危险格位置;逐板重复触发;改分布或邻接数字 | -| 线香 | 每战一次:真视单格(窄域契约内) | 战斗级限量每战重置;单格≤3×3;零信息目标不消耗;贴边按交集 | 超过 1 格/次;战斗间不清零;点错扣充能 | -| 双管装填 | 每战前 2 轮各 AP +1(round_start 订阅) | 仅前 2 轮、每场重置 | 第 3 轮起仍发;战斗外发放;跨战结转 | -| 远程镐 | 挖掘距离 +1(可挖距英雄 2 格的格,常时) | 只放宽可达距离(+1=表值 provisional);开格仍走既有格规则 | 无限距离;挖开不相邻事实;改危险格/安全格事实 | -| 刷新执照 | 商店免费刷新 +2/店(进店时入账) | 每店 +2、进店重置;只挂商店刷新面 | 跨店结转;挂到凭证三选一刷新面(扩面须先裁);改刷新价 | -| 天眼 | 每关一次:选 3×3,危险格显示且安全格直接开(真视+开格复合) | 关卡级限量每关重置;窗口≤3×3、贴边按交集;安全格开格按普通挖格规则全额兑付(含连锁展开与格面资源,C5 裁)、免行动点即效果本身 | 危险格被开格/移除;超 3×3;不兑付或超兑付(重复给资源);点错扣充能 | -| 信标网络 | 插旗不限相邻(可对任何未开格插旗,常时) | 只放宽旗可达性;插旗仍按标准动作价计费、标中收益走既有结算 | 免旗价;对已开格插旗;自动标中或跳过结算 | - - -## 8. 异常分级 - -L1 自救(表值/文案/断言微调);L2 记录继续(效果引擎缺词且可绕行——登记并走现役词表达);L3 停机呈报(触碰 🔴 契约/迁移数据丢失风险/树批次时序冲突)。 - -## 9. 代拍板白名单 - -- 各件解锁条件表行值与价格的 provisional 占位值(结构按裁决,数值微调不呈报); -- 订阅行 on/when/do 的等价实现细节(词表现役集内); -- 冒烟断言的种子与夹具选择; -- 文案措辞(不改变效果语义)。 - -## 10. 裁决记录(2026-10-11 用户逐点裁,零待裁点) - -- **C1 逐件分配**:按推荐分配表(契约 8)——普通档全钥石购买、优秀档钥石+条件混编、稀有档全条件(含信标网络行为条件示范)。 -- **C2 正式命名**:代号即正式名,随目录锁定;日后改名由用户另行提出。 -- **C3 存档迁移**:不存在迁移问题——开发期直接删除旧存档,零迁移代码。 -- **C4 批序/槽位**:本批只开发秘宝相关功能;无槽位即不能带;测试利用调试功能注入,不走正常流程(谓词表槽位职责移除、批序问题消解)。 -- **C5 天眼开格兑付**:按普通挖格规则全额兑付(含连锁展开与格面资源),免行动点即效果本身。 -- **C6 通关术语裁定**(2026-10-11):**通关=打通整局冒险;通过第 N 关=打通第 N 关卡**——两者非同义词(主会话推荐案「任意一关」建立在误读上,已撤回)。解锁条件按此口径:远程镐=adventure_cleared≥1、天眼=adventure_cleared≥3 且 boss_kill_count≥4;术语已登记术语表 v1.6。 - -## 11. 回补待裁点(v1.3 回补逐需求点验收清单时登记——尚未裁决,不阻塞已定稿状态) - -1. **件数计数差:契约 8 表 11 件有效名 vs 目录 12 件**——卡 §3 契约 8 分配表与契约 9(自注「11 件有效名」)均未含**刷新练习**(GDD 秘宝.md「目录(重设计 v1)」普通档 7 件之一:三选一刷新存量 +1)。V1/V2/V3/V7 断言按落表实数写、不硬编 12。推荐案=按设计权威 12 件全量落地,刷新练习随 C1 裁决「普通档全钥石购买」归钥石购买;淘汰依据=秘宝.md 系设计权威且逐件可数(普通 7+优秀 3+稀有 2=12)。若用户另裁(如刷新练习撤出本批或改条件件),V1 分配断言、V2 命名清单与 7.3 附表刷新练习行随裁改。 -2. **与专长批(奇物侧卡 T9)的删行时序**——旧 14 行中 venom_edge/flag_burst 两行系专长批「迁出即删」对象:若专长批先行入库,本批实删=12 行、两行残留面归专长批清单兜底;若本批先行,两行随本批删除、专长批 T9 对应面空转。两序皆可收敛,V12/V13 出口按「当时在表旧行全数清零」执行(不硬编 14),开工时按迭代编序落定即可。 -3. **T5 treasure_inventory 处置二选一在卡内未裁**(T5 行文「随批拆除或保留注记」)——V16 双路线并写,开工时按 T5 执行口径落一条即可;若需用户预裁,按本条呈报。 diff --git a/design/research/需求卡片-锻造工坊实装批-2026-10-12.md b/design/research/需求卡片-锻造工坊实装批-2026-10-12.md deleted file mode 100644 index e57fffd3..00000000 --- a/design/research/需求卡片-锻造工坊实装批-2026-10-12.md +++ /dev/null @@ -1,160 +0,0 @@ -# 需求卡片:锻造工坊实装批 - -> 日期:2026-10-12 | 状态:**v1.2**(Q1/Q2 已裁〔2026-10-12 用户裁〕:Q1=等级 0 起步+锻造第一级=首个 +1 的装备语义;Q2=provisional 值归代拍板沿锚表投值〔锚表见 T1〕;**v1.2 增量裁定:武器/护甲每级增量统一 +1(用户裁)**;**grilling 复核轮一完毕**〔T0 基线记载修正:898/0 三闸全过实测——存量 fx_reveal 已随 iter21 修复;其余逐项零问题,见 §11〕;待用户复核过目) -> 设计权威文档:[锻造工坊](../gdd/systems/跨局循环/锻造工坊.md) **v0.6**(2026-10-12) -> 在册条目:[06-待办清单](../gdd/06-待办清单.md)「锻造工坊实装批」;已编入**迭代 23**(2026-10-12 用户令),开工门=U0 用户发令 -> 关联批:「天赋树实装批」(✅ 已入库——树侧钥匙节点已实装、旧属性柜台已退役、FORGE_ROUTE_BONUS 预留位在役)|「秘宝体系实现重构落地批」(迭代 22,先于本批)|「M4 数值批」(终值) - -## 1. 目标与完成定义 - -把锻造工坊 v0.6 定案落进代码与数据表:**六条锻造路线(三武器+三甲)新建 + 钥石几何定价 + 并联双通道解锁 + 一次冒险一武器一甲(营地免费切换、冒险开始锁死)+ 两根类型轴所有权移交 + 满级特效留空位**。完成定义: - -- `meta.tres` 锻造路线行族六行过 schema 零违例(三武器:长剑/长枪/法杖;三甲:轻甲/重甲/魔法护甲),行族字段承载等级、价格、攻击类型/甲型、解锁通道。 -- 营地锻造工坊工作间可玩:两区(武器锻造区/护甲锻造区)六路线行板,购买升级(钥石几何递增价)、并联双通道解锁(练满前一档 OR 一次性解锁价)、当前选中切换(免费);树钥匙节点未点亮=柜台锁定态、点亮=展开。 -- 两根类型轴所有权移交落地:默认值(normal/light)由锻造工坊配置常驻持有;hero.tres 静态表两轴删除;营地选中态写存档域,冒险开始经参数面注入;未解锁时读默认值注入(行为连续)。 -- 注入公式换代:hero_override = 树生命/命中淬炼 flat + **锻造路线加值(当前选中武器攻击加值 + 当前甲 AC 加值)** + 局内加算区(替换现役 FORGE_ROUTE_BONUS 零值预留位);入战 AC 三层可加(甲型基础 AC + 甲路线等级加值 + 局内加算区)。 -- 存档域 forge_routes(三武器等级+三甲等级+当前选中标记,无特效域)读写往返;旧档缺键补齐=初始持有态(v6→v7 空迁移)。 -- 满级特效本期不做:六路线各留空扩展位,不开参数位、不加效果类型词。 -- 验证闸全绿(§7)。 - -## 2. 现状事实(代码级,开工自行复核) - -| # | 事实 | 出处 | -|---|---|---| -| F1 | `meta.tres` forge_products 行族**已整体退役**(迭代 21 T5 攻防所有权切分:行族/访问器/购买面三处退役登记),现役表仅 boss_keystone / workshop_items / conversion / attune_refresh_upgrade 四行族 | `game/data/tables/meta.tres:73-76`、`game/data/schemas/meta_table.gd:15-16`、`game/core/meta_progression.gd:33-35` | -| F2 | 现役营地钥石消费入口 = `tree_buy`→`save.spend_keystone`(:175)与 `buy_attune_refresh`→`save.spend_keystone`(:354);`buy_forge` 已删 | `game/core/meta_progression.gd:175/:354` | -| F3 | 锻造路线加值位现为预留常量 `FORGE_ROUTE_BONUS := {"atk":0,"max_hp":0,"armor_class":0}`,hero_override() = 树账本 + 该预留位(:122-127) | `game/core/meta_progression.gd:120/:122-127` | -| F4 | **表运行期只读(铁律)**:「override 不写表——表运行期只读」「override 禁写表」;永久强化只写存档(树走 save.set_tree_level),战斗期经 hero_override() 参数面注入 | `game/core/meta_progression.gd:12-13/:119` | -| F5 | hero.tres 两轴现役值:`armor_type="light"`(域 light/ward/heavy)、`attack_type="normal"`(域 normal/pierce/magic);schema 枚举在册 | `game/data/tables/hero.tres:9-11`、`game/data/schemas/hero_table.gd:12-13` | -| F6 | 克制矩阵 3×3 九格满格结构冻结;normal 行 = 轻甲 0 / 魔法护甲(ward) +1 / 重甲 −1(整数点数) | `game/data/tables/settlement.tres:31-36` | -| F7 | 敌方攻击类型轴未开:敌方伤害单据 attack_type 现役传 `""`(空串恒不查矩阵);enemy.tres:527 登记「敌方技能攻击类型轴仍未开(全部 normal 档)」;skills.tres 12 行无 attack_type 字段 | `game/core/battle_orchestrator.gd:1302-1303`、`game/data/tables/enemy.tres:527`、`game/core/damage_controller.gd:19/:550-552` | -| F8 | 存档 v6(SAVE_FORMAT_VERSION=6);meta 域 13 件(keystone_balance/item_unlocks/level_clear_counts/boss_first_kill/boss_kill_count/attunement_equipped/attune_refresh_level/tree_nodes/fork_sides/tree_struct/recent_summaries/first_adventure_done/adventure_total/adventure_cleared);**无 forge 相关域、无武器/甲等级域、无选中标记域**;缺键由 _normalize 按默认补齐 | `game/core/save_manager.gd:49/:119-139` | -| F9 | 树侧「锻造工坊」钥匙节点已实装(meta_tree.tres 12 节点内、free 无前置、点亮展开营地锻造工坊柜台);营地 UI 现为锁定态/占位面板(iter21 T6 落) | `game/data/tables/meta_tree.tres`(锻造脉 2 行内)、`game/presentation/views/camp_overlay_view.gd:86-126` | -| F10 | 局内商店货架三行=奇物「属性值提升」三轴货架前台标签(现役显示名 攻击祝福/生命祝福/护甲祝福),kind_id→CURIO_KINDS(feat_ticket 豁免),进冒险加算区、冒险结束清零——**非锻造面,本批零触碰** | `game/data/tables/shop.tres:68-92`、`game/data/schemas/adventure_table.gd:29`、`game/core/config_db_cross_validator.gd:107-112` | -| F11 | 效果引擎效果类型闭集 24 种;EVENTS/FACTS 词表在册(本期无效果需求——特效留空,无扩集必要) | `game/core/effect_engine.gd:20-37` | -| F12 | 钥石定价历史考古参数:单次 20 钥石、公比 150%(forge_products 退役批注),现役树侧几何计价模式 = floor(p × ratio/100) tier 级 | `game/data/tables/meta.tres:82-84`、`game/core/meta_progression.gd`(几何定价族) | -| F13 | 冒烟与单测现役断言面:buy_forge/forge_products 相关段已随迭代 21 T5 摘除(iter21 卡 V20/V21 在案);hero 表两轴断言、hero_override 断言在役(主语随本批换代,T0 出清单) | `game/smoke/smoke_all.gd`、`game/tests/unit/`(T0 实查出逐条清单) | - -## 3. 设计契约(🔴 违反=L3 停机呈报) - -1. 🔴 **攻防所有权切分**:攻击唯一入口=武器路线、AC 唯一入口=甲路线;树零攻防来源(iter21 已落红线,本批只复核不新建树侧数值)。 -2. 🔴 **表运行期只读 + 默认值所有权移交**:`attack_type`/`armor_type` 默认值写锻造工坊配置表(静态、常驻);选中态写存档域;**禁写 hero.tres**;hero.tres 静态表两轴随本批删除,读取面改读锻造配置。 -3. 🔴 **两币分工**:锻造路线只收钥石;GP=局内一次性货币、永不互兑;不引入账号层材料/第二货币/第三货币。 -4. 🔴 **开发阶段存档纪律**:forge_routes 新域随 v7 落地;旧档缺键补齐(=初始持有态),**禁做数据迁移与折算**(2026-10-11 用户裁口径延续)。 -5. 🔴 **数值全 provisional**:每级增量/等级上限/价格/基础 AC 全部沿量纲锚或考古参数投 provisional 值,终值归 M4 数值批;禁自行定终值。 -6. 🔴 **局内无锻造提升**:货架三行(攻击祝福/生命祝福/护甲祝福)=奇物属性件,本批零触碰;锻造等级只经营地钥石购买改变。 -7. 🔴 **满级特效本期不做**:六路线各留空扩展位;不开三条新参数位、不加效果类型词、存档不设特效域。 -8. 🔴 **一次冒险=一个武器类型+一个甲型**:营地内免费切换;冒险开始后锁死(参数面开冒险时快照,冒险中无切换入口)。 -9. 🔴 **写口唯一**:扣币/升级/解锁/选中/写盘只经 MetaProgression 新写口;UI 只发意图信号。 -10. 🔴 **并联双通道**:每条待解锁路线(长枪/法杖/重甲/魔法护甲)两通道互不影响、玩家自选其一;不设串联门槛。 - -## 4. 范围边界 - -**做**:§1 全部——行族新建/schema/购买与解锁写口/选中写口/默认值配置/hero.tres 两轴删除/注入换代/存档域 v7/营地工作间 UI(程序占位)。 - -**不做**(去向): - -- 敌方 attack_type 填值(3b 裁连带)→ **敌人系统/战斗结算侧自然推进**(敌方定义数据、与名字血量同时读写、无独立时序——用户 2026-10-12 裁:时序问题不存在);本批只按统一伤害轴落结构面(矩阵查表现役已支持)。 -- 视觉终稿(工作间面板美术/路线图标)→ HUD 营地视觉批;本批程序占位。 -- 全部数值终值(每级增量/上限/解锁价/基础 AC)→ M4 数值批。 -- 术语登记 → **已完成**(v0.6:术语表+entities.yaml)。 -- 局内货架/奇物三轴 → 零触碰(F10)。 -- feats.tres magic_vs_magic 死行 → 已随迭代 20 专长 27 件退役消解,零触碰。 - -## 5. 关联文档同步面(同步闸 v2) - -| 文档 | 关联点(本批实现会改变它的哪条陈述) | 同步义务 | -|---|---|---| -| roadmap.md | 迭代 23 行状态推进(草稿→成立→开工→入库) | **机械面**随批更新 | -| design/registry/entities.yaml | forge_workshop 条目回填实态(行族落位/写口名/存档域) | **机械面**随批更新 | -| active.md | 状态记录随批记账 | **机械面**随批更新 | -| design/gdd/06-待办清单.md | 本批条目状态随批推进 | **机械面**随批更新 | -| game/README.md | 营地/锻造工坊描述句(如有)随实态换 | **机械面**随批核对 | -| design/gdd/systems/表现与支撑/存档序列化.md | forge_routes 域计划行(v1.5 已预登记)→ 实际落地态;v7 迁移登记 | **机械面**随批更新 | -| design/gdd/07-体验验证清单.md | 新增实机目检观测项(工作间形态/购买/解锁/切换) | **机械面**随批更新 | -| design/gdd/systems/跨局循环/锻造工坊.md | 「实装边界」八条落地态;hero.tres 两轴删除态;默认值配置态 | **设计权威文档**=反哺点(收口呈报,用户裁决后另批落文) | -| design/gdd/systems/跨局循环/元进度.md | 「跨局注入」节四层公式终态(v1.16 已预登记公式);营地钥石入口族新增 | **设计权威文档**=反哺点 | -| design/gdd/术语表.md | 已登记六词条——若实现引入新词(路线 id 等)反哺补登 | **设计权威文档**=反哺点(预计零新词) | - -## 6. 任务卡 - -> 估时合计 ≈ 7.25d(逐卡加总;区间 6.0-7.5d——乐观压缩至悲观)。切分预案(应急备案,仅批内遇不可抗停机时启用):子批 A=数据与写口(T0-T5)≈4.0-4.75d;子批 B=营地 UI 与收口(T6-T7)≈2.5-3.0d。 - -- **T0 前置实查与冻结核对(≈0.5d)**:①冒烟基线实查(**2026-10-12 主区实测 = 898 项检查 / 0 项失败 / 三闸全过 PASS**——存量 fx_reveal 脚本错误已随迭代 21 修复,无存量红;本批新增断言在此基线上累加);②iter21 后 buy_forge/forge_products 断言摘除实况核对(F13 出逐条清单);③hero.tres 两轴读取面全清单(unit_container.gd:64 hero 快照、battle 读取面、冒烟/单测断言、schema hero_table.gd 字段);④meta.tres 现役行族核对(确认 forge_products 不在表、几何计价族实现细节);⑤树钥匙节点与营地占位面板接缝核对(F9);⑥读锻造工坊.md v0.6「裁决结果清单」+「工作间内容清单」两节复核无冲突。 -- **T1 锻造路线行族新建(≈1.0d)**:行族落位(meta.tres 内新行族 vs 新表——代拍板项,见 §9)+schema 字段(路线 id/件名/攻击类型或甲型/等级 cap/每级增量/基础价/公比/解锁通道参数)+六行 provisional 投值(**锚表如下,代拍板沿锚投值、终值 M4**)+ConfigDB 访问器。**长剑/轻甲=初始持有行**;长枪/法杖/重甲/魔法护甲=待解锁行。 - - **等级语义(Q1 用户裁,2026-10-12)**:角色冒险中始终带攻击/护甲类型——**未解锁/未锻造 = 0 加值(裸体态,类型=普通/轻甲)**;解锁工坊并**锻造第一级 = 「获得装备」= 1 级 = 首个 +1 加值**;逐级递进(2 级=+2 量级)。「练满前一档」= 等级达 cap。 - - **provisional 行值锚表(Q2 用户裁:值落卡后代拍板沿锚投值;全部 provisional、终值 M4)**: - - | 路线 | 类型/甲型 | cap | 每级加值增量 L1-L5 | 甲型基础 AC | 各级价格(基础 20 × 150%^已购级数) | 一次性解锁价 | - |---|---|---|---|---|---|---| - | 长剑锻造 | 普通 | 5 | 攻击 +1/+1/+1/+1/+1(累计 1/2/3/4/5) | — | 20/30/45/67/101 | —(初始持有) | - | 长枪锻造 | 穿刺 | 5 | 同长剑 | — | 同左 | 200 钥石 | - | 法杖锻造 | 魔法 | 5 | 同长剑 | — | 同左 | 200 钥石 | - | 轻甲锻造 | 轻甲 | 5 | AC +1/+1/+1/+1/+1(累计 1/2/3/4/5) | 10(现役主角值,不动) | 同左 | —(初始持有) | - | 重甲锻造 | 重甲 | 5 | 同轻甲 | 12 | 同左 | 200 钥石 | - | 魔法护甲锻造 | 魔法护甲(ward) | 5 | 同轻甲 | 9 | 同左 | 200 钥石 | - - 锚表说明:①**每级增量统一 +1(用户 2026-10-12 裁)**——provisional 线性起步;4a「前缓后陡」为**终值形状方向**(M4 标定时体现),provisional 期不预支形状;②解锁价 200 = 中段三级锻造花费(45+67+101=213)的九折,量纲=「≈中段几级锻造花费」;③甲型基础 AC 与矩阵克制修正(normal 行 轻 0/ ward +1/ 重 −1)为现役结构值(settlement.tres),不占 provisional;④三武器同价、三甲同价(现役 forge_products 三行同价的考古口径延续)。 -- **T2 默认值配置与 hero.tres 两轴删除(≈0.5d)**:锻造工坊配置表新建(常驻持默认 `attack_type=normal`/`armor_type=light`);hero.tres 两字段删除 + hero_table.gd schema 字段与枚举域同步删除;读取面改读锻造配置(T0③清单逐处);冒烟/单测断言主语换代。 -- **T3 购买/解锁/选中写口(≈1.5d)**:MetaProgression 新写口族——路线购买(几何价=基础价×150%^已购级数,钥石扣减+即时写盘)、并联双通道解锁判定(前一档练满 OR 一次性解锁价,两通道互不影响)、当前武器/甲选中切换(免费、写存档域);营地意图信号接线。🔴 契约 9:UI 只发意图。 -- **T4 注入接线(≈0.75d)**:hero_override 公式换代——锻造路线加值位(现役 FORGE_ROUTE_BONUS 零值常量)替换为「当前选中武器攻击加值 + 当前甲 AC 加值」(读存档域+路线表);入战 AC 三层可加链路核对;换件后加值切换、旧路线练度保留不生效的断言面。 -- **T5 存档域 v7 与旧档处置(≈0.5d)**:forge_routes 域(三武器等级+三甲等级+当前武器/甲选中标记;无特效域)+_normalize 缺键补齐(旧档=初始持有态);SAVE_FORMAT_VERSION 6→7(v6→v7 空迁移=缺键补齐模式);域界扫描收窄到 meta 域(禁局内资源键混入)。 -- **T6 营地工作间 UI(≈1.5d,程序占位)**:锻造工坊工作间两区并列(武器锻造区/护甲锻造区)六路线行板——每行=件名+锻造(行名)、当前等级、购买钮(几何价显示)、解锁态/解锁通道呈现、当前选中标记;选中切换钮;树钥匙未点亮=锁定态(现役占位面板替换为真工作间);宽度不足横向滚动条兜底。**占位纪律延续**:锁定态面板开/关零副作用(零写档、零报错、无可交互购买路径)。 -- **T7 文档同步闸+回归收口(≈1.0d)**:冒烟 run_all 全绿+单元测试+场景探针+改前改后读数对拍四闸;§5 机械面文档更新完毕;反哺点逐条列进迭代实现报告;06 状态推进;全仓旧件残留核查(§7 V12)。 - -## 7. 验证闸 - -### 7.1 闸口径 - -- **测试方式两分法**(仓库口径,code-conventions.md §3.5):能力验证=调试接口直改游戏数据(经 DebugOverlay/DS_DEBUG 门控或测试代码内直改表行/存档域/钥石余额,不走正常资源积累流程);体验验证=用户目检,观测项登记 07-体验验证清单(机械面随批)。本批以能力验证为主,用户目检面=工作间形态与购买交互(V13)。 -- **轻闸(随卡)**:冒烟 run_all 全绿(基线=T0 实查值);schema 校验零违例单测(六行+字段出域即拒)。 -- **重闸件**:MC 同种子配对读数(改前/改后难度影响——设计契约⑧数值验证义务);人闸=实机目检(V13)。 -- 两入口铁规不破:自动验证只走 smoke_all.gd 与 tests/run_all 两个执行口;批末四闸全绿才合并。 - -### 7.2 逐需求点验收清单 - -> 断言失败消息末尾带〔锻造工坊批 Vn〕编号尾缀。执行载体五选一:单元测试(tests/run_all)/冒烟断言(smoke_all.gd)/场景探针(smoke/ 下 *_probe)/MC 同种子对拍/人工核对(仅限无法自动化的纪律类需求点)。注入一律走调试口径:直改 meta 行族/save 存档域(add_keystone 置余额、直写 forge_routes)构造状态,不经正常游玩积累。 - -| 编号 | 需求点/契约指针 | 测什么(具体断言或行为) | 怎么测(载体+注入粒度) | 谁验 | 任务卡 | -|---|---|---|---|---|---| -| V1 | §1①(行族 schema 零违例) | 六行路线(长剑/长枪/法杖/轻甲/重甲/魔法护甲)过 validate 零违例:路线 id 唯一、攻击类型/甲型值出枚举域即拒、cap/价格/增量字段类型与值域校验;出域行逐类构造各一行全部被拒 | 单元测试。注入=直读表行调 validate();反例=复制 rows 副本塞出域行逐类断言报错 | 自动闸 | T1 | -| V2 | §1①(购买与几何定价) | 路线购买:扣钥石=该级价格(基础价×150%^已购级数);等级+1;余额不足拒且存档零副作用;六路线等级独立(买长剑不影响轻甲) | 冒烟+单元。注入=add_keystone 置余额→直调购买写口→断余额/等级/存档读回 | 自动闸 | T3 | -| V3 | §1②(并联双通道) | 每条待解锁路线两通道各一正例:①练满前一档(长剑 cap→长枪/法杖开;轻甲 cap→重甲/魔法护甲开)②一次性解锁价直购开;两通道互不影响(未练满也可直购、直购后练满不重复收);不设串联(长枪解锁不需求法杖前置)。反例:串联门槛存在=红、直购后练满再收一次费=红 | 冒烟。注入=置前一档等级 cap/置余额→分别走两通道→断解锁态与余额 | 自动闸 | T3 | -| V4 | 契约 3(两币分工) | 任一购买/解锁只扣钥石;GP 账零触碰;不引入材料计数 | 冒烟。注入=购买前后断 keystone_balance 与 GP 侧零变化 | 自动闸 | T3 | -| V5 | 契约 2(默认值所有权移交) | hero.tres 无 attack_type/armor_type 字段(表加载零违例);锻造配置默认值=normal/light;**树钥匙未点亮(锻造工坊锁定)时**build_adventure_params 注入 attack_type=normal/armor_type=light;点亮后读存档选中覆盖 | 冒烟+单元。注入=隔离存档(树钥匙未点亮)→build_adventure_params 断默认值;置选中态→断覆盖值 | 自动闸 | T2/T4 | -| V6 | 契约 8(选中切换与锁死) | 营地切换当前武器/甲=写存档域+免费(余额零动);切换后旧路线练度保留(等级不丢)但加值不生效;冒险开始后锁死——开冒险后参数面快照不再随存档选中变化(构造:开冒险→改存档选中→断参数面/注入值不变) | 冒烟。注入=直调选中写口→读回存档域→开冒险→改存档→断注入读数 | 自动闸 | T3/T4 | -| V7 | §1④(注入公式换代) | hero_override 逐字段对拍=树生命/命中 flat + 锻造路线加值(当前选中武器攻击加值+当前甲 AC 加值)+ 局内加算区;换当前武器→攻击加值随切换(长剑练度待命不生效);入战 AC=甲型基础 AC+甲路线加值+局内加算区三层;FORGE_ROUTE_BONUS 旧常量退役后公式不再出现 | 冒烟+单元。注入=置路线等级+选中态→直读 hero_override 手算对拍→start_adventure 带 override 断首战读数 | 自动闸 | T4 | -| V8 | §1⑤(存档域 forge_routes) | forge_routes 写入/读回往返逐域相等(六路线等级+两选中标记);**无特效域**(键集断言);v6 旧档(无 forge_routes)加载→缺键补齐=六路线初始持有态(长剑/轻甲在、余四锁)、钥石等既有域逐位不变;域界扫描 meta 域无局内资源键 | 冒烟+单元。注入=直写 forge_routes→写盘→新实例读回;v6 夹具→load_from_disk→断补齐态与既有域不动 | 自动闸 | T5 | -| V9 | 契约 9(写口唯一) | 扣币/升级/解锁/选中/写盘只经 MetaProgression 新写口;UI 只发意图信号 | 人工核对——静态 grep 呈现层(presentation/)对 save 写口/花费方法的直调清单,逐条注明属组合根转发或违例 | 用户(人工核对) | T3/T6 | -| V10 | 契约 1(攻防所有权切分复核) | 树表 12 行 effects 键集无 atk/armor_class(iter21 已落,本批复核断言);锻造路线攻击/AC 加值只经 hero_override 出现,树账本零攻防分量 | 冒烟。注入=直读 meta_tree.tres 六节点 effects 键集断言 | 自动闸 | T4 | -| V11 | §1⑥(满级特效留空) | 六路线无特效参数位(行族无特效字段);存档无特效域;效果类型闭集 24 种零新增(effect_engine.gd 词表比对) | 静态核查+单元。注入=行族字段清单断言+词表快照比对 | 自动闸 | T1/T5 | -| V12 | §1④(旧断言换代与残留核查) | 被本批改变主语的旧断言同批换代/摘除(T0③清单:hero 表两轴断言、hero_override 公式断言、几何定价+buy_forge 段〔iter21 已摘,本批接管〕);摘除后冒烟仍全绿且新断言接管;被删标识符(hero.tres 两字段消费面/FORGE_ROUTE_BONUS)全仓 grep 零残留 | 冒烟全绿出口+静态 grep(被删标识符清单在冒烟与单元段零残留) | 自动闸 | T2/T4/T7 | -| V13 | §7.1 人闸(工作间形态) | 实机目检:工作间两区六路线行板(行名=件名+锻造)、购买/解锁/选中交互、锁定态(钥匙未点亮)、切换免费、冒险内无切换入口 | 用户目检,观测项登记 07-体验验证清单(机械面随批) | 用户(目检) | T7 | -| V14 | §1⑦(验证闸全绿出口+配对读数) | 批末四闸全绿(冒烟+单元+探针+读数对拍);MC 改前/改后同种子配对读数(难度影响)呈报;全仓旧件残留核查(V12)零残留为合并前置 | 批末统一执行(T7 回归收口) | 自动闸+用户(呈报过目) | T7 | - -## 8. 异常分级 - -- **L1 自救**:行值 provisional 沿量纲微调;文案/信号命名;程序占位布局微调;探针夹具修正。 -- **L2 记录继续**:T0 实查结论与 F 面不符但不触设计红线(如 hero.tres 两轴消费面比预期多);schema 字段形态选型变化;行族落位选型变化。 -- **L3 停机**:触碰 §3 任一红线;发现 v0.6 设计与代码实态冲突无解;敌方 attack_type 侧出现需要本批配合的意外耦合。 - -## 9. 代拍板白名单 - -行族落位选型(meta.tres 内新行族 vs 新表 meta_forge.tres——访问器模式连续性优先)与字段命名;路线 id 命名(沿用现役命名法);锻造配置表落位与键名;存档域 forge_routes 域内键名(v1.5 已预登记域名);六路线 provisional 行值(沿 T1 锚表投值:基础价 20/公比 150%/cap 5/增量与解锁价按锚表);v6→v7 空迁移形态;程序占位布局与控件复用;探针夹具构造细节。 - -## 10. 待裁点 - -| # | 裁点 | 裁决(2026-10-12 用户裁) | -|---|---|---| -| Q1 | 初始持有路线的起始等级 | **甲(已裁)**:等级 0 起步+锻造第一级=首个 +1 的装备语义——未解锁/未锻造=0 加值(裸体态、类型=普通/轻甲);解锁并锻造第一级=「获得装备」=1 级=首个 +1;逐级递进。语义已落 T1 | -| Q2 | 一次性解锁价 provisional 值是否需用户过目 | **甲(已裁)**:值归代拍板沿锚表投值、终值 M4——**前提是值必须落卡**(用户令:看不到值就不能叫代拍板),锚表已补 T1 | - -> 除 Q1/Q2 外零待裁点。grilling 复核门(本技能纪律):本卡成文后必经多轮复核、裁决全落、零待裁点方成立;06 登记义务在卡片成立后履行(草稿阶段不登记)。 - -## 11. grilling 复核记录 - -**轮一(2026-10-12,复核方=执笔 agent 自查 + 主区冒烟实测)**——逐项过筛:①Q1 装备语义在 V2/V5/V7/V8 断言的落地一致性(0 起步/首购=1 级=首个 +1/未解锁=裸体 +0)✓;②V6 锁死断言性质=防回归(现役 params 开局快照机制本就如此)✓;③V8 缺键补齐形态与现行存档纪律(_normalize 补键+版本号+1,先例 v5→v6)一致 ✓;④§5 反哺点三条闭环(收口进实现报告)✓;⑤三层 AC 与 ac_up 局内层的边界(本批只动前两层)✓;⑥T6 与 iter21 营地占位面板接缝(F9)✓;⑦估时区间覆盖新表选型上浮(T1 1.0→1.5d 仍在区间内)✓;⑧**T0① 基线记载过期修正**——主区实测 898/0 三闸全过,存量 fx_reveal 已随 iter21 修复,原「864/0+存量红」记载作废(本批新增断言在 898 基线上累加)✓;⑨代拍板「行族落位选型」边界=设计已授权(锻造工坊.md「行族命名、字段结构与落表位置归实装批定义」),维持代拍板+§8 L2 记录 ✓;⑩provisional 线性增量与 4a 前缓后陡的关系留痕(锚表说明①:provisional 期线性、终值形状归 M4)✓。 - -**轮一结论**:除 T0① 基线记载修正(已落)外零问题;待裁点=零;待用户复核过目后卡片成立。 diff --git a/game/assets/theme/README.md b/game/assets/theme/README.md index 31386817..ba05f684 100644 --- a/game/assets/theme/README.md +++ b/game/assets/theme/README.md @@ -2,7 +2,7 @@ - 主文件:`main_theme.tres`(Godot 4 Theme 资源,挂 `project.godot` 的 `gui/theme/custom`) - 生成脚本:`tools/gen_theme_icons.py`(可重跑,幂等)→ 小位图落 `../art/ui/gen/` -- 依据:需求卡片 `design/research/需求卡片-UI全局主题批-2026-10-13.md` v1.2(2026-10-13) +- 依据:UI全局主题批(迭代 25)v1.2(2026-10-13;卡片已按「吸收即死」退役,git 历史可考) 本目录不含内联注释(.tres 注释语法不赌),全部溯源信息以本表为准。**色值一律取自 `game/presentation/views/ui_kit.gd` 既有常量,零新增色值**(迭代 25 契约:不新增美术素材)。 diff --git a/game/data/tables/forge.tres b/game/data/tables/forge.tres index 1d629efb..9abf75a8 100644 --- a/game/data/tables/forge.tres +++ b/game/data/tables/forge.tres @@ -87,7 +87,7 @@ routes = [{ }] ; 锻造工坊实装批 T1(2026-10-12——迭代 23;设计权威 design/gdd/systems/跨局循环/锻造工坊.md v0.6, -; 需求卡片 design/research/需求卡片-锻造工坊实装批-2026-10-12.md T1 锚表): +; 需求卡片=锻造工坊实装批(迭代 23,卡片已按「吸收即死」退役,git 历史可考)T1 锚表): ; 六路线 provisional 投值——cap 5/每级增量统一 +1(v1.2 用户裁:provisional 线性起步,4a 前缓后陡为 ; 终值形状方向归 M4)/甲型基础 AC 10-12-9(现役结构值 settlement.tres 矩阵同行)/基础价 20/公比 150% ; (历史考古参数 meta.tres:82-84 退役批注)/各级价格 20/30/45/67/101/一次性解锁价 200(中段三级 213 九折)。 diff --git a/reports/iter27-实现报告-2026-10-14.md b/reports/iter27-实现报告-2026-10-14.md index 24ac0d81..7a2da38d 100644 --- a/reports/iter27-实现报告-2026-10-14.md +++ b/reports/iter27-实现报告-2026-10-14.md @@ -1,7 +1,7 @@ # 迭代 27 实现报告——代码架构技术债修复批(五波全量入库) - 日期:2026-10-14(单会话 /goal+iter U0 交付,worktree g-plan2-iter27-techdebt 分支 iter27-techdebt-20261014) -- 需求卡片:`design/research/需求卡片-代码架构技术债修复批-2026-10-14.md`(v1.2——三点待裁 2026-10-14 用户三裁全按推荐案:①SaveManager/MetaProgression=第三个 autoload/②Ledger=单类持四账/③_settle=审计五段) +- 需求卡片:已退役(git 历史可考)——原「代码架构技术债修复批」v1.2——三点待裁 2026-10-14 用户三裁全按推荐案:①SaveManager/MetaProgression=第三个 autoload/②Ledger=单类持四账/③_settle=审计五段) - 来源审计:代码架构与实现质量审计报告-2026-10-14(双席基线 97de02c;**本批收口时按退役规则 git rm——吸收即死,结论迁本报告与卡片**) - 核心验收(V1):**重构前后同种子完整局输出逐位一致**——parity_anchor 三变体(base/attune/shop)×40 局×RUNSUM+JSONL 剔 ts 双面哈希对拍,**五波出口五跑全同**(锚冻结于 T0,种子面 71000/72000/73000) diff --git a/reports/iter28-实现报告-2026-10-15.md b/reports/iter28-实现报告-2026-10-15.md index 3b1eca9c..3eacf186 100644 --- a/reports/iter28-实现报告-2026-10-15.md +++ b/reports/iter28-实现报告-2026-10-15.md @@ -1,7 +1,7 @@ # 迭代 28 实现报告——启动装配与生命周期验收补全批(六任务全量入库) **日期**:2026-10-15 **分支**:iter28-bootlife-20261015(worktree `g-plan2-iter28-bootlife`,基点 39c6544) -**需求卡片**:`design/research/需求卡片-启动装配与生命周期验收补全批-2026-10-15.md` v1.0(零待裁点,用户预批连做全批,不入 git) +**需求卡片**:已退役(git 历史可考)——原「启动装配与生命周期验收补全批」v1.0(零待裁点,用户预批连做全批,不入 git) **一句话**:把「启动后玩家该看到什么、状态对象何时该活何时该死」从口头约定变成**可执行验收函数**,并逐条用变异实验证明这些函数真能抓住对应缺陷。 --- diff --git a/reports/iter29-实现报告-2026-10-16.md b/reports/iter29-实现报告-2026-10-16.md index 82839466..180caba0 100644 --- a/reports/iter29-实现报告-2026-10-16.md +++ b/reports/iter29-实现报告-2026-10-16.md @@ -1,6 +1,6 @@ # 迭代 29 实现报告 · 测试分层与门禁语义修正批(2026-10-16) -- 需求卡片:`design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md`(**v2.0**,三轮复查定稿、零待裁点) +- 需求卡片:已退役(git 历史可考)——原「测试分层与门禁语义修正批」**v2.0**,三轮复查定稿、零待裁点 - 开工门 U0:用户 `/iter 29` 发令(2026-10-16)。基线 master `752c9a0a` - worktree:`g-plan2-iter29-testlayers`,分支 `iter29-testlayers-20261016`,八提交(`698d864d` … `c3b64030`) - 用户原始诉求(本批要兑现的三条):①最单元的逻辑代码有它的单元测试;②整体的模块有它的接口测试; diff --git a/reports/iter30-实现报告-2026-10-17.md b/reports/iter30-实现报告-2026-10-17.md index 0d51d43d..1616e360 100644 --- a/reports/iter30-实现报告-2026-10-17.md +++ b/reports/iter30-实现报告-2026-10-17.md @@ -1,6 +1,6 @@ # 迭代 30 卡① 未开格类型徽章批 · 实现报告 -- 批次:迭代 30 卡①「未开格类型徽章批」(卡片 `design/research/需求卡片-未开格类型徽章批-2026-10-16.md` **v1.4**) +- 批次:迭代 30 卡①「未开格类型徽章批」(卡片已退役——git 历史可考,原「未开格类型徽章批」**v1.4**) - 分支 `iter30-glow-20261017`/worktree `g-plan2-iter30-glow`;闸口径 = 本批只碰 `game/` → `tools/run_all_gates.sh --code` - 完成日 2026-10-17;三卡串行序位第 1(卡②战斗一屏样张批、卡③二三关棋盘观感批不在本会话范围) - 裁决基线:Q1 丙(shader 为主、程序绘制兜底)/Q2 甲(明度档 provisional 值本批定、样张批复核转正)/Q3 甲(TG_* 两带统一**不并入**)/Q4 丙(默认开)/Q5 甲(静态无呼吸);v1.4 开工前预授权 U1 四项(T0-③ 判据自判+调参上限 2 轮、卡③ Q2 判据自动裁、卡③目标带批内自定、L3 分类预授权) diff --git a/roadmap.md b/roadmap.md index 6171cf7b..8c5fc660 100644 --- a/roadmap.md +++ b/roadmap.md @@ -53,17 +53,17 @@ | 迭代 17 | 已完成(2026-10-07) | 已退役(git 历史可考) | 2026-10-06 | — | 已退役(git 历史可考) | | 迭代 18 | 已完成(2026-10-07) | 已退役(git 历史可考) | 2026-10-07 | — | 已退役(git 历史可考) | | 迭代 19 | 已完成(2026-10-08) | 已退役(git 历史可考) | 2026-10-08 | — | 已退役(git 历史可考) | -| 迭代 20 | 已完成(2026-10-11) | design/research/需求卡片-专长实装批-2026-10-11.md | 2026-10-11 | — | 已退役(git 历史可考) | -| 迭代 21 | 已完成(2026-10-12) | design/research/需求卡片-天赋树实装批-2026-10-11.md | 2026-10-11 | — | 已退役(git 历史可考) | -| 迭代 22 | 已完成(2026-10-12) | design/research/需求卡片-秘宝体系实现重构落地批-2026-10-11.md | 2026-10-11 | — | 已退役(git 历史可考) | -| 迭代 23 | 已完成(2026-10-12) | design/research/需求卡片-锻造工坊实装批-2026-10-12.md | 2026-10-12 | — | 已退役(git 历史可考) | -| 迭代 24 | 已完成(2026-10-13) | design/research/需求卡片-敌人表内容修批-2026-10-13.md | 2026-10-13 | — | 已退役(git 历史可考) | -| 迭代 25 | 已完成(2026-10-13) | design/research/需求卡片-UI全局主题批-2026-10-13.md | 2026-10-13 | — | 已退役(git 历史可考) | -| 迭代 26 | 已完成(2026-10-14) | design/research/需求卡片-UI交互与观感批-2026-10-13.md | 2026-10-14 | — | 已退役(git 历史可考) | -| 迭代 27 | 已完成(2026-10-14) | design/research/需求卡片-代码架构技术债修复批-2026-10-14.md | 2026-10-14 | — | reports/iter27-实现报告-2026-10-14.md | +| 迭代 20 | 已完成(2026-10-11) | 已退役(git 历史可考) | 2026-10-11 | — | 已退役(git 历史可考) | +| 迭代 21 | 已完成(2026-10-12) | 已退役(git 历史可考) | 2026-10-11 | — | 已退役(git 历史可考) | +| 迭代 22 | 已完成(2026-10-12) | 已退役(git 历史可考) | 2026-10-11 | — | 已退役(git 历史可考) | +| 迭代 23 | 已完成(2026-10-12) | 已退役(git 历史可考) | 2026-10-12 | — | 已退役(git 历史可考) | +| 迭代 24 | 已完成(2026-10-13) | 已退役(git 历史可考) | 2026-10-13 | — | 已退役(git 历史可考) | +| 迭代 25 | 已完成(2026-10-13) | 已退役(git 历史可考) | 2026-10-13 | — | 已退役(git 历史可考) | +| 迭代 26 | 已完成(2026-10-14) | 已退役(git 历史可考) | 2026-10-14 | — | 已退役(git 历史可考) | +| 迭代 27 | 已完成(2026-10-14) | 已退役(git 历史可考) | 2026-10-14 | — | reports/iter27-实现报告-2026-10-14.md | | 迭代 28 | 已完成(2026-10-15) | 已退役(git 历史可考) | 2026-10-15 | — | reports/iter28-实现报告-2026-10-15.md | -| 迭代 29 | 已完成(2026-10-16) | design/research/需求卡片-测试分层与门禁语义修正批-2026-10-15.md | 2026-10-16 | — | reports/iter29-实现报告-2026-10-16.md | -| 迭代 30 | 已完成(2026-10-17) | design/research/需求卡片-未开格类型徽章批-2026-10-16.md | 2026-10-16 | — | reports/iter30-实现报告-2026-10-17.md | +| 迭代 29 | 已完成(2026-10-16) | 已退役(git 历史可考) | 2026-10-16 | — | reports/iter29-实现报告-2026-10-16.md | +| 迭代 30 | 已完成(2026-10-17) | 已退役(git 历史可考) | 2026-10-16 | — | reports/iter30-实现报告-2026-10-17.md | | 迭代 31 | 待开工 | design/research/需求卡片-代码术语刷新批-2026-10-18.md、design/research/需求卡片-凭证件裁削批-2026-10-18.md | 2026-10-18 | ≈1.5 周 | — | - 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。 diff --git a/tools/parity_anchor.py b/tools/parity_anchor.py index 1b68d8f5..26d07ae1 100644 --- a/tools/parity_anchor.py +++ b/tools/parity_anchor.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -"""parity_anchor.py — 迭代27重构「逐位一致对拍」锚工具(需求卡片-代码架构技术债修复批 §7 V1 核心验收) +"""parity_anchor.py — 迭代27重构「逐位一致对拍」锚工具(代码架构技术债修复批〔迭代 27〕§7 V1 核心验收;该卡已按 doc-conventions §11「吸收即死」退役,git 历史可考) 载体 = adventure_monte_carlo.gd 同种子批量完整局(SceneTree headless,自持 ConfigDB,零渲染)。 三变体钉死(种子面错开,覆盖 base / 同调账 / 商店-GP 账三类 T2/T3 重构面):