diff --git a/design/gdd/08-Alpha版本标准.md b/design/gdd/08-Alpha版本标准.md index b6f0dfcd..cc8b62f5 100644 --- a/design/gdd/08-Alpha版本标准.md +++ b/design/gdd/08-Alpha版本标准.md @@ -2,7 +2,7 @@ > **一句话定位**:本文定义这个项目的 **Alpha 版本包含哪些东西**——它是里程碑 M3 的完成标准,也是判断"还差什么"的对照表。 > **本文只列条目,不写内容**:每样东西是什么、规则怎么走,一律归各自的权威文档,本文只给指路链接。想知道某样东西的定义,请点链接,不要在本文里找解释。 -> **状态**:**已定稿(v1.30)**——2026-10-13 用户令定稿,历次升版明细见 git 提交史。Alpha 的内容范围自此冻结:增删条目一律须经用户裁决。 +> **状态**:**已定稿(v1.31)**——2026-10-13 用户令定稿,历次升版明细见 git 提交史。Alpha 的内容范围自此冻结:增删条目一律须经用户裁决。 > **成文**:2026-10-13。 ## 本文怎么用 @@ -39,7 +39,7 @@ Alpha 内以玩法循环本身的内容与表现为主(棋盘、关卡、战 | 敌人系统 | [敌人系统](systems/战斗循环/敌人系统.md) | 在役 | | 增益状态 | [增益状态](systems/战斗循环/增益状态.md) | 在役 | | 地图战斗资源(格面资源) | [地图战斗资源](systems/战斗循环/地图战斗资源.md) | 在役 | -| 战斗表现(动画与演出) | [战斗表现](systems/战斗循环/战斗表现.md) | 在役(Alpha 判据=受击闪白/死亡不瞬间消失/高光行/逐行排播四条可读;正式演出设计与资产终稿排 Beta,不属 Alpha 完成判据) | +| 战斗表现(动画与演出) | [战斗表现](systems/战斗循环/战斗表现.md) | 在役(Alpha 判据=受击闪白/死亡不瞬间消失/高光/演出链兑现可读四条;正式演出设计与资产终稿排 Beta,不属 Alpha 完成判据) | ### 冒险循环 diff --git a/design/gdd/systems/战斗循环/战斗结算.md b/design/gdd/systems/战斗循环/战斗结算.md index ddf743a3..0a58dc85 100644 --- a/design/gdd/systems/战斗循环/战斗结算.md +++ b/design/gdd/systems/战斗循环/战斗结算.md @@ -1,7 +1,7 @@ # 战斗结算 > 一句话:轮末结算的编排与逐行兑现 -> 状态:已定稿;现行为 v1.9 +> 状态:已定稿;现行为 v2.0 ## 设计目的 @@ -77,14 +77,14 @@ | 效果行 | 增益/减益段每条效果一行:本次授予贡献值与池合成值分列,防误读 | | 伤害行 | 每次伤害一行:目标、伤害分量、修正终值、击杀标记;吃护甲等级掷点的分量,掷点读数与折扣档位随行留档,nat20 暴击随行标记并金框高亮(行型封闭清单不变) | | 治疗行 | 治疗生效一行:封顶后的真实回复量 | -| 奖励未生效行 | 满层拒收、满血治疗等合法例外一行 | +| 奖励未生效行 | 四类合法例外一行,reason 键封闭(full_layers 叠层满拒收/full_hp 满血零兑/no_enemy_alive 场上无敌可打/hero_down 主角倒下整体不兑);封印作废行已退役(封印受理即揭示,无作废产生面) | | 封印未中行 | 封印落空的零值归因行,每颗雷只记一次;标错的负向兑付另记效果行 | | 施放行 | 敌人本拍施放增益技——0 伤害动作、具名技能、不掷不折(蓄力语义 = 纯攻击增益技,见[敌人系统](敌人系统.md)) | | 衰减行 | 到期临时效果移除一行 | | 判定行 | 胜 / 负 / 继续各一行;终局判定行同时是胜负画面的数据锚 | | 高光行 | 完美封印成立时一行,只记实际有效兑付 | -每行还携带公共字段:来源类别、来源格、轮次、显示名、数值,以及可空的高光标记(用于强调封印标中、清图奖励这类值得高亮的结果)。**显示名等玩家可见文案是数据面字段:文案值登记在数据表行,代码按来源类别与效果身份读表拼行,不在代码里写死文案字串**(2026-11-06 用户裁——文案归属数据表承载;承载表与字段形态归表结构设计段定,设计闭合后由实装批落表)。奖励直伤行的数值字段沿用 `effectiveness` 键名、值为整数点数——键名与量纲是数据导出与分析工具的兼容契约,改动须连动分析工具面。没生效也要留痕:两类"未生效"行如实记录合法例外,呈现时聚合计数,不逐行刷屏。 +每行还携带公共字段:来源类别、来源格、轮次、显示名、数值,以及可空的高光标记(用于强调封印标中、清图奖励这类值得高亮的结果)。**显示名等玩家可见文案是数据面字段:文案值登记在数据表行,代码按来源类别与效果身份读表拼行,不在代码里写死文案字串**(2026-11-06 用户裁——文案归属数据表承载;承载表与字段形态归表结构设计段定,设计闭合后由实装批落表)。奖励直伤行的数值字段沿用 `effectiveness` 键名、值为整数点数——键名与量纲是数据导出与分析工具的兼容契约,改动须连动分析工具面。没生效也要留痕:奖励未生效行如实记录四类合法例外(reason 键封闭:full_layers/full_hp/no_enemy_alive/hero_down),呈现面按 reason 归因(聚合计数呈现已随明细带退役)。**日志落盘零文案:text 与 display_name 不落盘**,玩家可见文案仅呈现面消费。 任何一行找不到来源即断言失败——宁可返回错误,也不让"合并到看不出来源"的呈现混过数据层。但有些行天然没有棋盘来源,断言为此留了两层豁免,豁免集合是封闭清单,改动同样走本文修订。 diff --git a/design/gdd/systems/战斗循环/战斗表现.md b/design/gdd/systems/战斗循环/战斗表现.md index 95f26517..86d61a85 100644 --- a/design/gdd/systems/战斗循环/战斗表现.md +++ b/design/gdd/systems/战斗循环/战斗表现.md @@ -1,7 +1,7 @@ # 战斗表现 > 一句话:战斗动画与演出 -> 状态:范围草案(待设计);现行为 v1.3 +> 状态:范围草案(待设计);现行为 v1.4 ## 设计目的 @@ -50,7 +50,7 @@ 战斗屏是挖掘与结算两种形态共用的同一张屏:常驻双舞台(白话:战斗画面与扫雷图同屏常驻,像同一块屏上的两个舞台),结算期不切换场景,裁决与理由见 [battle.md 布局决策 1](../../../ux/battle.md)。所以战斗表现的工作不是另做一个战斗场景,而是在既有呈现上叠加动画密度与演出——这是本系统范围边界的第一条。 -"发生什么"与"怎么动"因此分了工:敌人死亡是血条归零后灰化加碎裂退场、禁止瞬间消失,结算明细带逐行滚动,完美封印与封印标中有高光行强调——这些呈现语义已由 battle.md 与 HUD 框架定稿,本文不复述。本文将来承接的只是其上的动画密度:受击反馈、弹道、退场动画等类别。 +"发生什么"与"怎么动"因此分了工:敌人死亡是血条归零后灰化加碎裂退场、禁止瞬间消失,结算演出链逐拍兑现(明细带逐行文字已退役),完美封印与封印标中有高光强调——这些呈现语义已由 battle.md 与 HUD 框架定稿,本文不复述。本文将来承接的只是其上的动画密度:受击反馈、弹道、退场动画等类别。 资产侧同理,这也是双舞台带来的管线约束:若舞台形态悬而未决,同一份角色资产可能因舞台不同而重画。现行解法是剪影跨舞台通用——角色剪影按"棋盘、结算画面与任一战斗舞台通用"设计,不为舞台未决问题付重画成本(art-bible §5.1)。 @@ -96,7 +96,7 @@ ### 演出服从信息与可读性 -两条现行硬约束,将来任何动画方案都禁止越过。其一,数字可读性高于氛围:挖掘期画面无杂音,动画禁止遮挡数字、禁止在挖掘期抢焦;结算期的色彩与能量走向以 art-bible 第 2 节为权威。其二,结算逐行兑现是信息载体:battle.md 已承诺不可整体跳过、只提供减动效选项(时长减半或直达终态,逐行兑现可加速不可省略),本文将来兑现其动画侧。 +两条现行硬约束,将来任何动画方案都禁止越过。其一,数字可读性高于氛围:挖掘期画面无杂音,动画禁止遮挡数字、禁止在挖掘期抢焦;结算期的色彩与能量走向以 art-bible 第 2 节为权威。其二,结算演出链是兑现呈现(非文字信息载体——明细带逐行文字已退役):battle.md 已承诺不可整体跳过、只提供减动效选项(时长减半或直达终态,演出可加速不可省略),本文将来兑现其动画侧。 ### 结算演出与轮间节奏(已实装) @@ -148,7 +148,7 @@ MVP 不要求本文的闭环:不做清单把战斗动画演出列为 MVP 打 - 挖掘期零打扰:结算演出只发生在结算期;挖掘期不因动画新增运动元素,数字可读性不受影响。 - 因果可读:玩家看完一段兑现演出,能说出这一行结算来自他刚才的哪一步操作。 - 死亡可辨:敌人死亡瞬间可辨识,不存在"敌人凭空消失"的观感。 -- 可访问:逐行兑现不可被整体跳过;减动效档下全部演出有时长减半或直达终态的通路。 +- 可访问:结算演出不可被整体跳过;减动效档下全部演出有时长减半或直达终态的通路。 ## 待办 diff --git a/design/gdd/systems/表现与支撑/HUD框架.md b/design/gdd/systems/表现与支撑/HUD框架.md index b05323c7..0c0fd803 100644 --- a/design/gdd/systems/表现与支撑/HUD框架.md +++ b/design/gdd/systems/表现与支撑/HUD框架.md @@ -269,7 +269,7 @@ HUD框架站在玩家与全部玩法系统之间:挖掘期它是输入的翻 - 悬停光标三语义(移动 / 挖 / 封印)随目标切换并高亮目标格;悬停已开格画出合法路径(不可达不显示);可挖域常驻呼吸微光。 - 一帧内意图整批到达,停手点击终结当帧收集。 - 每次拒绝可感知:棋盘面、资源面、相位三类各有呈现且前两类可区分;停手被改判(本轮已清图)玩家可感知;拒绝反馈图标加文案双通道。 -- 结算逐行实时滚出且每行带来源标注;未生效类行聚合计数并带形状冗余;零值行不被吞;效果行的单次贡献与池合成值分示、禁相加误读。 +- 结算演出链逐行兑现(FX 载体——明细带逐行文字已退役);零值行不被吞(语义在日志面:step 行零删减);效果行的单次贡献与池合成值分示、禁相加误读。 - 高光三档:封印标中行金框、清图奖励行金框、完美封印全屏喝彩级——庆祝不打在空兑现上(首份即零兑付则不发高光)。 - 状态槽显示图标加层数加剩余结算次数,悬停见来源;极性按键级表呈现(金满框 / 红缺框),空态整排隐藏、数据框上移补位;战斗结束全清有微文案。 - 敌人呈现(站桩立绘,载体 = 无框立绘+底座):意图占位 = 本拍摇定结果的动画占位(敌人技能池三档可见性——普通攻击零表示、特殊技类型级提示〔攻/防系两型〕,不预告技能名与数值、池与权重不公开)且挖掘期全程可见、映射跨局恒定、顺位可读、血量数字可读、敌方共享层数各立绘同值(血条悬浮头顶、状态小图标挂血条正下方);死亡灰化加碎裂退场(禁止瞬间消失)且就地更新不丢灰化态。 diff --git a/design/ux/battle.md b/design/ux/battle.md index 8e62519a..ede3c671 100644 --- a/design/ux/battle.md +++ b/design/ux/battle.md @@ -2,7 +2,7 @@ > **Status**: Complete(现行) > **Author**: user + ux-designer -> **Last Updated**: 2026-11-07 +> **Last Updated**: 2026-11-09 > **Platform Target**: PC (Steam)——Keyboard/Mouse 主(全部操作纯鼠标可完成)、Gamepad Partial 非 MVP、Touch None(同 technical-preferences) > **上游修订依赖**: 弃图刷新挖掘期受理依赖上游现行规则(行动经济 Active 受理 + 每轮上限 2 次、排雷玩法 Active·仅刷新路径装板、战斗结算的挖掘期刷新编排 + 恒同盘不变、系统索引的刷新规则同步——见布局决策 4 与 OQ11) > **Template**: UX Spec @@ -197,7 +197,7 @@ | B | 主角站桩立绘 | 站桩(无框立绘+落影) | HP 条落底盘(2026-10-06 方案二拍板:站桩排式 = **立绘→血条→状态**,全场血条对齐一线;血条嵌石板位、台缘线留作地面线;不悬浮头顶——高盒下血条-立绘空洞,用户点名否决)、状态效果小图标一排挂血条正下方(形状+色相双通道、层数角标;空态不占位退化为空行)——**HP 与状态效果的唯一展示面(2026-09-26 信息归属拍板;悬停 tooltip〔来源+语义+剩余结算次数〕职责在本组件)**;攻击值等规划数据仍归 C 区数据框(2026-09-20 全站桩拍板,英雄卡退役) | 悬停状态小图标看 tooltip | HUD 视图拆分改造 | | B | 敌人站桩立绘 ×1–3 | 站桩(无框立绘+落影) | 血条+顺位徽标落底盘(同主角排式,2026-10-06 方案二;**大体档〔显示 >150px 级:drider/duergar_king〕允许向上溢出盒顶 N px(N 由实装实算,溢出判定与背景无关),血条仍落底**)、状态小图标挂血条正下方(敌方增益按个体呈现——各立绘只显示它自己名下的状态实例〔蓄力/硬化/削弱/暴走/警觉,2026-11-02 个体化裁〕;数据源 = 战斗结算流水经增益状态投影,敌人系统×4④;无行为环点〔proposal §2.4〕,意图占位 = 本拍摇定结果的动画占位——普通攻击零表示 / 特殊技类型级提示,**意图徽标悬浮头顶上方,探顶档压胸**,敌方增益〔蓄力/硬化〕入状态图标行);死亡灰化加碎裂退场直接演在立绘上(2026-09-20 全站桩拍板,敌人卡退役);血条下名字行 = 纯名字 + 护甲类型图标(形状+色相双通道,与状态图标同行共存,状态空时为纯名字),AC 数值不展示——2026-09-26 终裁(用户口径:HP 信息已足够,攻防数值不直接写上;护甲类型图标保留克制对策可读性——类型可读、数值隐藏) | 只读 | 新建 | | B | 轮次·阶段指示 | 标签 | "第 N 轮 · 挖掘中/结算中"(终局定格「战斗结束」;Boss 变体附 Boss 名) | 只读 | 新建 | -| B | 结算明细带 | 滚动列表 | 结算期逐行流水([战斗结算](../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋) 9 类行协议);挖掘期收起为上轮摘要 1 行 | 无明细回看——带保留单行摘要,冒险中回看归「生涯」 | 改造 | +| B | 结算明细带 | 摘要位+叙述行 | 逐行流水文字呈现已退役(2026-11-07 用户裁):挖掘期显示上轮摘要 1 行与冒险叙述行,结算期空带+FX 排播链承接演出;流水协议保留在数据面([战斗结算](../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋) 9 类行协议,供日志落盘与回放对账) | 无明细回看——带保留单行摘要,冒险中回看归「生涯」 | 改造 | | B | 结算明细回看(已退役) | —— | 冒险中回看归「生涯」;回看覆盖层为未接线遗留件(待办清单登记) | —— | 未接线 | | C | 攻击数据框 | 直角细线数据框 | 攻击值 + 修正来源角标 + 护甲 AC(AC 二轮拍板 2026-09-26 补入——我方 AC 唯一展示面;HP 与状态归 B 区站桩、RAP 归 D 区右栏,不在本组件) | 只读 | HUD 视图拆分 | | C | 秘宝槽 | 图标槽 ×4 | 四槽壳在役、空槽占位(标题「秘宝」,悬停「秘宝槽(空)」);局内两步使用与关卡域库存随秘宝过渡形态退役——现行秘宝 = 营地同调装配件(秘宝.md),本区展示重接归装配面 | 悬停 tooltip | 已实装 | @@ -361,7 +361,7 @@ | State / Variant | Trigger | What Changes | |---|---|---| | **挖掘阶段(默认态)** | 轮次开始 / 结算完毕回 Active 相位 | B 区敌人待机(意图徽标全程可见——敌人系统 Rule 8⑤),D 区棋盘可交互,左右行动资源侧栏点亮;能量 2/10,唯悬停呼吸微光在动(§2.1) | -| **结算阶段** | round_end 触发(AP 尽/停手/清图) | D 区锁输入(棋盘去饱和 + 金橙色相偏移,明度不变,数字保持全对比);B 区播放五段编排演出(授予段 → 增益/减益段 → 战斗段 → 衰减段 → 判定段,战斗结算 段序冻结);明细带按结算期档展开(高读 `log_band_h_settle`)逐行滚动;阶段指示→"结算中";能量 7/10 | +| **结算阶段** | round_end 触发(AP 尽/停手/清图) | D 区锁输入(棋盘去饱和 + 金橙色相偏移,明度不变,数字保持全对比);B 区播放五段编排演出(授予段 → 增益/减益段 → 战斗段 → 衰减段 → 判定段,战斗结算 段序冻结);明细带按结算期档展开(高读 `log_band_h_settle`)——settle 态空带+叙述行承载,零逐行文字;阶段指示→"结算中";能量 7/10 | | **清图瞬间** | 全部安全格开完 | 金粒喷泉 + 彩纸 3–5s 即收(§2.3);清图奖励行强调呈现(H2,地图战斗资源×④——金框高亮行);随后换新图 install | | **完美封印高光** | 战斗结算高光判定(全图标中/零误标类) | 全屏喝彩级反馈(§2.2 最高档):金光带加倍扫射 + 「完美封印 ×2」横幅——P2 爆发兑现节点(创意风险 #2 落点) | | **封印标中高光** | 封印判定·标中 | 该印记化暴击弹道加重 + 明细行金框——chord 缺席的即时兑现补偿(创意风险 #3 落点) | @@ -436,7 +436,7 @@ | 状态图标行全清(战斗结束) | 状态逐枚化光收回(B 区站桩图标行)+ 「状态随战斗结束消散」微文案 | 增益状态×4④;RAP 清零同款先例 | | 胜利 | 蜡封自上落下弹跳定格 → 碎砖拼纹章 → overlay 暖金渐显 | §2.4 克制不狂欢 | | 失败 | 全屏明度不变转暮蓝色相 → 印记化光点 800ms 逐枚收回 → overlay | §2.5 最静一拍 | -| 减动效选项 | 上述全部动画提供时长减半/直接跳终态开关(基线权威 = HUD框架「可访问性基线」节;开关承载 = 设置面——2026-09-27 拍板不另立无障碍专项文档) | 动议:结算逐行兑现为信息载体不可整体跳过,可加速 | +| 减动效选项 | 上述全部动画提供时长减半/直接跳终态开关(基线权威 = HUD框架「可访问性基线」节;开关承载 = 设置面——2026-09-27 拍板不另立无障碍专项文档) | 动议:结算演出不可整体跳过,可加速 | --- diff --git a/game/tests/README.md b/game/tests/README.md index b5eb8dee..7175795f 100644 --- a/game/tests/README.md +++ b/game/tests/README.md @@ -181,7 +181,7 @@ tests/ | 终局结算框关闭动线零引擎报错 | 战斗表现 | fx_probe/screen_flow_probe 真实败走关闭动线(`BattleEndOverlay.open_defeat()` → `BattleEndOverlay.close()`)孤立直跑,日志零报错行读数 | `fx_probe.gd:_ready`(计划测试——需求卡片「QA harness 缺陷与覆盖遗漏收口批」2026-11-06 锚定) | | 停手钮真输入命中与停手收轮落效 | 行动经济 | ui_click_probe 使能窗真输入点击(AP 条停手钮经 `ProbeUiUtil.push_click()`)+journey_player 全线跑批(sim) | `ui_click_probe.gd:_stoptest_tick`(计划测试——需求卡片「QA harness 缺陷与覆盖遗漏收口批」2026-11-06 锚定) | | 停点链与控件级真输入命中 | HUD框架 | 探针与测试宿主真输入驱动(节点继续/三选一选卡·确认/弃图刷新确认/奖励刷新/地图候选矩形中心/调试浮窗钮,一律经 `ProbeUiUtil.push_click()`/`push_click_at()` 进 `push_input`) | `ui_click_probe.gd:_ready`(停点链段——计划测试,需求卡片「QA harness 缺陷与覆盖遗漏收口批」2026-11-06 锚定) | -| 控件动线扩面真输入可达(图例关闭/节点继续/三选一与商店/秘宝架/树高档与先手/弃图链/地图放弃/Esc 设置/减动效开关) | HUD框架×各屏 | 合成 InputEvent 经 `Viewport.push_input()` 真点(`ProbeUiUtil.push_click_at()`;扩面十一段,高档钮经调试注钥使能) | `ui_click_probe.gd:_ready`(动线扩面段)(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) | +| 控件动线扩面真输入可达(图例关闭/节点继续/三选一与商店/秘宝架/树高档与先手/弃图链/地图放弃/Esc 设置/减动效开关) | HUD框架×各屏 | 合成 InputEvent 经 Viewport push_input 真点注入(`ProbeUiUtil.push_click_at()`;扩面十一段,高档钮经调试注钥使能) | `ui_click_probe.gd:_ready`(动线扩面段)(计划——需求卡片「QA覆盖余量收口批」2026-11-07 锚定) | **旅程段七:数据配置与跨系统契约** diff --git a/reports/iter56-代拍板追认单-2026-11-08.md b/reports/iter56-代拍板追认单-2026-11-08.md deleted file mode 100644 index 68455e71..00000000 --- a/reports/iter56-代拍板追认单-2026-11-08.md +++ /dev/null @@ -1,46 +0,0 @@ -# 迭代 56 代拍板追认单 - -> 2026-11-08 汇总(实现批代拍板随 commit 留痕,本单逐条呈用户追认——超白名单事项另见「实现决定记录」)。 - -## 卡1 白名单内代拍板(需求卡片-结算期文字列表退役批 §12) - -| # | 白名单项 | 实际裁决 | 落点 | -|---|---|---|---| -| 1 | 新增测试函数命名与落点 | `battle_log_zero_text_test.gd`(presentation/)、`playtest_logger_step_fields_test.gd`(presentation/)、`reward_ineffective_reason_test.gd`(battle_settlement/)、`tools/analyze_parity_check.py`——全落卡内 §7 指定目录 | f0390714/T2/T3 提交 | -| 2 | battle_log_view 去留二选一 | **选「只留摘要位」**:视图壳/摘要位/append_bb 叙述行/set_mode 保留;逐行流与行格式化域(_fmt_*/AGG 聚合/_round_rows)删净。整体退役分支否决原因=五处冒险叙述行无处可迁(迁置=改呈现面超卡) | f0390714 | -| 3 | reason 四枚举键写法 | 照现役 _emit_row extra 模式**字面量直写**六发射点(零新 helper 零新常量);取值 full_layers/full_hp/no_enemy_alive/hero_down | T2 提交 | - -## 卡2 白名单内代拍板(需求卡片-封印动作改版批 §11) - -| # | 白名单项 | 实际裁决 | 落点 | -|---|---|---|---| -| 1 | 拒绝原因英文串定名 | `target_sealed`(保持卡串,零拼写微调) | 2d8a4d07 | -| 2 | 拒绝/悬停 toast 与图例最终措辞 | seal_present 句「不能封印:此格已有封印印记(封印受理即揭示——印记随图存续)」;target_sealed 新句「不能挖:此格已封印(封印受理即揭示——不可再挖开)」;图例封印行「封印印记(受理即揭示——落定当场可见格下身份,随图存续不能拔)——轮末自动判定标中/标空;已封印格零动作(不可再挖开)」;提示条「左键 挖掘 / 移动 · 右键 封印(受理即揭示·不可逆)」 | T3 提交 | -| 3 | 测试函数命名与断言组织 | 对照表点名函数名全数照用(_test_seal_reveal_identity/_test_dig_sealed_rejected/_test_clear_by_seal/_test_classify_seal_clears/_test_seal_on_revealed_visible);V14 形态 B 改判与 V9 case④c 为申报内改判的组织细节 | 2d8a4d07/T4 提交 | -| 4 | 色牌/装饰渲染细节 | 取现行 ui_kit/art-bible 现行值(COL_FLOOR/COL_BRICK/SealMarkLayer 参数化),零新常量 | T3 提交 | -| 5 | sim 补偿注入形态与常量初值 | 形态=「错触直挖」(封印已证雷意图按概率转同格挖——目标未封未揭,新规则下合法路径);初值 NORMAL_MISDIG_P=0.10(承旧注入 0.10——同构期望);计数字段沿用 mine_slips(锚对比列对齐)。**偏差读数已回填**:改前代码现跑踩雷 6.48/局 → 新锚 5.40/局(-1.08——含策略对齐合成效应非纯注入贡献;注入触发单局实测 slips=5) | T6 提交+实现报告 §四 | -| 6 | mac golden 缺件处理 | mac 三件缺件记遗留(渲染闸 SKIP 不判红——T7 预案兑现) | T7 提交 | - -## 实现决定记录(白名单外,凭规约条款自判——逐条列备案) - -| # | 事项 | 判据与依据 | 落点 | -|---|---|---|---| -| 1 | **sealed_identity 落位重设计**(撤出 minesweeper_rules、BoardData 新增 cell_identity) | 用户裁决 2026-11-08「上限保持 20」覆盖卡2 §12 宿主指定;预检失实根因=写卡段「远低于 20」凭印象未实跑(基线恰 20 贴线);停机呈报后用户裁「你自己重新设计」 | T1b 提交 | -| 2 | **S13 三条新违规拆 helper 修净**(_classify_seal/_seal_face_reject 私有 helper) | 卡2 §14「预期只降不升」+gdstyle「新码须修到基线口径内」——非阈值修订非基线新增,合规修复 | T1a 提交 | -| 3 | **feat_vouchers_test A12 断言退役改写**(_format_row 不在位防回潮断言) | 申报外波及面;test-conventions §5.5 换代同生死(旧文案呈现路径摘除=断言对象退役);替代断言=退役态防回潮 | T1 提交 | -| 4 | **pacing_queue_test 断言②改判**(「末行原文在明细带」→FX 链承接 _assert_fx_chain) | 卡1 §10 申报面(:108-120 文字呈现部分)——改写为退役后正向断言,FX 计数从行集独立推导(不镜像实现) | T1 提交 | -| 5 | **theme_projection_test 行协议闸改写**(9 类逐型 FX 落拍闸) | 同 §5.5——格式化域摘除后盲区检测法(解析文本增长)等价迁移为落拍计数增长;原防「格式化炸结算段」的闸价值保留 | T1 提交 | -| 6 | **ui_click_probe wr1-b 反转+开场行判定面换代**(最新行本体判定) | T1 波及(clear 移除破坏「全文本计数」判定前提+摘要功能退役使 wr1-b 语义反转)——断言意图保留、判定面换代 | f0390714 | -| 7 | **adventure_feats_test 满配种子 42→43+表行数 37→36 判值换代** | feats 删行使 RNG 流消费序列变,42 路线漂移为 timeout(主区基线 42 绿对照坐实非行为回归);§5.5 同生死——种子钉值绑旧表行集 | T2+T5 提交 | -| 8 | **ui_click_probe 行为②随机撤封印段摘除** | 卡2 T4 点名「行为②撤封印死路段清理」——申报内 | T4 提交 | -| 9 | **R6 golden 实测零漂移零重录** | settlement_wiring_snapshot 内嵌 golden 在「挖+封+停」驱动序下与改前逐位一致(驱动序不含挖封印格——T1 后该路径被拒)——重录义务免除,读数绿在案 | T2 验收 | -| 10 | **卡1 R4 判读等价基线快照重出**(改前分析器经 git show 提取补丁件跑出完整快照) | T0 落盘的历史锚快照被 head 管道 SIGPIPE 截断(60 行截断)——R4 读数①②需完整改前基线;改前分析器(master 字节)跑出 3394/149 行快照替换,sim-data 留盘 | T3 提交 | -| 11 | **ui_probe:133-135 与 ui_click_probe:423/:473/:616/:798-844 零改动** | 卡1 §10 申报清单列名面实况核查:不依赖退役面(:133-135 读 pending_rows 与尺寸;:423/:473 savesel 段无 battle_log 引用;:616 全文本判首个冒险无残留仍安全)——无文字断言可改写=零改动 | 实现报告对照表登记 | - -## 体验验证清单登记项(真人目检——登记不阻塞,实机目检后由用户销项) - -1. 结算期 B 区零逐行文字(FX 排播链仍逐拍演出)——卡1 R1 体验面 -2. 伤害飘字/弹道/站桩反馈在新排播形态下的观感——卡1 R2 体验面 -3. 封印受理瞬间揭示的观感(地板+身份字形+法阵叠加)——卡2 R8 体验面 -4. 封印格悬停禁字与图例新句——卡2 R9/R10 体验面 -5. 清图高光在封印完成清图时触发——卡2 R3 体验面 diff --git a/reports/iter56-反哺点-2026-11-08.md b/reports/iter56-反哺点-2026-11-08.md deleted file mode 100644 index fa8b0565..00000000 --- a/reports/iter56-反哺点-2026-11-08.md +++ /dev/null @@ -1,28 +0,0 @@ -# 迭代 56 反哺点清单 - -> 2026-11-08 采集(实现批产出——设计权威文档实现批禁写,逐条经用户裁决后由文档批落文)。 -> 卡2 预期零反哺点(设计面前置闭合)兑现:封印改版的设计条款无差异发现;下列各条全部来自卡1(逐行文字退役)与开工检查发现。 - -## 卡1 反哺点(结算期文字列表退役批) - -| # | 文档与位置 | 现行句的问题 | 建议改写方向 | 依据 | -|---|---|---|---|---| -| 1 | design/ux/battle.md:200(B 区组件表「结算明细带」行) | 「结算期逐行流水(9 类行协议);挖掘期收起为上轮摘要 1 行」——逐行流水已退役,现行句描述已不存在的呈现 | 明细带行改写为退役后形态:挖掘期摘要位+叙述行承载;逐行流水行删除或标注已退役(对照 08-Alpha v1.29 删「逐行结算排播」行的口径) | 卡1 §6 同步面(原卡锚 :199 漂移至此);用户裁定 2026-11-07 撤逐行滚动文字列表 | -| 2 | design/ux/battle.md:364(交互矩阵「结算阶段」行) | 「明细带按结算期档展开(高读 log_band_h_settle)逐行滚动」——逐行滚动已退役 | 改写为:明细带 settle 展开保留(空带+叙述行),删除「逐行滚动」表述 | 同上;实现实况=set_mode 保留双态、settle 态零逐行内容 | -| 3 | design/ux/battle.md:439(减动效选项行动效列) | 「动效:结算逐行兑现为信息载体不可整体跳过,可加倍」——「逐行兑现为信息载体」的文字承载面已退役 | 保留「演出不可整体跳过」语义,删除「为信息载体」措辞(FX 排播链仍是兑现呈现,非文字信息载体) | 卡1 R2 判据锚实际指向此行;FX 链退役文字后仍是演出载体 | -| 4 | design/gdd/systems/表现与支撑/HUD框架.md:272 | 「结算逐行实时滚出且每行带来源标注;未生效类行聚合计数并带形状冗余;零值行不被吞」——逐行滚出与聚合计数均已随明细带退役 | 改写为:结算演出链逐行兑现(FX 载体);明细带行删除;「零值行不被吞」语义迁日志面(step 行零删减) | 卡1 R1 退役面;theme_projection 行协议闸改写后的实际形态 | -| 5 | design/gdd/systems/战斗循环/战斗结算.md:87 | 「显示名等玩家可见文案是数据面字段:文案值登记在数据表行,代码按来源类别与效果身份读表拼行」——行协议保留 display_name(呈现面消费),但日志消费端已零文案 | 补一句消费端边界:日志落盘零文案(text/display_name 不落盘),文案仅呈现面消费 | 卡1 T2 落地实况;卡1 §6 已列此文档 | -| 6 | design/gdd/systems/战斗循环/战斗结算.md:80 附近 | 「奖励未生效行」行型的产生面变化:封印作废行(封印格直接挖开)随改判路径退役——未生效行只剩四类(满层/满血/无存活敌人/主角已倒下),且带结构化 reason 键 | 未生效行清单换代(四类+reason 结构化说明);封印作废行除名 | 卡1 T2+卡2 T2(grant_segment:103 作废行块删除) | -| 7 | design/gdd/systems/战斗循环/战斗表现.md:53/:99/:149 | 「结算逐行兑现是信息载体」「能说出这一行来自哪步操作」等句——文字行退役后兑现载体=FX 链 | 三处「逐行兑现」措辞按 FX 载体口径改写 | 卡1 §6 已列 | -| 8 | design/gdd/08-Alpha版本标准.md:42 | 「战斗表现……Alpha 判据=受击闪白/死亡不瞬间消失/高光行/逐行排播四条可读」——「逐行排播」残留(v1.29 只删了「逐行结算排播」独立行,战斗表现条目的判据句漏改) | 判据句删「逐行排播」或改「演出链兑现可读」 | 开工检查发现(v1.29→v1.30 版本漂移核查);与本批裁定直接冲突的残留句 | -| 9 | 体验验证清单.md(:86/:206/:220/:314/:315/:326/:442/:519 八处) | 逐行结算、明细带来源/行序/文案可读性、减半标签等目检项——呈现面已换代 | 逐条按退役后形态改写;新增两条目检项:结算期 B 区零逐行文字、封印受理瞬间揭示观感 | 卡1 §6 已列;卡2 §8 体验面四项(封印受理瞬间揭示、悬停禁字、图例新句、清图高光) | - -## 卡2 反哺点 - -无(设计面前置闭合;实现与排雷玩法.md v2.0 等事实源零冲突)。 - -## 过程发现登记(非文档反哺,供流水线改进参考) - -1. **判据出处行锚漂移**:卡1 复核轮 2 钉死的 ux/battle.md 锚(:199/:272/:347)被 2026-11-07「顶栏搬两侧」文档批修订冲漂(真锚 :200/:364/:439)——写卡段锚钉死后同日文档批仍会冲漂;建议:判据锚钉节锚形态(test-conventions §8.3 已有节锚两档——2026-11-07 架构收窄批立的防漂移机制,写卡段对易漂移文档改用节锚)。 -2. **卡2 §14 预检读数失实**:「两宿主现行公开方法数远低于 20 上限」系凭印象未实跑(minesweeper_rules 恰 20 贴线,+1 即越)——iter-plan 第 3 步预检的 S13 键读数义务应显式包含「新增公开方法的宿主余量实跑核对」。 -3. **流水线闸 ANCHOR_RE 不含中文路径**:待办清单在册条目(2026-11-05 登记),本批卡1 锚全为 ASCII 路径未触雷——非本批引入,留待办。 diff --git a/reports/iter56-实现报告-2026-11-08.md b/reports/iter56-实现报告-2026-11-08.md deleted file mode 100644 index 5b0800af..00000000 --- a/reports/iter56-实现报告-2026-11-08.md +++ /dev/null @@ -1,105 +0,0 @@ -# 迭代 56 实现报告(结算期文字列表退役批+封印动作改版批) - -> 2026-11-08。工作区 `../g-plan2-iter56`(分支 iter56,基线 a0ea828f)。两卡按 roadmap 卡序串行:卡1(结算期文字列表退役)→卡2(封印动作改版)。批性质=代码实现批;`design/`、根规则文件、`game/tests/README.md` 零写入。 - -## 一、各卡状态 - -| 卡 | 状态 | 提交序列 | -|---|---|---| -| 卡1 结算期文字列表退役批 | **完成**(T0-T3 落地;T4 随批末) | f0390714(T1 撤逐行文字)→T2(日志零文案+reason)→T3(分析工具+对拍载体) | -| 卡2 封印动作改版批 | **完成**(T0-T7 落地) | 2d8a4d07(T1 规则核心)→T1a(S13 收敛)→T1b(落位重设计·用户裁)→T2+T5(结算退役+内容退役)→T3(呈现层)→T4(测试探针)→T6(sim 域)→T7(golden) | - -## 二、实际改动—验收对照表(逐行结果读数) - -### 卡1(R1-R5;对照表出处=需求卡片 §10) - -| 需求点 | 验收测试(文件:函数) | 真实入口 | 判据绑定面 | 结果读数 | -|---|---|---|---|---| -| R1 结算期零逐行文字(ux/battle.md:200——原卡锚 :199 漂移,随批维护) | battle_log_zero_text_test.gd:_smoke_settle_zero_rows(新增) | main.tscn 组合根→真实停手→轮末结算→B 区场景树 | 三时点 parsed_text 冻结于进节点叙述基线(step_row 消费零追加——「不绑终屏态」口径) | **绿**(PASS,读数见 f0390714) | -| R2 FX 与 toast 链不断(ux/battle.md:439——原卡锚 :347 漂移) | pacing_queue_test.gd:_assert_fx_chain(新增断言函数) | 真实行集驱动独立 RowPacer | on_step_row_fx 每行一拍+弹道/标出/色环/highlight 三路计数与行型分布逐位一致(期望独立推导);FX 链三函数零 diff=改前逐位一致凭证 | **绿**(PASS) | -| R3 日志零文案、字段不缺(战斗结算.md:87) | playtest_logger_step_fields_test.gd:_assert_no_text_and_full_payload(新增) | LevelAutoplay.run_level 挂 logger→真实结算→落盘 JSONL 读回 | 零 text/display_name+公共七字段与平铺原件逐行在位+damage payload 并集抽样 | **绿**(PASS) | -| R4 分析判读等价(test-conventions.md:133) | tools/analyze_parity_check.py(新增) | 三读数对拍 | ①历史锚改后分析器复跑 vs 改前分析器基线 3394 行逐位一致 ②改前种子日志双版本一致 ③改前 vs 改后同种子(71000)新日志逐位一致 | **绿**(三读数全一致,读数见 T3 提交) | -| R5 未生效原因结构化(战斗结算.md:80) | reward_ineffective_reason_test.gd:_assert_four_reasons(新增) | 真实板身份快照→grant_routed 路由→轮末结账 | 四类 reason 逐一命中(full_hp/hero_down/full_layers=no_guard 堆层/no_enemy_alive=敌 hp=1+blast 双单 defer);两处受控例外直改(hero hp=0、敌 hp=1——无公开 setter,随行申报) | **绿**(PASS,四类全命中) | - -**卡1 测试削弱申报兑现**:§10 点名的改写面全部落地——theme_projection(行协议闸→FX 链逐型闸)、player_copy_sweep(u6 消费半→退役防回潮)、ui_probe:133-135 与 ui_click_probe:423/:473/:616/:798-844(实况核查不依赖退役面——**零改动**,见追认单 #11)、pacing_queue:108-120(断言②改判 FX 承接)。**申报外波及面**(§5.5 同生死):feat_vouchers A12、wr1-b 反转、开场行判定面、ui_input_probe case④b 注记——均改写为退役后正向断言,无删除断言。 - -### 卡2(R1-R12;对照表出处=需求卡片 §8) - -| # | 需求点 | 验收测试 | 真实入口 | 结果读数 | -|---|---|---|---|---| -| R1 | 封印受理即揭示(排雷玩法.md:52) | minesweeper_rules_test:_test_seal_reveal_identity〔封印改 V1〕 | MinesweeperRules.settle_batch() | **绿**(身份逐位+受理零事件+身份与揭示态独立断言) | -| R2 | 挖封印格被拒(排雷玩法.md:56) | _test_dig_sealed_rejected〔V2〕+seal_polarity 四情况组改判〔V2〕 | settle_batch() | **绿**(target_sealed+三态零变化;四情况组标中/标空判定照发) | -| R3 | 清图口径换代(排雷玩法.md:139) | _test_clear_by_seal〔V3〕 | settle_batch() | **绿**(非末封 false/封印计入完成 true/逐格封至清图 round_end 恰一条 cleared) | -| R4 | 能清图的封最优先(排雷玩法.md:167) | _test_classify_seal_clears〔V4〕 | settle_batch() 同批 stop+清图封 | **绿**(赢家=清图封居执行序首、stop voided、round_end cleared) | -| R5 | 判定批与溢价零改动(战斗结算.md:139) | seal_polarity 保留组原样+V5 注记行 | BattleOrchestrator 全轮驱动 | **绿**(76 pass——末点 AP/标中溢价/标空/完美封印双份原样) | -| R6 | 受理零兑付、改判路径死(战斗结算.md:134) | settlement_wiring_snapshot 内嵌 golden〔V6〕 | BattleOrchestrator 真实驱动序 | **绿**——golden 实测零漂移零重录(驱动序不含挖封印格;流水零作废行) | -| R7 | 破封一击退役、词除名(奇物.md:72) | adventure_feats/effect_words_t1 换代〔V7〕+grep | feats.tres 装载路径 | **绿**(grep dug_under_seal/breaker_strike 非测试面=0;词表出册防回潮断言;表 36 件装载绿) | -| R8 | 封印格呈现三件套(ux/battle.md:170) | seal_mark_params:_test_seal_on_revealed_visible〔V8〕+board_shot 选择器+ui_input_probe case④b | 真实场景+push_input | **绿**(新组合态印记可见——受控例外随行申报;探针印记落位绿) | -| R9 | 已封印格零动作(ux/battle.md:299) | ui_input_probe case④c〔V9〕 | push_input 左/右键 | **绿**(零发射+FORBIDDEN+禁入框+图例说明在册) | -| R10 | 文案四件(ux/battle.md:284) | hud_presenter/player_copy_sweep 换代+click 图例〔V10〕 | 文案装配+真实场景 | **绿**(逐字断言换代+雷字清零守恒) | -| R11 | sim 策略对齐+MC 同批重锚(排雷玩法.md:52) | MC 配对读数(测量面) | sim 采集链 master_seed 配对 | 代码面绿(试车 5 局健康);**新锚采集后台进行中,读数回填 §四** | -| R12 | 渲染基线换代(ux/battle.md:170) | 渲染闸+golden 三图重制〔V12〕 | 真实渲染截图 | **绿**(board_shot 双帧取证 PASS+golden 三屏对比全绿;用户预览图人审 2026-11-07 在案;mac 三件缺件记遗留) | - -**卡2 测试削弱申报兑现**:四处点名改判全落地(①四情况组②preview 形态 B③文案逐字④wiring golden——实测零漂移未重录)。**申报外波及面**:adventure_feats 满配种子 42→43+行数 37→36(feats 删行 RNG 流漂移——§5.5 同生死,主区基线对照坐实非行为回归);ui_click_probe 行为②摘除。其余旧断言零删除。 - -## 三、能力行名实核对(game/tests/README.md 批末核对——实现批零写入) - -- :88 封印与极性路由(_smoke_seal_ap_exhausted/_smoke_seal_irreversible_quadrants/_smoke_polarity_routing)——**名实一致**(函数在位) -- :117 挖/封印合法性与可辨拒绝(_test_dig_sealed_rejected/_test_classify_seal_clears 计划锚定)——**落地一致** -- :119 封印受理即揭示(_test_seal_reveal_identity)——**落地一致** -- :120 清图口径换代(_test_clear_by_seal)——**落地一致** -- :121 棋盘封印印记呈现(_test_seal_on_revealed_visible 计划锚定)——**落地一致** -- :137 结算期零逐行文字(_smoke_settle_zero_rows/_assert_fx_chain/standee_fx_sweep_test:_init)——**落地一致** -- :138 日志 step 行零文案(_assert_no_text_and_full_payload/_assert_four_reasons)——**落地一致** -- 改名面:无(零回表) - -## 四、MC 同批重锚读数(R11——已落盘) - -- **规模口径**:50/档=100 局(2026-11-08 用户批准——发起时呈报三档规模供裁,首采 800 局超一档硬闸被停采作废,重采按批准规模执行) -- **新锚**:`runsum_iter56reanchor_81000_n50both_20261108.jsonl`(纯 RUNSUM 100 行、policy+seed 升序;全量明细 jsonl 不留盘) -- **对照读数**(三方对照:改前锚 2026-10-03/改前代码 2026-11-08 现跑 50 局/改后新锚 50 局,同 seed0=81000): - -| 指标 | 改前锚(旧代码读数) | 改前代码现跑 | 改后新锚 | 本批效应 | -|---|---|---|---|---| -| normal 通关率 | 0% | 0% | 0% | 无变化 | -| normal 踩雷均值/局 | 6.72 | 6.48 | 5.40 | -1.08(错触注入替代旧滑失+策略对齐合成) | -| normal 标中/标空/封印数 | 无字段 | 21.34/6.74/52.2 | 19.60/7.86/49.9 | 小幅漂移(标空剔除约束增强+清图口径) | -| perfect 通关率 | 59% | **0%** | **4%** | **改前锚失实早有声明**(sim-data/README:10 代表性注记——两月代码演进使模拟行为漂移;改前代码现跑 0% 对照坐实与本批无关);本批效应方向=升(封印计入清图利好完美策略) | -| perfect 踩雷均值 | 0 | 0 | 0 | 无变化 | -| perfect 标中/封印数 | 无字段 | 45.96/91.1 | 48.28/96.1 | 小幅升(同上方向) | - -- **结构性恶化判定**:无(normal 踩雷降、perfect 通关升——两方向均为改版利好或中性;标中/标空经济小幅漂移在策略对齐预期内) -- **补偿注入验证**:单局实测 st.mine_slips=5 触发(RUNSUM 无 mine_slips 字段——解析口径注记已写入 sim-data/README);注入形态=错触直挖、初值 0.10——**踩雷读数 6.48→5.40 偏差 -1.08/局**——偏差来源含策略对齐合成效应,非纯注入贡献;偏差已记本节与追认单 #5(白名单 5 授权自判) -- sim-data/README.md 现行锚指针已换代+改前锚迁历史锚节(随批合回) - -## 五、实机目检总清单(登记不阻塞——真人目检后销项) - -1. 结算期 B 区零逐行文字(FX 排播链仍逐拍演出) -2. 伤害飘字/弹道/站桩反馈在排播新形态下的观感 -3. 封印受理瞬间揭示的观感(地板+身份字形+法阵叠加——「太忙/太糊」判定归待办「封印格观感细化」条) -4. 封印格悬停禁字与图例新句 -5. 清图高光在封印完成清图时触发 - -## 六、遗留读数义务与遗留面 - -1. MC 新锚采集(后台)→R11 读数回填本报告+sim-data/README 指针换代+新锚 jsonl 携回主区(数据件不入 git——合并后手工拷贝) -2. mac golden 三件缺件(渲染闸 SKIP 不判红)——Mac 环境随批补采或留待含代码面合回的远端 CI -3. 独立验收审计(合并前必做——由未参与实现的子代理执行) - -## 七、实现决定记录 - -见 `reports/iter56-代拍板追认单-2026-11-08.md`(白名单 9 项+实现决定 11 条+目检登记 5 项)。 - -## 八、反哺点 - -见 `reports/iter56-反哺点-2026-11-08.md`(卡1 九条+过程发现三条;卡2 零条)。 - - -## 九、独立验收审计结论与审计后勘误 - -**审计结论:通过**(reports/iter56-验收审计-2026-11-08.md——17 行对照表全量核对,14 干净通过、2 记账级缺漏,无申报外削弱、无同义反复判据;复跑 3 件全绿)。 - -审计两项缺漏的闭环(审计后勘误笔,同批提交): -1. 卡1 R1 函数名:battle_log_zero_text_test.gd 断言体由 _init 内联拆出为 **_smoke_settle_zero_rows**(能力行 :137 点名函数——名实一致补齐;拆分后回归绿)。本报告 §三 R1 行「落地一致」记载在拆分前失实,本段勘误。 -2. 卡2 R6 尾缀载体:〔封印改 V6〕grep 载体缺失(golden 实测零漂移未重录、卡 F9 漏补载体豁免)——settlement_wiring_snapshot_test.gd 宿主 _init 补判据出处注记行(零行为改动,回归绿)。 -3. 观察项随手修:smoke/critical-paths.md 第 7 条「明细逐行呈现」残留旧口径改写;sim-data/README「历史锚」节标题重复去重;T4 提交说明「V5 三函数」实落 2 处(_smoke_seal_irreversible_quadrants 属改判组带 V2 尾缀,不在保留组——措辞勘误)。 \ No newline at end of file diff --git a/reports/iter56-验收审计-2026-11-08.md b/reports/iter56-验收审计-2026-11-08.md deleted file mode 100644 index f258fce1..00000000 --- a/reports/iter56-验收审计-2026-11-08.md +++ /dev/null @@ -1,89 +0,0 @@ -# 迭代 56 独立验收审计(结算期文字列表退役批+封印动作改版批) - -> 2026-11-08。审计人=未参与实现的独立子代理;仓库 `D:\code\g-plan2-iter56`(分支 iter56,HEAD=043c24c0,工作区干净);diff 范围 a0ea828f..HEAD(13 个提交,48 文件,+1301/−485)。审计依据=test-conventions §8.7;卡1 验收档=中、卡2 验收档=高(两卡头部申报在案)。全部 grep、diff 与复跑为审计人独立执行,不采信实现报告自述。 - -## 一、执行深度声明 - -| 审计动作 | 卡1(中档) | 卡2(高档) | -|---|---|---| -| 对照表逐行核对 | 全量 5 行(R1-R5) | 全量 12 行(R1-R12) | -| 判据绑定面抽查 | 3 行(R1/R3/R5,超 ≥2 下限) | 6 行(V1/V2/V3/V4/V9/V10,超 ≥5 下限) | -| 测试削弱检查 | 逐处(diff 全部删除行/改判行逐一对申报清单) | 逐处(同左) | -| 直查例外核对 | 逐条 | 逐条 | -| 最窄测试复跑 | 档位规定省略;实际超额跑 2 件(R1/R5,退出码 0×2) | 跑 1 件(minesweeper_rules_test,含 V1-V4,退出码 0) | -| 判据出处抽查 | 3 行(R1/R3/R5 锚句实读) | 6 行(V1/V2/V3/V4/V5/V10 锚句实读对照) | - -## 二、卡1 对照表逐行核对(R1-R5) - -| 行 | 判定 | 依据 | -|---|---|---| -| R1 结算期零逐行文字 | **缺漏(记账级)——测试实质通过** | 测试在位:`game/tests/unit/presentation/battle_log_zero_text_test.gd`(新增)。真实入口实证=main.tscn 实例→`_start_adventure_from_menu`→选节点→真实战斗→`ms.settle_batch` 挖掘/停手→断言 `main.ui.battle.log_view` 组合根链,未绕过改动点(停手经规则批次入口,与生产停手同路径;行流经真实 step_row→row_pacer 信号链)。尾缀〔退役改 V-退役卡 R1〕grep 命中断言 3 处(:77/:81/:85)+run_all 注册行。绑定面=三时点 parsed_text 冻结于进节点叙述基线(非终屏态),复跑 exit 0。**缺漏本体**:卡 §10 与 game/tests/README.md:137 点名函数 `_smoke_settle_zero_rows` 全仓不存在(断言内联在 `_init`)——白名单 1 授权命名自判,但 §8.9「改名则回表」未履行(能力清单仍载旧名),且实现报告 §三 记「落地一致」失实 | -| R2 FX 与 toast 链不断 | 通过(附注记) | `pacing_queue_test.gd:_assert_fx_chain`(:190)在位,尾缀〔退役改 V-退役卡 R2〕命中 8 处断言;真实行集=main.tscn 真实结算采样 step_row,重放独立 RowPacer(生产类),弹道/标出/色环/横幅/toast 计数从行型分布独立推导(防同义反复形态);`standee_fx_sweep_test.gd:_init` 在位未改。附注:卡绑定面写「与改前逐位一致」,落地改为「期望独立推导逐位一致」+「FX 链三函数零 diff」(f0390714 可证)——防镜像性更强,判等价兑现 | -| R3 日志零文案、字段不缺 | 通过 | `playtest_logger_step_fields_test.gd:_assert_no_text_and_full_payload`(:37)在位;真实入口=LevelAutoplay.run_level 挂 logger→落盘 JSONL 读回(:41-48),非直调 logger。尾缀 R3 命中断言 4 处。改动面核对:playtest_logger.gd 删 text 键+平铺跳 display_name,其余字段与 payload 一行未减(diff 实证) | -| R4 分析判读等价 | 通过(读数为提交记载,未独立复采) | `tools/analyze_parity_check.py` 在位(剥名逐位 diff+exit 语义完整);analyze_playtest.py 三处 text 判读改结构化 reason 优先+text 子串兜底双分支(diff 实证,effect_id_of 既有双分支未动)。T0 两份基线快照在盘:`sim-data/改前判读基线_历史锚71000_20261107.md`(3394 行)、`改前判读基线_同种子71000_20261107.md`(149 行),与报告读数行数吻合;三读数一致记载于提交 82725501。改后同种子日志未留盘,审计未复采(复采属读数类采集,不在审计义务内)——以工具+基线+提交读数为凭 | -| R5 未生效原因结构化 | 通过 | `reward_ineffective_reason_test.gd:_assert_four_reasons`(:63)在位;真实入口=begin_battle→grant_routed→轮末结账,四类 reason 逐一命中,复跑 exit 0(12 checks)。六发射点 reason 键全部落地(damage_controller/reward_grant×3/combat_segment/grant_segment,diff 实证)。尾缀 R5 的 grep 载体=run_all.gd:216 注册行;套件内断言消息未带尾缀(卡1 各套件落点不统一,注记不判缺) | - -**卡1 削弱检查(逐处)**:diff 全部删除/改判行共 8 处,逐一对申报——①pacing_queue「末信号行原文在明细带」→卡 §10 申报面(:108-120)改判 FX 承接 ✓;②theme_projection 9 类格式化闸→卡 §10 申报(_smoke_battle_log_view)改写 FX 落拍闸 ✓;③player_copy_sweep u6→卡 §10 申报(_sweep_source_names)改防回潮 ✓;④feat_vouchers A12→申报外,§5.5 同生死登记(追认单 #3)✓;⑤ui_click_probe wr1-b 反转+开场行判定面→追认单 #6 ✓;⑥theme/player_copy/ui_probe:133-135 零改动→git diff 实证 ui_probe.gd 空 diff,追认单 #11 属实 ✓;⑦run_all.gd 只增不删 ✓。**未发现申报外削弱**。 - -**卡1 直查例外(逐条)**:①reward_ineffective_reason_test hero hp=0/敌 hp=1 直改——测试头注 :7 随行申报「无公开 setter」,报告 R5 行同记 ✓;②该件 `settlement._reward_economy`/`_enemy_system` 私有域直查——旧版 seal_polarity_test 已有 4 处同款(git show a0ea828f 实证),头注注记「seal_polarity 负向直验同款形态」,按既有先例豁免;③pacing_queue/theme_projection 的 FakeStage/FakeFx/FakeBoardZone 为测试替身记参件,非产品内字段直查,不属例外。 - -## 三、卡2 对照表逐行核对(R1-R12) - -| 行 | 判定 | 依据 | -|---|---|---| -| R1 封印受理即揭示 | 通过 | `minesweeper_rules_test.gd:_test_seal_reveal_identity`(:201)在位;**真实入口=settle_batch**(:209/:225 提交 seal_place,未直调 `_do_seal_place`);身份断言=has_seal+`BoardData.cell_identity` 组合(T1b 落位重设计后形态,公开面);受理零 cell_revealed 哨兵在位;尾缀 V1 命中 4 断言。复跑 exit 0 | -| R2 挖封印格被拒 | 通过 | `_test_dig_sealed_rejected`(:234)在位:sub_reason=="target_sealed"+封印/揭示/AP 三态零变化,经 settle_batch;seal_polarity 四情况组 ②④改判为拒绝断言(diff 实证,见削弱①);V2 尾缀命中 minesweeper_rules_test 2 处+seal_polarity 8 处 | -| R3 清图口径换代 | 通过 | `_test_clear_by_seal`(:255)在位:非末封 false→唯一未完成格=已封印 true→干净板逐格封至清图、round_end 恰一条 path_tag=cleared;全部经 settle_batch。V3 尾缀命中 5 断言 | -| R4 能清图的封最优先 | 通过 | `_test_classify_seal_clears`(:292)在位:同批 stop+清图封,赢家=清图封居执行序首、stop voided、round_end=cleared;经 settle_batch。V4 尾缀命中 4 断言 | -| R5 判定批与溢价零改动 | 通过 | seal_polarity 保留组(末点 AP/标中溢价/标空负向/完美封印双份)断言原样未改(diff 实证删改仅限四情况 ②④改判面);V5 判据出处注记 grep 命中 2 处(:51/:444)——T4 提交说明称「三函数」,实落 2 处(注记级出入,两保留组函数均有载体,不判缺) | -| R6 受理零兑付、改判路径死 | **缺漏(载体级)——实质通过** | 实质面:settlement_wiring_snapshot_test.gd 零改动(git diff 空),内嵌 golden 在「挖+封+停」驱动序下绿(提交 92086027 四套件绿含 wiring_snapshot)——golden 未漂移=改判路径零触发实证;grant_segment :102-104 作废行块删净+流水零作废行(代码 diff 实证)。**缺漏本体**:〔封印改 V6〕尾缀全仓(game/+tools/)grep 零命中——卡原定载体=golden 重录,实测零漂移未重录后载体消失;卡 F9 只为 V11/V12 补了「报告+提交说明」载体豁免,V6 漏补同类豁免 | -| R7 破封一击退役、词除名 | 通过 | feats.tres 删行(diff 实证,feat_id=breaker_strike 整块);effect_engine 词表删 dug_under_seal(diff 实证);effect_words_t1 新增出册防回潮断言+adventure_feats V7 注记(:722);grep dug_under_seal/breaker_strike 非测试面=0(审计独立 grep 实证)。注记:effect_words_t1 断言尾缀用卡1 家族「退役改 V7」而非「封印改 V7」——V7 载体在 adventure_feats 在位,家族混用不判缺 | -| R8 封印格呈现三件套 | 通过(附注记) | `seal_mark_params_test.gd:_test_seal_on_revealed_visible`(:62)在位:seal_on 与揭示同真印记仍可见(新组合态);board_shot_probe 选择器换代(:145);ui_input_probe case④b 印记落位断言在位。**附注**:卡探针半句「身份字形可查」在 case④b 无显式断言载体——身份字形可观测面由 golden 三图(含字形像素,R12)+V1 身份查询断言+board_view 读 cell_identity 代码(diff 实证)合围,无旧断言被删,不算削弱。直查例外:`u._seal_layer` 直读随行申报(测试注记+卡 §8 R8 行+复核 F12)✓ | -| R9 已封印格零动作 | 通过 | ui_input_probe case④c(:288-312 新增):真输入左/右键已封印格 action_requested 零发射+CURSOR_FORBIDDEN+封印禁入框+图例说明在册含「受理即揭示」;V9 尾缀命中 5 断言;判据出处 ux/battle.md 已封印格行(Interaction Map)实读吻合 | -| R10 文案四件 | 通过 | hud_presenter_test 文案逐字换代(seal_present 新句+target_sealed 新句,diff 实测与 hud_presenter.gd 逐字一致);player_copy_sweep u4 图例断言换代(含零雷字守恒);ui_click_probe 图例行断言换代(:1218,V10 尾缀在位)。措辞按白名单 2 授权 | -| R11 sim 策略对齐+MC 同批重锚 | 通过(载体=报告+提交,卡 F9 豁免在案) | auto_player._constraints 封印身份增强(标中计已知雷/标空剔除,读 board.cell_identity 公开面);level_autoplay 标雷误挖退役→错触直挖 NORMAL_MISDIG_P=0.10(白名单 5+用户裁③);新锚 `sim-data/runsum_iter56reanchor_81000_n50both_20261108.jsonl` 在盘 100 行(审计实证);sim-data/README 现行锚指针换代+改前锚迁历史节+59% 失实注记(diff 实证);三方对照读数与偏差 -1.08 记报告 §四+追认单 #5+提交 043c24c0;规模 50/档=2026-11-08 用户批准在案 | -| R12 渲染基线换代 | 通过(载体=报告+提交,卡 F9 豁免在案) | golden 三图 windows 三件换代(diff stat 二进制变更实证);提交 91882776 记 board_shot 双帧取证 PASS+渲染闸三屏绿;用户预览图人审 2026-11-07 在案;mac 三件缺件记遗留(卡 T7 预案:渲染闸 SKIP 不判红)。渲染闸未由审计复跑(昂贵件,以提交读数+基线字节换代为凭) | - -**卡2 削弱检查(逐处)**:diff 删除/改判行共 11 处——①seal_polarity 四情况「直挖受理/隐式退役/零兑付作废」→卡 §8 削弱① ✓(改判后正向断言钉新语义:target_sealed+判定照发);②minesweeper_rules preview 形态 B→卡 §8 削弱② ✓(改判「preview 封印格零外扩」);③hud_presenter/player_copy_sweep 文案逐字→卡 §8 削弱③ ✓;④settlement_wiring golden→卡 §8 削弱④,实测零漂移未重录(追认单 #9),零削弱 ✓;⑤adventure_feats 破封一击断言删→卡 §8 R7 行明示 ✓;⑥种子 42→43+表行 37→36/优秀 13→12 判值换代→申报外 §5.5 同生死(追认单 #7,主区基线 42 绿对照坐实)✓;⑦effect_words 词表断言换代→卡 §8 R7 ✓;⑧board_shot 选择器放宽(has_seal 单条件)→取证选择器非断言放宽,卡 §8 R8 申报 ✓;⑨ui_click_probe 行为②摘除+恢复现场死调用删+簿记调整→卡 §7/§8 R9+追认单 #8 ✓;⑩ui_input_probe case④b 判据出处注记换代、断言体保留 ✓;⑪smoke/critical-paths.md 第 4 条改写→卡 §5/T4 申报 ✓。**未发现申报外削弱**。 - -**卡2 直查例外(逐条)**:①seal_mark_params `u._seal_layer` 直读——随行申报 ✓(见 R8 行);②minesweeper_rules_test `_ae._phase=1` 直置与 `_ae._ap` 直读——测试 :34-35 注记「与既有单测直读 action_economy._ap 先例同款」在案;`_ae._ap` 有公开读数(ap)可用,直读属非必要但注记在案、只读断言面,不判缺;③`_rules._safe_remaining()` 私有读——旧版同款既有面;④`_rules.dig_range_bonus=99`/`seal_range_free=true`——公开属性,注记在案;⑤`_board.cell_identity`——公开方法(T1b 后),非例外;⑥cells_probe()/legend ENTRIES——探针公开取证面。 - -## 四、判据出处抽查(卡2 6 行+卡1 3 行,规格句实读对照) - -| 行 | 锚 | 独立可写性判定 | -|---|---|---| -| V1 | 排雷玩法.md:52 | 锚句「封印被受理的那一刻……格下身份当场可见……受理当场零兑付、零事件」——kind/digit 断言与零 cell_revealed 均可独立写出 ✓ | -| V2 | 排雷玩法.md:56 | 合法性表「挖|8 向相邻、未开、无封印|……已封印」+「拒绝原因独立可辨」——target_sealed+三态零变化可独立写出 ✓ | -| V3 | 排雷玩法.md:139 | 「清图 = 全部安全格完成,完成 = 挖开或封印——封印可以完成清图」——两阶段断言可独立写出 ✓ | -| V4 | 排雷玩法.md:167 | 批次语义序表「最先|能清图的挖或封——防止耗尽优先把清图高光结算成最差结局」——赢家断言可独立写出 ✓ | -| V5 | 战斗结算.md:139 | 判定批兑付表「标中则兑正向……标空则记归因行+负向」——保留组预期可独立写出 ✓ | -| V10 | ux/battle.md:284 | 拒绝细分与 toast 要求实读吻合;字句按白名单 2 授权润色,语义四件(受理即揭示/不可再挖开/随图存续/零动作)全部溯至排雷玩法 :52/:56 ✓ | -| 卡1 R1/R3/R5 | 08-Alpha:154/战斗结算:87/:80 | 零逐行文字、日志零文案全字段、四类合法例外 reason——预期值均可自锚句独立写出,非实现镜像 ✓ | - -抽查结论:未发现「预期值只在实现里有的」同义反复断言。R2 的期望计数从行型分布独立推导(非抄实现),形态更优。 - -## 五、最窄测试复跑读数(审计独立执行) - -| 测试 | 覆盖 | 结果 | -|---|---|---| -| `res://tests/unit/core/minesweeper_rules_test.gd` | 卡2 V1-V4(经 settle_batch) | **exit 0**(all green,36 checks;V1-V4 断言全 PASS) | -| `res://tests/unit/battle_settlement/reward_ineffective_reason_test.gd` | 卡1 R5 | **exit 0**(all green,12 checks;四类 reason 全命中) | -| `res://tests/unit/presentation/battle_log_zero_text_test.gd` | 卡1 R1 | **exit 0**(该测试 _problems 非空才 quit(1),exit 0 即全绿) | - -环境:Godot_v4.7.2-stable_win64_console.exe --headless,工作目录 `D:\code\g-plan2-iter56\game`。只跑单件,未跑全套。 - -## 六、缺漏汇总与整改义务 - -| # | 缺漏 | 级别 | 整改义务与去向 | -|---|---|---|---| -| 1 | 卡1 R1 点名函数 `_smoke_settle_zero_rows` 未落(断言内联 `_init`);game/tests/README.md:137 仍载旧名;实现报告 §三「落地一致」记载失实;改名未回表 | 记账级(测试实质完整:真实入口/尾缀/绑定面/复跑全过) | 回表改 capability 行函数名=写卡段通道(实现批禁写 README,无法合并前自行修);实现报告 §三 勘误=实现会话合并前可改(reports/ 面合法) | -| 2 | 卡2 R6〔封印改 V6〕尾缀全仓无 grep 载体(golden 零漂移未重录,原定载体消失;F9 豁免只补了 V11/V12) | 载体级(实质由未改动绿 golden+grant_segment 删净承接) | 补一处载体注记(settlement_wiring_snapshot_test 或实现报告 R6 行明示载体改报告+提交说明)——随追认单或文档批处理 | -| 3 | 观察项(不判缺漏):T4 提交说明称 V5「三函数」实落 2 处;effect_words_t1 尾缀家族用「退役改 V7」;ui_click_probe `_play_one_action` 残留一处不可达 return(:1390 附近,死代码,解析无碍——探针 exit 0 实证可跑);reward_ineffective_reason_test 断言消息未带 R5 尾缀(载体在 run_all 注册行);smoke/critical-paths.md 第 7 条「明细逐行呈现」残留旧口径(卡1 未申报面,建议列反哺点);sim-data/README.md「历史锚(只读不判)」节标题重复两处(:12/:17,编辑残留) | 轻微 | 随下批顺手清或文档批收口 | - -## 七、结论 - -**通过**(附上表 2 项记账级缺漏——均不触验收实质:无申报外削弱、无同义反复判据、无真实入口绕过、无直查例外未申报;缺漏 1 的回表通道归写卡段、缺漏 2 归载体注记补登,均不构成合并阻断)。 - -依据:17 行对照表全量核对,14 行干净通过、2 行缺漏(R1卡1/R6卡2,实质面均由独立证据承接)、1 行附注(R8 探针半句由 golden+V1 合围);削弱检查逐处零申报外删改;直查例外逐条有申报或既有先例;判据出处 9 行抽查全部可独立写出;最窄测试 3 件复跑全绿(exit 0×3)。卡1 中档四件全做+复跑超额执行;卡2 高档五件全做。 - -审计人注:本报告为合并前独立审计(test-conventions §8.7);卡1 中档的远端 CI 现查读数代证义务在合回后由 `tools/ci_check.sh <合并提交>` 兑现,本报告复跑读数已超额覆盖该档复跑面。 diff --git a/reports/需求卡片-封印动作改版批-2026-11-07.md b/reports/需求卡片-封印动作改版批-2026-11-07.md deleted file mode 100644 index 47302113..00000000 --- a/reports/需求卡片-封印动作改版批-2026-11-07.md +++ /dev/null @@ -1,255 +0,0 @@ -# 需求卡片:封印动作改版批 - -> **批名**:封印动作改版批 **卡片日期**:2026-11-07 验收档:高 -> **来源**:待办清单「封印动作改版——挖开与封印都揭示格子(2026-11-07 登记,来源=会话提及)」条目;用户 2026-11-07 会话三裁(①封印受理即揭示〔全揭示案〕②专长破封一击退役 ③MC 同批重锚)+封印格呈现预览用户人审通过(观感细化后置,不阻塞基线冻结)。 -> **唯一事实源**:`design/gdd/systems/排雷循环/排雷玩法.md` v2.0(2026-11-07 用户裁「封印受理即揭示」);配套闭合凭据=战斗结算.md v1.9 · 地图战斗资源.md v1.7 · 行动经济.md v1.6 · 地形变异.md v1.4 · 奇物.md v1.7 · 术语表.md v1.28 · 教学引导.md(范围草案;封印首遇提示句 2026-11-07 换代)· 道具退役素材库.md 表五 · ux/battle.md「封印格呈现预览」节(Last Updated 2026-11-07)· art-bible §3.2 封印印记条与 §4.1 封印黑条(现行版)。 -> **估时**:8 张 T 卡合计区间 6–10.25 个工作日,中值合计 **≈8.125 个工作日**(逐卡区间见第 9 节);**切分预案=超 10 个工作日停卡呈报用户改排**——T4/T6 均不可拆(T6 拆出违反三裁③「MC 同批重锚」;T4 拆出=改动先行落库而无当轮验收断言,违反验收闭合红线),无第三种拆法。 - -## 1. 目标与完成定义 - -这批把封印动作从「不揭示的盲承诺+可挖开改判」改成「受理即揭示、不可再挖开」:封印被受理的那一刻墙瓦片换地板、格下身份(危险格「危」/安全格数字)当场可见、封印法阵叠在其上;挖已封印的格被拒(新可辨拒绝原因),「封印后再挖开」路径整体删除;清图口径换代为「全部安全格完成=挖开或封印」。四类改动随批交付: - -1. 排雷规则核心:合法性表换代(挖封印格拒绝)、封印受理揭示查询面、清图口径、批次语义序扩「能清图的挖或封」。 -2. 结算与效果面:挖封印格兑付改判(四情况②④)与 `dug_under_seal` 事实词退役;标中/标空轮末判定批与封印溢价**零改动**。 -3. 呈现层与探针:封印格地板+法阵+身份字形(垫色牌)渲染、悬停禁字、文案四处换代、三探针断言换代。 -4. 内容与测量:破封一击退役(feats.tres 删行)、sim 自动玩家策略对齐、MC 基线锚同批重锚、golden 棋盘三图重制。 - -**完成定义**:本卡第 8 节对照表逐行有绿读数;改前改后 MC 配对读数落盘;golden 三图(windows)重制且渲染闸绿;批末「产出物落位卡」两件(实现报告+反哺点清单)写齐;合回后远端 CI 代码域全量绿。 - -## 2. 设计事实源 - -唯一事实源=`design/gdd/systems/排雷循环/排雷玩法.md` v2.0。本卡所有验收判据从下列闭合文档句子抄出(判据出处行锚在第 8 节逐行标注): - -| 文档 | 版本 | 本批消费的判据面 | -|---|---|---| -| 排雷玩法.md | v2.0 | 动作合法性表(挖:未开、无封印;拒绝情形「已封印」)、封印受理即揭示段、清图口径(挖开或封印)、批次语义序「能清图的挖或封」、封印生命周期(无纠错路径)、验收标准「封印受理即揭示、挖封印格被拒」与「清图口径」两条 | -| 战斗结算.md | v1.9 | 授予段「封印受理即揭示」段、封印判定批兑付、验收标准「封印受理即揭示零兑付」条 | -| 地图战斗资源.md | v1.7 | 极性矩阵封印行(标中正向/标空负向+正向不兑付)、清图奖励口径句 | -| 行动经济.md | v1.6 | 价目表封印行(纠错路径不存在) | -| 地形变异.md | v1.4 | 伤害型变异条(封印揭示不触发变异伤害) | -| 奇物.md | v1.7 | 跨族桥退役段(破封一击退役、事实词除名) | -| 术语表.md | v1.28 | 「封印 / 控制」定义行 | -| ux/battle.md | 2026-11-07 | 「封印格呈现预览」节像素级判据五条+Interaction Map 封印行/已封印格行+拒绝细分 | -| 道具退役素材库.md | 表五 | 破封一击留底行(退役原因) | -| art-bible | 现行 | §3.2 封印印记占位句(已揭示格承载、数字同格合法)、§4.1 封印黑条(裸土承载对比 ≥4.5:1) | - -## 3. 现状事实(代码级,开工自行复核) - -核心(`game/core/minesweeper_rules.gd`,除非另注): - -- 封印受理:`_do_seal_place` :447-468——扣费后仅 `_seals[c] = true`,不揭示、零事件;重复封印拒 `seal_present` :455-456。 -- 挖封印格放行:`_board_face_dig` :362-372(:371 注释「封印不拦挖掘」);`_do_dig` :304-334——`was_sealed` :311/:313/:328、`_reveal_chain(c, order, was_sealed)` :331;`_reveal_chain` :341-359 载荷带 `"dug_under_seal"` :351/:358;:390 处 fx_reveal 载荷恒 false;`preview_reveal` :397-405 含封印隐式退役模拟;`_classify` :267-285 清图模拟含「本格封印视为已隐式退役」:271-275。 -- 清图口径:`_safe_remaining` :101-110 与 `_cleared_after` :438-442 只认 `_revealed`,不认封印。 -- 轮末判定:`_emit_seals_batch` 对在场封印逐格 `seal_judged`(标中=`_board.is_mine(c)`)——本批零改动。 -- 中立移除:`remove_mines_in` :116-126 排除已揭示/有封印/非雷格——本批零改动。 - -结算与效果: - -- `game/core/settlement/grant_segment.gd`——`dug_under_seal` 作废行 :102-103、雷事件载荷携带 :153、注释「封印格直挖照吃变异伤害」:204;`_judge_seal` :343 / `_judge_seal_hit` :352 / `_judge_seal_miss` :422(本批零改动)。 -- `game/core/effect_engine.gd`——事实词表 `dug_under_seal` :55/:60。 -- `game/core/reward_grant.gd`——天眼 `_safe_dig_open` 跳过封印格 :174(逻辑保留、注释换代);封印溢价消费 :216-217(零改动)。 - -呈现层: - -- `game/presentation/views/board_view.gd`——印记可见性 `u.seal_on = seal and not revealed` :541;瓦片切换 revealed?:floor:wall :597-623;`_diggable` :301-304(未开且未移除即入可挖域,含封印格);左键分派 revealed→move 否则 dig :471-485(:483-484 注释「相邻封印格直接挖」);悬停 `board_hover.gd` :96-121(相邻封印格=挖掘光标 :109-112;:113-116 为**非相邻**封印格禁入分支);拒绝文案 `hud_presenter.gd` :169-191(`seal_present` :179 含「相邻时左键直接挖开」);图例 `legend_overlay.gd` :9-13;操作提示条 `board_zone_view.gd` :80(含 chord 退役后残留错句「同格双击 快开」)。 - -测试、探针、sim、数据(第 7 节文件结构图逐件列): - -- 单元:`minesweeper_rules_test.gd`(`_test_dig_face_rules` :72-84 断言 `target_revealed`;`_test_seal_place` :101-111;preview 形态 B :122-161;判据锚 :73/:88/:102/:115);`seal_polarity_test.gd`(末点 AP 封印收轮 :46-82;封印不可逆四情况组 :579-651;资源资格面 :778-826);`settlement_wiring_snapshot_test.gd` 内嵌 golden(`"seals": 1`/`"revealed": 42` 等计数);`hud_presenter_test.gd` :29-30 与 `player_copy_sweep_test.gd` :69-82/:144-147(文案逐字);`adventure_feats_test.gd` :721-723(破封一击 `dug_under_seal`);`effect_words_t1_test.gd` :16-33(词表在册断言;:37-71 为封闭性后段)。 -- 探针:`ui_input_probe.gd`(case④ 右键封印 :273-281、case④b 印记落位断言 :282-286、目标选取排除封印格 :230-242/:522-540/:601-608);`board_shot_probe.gd`(封印取证选择器 `has_seal and not is_revealed` :78/:191);`ui_click_probe.gd`(行为②撤封印 :1063-1069 恒假死路;随机封印行为① :1055-1062;图例行断言 :899-908)。 -- sim:`auto_player.gd`(choose_dig 跳封印格 :20;已证雷先封后挖 :38-50/:86-97;`_constraints` 封印位计入已知雷约束 :162-185);`level_autoplay.gd`(「标雷误挖」滑失注入 :507-521——封印意图按概率转成同格挖意图)。 -- 数据:`game/data/tables/feats.tres` :622 起「破封一击」行(feat_id=`breaker_strike` :623,display_name 行 :624);`game/data/tables/adventure.tres` feat_ticket_* 概率行(:46-49,本批不动);golden 基线 `game/tests/golden/`(board_L1/L2/L3 × windows/mac 六件+palette_baseline)。 -- 存档:`breakpoint_store.gd` 28 键(BREAKPOINT_FIELDS :16-45)无格子状态键、停点粒度=节点级——**本批存档零改动**(同种子重放重建棋盘态)。 - -## 4. 设计契约(违反即返工;🔴 触碰=L3 停机呈报) - -- 🔴 **语义唯一裁决=排雷玩法.md v2.0**:封印受理即揭示、挖封印格被拒、清图口径(挖开∪封印)、标中/标空轮末判定、印记无撤下手段。实现不得自造第三条路;实现与文档冲突=上游缺陷,停卡退回。 -- 🔴 **事件集合封闭**:封印保持零事件——不新增事件、不发 `cell_revealed`;身份可见性走新增只读查询面,消费方=**呈现层+sim 策略域(测量侧镜像玩家可读信息)**,禁扩到战斗结算等兑付面。增删事件=接口修订,本批不做。 -- 🔴 **数值单一事实源**:`action_economy.tres`(ap_per_round/dig_ap_cost/seal_place_ap_cost)、`settlement.tres`(seal_hit_premium/p_perfect/甲效/掷点)零改动;本批数据表改动仅限 `feats.tres` 删破封一击行与池引用清零核对。 -- 🔴 **Core 零 UI 依赖、fail-fast、RNG 单点**:本批零新随机源;数据校验错误一律致命中止。 -- 🔴 **兑付面零漂移**:标中正向(含溢价 ×(1+δ))、标空负向、完美封印双份、清图批、挖格批的既有结算行为,除删除 `dug_under_seal` 改判路径外逐位不变——MC 改前改后配对读数兜底。 -- **拆分边界纪律**:本批零拆出单元(纯规则换代+删径),禁顺手重构;删径代码(`was_sealed` 一族、`dug_under_seal` 词与载荷键)必须删净,**禁为迎合机检消息文本保留无效成员/别名**(code-conventions §1.1 同款);机检键与卡片契约互斥时一律停卡呈报。 - -## 5. 范围边界 - -**做**:第 1 节四类改动面;`smoke/critical-paths.md` 人工 QA 清单第 4 条改写(原文「封印/撤封印/挪封印」随 seal_pull 退役早已过时——顺带修);`board_zone_view.gd` 提示条 chord 残留错句「同格双击 快开」顺带修(同文件触碰面)。 - -**不做**(明示不收件,去向):封印格观感细化(用户 2026-11-07 裁后置——**已登记待办清单**「封印格观感细化(2026-11-07 登记)」条,实现批不做);「结算明细文案入表」批(待办清单在册,文案承载面换代不混批);键盘/手柄输入(Beta);存档 schema(零改动);MC 读数的数值调参(重锚只换代锚,不做数值裁决——数值标定窗口另批)。 - -## 6. 关联文档同步面 - -| 文档 | 关联点(本批实现改变它的哪条陈述) | 同步义务 | -|---|---|---| -| 排雷玩法.md v2.0/战斗结算.md v1.9/地图战斗资源.md v1.7/行动经济.md v1.6/地形变异.md v1.4/奇物.md v1.7/术语表.md v1.28/ux/battle.md/art-bible §3.2·§4.1/道具退役素材库.md 表五 | 本批实现的就是这些句子;设计面已随本卡同区前置修订 | 设计权威文档——实现批**禁改**;实现与文冲突=停卡退回,差异走反哺点 | -| 教学引导.md(范围草案) | 「封印是一次性承诺的首遇提示」条 | **已随本批修订**(2026-11-07 提示句换代为新口径);实现批禁改 | -| game/tests/README.md(能力清单) | 第 8 节能力行清单:3 行换代、1 行删除、2 行新增、覆盖域表 1 行换代 | **已由写卡批同区维护**(随本卡合入);实现批禁写该文件;批末只核对表上名字与实际落地一致(改名回表) | -| smoke/critical-paths.md | 第 4 条人工 QA 清单句 | 随 T4 改写(game/tests/ 面文件,随批可改) | -| 反哺点预期 | 设计面已前置闭合 | 预期**零反哺点**;实现期发现文档缺陷才列 `reports/iter-反哺点-<日期>.md` | - -## 7. 文件结构图(本批新建/修改的文件逐件列;行为改动行标注对照表行号) - -| 文件 | 职责与改动 | 行为改动 | 复用/新增 | -|---|---|---|---| -| game/core/minesweeper_rules.gd | 合法性换代(挖封印格拒 `target_sealed`)、删 `was_sealed` 一族与 `dug_under_seal` 载荷键、`_do_seal_place` 受理后清图判定接行动经济、`_safe_remaining`/`_cleared_after` 口径换代、`_classify` 语义序扩封印清图预判、`preview_reveal` 删封印形态、新增公开只读查询 `sealed_identity(c)` | R1 R2 R3 R4 R6 R7 | 全修改(新增 1 公开方法——落位预检见第 12 节) | -| game/core/action_economy.gd | 新增公开方法 `notify_cleared()`(封印路径清图事实上报——轮末仲裁与 `request_dig` 的 cleared 语义同源) | R3 | 修改(新增 1 公开方法) | -| game/core/settlement/grant_segment.gd | 删 :102-104 作废行、:153 载荷键、:204 注释句 | R6 | 修改 | -| game/core/effect_engine.gd | 事实词表删 `dug_under_seal`(:55/:60)+提取面清零 | R7 | 修改 | -| game/core/reward_grant.gd | :174 跳封印格注释换代(逻辑保留) | 非行为改动(注释) | 修改 | -| game/presentation/views/board_view.gd | `seal_on = seal`、封印格地板瓦片+身份字形(垫色牌)、`_diggable` 排除封印格、左键封印格零动作 | R8 R9 | 修改 | -| game/presentation/views/board_hover.gd | 封印格悬停=禁止光标+说明 | R9 | 修改 | -| game/presentation/hud_presenter.gd | `seal_present` 文案换代+新增 `target_sealed` 文案 | R10 | 修改 | -| game/presentation/views/legend_overlay.gd | 图例封印行重写(受理即揭示口径) | R10 | 修改 | -| game/presentation/views/board_zone_view.gd | 提示条换代+chord 残留错句顺带修 | R10 | 修改 | -| game/data/tables/feats.tres | 删「破封一击」行(:622 起,feat_id=breaker_strike)+全仓引用清零 | R7 | 修改 | -| game/tests/unit/core/minesweeper_rules_test.gd | 挖已揭示拒绝保留;新增挖封印格被拒/受理揭示/清图口径断言;preview 形态 B 删;判据锚刷新 | R1 R2 R3 | 修改 | -| game/tests/unit/battle_settlement/seal_polarity_test.gd | 四情况组重写(挖封印格两情况→被拒负面断言);末点 AP 收轮/seal_pull 出目录/标中标空判定/资源资格面保留 | R2 R5 R6 | 修改 | -| game/tests/unit/battle_settlement/settlement_wiring_snapshot_test.gd | 内嵌 golden 重录(seals/revealed 计数漂移) | R6 | 修改 | -| game/tests/unit/presentation/hud_presenter_test.gd、player_copy_sweep_test.gd | 文案断言换代 | R10 | 修改 | -| game/tests/unit/core/adventure_feats_test.gd、effect_words_t1_test.gd | 破封一击断言退役、词表断言换代 | R7 | 修改 | -| game/tests/unit/presentation/seal_mark_params_test.gd | 迷雾门控断言前提换代(印记承载面) | R8 | 修改 | -| game/probe/ui_input_probe.gd、board_shot_probe.gd、ui_click_probe.gd | case④b 印记落位断言换代、取证选择器换代、撤封印死路段清理 | R8 R9 | 修改 | -| game/tests/smoke/critical-paths.md | 第 4 条改写 | 非行为改动(清单句) | 修改 | -| game/sim/auto_player.gd、level_autoplay.gd | 约束集对齐、滑失注入退役 | R11 | 修改 | -| game/tests/golden/(board_L1/L2/L3 ×2 平台) | 渲染基线重制 | R12 | 基线资产换代 | -| sim-data/(MC 锚) | 改前锚留盘、新锚同 seed0 采集+现行锚指针换代 | R11 | 数据产物换代 | -| sim-data/README.md | 「现行锚」指针节换代+旧锚迁历史锚节 | R11 | 修改(入库件,不在实现批禁写清单) | - -**对照表按行号引用第 8 节;表内 R 编号与第 8 节逐行对应。** - -## 8. 验证闸(改动—验收对照表) - -每行七格:需求点|改动|验收测试(名称+落点+尾缀〔封印改 Vn〕)|层级|真实入口|判据绑定面|能力行。判据出处行锚=需求点格内 `文档:行号`,已按本批修订后的 worktree 行号钉死(可 grep 核对)。 - -| # | 需求点(判据出处行锚) | 改动 | 验收测试 | 层级 | 真实入口 | 判据绑定面 | 能力行 | -|---|---|---|---|---|---|---|---| -| R1 | 封印受理即揭示——身份当场可查、受理零兑付零事件(design/gdd/systems/排雷循环/排雷玩法.md:52) | `_do_seal_place`+`sealed_identity(c)` 新查询面 | `minesweeper_rules_test.gd:_test_seal_reveal_identity`〔封印改 V1〕:封印受理后 `sealed_identity(c)` 返回 `{kind, digit}` 与板事实逐位一致;`settle_batch` 事件流零 `cell_revealed`(受理零兑付的结算侧证据由 R6 行覆盖) | 单元 | `MinesweeperRules.settle_batch()` | `sealed_identity` 返回值+事件流计数+结算行数 | 新增:封印受理即揭示(身份可查、受理零事件) | -| R2 | 挖已封印格被拒、原因可辨、零副作用(design/gdd/systems/排雷循环/排雷玩法.md:56) | `_board_face_dig` 增封印拒绝 | `minesweeper_rules_test.gd:_test_dig_sealed_rejected`〔封印改 V2〕:`sub_reason=="target_sealed"`、`has_seal`/`is_revealed`/AP 三态零变化;`seal_polarity_test.gd` 四情况组内原「直挖受理」断言改判为拒绝 | 单元 | `MinesweeperRules.settle_batch()` | 拒绝原因串+状态源取值 | 既有:挖/封印合法性与可辨拒绝(拒绝零副作用、挖封印格被拒) | -| R3 | 清图口径=已挖∪已封印;封印可完成清图;封印后清图判定触发(design/gdd/systems/排雷循环/排雷玩法.md:139) | `_safe_remaining`/`_cleared_after` 换代+`_do_seal_place` 清图接 `ActionEconomy.notify_cleared()` | `minesweeper_rules_test.gd:_test_clear_by_seal`〔封印改 V3〕:封掉最后安全格→`clear_map_cleared()` 翻 true 且轮次以清图收束(轮末事件 carry 清图);封掉非末安全格→`clear_map_cleared()` 仍 false、再挖开其余安全格后清图照常触发 | 单元 | `MinesweeperRules.settle_batch()` | 公开读数 `clear_map_cleared()`+轮次结束事件载荷 | 新增:清图口径换代(挖开∪封印、封印可完成清图) | -| R4 | 批次语义序「能清图的挖或封最优先」(design/gdd/systems/排雷循环/排雷玩法.md:166) | `_classify` 封印清图预判 | `minesweeper_rules_test.gd:_test_classify_seal_clears`〔封印改 V4〕:同批「耗尽前停手+能清图的封」提交,赢家=清图高光而非停手 | 单元 | `MinesweeperRules.settle_batch()` | 结算赢家类别 | 既有:挖/封印合法性与可辨拒绝(拒绝零副作用、挖封印格被拒) | -| R5 | 标中/标空轮末判定批与溢价逐位不变(design/gdd/systems/战斗循环/战斗结算.md:139) | 判定批零改动(回归保护) | `seal_polarity_test.gd` 保留断言原样跑绿(末点 AP 收轮、标中兑付+溢价 125%、标空负向+归因行、完美封印双份);保留组各函数补判据出处注记行(`# 判据出处: design/gdd/systems/战斗循环/战斗结算.md:139 …〔封印改 V5〕`——尾缀 grep 载体)〔封印改 V5〕 | 单元 | `BattleOrchestrator.begin_battle()` 全轮驱动 | 结算行流逐项 | 既有:封印与极性路由/不可逆 | -| R6 | 受理当场零兑付、改判路径死(design/gdd/systems/战斗循环/战斗结算.md:134) | grant_segment 删改判面 | `settlement_wiring_snapshot_test.gd` golden 重录〔封印改 V6〕:同种子驱动序内「挖+封+停」行流/快照逐位对拍新 golden;流水零「奖励作废(封印格直接挖开)」行 | 单元 | `BattleOrchestrator` 真实驱动序 | 内嵌 golden 逐位 | 既有:封印与极性路由/不可逆 | -| R7 | 破封一击退役、`dug_under_seal` 事实词除名(design/gdd/systems/冒险循环/奇物.md:72) | feats.tres 删行+词表删+断言退役 | `adventure_feats_test.gd` 破封一击断言删;`effect_words_t1_test.gd` 词表断言换代〔封印改 V7〕;`grep dug_under_seal game/ 全域=0`;抽取池引用清零核对 | 单元+静态 | feats.tres 装载路径 | 表行缺席+词表缺席 | 既有:换图系刷新链路与效果词表接线 | -| R8 | 封印格呈现:地板+法阵+身份字形垫色牌(design/ux/battle.md:170) | board_view 渲染换代 | `seal_mark_params_test.gd:_test_seal_on_revealed_visible` 新增断言〔封印改 V8〕:`seal_on` 与已揭示同真时印记子件仍可见(新组合态;直读 CellUnit 子件可见性=受控例外——该行为无公开可观测面可钉,随行申报)+`ui_input_probe.gd` case④b 换代:真输入右键封印后印记子件可见且身份字形可查 | 探针 | 真实实例化场景+`push_input` 右键 | `seal_on` 供数表达式+子件可见性 | 既有:棋盘封印印记呈现(已揭示格承载+已封印格零动作) | -| R9 | 已封印格无动作:左/右键零意图、悬停禁止+说明可见(design/ux/battle.md:299) | board_view 输入分派+board_hover | `ui_input_probe.gd` 新增 case〔封印改 V9〕:真输入左/右键已封印格→`action_requested` 零发射、光标态=禁止、悬停说明在册可见(措辞按白名单 2 润,断言钉在册) | 探针 | 真实实例化场景+`push_input` | 信号发射面零计数+说明可见性 | 既有:棋盘封印印记呈现(已揭示格承载+已封印格零动作) | -| R10 | 文案换代四件(design/ux/battle.md:284) | hud_presenter/legend/board_zone_view | `hud_presenter_test.gd`/`player_copy_sweep_test.gd` 断言换代〔封印改 V10〕+`ui_click_probe.gd` 图例行断言换代 | 单元+探针 | 文案装配函数+真实场景 | 逐字串断言 | 既有:挖/封印合法性与可辨拒绝(拒绝零副作用、挖封印格被拒) | -| R11 | sim 策略对齐+MC 基线锚同批重锚(design/gdd/systems/排雷循环/排雷玩法.md:52——策略镜像玩家可用的揭示面;同批重锚授权=用户 2026-11-07 裁) | auto_player/level_autoplay 换代+「标雷误挖」注入退役+等价补偿注入重标定(用户 2026-11-07 裁③) | MC 重锚:改前锚留盘,新锚同 seed0 采集落盘,逐项对比读数写实现报告〔封印改 V11——载体=实现报告对照表行+重锚提交说明,独立审计按报告核对〕;补偿注入后普通档踩雷读数对齐改前锚量级 | 测量 | sim 采集链(master_seed 配对) | 改前改后读数差分(留盘) | 既有:挖/封印合法性与可辨拒绝(拒绝零副作用、挖封印格被拒) | -| R12 | 渲染基线换代(design/ux/battle.md:170) | golden 三图重制 | 渲染闸绿+新基线采集前用户对照预览图确认一眼(test-conventions §8.2 口径);mac 三件缺则记遗留(闸 SKIP 不判红)〔封印改 V12——载体=实现报告对照表行+基线刷新提交说明,独立审计按报告核对〕 | 渲染闸 | 真实渲染截图 | 逐像素基线比对 | 既有:棋盘封印印记呈现(已揭示格承载+已封印格零动作) | - -**测试方式两分法**:R1-R7、R10 能力验证=调试接口直调核心写口构造局面(不走正常积累流程);R8、R9、R12 体验验证=用户目检项登记实现报告目检总清单(登记不阻塞):封印受理瞬间揭示的观感、封印格悬停禁字、图例新句、清图高光在封印完成时触发。 -**闸口径**:本批改动含 `game/` 非文档行为载体 → 批末跑代码域闸(域划分唯一出处=`tools/run_all_gates.sh`);批末四闸语义=「代码域闸全绿+改前改后 MC 读数对拍落盘」。回归措辞照模板:里程碑步出口跑一次全套闸;波内修复只做出红最小单元最窄确认;新增测试先行孤立验证再并入。 -**测试削弱申报**:允许改判的旧断言仅限本卡点名的四处——①`seal_polarity_test` 四情况组「直挖受理/隐式退役/零兑付」断言(语义被用户裁替换)②`minesweeper_rules_test` preview 形态 B 组(前提消失)③`hud_presenter_test`/`player_copy_sweep_test` 文案逐字断言(文案换代)④`settlement_wiring_snapshot` 内嵌 golden(计数漂移)。其余削弱=独立验收审计判红。 -**独立验收审计**:`reports/iter-验收审计-<日期>.md`,未参与实现的会话或子代理执行,验收档=高(全量:对照表逐行核对、判据绑定面抽查、削弱检查逐处、直查例外逐条、最窄测试抽查复跑)。 - -## 9. 任务卡 T0..T7 - -**T0 开工与基线读数**(0.25–0.5 日,中值 0.375) -- [ ] 建 worktree+拷 `.godot/` 导入缓存与字体边车+**自主区拷现行 MC 锚 jsonl 入本区 sim-data/**(锚不入 git,worktree 冷检无此件)+`git status` 归属核对 -- [ ] S13 键读数:本批触碰的存量文件(minesweeper_rules/action_economy/grant_segment/effect_engine/board_view/board_hover 等)对照 `tools/gdstyle_baseline.txt` 登记——预期只降不升(删径只减成员),超预期即停 -- [ ] MC 改前读数确认:现行锚文件在盘、seed0 记录在案(只核对,禁补跑) - -**T1 排雷规则核心换代**(1.5–2.5 日,中值 2.0)|取用:无|产出:`sealed_identity(c) -> Dictionary`(minesweeper_rules.gd 公开只读)、`ActionEconomy.notify_cleared()`(action_economy.gd 公开) -- [ ] `_board_face_dig` 增封印拒绝(`target_sealed`,置于已揭示检查之后、中立移除之前),删 :371 放行注释 -- [ ] `_do_dig`/`_reveal_chain`/`preview_reveal`/`_classify` 删 `was_sealed` 一族与 `dug_under_seal` 载荷键(`_reveal_chain` 去第三参) -- [ ] `_do_seal_place` 受理后:`_seals[c]=true` 照旧+清图判定(`_cleared_after({})` 换代口径)成立→`action_economy.notify_cleared()` 走清图收轮;末点 AP 耗尽路径保持现行收轮序(先封印判定后轮次结束) -- [ ] `_safe_remaining`/`_cleared_after` 换代:安全格完成=已揭示或已封印 -- [ ] `_classify` 增「能清图的封」归最先类(模拟封印受理后清图口径) -- [ ] 新增 `sealed_identity(c)`:封印格返回 `{kind, digit}`(`reveal_record` 契约不动——未开仍 `{}`,已开格消费面零扰动) -- [ ] 验收步骤:R1/R2/R3/R4 断言孤立跑绿(读数进本步提交信息) - -**T2 结算与效果面退役**(0.5–1 日,中值 0.75)|取用:T1 载荷换代|产出:结算载荷无 `dug_under_seal` -- [ ] grant_segment.gd 删 :102-104 作废行块、:153 载荷键、:204 注释句 -- [ ] effect_engine.gd 事实词表删 `dug_under_seal`(:55/:60)+提取面清零 -- [ ] reward_grant.gd :174 注释换代(跳封印格逻辑保留——封印格不代开) -- [ ] 验收步骤:R6/R7 断言绿+`grep -r dug_under_seal game/`=0 - -**T3 呈现层换代**(0.75–1.25 日,中值 1.0)|取用:T1 `sealed_identity`|产出:封印格渲染与输入分派 -- [ ] board_view.gd:`u.seal_on = seal`;瓦片切换 sealed→地板;封印格身份字形=数字/「危」垫现行色牌件(读 `sealed_identity`);`_diggable` 排除封印格;左键封印格零发射 -- [ ] board_hover.gd:封印格悬停=禁止光标+说明(:109-112 相邻分支内的封印格豁免删——封印格改落 :113-116 禁入分支) -- [ ] hud_presenter.gd:`seal_present` 句换代+`target_sealed` 新句;legend_overlay.gd 图例封印行重写;board_zone_view.gd 提示条换代+chord 错句顺带修 -- [ ] 验收步骤:R8/R9/R10 单元侧断言绿(探针断言随 T4 全链跑) - -**T4 测试与探针换代**(1.5–2.5 日,中值 2.0)|取用:T1-T3 全部签名|产出:全套件换代绿 -- [ ] minesweeper_rules_test:新增 V1-V4 四函数、preview 形态 B 删、判据锚刷新 -- [ ] seal_polarity_test:四情况组重写(保留组原样) -- [ ] settlement_wiring_snapshot_test:golden 重录 -- [ ] hud_presenter_test/player_copy_sweep_test/seal_mark_params_test/adventure_feats_test/effect_words_t1_test 换代 -- [ ] ui_input_probe(case④b+新 case V9)/board_shot_probe(选择器)/ui_click_probe(行为②清理+图例行)换代 -- [ ] smoke/critical-paths.md 第 4 条改写 -- [ ] 验收步骤:改过的套件与探针逐件孤立跑绿后并入全套(读数进提交信息) - -**T5 内容退役**(0.25–0.5 日,中值 0.375)|取用:无|产出:破封一击零引用 -- [ ] feats.tres 删「破封一击」行(:622 起);grep 全仓 `破封`/`breaker_strike` 清零 -- [ ] 验收步骤:数据装载冒烟绿+R7 断言绿 - -**T6 sim 域换代+MC 同批重锚**(0.75–1.25 日,中值 1.0)|取用:T1 查询面|产出:新 MC 锚落盘 -- [ ] auto_player:`_constraints` 用 `sealed_identity` 已知身份、choose_dig 跳封印格保持、注释换代 -- [ ] level_autoplay:「标雷误挖」注入退役(用户 2026-11-07 裁③);新增等价补偿注入——推荐形态「错触直挖」(普通档对已判雷格按新常量概率直接挖,新规则下合法路径),常量初值以改前锚普通档踩雷读数为标定目标,偏差记实现决定 -- [ ] MC 重锚:改前锚留盘禁补跑;新锚同 seed0 采集(档位与总量按 sim-data/README「MC 采集档位表」——用户 2026-11-07 已授权同批重锚=发起权在案);改前改后逐项对比写实现报告 -- [ ] 验收步骤:R11 读数落盘;重锚后旧锚退役入档 - -**T7 golden 重制与批末收口**(0.5–0.75 日,中值 0.625)|取用:T1-T6 全绿|产出:新基线+两份产出物 -- [ ] 用户对照 ux/battle.md 预览图确认一眼后,`tools/golden_baseline_refresh.sh` 重制棋盘三图(windows);mac 三件随批尽力、缺则记遗留(渲染闸 SKIP 不判红) -- [ ] MC 新锚携回主区:新锚 jsonl 拷入主区 `sim-data/`(数据件不入 git,合并不携带);`sim-data/README.md` 现行锚指针随批合回、旧锚迁历史锚节 -- [ ] 渲染闸绿;批末核对:改动面×改完即测读数逐面对账、能力行名字与落地一致(改名回表) -- [ ] `reports/iter-实现报告-<日期>.md`+`reports/iter-反哺点-<日期>.md`(预期零条——设计面已前置闭合) - -## 10. 异常分级 - -- **L1 自救**:闸红一次重试(导入缓存类在册坑按坑册处置)。 -- **L2 记录继续**:连续 3 次同红灯升级;golden 逐像素差异落棋盘裁剪区→按加严口径显式呈报、由用户定重制(不自行回退基线)。 -- **L3 停机写报告等用户**:①实现与排雷玩法.md v2.0 冲突(上游缺陷)②MC 重锚读数显示结算面非预期漂移(溢价/标空/完美封印任一逐位不齐)③机检预算与卡片契约互斥(禁自造第三条路)④feats.tres 删行引发装载期 fail-fast(池结构校验红)。 - -## 11. 代拍板白名单(微决策逐条列;超清单记实现报告「实现决定记录」) - -1. 拒绝原因英文串定名(`target_sealed`;卡内已钉,拼写微调需同步 R2 断言——保持卡串优先)。 -2. 拒绝/悬停 toast 与图例的最终措辞(语义按 ux/battle.md 各句,字句可润)。 -3. 测试函数命名与断言组织细节(对照表点名函数名优先)。 -4. 色牌、装饰裂纹等渲染细节取现行 ui_kit/art-bible 现行值,零新常量。 -5. sim 补偿注入的形态与常量初值(「标雷误挖」退役后的重标定补偿——标定目标=改前锚普通档踩雷读数;只动 sim 常量、不动玩法数值),记录进实现决定。 -6. mac golden 三件缺件时记遗留的处理顺序。 - -## 12. 落位与可复用性预检 - -**新增件两件(仅此两件),其余全为修改既有件**: - -| 新增 | 为什么不能复用既有 | 落点唯一性核查 | -|---|---|---| -| `MinesweeperRules.sealed_identity(c)` | `reveal_record(c)` 契约=未开返回 `{}`(board_view 已开格渲染消费此语义,:494/:564 注释在案)——改它会扰动全部已开格渲染判定;身份揭示是封印态专用读数 | grep `sealed_identity` 全仓=0(新名);落 minesweeper_rules.gd 查询面区(`reveal_record`/`is_revealed` 同区),单一事实出处 | -| `ActionEconomy.notify_cleared()` | `request_dig(chain_size, clears)` 的 cleared 语义绑定挖掘计费流程;封印不产挖掘计费,硬塞会引入假挖掘记账;清图事实需要独立上报口 | grep `notify_cleared` 全仓=0(新名);轮末仲裁 owner=action_economy(架构归属),落点唯一 | - -**复用面**:封印法阵渲染复用 `SealMarkLayer` 参数化绘制(零新美术);身份字形复用既有数字/「危」绘制与色牌件;轮末判定/溢价/完美封印/中立移除全复用既有实现。**唯一面**:清图口径只在 `_safe_remaining`/`_cleared_after` 两处同源换代(私有共享计数 helper),禁第三处重复实现;`target_sealed` 词串只在规则引擎定义一处、呈现文案映射一处。**分层与交互**:呈现读身份走既有 `_minesweeper` 引用通道(board_view 现行只读惯例),不经组合根新增接线;`notify_cleared` 只由 rules 在封印受理后调用(写调用经批次入口,Core 内部纵向调用,零 UI 依赖)。 - -## 13. 禁为机检文本保留无效成员 - -本批删径面(`was_sealed` 参数与分支、`dug_under_seal` 事实词/载荷键/提取面、`_reveal_chain` 第三参、作废行块、滑失注入段)必须删净;**禁止**为保 S 系扫描键、断言尾缀计数或任何机检消息文本而保留无效成员、空壳函数或别名。机检键与本卡契约互斥时一律停卡呈报,不自造第三条路。 - -## 14. 实现规范预算 - -**零新增文件**。新增公开方法 2 个(`sealed_identity`、`notify_cleared`)——两宿主现行公开方法数远低于 20 上限(T0 读数核对);新增类变量 0。**迁移函数**:无(删径不搬移)。**存量触面**:第 7 节全部修改文件在 T0 逐件读 S13 键,预期只降不升(删成员只减);`_reveal_chain` 签名变更属参数删除,分支数不升。**指标例外申报**:无。 - -## 15. 复核记录 - -| 轮次 | 复核者身份 | 发现 | 去向 | 处置结果 | -|---|---|---|---|---| -| 1 | 只读子代理(对抗复核,未参与本卡与文档撰写) | F1 教学引导.md:58 首遇提示句仍是「左键直接挖开」旧口径——本批 grep 词面(挖开封印/四情况等)扫不到「左键直接挖开」词形 | 退回上游 | 设计段(本批同区)已修:教学引导.md:58 提示句换代为受理即揭示口径;卡头闭合凭据与第 6 节同步面补列教学引导.md | -| 1 | 同上 | F2 「标雷误挖」滑失注入退役前提失真——注入是封印意图提交前转同格挖意图,目标格当时未封未揭,新规则下该挖仍合法可执行;注入与被删路径无行为耦合 | 待裁 | **用户 2026-11-07 裁③退役+重标定补偿**:T6/R11/白名单 5 已改写——旧注入退役,新增等价补偿注入(推荐形态「错触直挖」),常量以改前锚普通档踩雷读数为标定目标 | -| 1 | 同上 | F3 R5 行锚 :146 实为兑付形态表头行,不支撑判定批判据 | 自判 | R5 行锚改 战斗结算.md:139+:126(判定批行+溢价注记行) | -| 1 | 同上 | F4 🔴 事件封闭条「消费方只有呈现层」与 T6 sim 消费 `sealed_identity` 自相矛盾 | 自判 | 🔴 句改为「消费方=呈现层+sim 策略域(测量侧镜像玩家可读信息),禁扩到兑付面」 | -| 1 | 同上 | F5 估时上界实为 10.25 非 10(八卡上界合计);切分预案与三裁③及验收闭合红线打架 | 自判 | 头部估时上界改 10.25;切分预案改「超 10 停卡呈报用户改排」并写明 T4/T6 不可拆依据 | -| 1 | 同上 | F6 能力行换代承诺未兑现(README 零改动,五锚点全旧文) | 自判 | 写卡段已实做:3 行换代(:88/:117/:120)、1 行删除(旧「封印不可逆与挖开封印格放行」行)、2 行新增(受理即揭示/清图口径)、覆盖域表排雷玩法行换代 | -| 1 | 同上 | F7 「登记待办清单『封印格观感细化』」实际未登记,后置决定悬空 | 自判 | 已登记待办清单条目(封印格观感细化,2026-11-07,待美术设计〔备选〕);卡 §5 措辞改事实句 | -| 1 | 同上 | F8 两处现状失准:board_view reveal_record 消费注释在 :494/:564 非 :80;断点键 28 个非 27 | 自判 | 卡 §12 与 §3 两处已改;「存档零改动」结论不变 | -| 1 | 同上 | F9 V5/V11/V12 三尾缀无 grep 载体(保留断言旧尾缀/sim 不进扫描面/渲染闸无断言体) | 补写 | R5 补判据出处注记行载体;R11/R12 明写载体=实现报告对照表行+提交说明(独立审计按报告核对) | -| 1 | 同上 | F10 R1「grant 批零新兑付行」与该行真实入口(rules 夹具无结算面)不匹配 | 补写 | R1 判据改注「受理零兑付的结算侧证据由 R6 行覆盖」 | -| 1 | 同上 | F11 MC 锚数据件不入 git——worktree 冷检无锚、合并合回不携带、sim-data/README.md 指针换代面缺位 | 补写 | T0 加「自主区拷现行锚」步骤;T7 加「新锚携回主区+README 指针随批合回+旧锚迁历史节」;第 7 节补 sim-data/README.md 行 | -| 1 | 同上 | F12 对照表注记缺口:board_view 行缺 R9 标注、rules 行缺 R6/R7 归属、R8 子件直查未申报受控例外 | 补写 | 三处已补(board_view 行标 R8 R9;rules 行标 R1-R4/R6/R7;R8 行随行申报受控例外理由) | -| 1 | 同上 | F13 悬停说明文案(ux/battle.md:299)无断言载体 | 补写 | R9 收编「悬停说明在册可见」断言(措辞按白名单 2 润) | -| 1 | 同上 | 核实通过面:九文档行锚逐一实核、15+ 处现状 file:line 全对、`sealed_identity`/`notify_cleared` 全仓零命中、引擎三查(NEVER list/Gotchas/性能预算)零触碰、MC 纪律与渲染闸 mac 缺件 SKIP 语义一致 | 自判 | 不改+依据:实核通过,记录在案供审计追溯 | -| 2 | 卡修批复核(2026-11-07,写卡段核对+子代理逐行实读) | F14 board_hover 行锚失位——「相邻封印格=挖掘光标 :113-116」实为非相邻封印格禁入分支,相邻封印格挖掘光标在 :109-112 | 补写 | §3 锚改 :109-112 并注明 :113-116 为非相邻禁入分支;T3 步骤钉死删分支对象(:109-112 内的封印格豁免,删后封印格落 :113-116 禁入分支) | -| 2 | 同上 | F15 feats.tres 行锚偏差——破封一击行块自 :622 起、feat_id=`breaker_strike` 在 :623(:624 是 display_name 行) | 补写 | §3/§7/T5 改锚并补 feat_id;T5 grep 清零词补 `breaker_strike` | -| 2 | 同上 | F16 player_copy_sweep_test.gd 文案逐字断言实际在 :144-147(卡写 :125-140 是夹具构造循环) | 补写 | §3 改锚 | -| 2 | 同上 | F17 adventure_feats_test.gd/effect_words_t1_test.gd 实际在 game/tests/unit/core/ 而非卡内所写 unit/battle_settlement/ 路径 | 补写 | §7 路径改正(§3 引用不带路径,不受影响) | -| 2 | 同上 | F18 effect_words_t1_test.gd :37-71 实为封闭性后段,词表在册断言在 :16-33 | 自判 | §3 锚改 :16-33 | -| 2 | 同上 | F19 §5 不做清单引「结算明细文案入表(待办清单在册)」失实——该条目当时待办清单缺册 | 补写 | 本卡修批已补登记待办清单条目「结算明细文案入表」(2026-11-07,批次移交,待文档设计),§5 引用随登记成立 | - -复核结论:待裁类 1 条(F2)已经用户裁决(2026-11-07 裁③退役+重标定补偿)并落卡;轮 1 自判 5、补写 5、退回上游 1 全部处置;轮 2(卡修批)六发现全处置(补写 4、自判 2)、零待裁——**卡片修订成立**。 diff --git a/reports/需求卡片-结算期文字列表退役批-2026-11-07.md b/reports/需求卡片-结算期文字列表退役批-2026-11-07.md deleted file mode 100644 index 3e3ec061..00000000 --- a/reports/需求卡片-结算期文字列表退役批-2026-11-07.md +++ /dev/null @@ -1,192 +0,0 @@ -# 需求卡片:结算期文字列表退役与日志零文案批 - -> 状态:待用户裁决(写完呈用户,开工令归 /iter 或用户另行发令) -> 验收档:中(依据 test-conventions §8.3:后果玩家可见但不损持久状态,本批不动存档写读、RNG 流、结算公式与数值表结构;用户批卡 U0 时可改判) -> 来源:`待办清单.md`「结算期逐行文字列表退役与日志零文案」条(2026-11-07 登记,来源=会话提及) -> **唯一事实源**=2026-11-07 用户裁定(会话设计讨论闭合、待裁点清零)+ `design/gdd/08-Alpha版本标准.md` v1.29(「逐行结算排播」行已删)+ `待办清单.md` 该条实况。三处 GDD 条款改写属实现批禁写面,列在第 6 节由文档批落文。 - -## 1 目标与完成定义 - -撤掉战斗屏结算期一行行滚动的文字列表;保留伤害飘字、攻击特效与站桩动画;日志侧零中文文案、只存结构化字段,并保证数值分析判读结论与改前逐位一致。 - -完成定义:①结算期 B 区不产任何逐行文字;②FX 排播链与两类 toast 仍在;③新日志 `step` 行零中文字段、原有全字段与全部 payload 仍在;④`tools/analyze_playtest.py` 判读等价:T0 两份基线日志(现行历史锚+改前同种子日志)改后复跑逐位一致+同种子改前改后日志配对逐位一致;⑤每个需求点有从真实入口进入的正向验收断言并跑绿,读数写进该步提交信息。 - -## 2 设计事实源 - -- 用户裁定(2026-11-07 会话,待裁点清零、用户点头):撤掉结算期逐行滚动文字列表;保留伤害飘字与攻击特效;日志零文案只存字段;战斗画面优化另立待办。 -- `design/gdd/08-Alpha版本标准.md` v1.29:「五、表现」表已删「逐行结算排播」行,「战斗演出链(弹道/受击/血条/灰化)在役」行保留。 -- `待办清单.md` 该条实况与状态(写卡时推进为「文档设计已闭合+已写卡」)。 -- 设计闭合凭据说明:req-card 第〇步要求的闭合凭据=用户裁定已落 `08-Alpha版本标准.md` v1.29;`battle.md`/`战斗结算.md`/`战斗表现.md` 三处条款改写不是设计待裁点,是按裁定的文档同步义务,按「实现批禁写 `design/`」纪律列进第 6 节与反哺点清单,由文档批落文。 - -## 3 现状事实(代码级考证) - -| 事实 | 位置 | -|---|---| -| 结算行协议:`_emit_row()` 发 `step_row`,公共字段 type/source_class/origin_cell/round_index/display_name/value/highlight+extra 全平铺 | `game/core/battle_orchestrator.gd:710-735` | -| 玩家侧逐行文字渲染(7 处读 display_name、BBCode 行模板) | `game/presentation/views/battle_log_view.gd:87-103`(逐行渲染入口)、`:146-263`(行格式化域);上轮摘要 `:72-84`、聚合计数 `:109-130` | -| 排播泵:文字入带是 `log_view.append_row/append_bb/finish_settlement_round`;FX 链是 `stage.on_step_row_fx`/`_play_cross_zone_fx`/`_play_settlement_mark`/`refresh_request`/`pump_ended` | `game/presentation/row_pacer.gd:83-101`、`:106-152` | -| 动画定位走 target/target_id,不读行文案 | `game/presentation/views/battle_stage_view.gd:327-344` | -| 两类 toast 仍读 display_name/display:清图奖励、Boss 半血解锁技名 | `game/presentation/main.gd:417-425`;`row_pacer.gd:97-100`;规格 `design/gdd/systems/战斗循环/敌人系统.md:207` | -| 日志逐行全字段落盘;中文字段两处=`text`(:138)与平铺进去的 `display_name`(:140-142) | `game/presentation/playtest_logger.gd:130-143` | -| 开新/续玩均开日志会话并挂接战斗 | `game/presentation/main.gd:247-253`、`:295-302`;`game/presentation/main_adventure_flow.gd:62` | -| 分析工具依赖 `text` 做四类判读:effect_id 反查、群伤奖励判定(两处)、未生效原因分类 | `tools/analyze_playtest.py:83-88`、`:189`、`:434`、`:471-478` | -| 群伤行已有结构化 `target: "all_enemies"`;未生效行散有 `batch_key`/`forfeit`/`deferred`,无统一「原因」字段——全仓 `reward_ineffective` 发射点共七处:补 `reason` 的六处=damage_controller:623-624/reward_grant:269-271/:362-364/:366-369/combat_segment:123-124/grant_segment:321;**grant_segment:103 不补**(封印作废行「奖励作废(封印格直接挖开)」——四类枚举无对应文案,且该行块 :102-104 随同迭代后行批「封印动作改版批」整块删除) | `game/core/damage_controller.gd:515-516`、`:623-624`;`game/core/reward_grant.gd:269-271`、`:362-369`;`game/core/settlement/combat_segment.gd:123-124`;`game/core/settlement/grant_segment.gd:103`、`:321` | -| 玩家可见文案的现役测试/探针面 | `game/tests/README.md:137`/`:138`(写卡段已入表的新能力行;旧行「结算明细带逐行呈现与排播节奏」已删);`game/tests/unit/presentation/theme_projection_test.gd:385`;`player_copy_sweep_test.gd:86-108`;`pacing_queue_test.gd:108-120`(:165 是收尾 PASS 打印行);`game/probe/ui_probe.gd:133-135`(折叠态断言——读 `pending_rows()` 与尺寸,不读行文本);`game/probe/ui_click_probe.gd:423`、`:473`、`:616`、`:798-844` | - -## 4 设计契约(🔴 触碰=L3 停机呈报) - -1. 🔴 保留伤害飘字、攻击特效、站桩闪白/弹道/灰化;`row_pacer.gd:89-101` 的 FX 调用链与 `pump_ended`/`refresh_request` 零删改。文字列表退役不等于取消结算演出。 -2. 🔴 核心层 `step_row` 公共字段集不变:`display_name` 保留(清图奖励 toast、Boss 解锁技名 toast、历史日志兼容都读它);本批只改日志消费端与补 `reason` 这类结构化 extra,不动 `_emit_row()` 签名与载荷键集。 -3. 🔴 日志逐行全字段落盘义务不变(kind/type/source/cell/round/value/highlight+全部 payload);只去掉 `text` 与 `display_name` 两份中文文案。 -4. 🔴 数值与随机零改动;玩法数值只经 ConfigDB 单点,随机只经 RngService;Core 零 UI。 -5. 🔴 实现批禁写 `design/` 整个目录、根规则文件与 `game/tests/README.md`(能力清单归写卡段维护);文档义务只进 `reports/` 反哺点清单。 -6. 🔴 按 2026-10-24/2026-10-28 用户裁:禁变异类测试与撤销类取证,禁删断言/放宽阈值换绿;验收主力=从真实入口进入的正向断言,同种子复放对拍只作兜底。 - -## 5 范围边界 - -- 做:撤 B 区逐行文字(含上轮摘要、轮首分隔行、聚合计数行的文字呈现);日志零中文文案;补未生效原因的结构化字段;分析工具改读结构化字段;相关测试/探针改写成退役后的正向断言;能力行换代。 -- 不做:战斗画面优化(另立待办,等用户发令)、美术资产、`design/` 三处条款改写(文档批)、日志采集面扩充(除 `reason` 外零新增)、`step_row` 行协议重构、`08-Alpha版本标准.md`(已落地 v1.29)。 -- 不收件去向:动画密度与素材范围 →「战斗画面优化」待办;三处设计条款 → 反哺点清单;历史锚里的旧 `text` 字段 → 不改历史数据,分析工具保留旧日志兼容分支。 - -## 6 关联文档同步面 - -| 文档 | 关联点(本批实现会改变它的哪条陈述) | 同步义务 | -|---|---|---| -| `design/ux/battle.md:199`/`:272`/`:347` | 结算期明细带逐行滚动(:199 明细带行/:272 结算阶段逐行);「结算逐行兑现不可整体跳过、只给减动效」(:347)——旧锚 :157/:230/:304 系封印预览节插入前行号,已失位(下移约 42 行) | 实现批禁写 `design/`;逐条列进 `reports/iter-反哺点-<日期>.md`,用户裁决后由文档批落文 | -| `design/gdd/systems/战斗循环/战斗结算.md:73`/`:87` | 明细流水是结算明细屏的数据源;「显示名等玩家可见文案是数据面字段、代码读表拼行」 | 同上 | -| `design/gdd/systems/战斗循环/战斗表现.md:53`/`:99`/`:149` | 结算逐行兑现是信息载体;因果可读验收「能说出这一行来自哪步操作」 | 同上 | -| `design/gdd/08-Alpha版本标准.md` v1.29 | 「逐行结算排播」行已删(合并 `f7d7761e`) | 已落地,本批零动作 | -| `game/tests/README.md:137`/`:138` | 新能力行两行(「结算期零逐行文字与 FX 排播链保持」「日志 step 行零文案与结构化判读等价」)**已由写卡段入表**;旧行「结算明细带逐行呈现与排播节奏」已删 | 实现批禁写;批末只核对名实一致(T3) | -| `体验验证清单.md:86`/`:206`/`:220`/`:314`/`:315`/`:326`/`:442`/`:519` | 逐行结算、明细带来源/行序/文案可读性、减半标签等目检项 | 实现批禁写根规则文件;列进反哺点清单,由文档批落文;真人目检登记不阻塞 | - -## 7 文件结构图 - -| 路径 | 职责 | 行为/非行为 | 对照表行 | 复用/新增 | -|---|---|---|---|---| -| `game/presentation/views/battle_log_view.gd` | B 区文字列表渲染面退役(保留视图壳供挖掘期摘要位或整体退役,二选一定在 T1) | 行为改动 | R1 | 复用既有件,不新增 | -| `game/presentation/row_pacer.gd` | 移除文字入带调用,保留 FX 排播链 | 行为改动 | R1/R2 | 复用既有件 | -| `game/presentation/main.gd` | 组合根 `log_view` 接线与 `clear()` 调用面同步 | 行为改动 | R1 | 复用既有件 | -| `game/presentation/playtest_logger.gd` | 日志 `step` 行去掉两份中文文案 | 行为改动 | R3 | 复用既有件 | -| `game/core/damage_controller.gd`/`reward_grant.gd`/`settlement/combat_segment.gd`/`settlement/grant_segment.gd` | `reward_ineffective` 行补 `reason` 枚举 extra | 行为改动 | R5 | 复用既有 `_emit_row` 出口 | -| `tools/analyze_playtest.py` | 四处 `text` 判读改读结构化字段,保留历史锚兼容分支 | 行为改动 | R4 | 复用既有解析入口 | -| `game/tests/unit/presentation/*`/`game/probe/*` | 旧断言改写成退役后正向断言 | 行为改动 | R1/R2/R3 | 复用既有套件 | -| `game/tests/README.md` | 能力行已由写卡段入表(新行 :137/:138、旧行已删)——本批零改动,批末只核对名实一致 | 非行为改动 | — | 复用既有表行 | -| `reports/需求卡片-…`/实现报告/代拍板追认单/反哺点清单/验收审计 | 过程件 | 非行为改动 | — | 复用既有模板 | - -## 8 落位与可复用性预检 - -- **复用面**:本批零新增视图、服务、工具脚本(游戏码零新增文件)。`grep` 现成实现结果=文字渲染唯一在 `battle_log_view.gd`,排播唯一在 `row_pacer.gd`,日志落盘唯一在 `playtest_logger.gd:130-143`,分析判读唯一在 `tools/analyze_playtest.py`;同名同义标识符无第二处。新增文件面=四件:测试三件(`battle_log_zero_text_test.gd`/`playtest_logger_step_fields_test.gd` 落 `game/tests/unit/presentation/`,`reward_ineffective_reason_test.gd` 落 `game/tests/unit/battle_settlement/`)+工具一件(`tools/analyze_parity_check.py`)。 -- **唯一面**:`step` 行字段定义只在 `battle_orchestrator.gd:723-735`;`reason` 枚举取值只在第 9 节 T2 定义一次,各发射点只引用不各自定义;日志行字段组装只在 `playtest_logger.gd:136-143`;分析工具的「旧日志兼容分支」只在 `effect_id_of()` 一处。 -- **分层与交互面**:core 发 `step_row` → 呈现层 `row_pacer`/`playtest_logger` 并列订阅(删文字只动呈现层那条);`row_pacer` → `stage.on_step_row_fx`/`settlement_fx`/`board_zone` 的调用链不变;core 零 UI、数值经 ConfigDB、随机经 RngService 三条红线不因补 `reason` 而绕。 - -## 9 任务卡 - -估时合计 3.5–4.75 个工作日(软盒 5 日);T2 若 `reason` 枚举落点超 4 处,按「先 damage_controller+reward_grant 两处、再 combat/grant 两处」切成 T2a/T2b,不扩 T 卡验收面。 - -### T0 开工核对与改前基线(0.25 日) - -取用:本卡第 3 节全部 file:line。产出:`sim-data/` 下改前判读基线读数一份(不入库)、T1..T4 共用的 `REASON_ENUM` 取值表。 - -- [ ] 逐条复核第 3 节 file:line 与现役代码一致,不一致处回呈写卡段,不改卡硬做。 -- [ ] 跑 `python tools/analyze_playtest.py` 对现行历史锚出一份判读基线,落 `sim-data/` 并在实现报告登记路径。 -- [ ] 经 sim 采集链采改前同种子日志一份(`level_autoplay.gd` 挂 `logger.start_session(seed)`,headless 直跑),同法出第二份判读基线——与历史锚基线一并落盘登记;此日志是 T3 改后同种子复放的配对腿(现行历史锚四类未生效计数为零,判读力由本腿承担)。 -- [ ] 跑 `python tools/run_all_gates.sh --docs` 确认写卡段文档域闸绿,回执记入实现报告。 - -### T1 撤玩家侧逐行文字(1–1.5 日) - -取用:T0 复核结果、`battle_log_view.gd`/`row_pacer.gd`/`main.gd` 现役签名。产出:`row_pacer.log_view` 句柄与文字入带调用清零、FX 调用链原样。 - -- [ ] 在 `row_pacer.gd:83-101` 移除 `log_view.append_row(row)`、`log_view.append_bb(...)`、`log_view.finish_settlement_round()` 三处调用,保留 `:89-101` 其余 FX 调用与 `refresh_request.call()`。 -- [ ] 在 `row_pacer.gd` 移除 `log_view: BattleLogView` 句柄声明与组合根注入面,保留 `stage`/`board_zone`/`settlement_fx`/`board_view` 四个句柄。 -- [ ] 在 `main.gd` 移除 `_start_adventure`/`_resume_from_menu` 的 `ui.battle.log_view.clear()` 调用(:252/:300);`wire_battle`(:408-412)唯一调用方在 `main_debug_flow.gd`、不在本批改动面,不动;`_on_step_row` 的清图奖励 toast 保留。 -- [ ] 定 `battle_log_view.gd` 去留并落实现:视图壳整体退役或只保留挖掘期摘要位,二选一以「B 区结算期零文字节点」为准,改动写进实现报告。 -- [ ] 从真实入口(停手→结算)跑 `battle_log_zero_text_test.gd:_smoke_settle_zero_rows`,断言结算期 B 区 `RichTextLabel` 行文本为空且无逐行追加,读数写进本步提交信息。 - -### T2 日志零文案与结构化字段补齐(1–1.5 日) - -取用:`step_row` 行协议(公共字段+extra 全平铺)、`REASON_ENUM`。产出:新日志 `step` 行零中文字段、`reward_ineffective` 行带 `reason`。 - -- [ ] 在 `playtest_logger.gd:136-143` 从 `line` 去掉 `"text"`,并在 `:140-142` 平铺循环里跳过 `display_name`,其余字段与 payload 一行不减。 -- [ ] 定义 `REASON_ENUM` 四个取值:`full_layers`/`full_hp`/`no_enemy_alive`/`hero_down`,只在本卡定义一次。 -- [ ] 在 `damage_controller.gd:623-624`(调用方 :483/:508 均传「无存活敌人」)、`reward_grant.gd:269-271`(满层)、`:362-364`(主角已倒下)、`:366-369`(满血)、`combat_segment.gd:123-124`(主角已倒下)、`grant_segment.gd:321`(满血)的 `reward_ineffective` 行 extra 各补一个 `reason` 键,取值对号入座即 `REASON_ENUM`。**`grant_segment.gd:103` 不补**——封印作废行「奖励作废(封印格直接挖开)」四类枚举无对应文案,且该行块 :102-104 随同迭代后行批「封印动作改版批」整块删除;分析器对缺 `reason` 行落「其他」桶,与改前该行分类一致,R4 等价不受影响。 -- [ ] 从真实入口(开新局→真实结算→落盘 JSONL 读回)跑 `playtest_logger_step_fields_test.gd:_assert_no_text_and_full_payload`,断言 `step` 行无 `text`/`display_name`、且 `type`/`source`/`cell`/`round`/`value`/`highlight` 与全部 payload 键集与改前逐位一致。 - -### T3 分析工具、测试与探针正面化(0.75–1 日) - -取用:T0 判读基线、T2 的 `REASON_ENUM`。产出:分析判读结论与改前一致、旧断言全部改写而非删除。 - -- [ ] 在 `tools/analyze_playtest.py:83-88` 的 `effect_id_of()` 保留旧日志 `text` 兼容分支,新日志分支改读 `effect_id`。 -- [ ] 在 `:189`/`:434` 把 `"全体敌人" in r.get("text","")` 改读 `r.get("target") == "all_enemies"`。 -- [ ] 在 `:471-478` 把未生效原因分类由 `text` 子串改读 `s.get("reason")`,四类取值与 `REASON_ENUM` 一一对应。 -- [ ] 把 `theme_projection_test.gd:_smoke_battle_log_view`/`player_copy_sweep_test.gd:_sweep_source_names`/`ui_probe.gd:133-135`/`ui_click_probe.gd:423`、`:473`、`:616`、`:798-844` 的旧文字断言改写为退役后的正向断言(例:结算期零行文本、来源标签从数据表读而非从行文本读),逐条登记进测试削弱申报表。 -- [ ] 批末核对 `game/tests/README.md:137`/`:138` 两条能力行(写卡段已入表)与实际落地名实一致(改名则回表走写卡段通道);实现批禁写该文件(第 4 节 🔴5)。 -- [ ] 判读等价三读数:①对 T0 两份基线日志(历史锚+改前同种子日志)各复跑一次 `tools/analyze_playtest.py`,结论与各自 T0 基线逐位一致(兼容分支等价);②同种子复放采改后新日志跑一次,结论与 T0 改前同种子日志基线逐位一致(同种子+第 4 节 🔴4 玩法零改动=事件流逐位同)。读数写进本步提交信息。 - -### T4 批末验收与产出物落位(0.5 日) - -取用:T1..T3 各步读数、第 10 节对照表。产出:`reports/` 四份过程件。 - -- [ ] 按本批改动域跑重闸选档全绿,回执记入实现报告。 -- [ ] 跑独立验收审计(入口 `reports/iter-验收审计-<日期>.md`,由未参与实现的会话或子代理执行),未过不合并。 -- [ ] 在轻闸全绿后、合并前写齐 `reports/` 三份:实现报告(各卡状态+实机目检总清单+遗留读数义务)、代拍板追认单、反哺点清单(第 6 节每条都有落点)。 -- [ ] 用户目检项只登记不阻塞,登记完成即本卡义务了结。 - -## 10 验证闸(改动—验收对照表) - -| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 | -|---|---|---|---|---|---|---| -| R1 结算期零逐行文字(design/ux/battle.md:199) | `battle_log_view.gd:87-103`/`row_pacer.gd:83-101`/`main.gd:417-425` | `battle_log_zero_text_test.gd:_smoke_settle_zero_rows`(新增,落在表现层单元套件) | 单元+探针 | 真实停手→轮末结算→读 B 区场景树与 `RichTextLabel` 行文本 | `step_row` 消费后 `RichTextLabel.append_text` 调用计数=0、parsed_text 空;不绑终屏态 | 新增:结算期零逐行文字与 FX 排播链保持 | -| R2 FX 与 toast 链不断(design/ux/battle.md:347) | `row_pacer.gd:89-101` 保留 | `pacing_queue_test.gd:_assert_fx_chain`(既有套件内新增断言函数——套件文件已存在)+`standee_fx_sweep_test.gd:_init` | 单元+集成 | `step_row`→`row_pacer`→`stage.on_step_row_fx`/`settlement_fx` | `on_step_row_fx`/`play_damage_number`/`play_projectile` 调用计数与改前逐位一致 | 新增:结算期零逐行文字与 FX 排播链保持 | -| R3 日志零文案、字段不缺(design/gdd/systems/战斗循环/战斗结算.md:73) | `playtest_logger.gd:136-143` | `playtest_logger_step_fields_test.gd:_assert_no_text_and_full_payload`(新增) | 单元+集成 | `start_session`→真实结算→落盘 JSONL 读回 | 落盘 `step` 行键集:`type`/`source`/`cell`/`round`/`value`/`highlight`+全部 payload 与改前一致,且无 `text`/`display_name` | 新增:日志 step 行零文案与结构化判读等价 | -| R4 分析判读等价(design/engineering/test-conventions.md:133) | `tools/analyze_playtest.py:83-88`/`:189`/`:434`/`:471-478` | `analyze_parity_check.py`(新增,落在 `tools/`) | 工具/集成 | T0 两份基线日志复跑+同种子改后新日志配对判读 | 复跑读数与 T0 基线逐位一致;改后新日志读数与改前同种子基线逐位一致(配对腿——未生效分类判读力主要在此腿,现行历史锚四类计数为零) | 新增:日志 step 行零文案与结构化判读等价 | -| R5 未生效原因结构化(design/gdd/systems/战斗循环/战斗结算.md:80) | 四处 `reward_ineffective` 发射点 extra 补 `reason` | `reward_ineffective_reason_test.gd:_assert_four_reasons`(新增,落在结算域单元套件) | 单元 | 真实结算产生满层/满血/无存活敌人/主角已倒下四类未生效行→`step_row` 载荷 | `step_row` 载荷 `reason` 键取值四类逐一命中,不绑终态结算结果 | 新增:日志 step 行零文案与结构化判读等价 | - -**测试削弱申报**:随文字列表退役需改写的旧断言=`theme_projection_test.gd:_smoke_battle_log_view`、`player_copy_sweep_test.gd:_sweep_source_names`、`ui_probe.gd:133-135`(折叠态断言)、`ui_click_probe.gd:423`/`:473`/`:616`/`:798-844`、`pacing_queue_test.gd:108-120` 的文字呈现部分。一律改写为退役后的正向断言,**不删除、不放宽阈值、不缩小扫描面**;实现期出现未申报的删除断言由独立验收审计判红。 - -**独立验收审计**:`reports/iter-验收审计-<日期>.md`,由未参与实现的会话或子代理执行,未过不得合并。 - -## 11 异常分级 - -- L1 自救:单件直跑出红,只重跑该红件最小单元(一次重试)。 -- L2 记录继续:连续三次同红灯,记录进实现报告并继续本卡其余步骤。 -- L3 停机写报告等用户:触碰第 4 节任一 🔴、分析判读结论与改前不一致且定位不到字段来源、独立验收审计未过。 - -## 12 代拍板白名单 - -1. 新增测试函数命名与落点(须落在第 7 节列出的既有套件/工具目录)。 -2. `battle_log_view.gd` 视图壳整体退役 vs 只留挖掘期摘要位,以「结算期 B 区零文字节点」为判据自判,结论写进实现报告;**选整体退役时须同批处置 `main_adventure_flow.gd` 的五处叙述行 `log_view.append_bb` 调用(:65/:70/:75/:88/:170)迁置**(该分支改动面随结论登记进实现报告;选「只留摘要位」则这些调用不动)。 -3. `reason` 四个枚举键在四个发射点的写法(照现役 `_emit_row` extra 模式,不新增helper)。 - -超出以上三项一律呈报。 - -## 13 待裁点 - -零待裁点。用户裁定已覆盖方向、保留面、日志口径与 08 清单行处置;开工门=U0(用户发令 /iter)。卡片写完呈用户裁决后才可开工。 - -## 14 复核记录 - -复核发现按四类去向逐条登记(自判/补写/待裁/退回上游);本节即复核凭据,不另设报告文件(2026-11-06 用户裁)。 - -| 发现 | 去向 | 处置结果 | -|---|---|---| -| 视图壳整体退役 vs 只留挖掘期摘要位 | 自判 | 以「结算期 B 区零文字节点」为判据自判,写进第 12 节白名单第 2 项 | -| 新增测试函数命名与落点 | 自判 | 写进第 12 节白名单第 1 项,落在第 7 节列出的既有套件 | -| `reason` 枚举键在四个发射点的写法 | 自判 | 写进第 12 节白名单第 3 项,照现役 `_emit_row` extra 模式 | -| 上一轮核查漏项:`tools/analyze_playtest.py` 四处读 `text` | 补写 | 补进 T2/T3/R4,并保留旧日志 `text` 兼容分支 | -| 未生效原因缺统一结构化字段 | 补写 | 补进 T2/R5,定义 `REASON_ENUM` 四个取值 | -| 验收对照表列名与 2026-10-24/10-28 两裁冲突 | 补写 | 第六列改「判据绑定面」,内容全改正向断言与改前改后对照 | -| req-card 第〇步「标题带设计面=标记」与现行 §12.1 模板冲突 | 补写 | 按现行规约,闭合凭据以用户裁定+`08-Alpha版本标准.md` v1.29 为准,第 2 节写明 | -| 【轮 2·卡修批 2026-11-07】跨卡冲突:T2 六处发射点中 `grant_segment.gd:103` 是封印作废行「奖励作废(封印格直接挖开)」——四类 `REASON_ENUM` 无对应文案,且该行块 :102-104 随同迭代后行批「封印动作改版批」整块删除 | 补写 | §3/T2 剔除 :103(注明不补缘由);四类 reason 各另有独立归属点,R5 不受影响;分析器对缺 `reason` 行落「其他」桶,与改前该行分类一致,R4 等价不破 | -| 【轮 2·卡修批】R4 新日志腿缺改前采集——T0 只对历史锚出基线,「新日志结论与 T0 基线逐位一致」照字面不可执行(新日志与历史锚是两局内容) | 补写 | T0 增「改前同种子日志采集+判读基线」步(sim 采集链 headless 可产:`level_autoplay.gd` 挂 `logger.start_session(seed)`);T3 改三读数(历史锚复跑+改前日志复跑+同种子改前改后配对);§1 完成定义④与 R4 行同步改写 | -| 【轮 2·卡修批】T3「同步 game/tests/README.md:135 能力行」撞本卡 🔴5(实现批禁写 README),且 :135 旧行已被写卡段删除、新能力行 :137/:138 已在册 | 自判 | T3 改「批末核对 :137/:138 名实一致」;§6 表行与 §7 README 行同步改写 | -| 【轮 2·卡修批】R1/R2 判据出处 ux/battle.md :157/:297 与 §6 四锚 :157/:230/:304 失位——封印预览节(:130-170)插入后下移约 42 行,:157 现为预览 SVG 内字形文本 | 补写 | R1 锚改 :199、R2 锚改 :347、§6 改 :199/:272/:347(三处内容均已实读核实) | -| 【轮 2·卡修批】T1「移除 wire_battle 相关文字接线」措辞失实——`wire_battle`(main.gd:408-412)唯一调用方在 main_debug_flow.gd:99,不在两函数内 | 补写 | T1 改为只移除 :252/:300 的 `ui.battle.log_view.clear()` 调用 | -| 【轮 2·卡修批】白名单 2「整体退役」分支缺改动面——`main_adventure_flow.gd` 五处叙述行 `log_view.append_bb`(:65/:70/:75/:88/:170)未列入卡内文件清单 | 补写 | 白名单 2 补「整体退役分支须同批处置五处 append_bb 迁置」 | -| 【轮 2·卡修批】§8「新增文件只有过程件与新增测试函数」与 R4 新增 `tools/analyze_parity_check.py`+三个新测试文件自相矛盾 | 自判 | §8 改事实句(四件新增面点名落目录) | -| 【轮 2·卡修批】锚漂移三处:battle_log_view 上轮摘要/聚合计数实为 :72-84/:109-130(卡写 :146-264);pacing_queue_test 文字断言实为 :108-120(:165 是 PASS 打印行);ui_probe:133-135 为折叠态断言不读行文本 | 自判 | §3/削弱申报行号已改正;ui_probe 性质注记随 §3 行 | - -零待裁点、零退回上游。轮 2(卡修批)八发现全处置——**卡片修订成立**。 - -**自审六查**:①规格覆盖——第 1 节五条完成定义逐条指到 T1..T4 与 R1..R5,无悬空;②步骤扫描——每步一个动作+一个可核查结果,无「TBD/酌情/适当优化」;③类型一致性——`REASON_ENUM` 四个取值在 T2 定义、T3 与 R5 逐字引用;④审查焦点+改动覆盖——最可能坑到玩家的失败模式=FX 链被误删(R2 兜)、分析判读静默失真(R4 兜)、日志丢 payload(R3 兜),文件结构图每个行为改动都有对照表行;⑤篇幅比例——本卡以签名、取值、断言名为主,未抄函数体;⑥落位与复用——第 8 节三问逐条答完,零新增视图/服务/工具,与第 7 节「复用既有」标注一致。 - -**上一轮核查漏项补正详情**:此前报「日志零缺漏」时未查到 `tools/analyze_playtest.py:83-88`/`:189`/`:434`/`:471-478` 对 `text` 的四处判读依赖;本卡已列为 R4 并补 `reason` 字段(R5),不属新增需求,属用户令「缺什么补什么」的同批处理。 diff --git a/roadmap.md b/roadmap.md index 3a8a153c..1e1a402f 100644 --- a/roadmap.md +++ b/roadmap.md @@ -5,8 +5,8 @@ ## 当前位(只回答「现在该做什么」;三行内随批次换代,禁止在此扩写成状态快照) - **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。 -- **迭代位**:迭代 1–55 已完成。迭代 56 已编待开工(结算期文字列表退役+封印动作改版两卡)。各迭代收口与批后收尾沿革查 git 提交信息与 `reports/`。 -- **下一步**:发令开工 56(≈12.25 日,两卡:结算期文字退役先行+封印改版);待编池:结算明细文案入表(待文档设计)、棋盘瓦片与立体表现重做(已写卡,待编排)、测试面真输入化批发现四项待裁(待执行);EC8 热重载实装待用户另立条目。 +- **迭代位**:迭代 1–56 已完成。各迭代收口与批后收尾沿革查 git 提交信息与 `reports/`。 +- **下一步**:发令开工 57(≈11.25 日,两卡:营地场景重排接线+棋盘瓦片与立体表现重做,均已写卡);待编池:结算明细文案入表(待文档设计)、测试面真输入化批发现四项待裁(待执行);EC8 热重载实装待用户另立条目。 ## 里程碑时间线 @@ -89,7 +89,7 @@ | 迭代 53 | 已完成(2026-11-06) | 已退役(git 历史可考) | 2026-11-05 | ≈6.0 个工作日 | 已退役(git 历史可考) | | 迭代 54 | 已完成(2026-11-07) | 已退役(git 历史可考) | 2026-11-07 | ≈8.625 个工作日 | 已退役(git 历史可考) | | 迭代 55 | 已完成(2026-11-07) | 已退役(git 历史可考) | 2026-11-07 | ≈8.75 个工作日 | 已退役(git 历史可考) | -| 迭代 56 | 待开工 | reports/需求卡片-结算期文字列表退役批-2026-11-07.md
reports/需求卡片-封印动作改版批-2026-11-07.md | 2026-11-07 | ≈12.25 个工作日〔用户特批 2026-11-07 超 10 个工作日〕 | — | +| 迭代 56 | 已完成(2026-11-08) | 已退役(git 历史可考) | 2026-11-07 | ≈12.25 个工作日〔用户特批 2026-11-07 超 10 个工作日〕 | 已退役(git 历史可考) | | 迭代 57 | 待开工 | reports/需求卡片-营地场景重排接线-2026-11-07.md
reports/需求卡片-棋盘瓦片与立体表现重做批-2026-11-07.md | 2026-11-08 | ≈11.25 个工作日〔用户特批 2026-11-08 超 10 个工作日〕 | — | - 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。 diff --git a/体验验证清单.md b/体验验证清单.md index 3ef0b1fa..be2751ec 100644 --- a/体验验证清单.md +++ b/体验验证清单.md @@ -83,7 +83,7 @@ ### ⑩ 奖励重构体验项(余项人工参与) -- **逐行结算演出复验**:完全退出游戏后重启(减动效开关在启动时加载),战斗停手看轮末结算是否一行一行滚出(弹道/受击闪白/伤害数字逐行)。机制已落地(排播队列 0.3/0.22s);若重启后仍无演出再报 bug 批。 +- **结算演出链复验**:完全退出游戏后重启(减动效开关在启动时加载),战斗停手看轮末 FX 排播链是否逐拍兑现(弹道/受击闪白/伤害数字),且 B 区零逐行文字(逐行流水文字已退役,迭代 56)。机制已落地(排播队列 0.3/0.22s);若重启后仍无演出再报 bug 批。 - **道具件卡片直显复验**:三选一抽到秘宝件时,卡片应直显「秘宝 / 线香 · 真视 3×3」式具体道具(掷定前置已实装,node-reward.md v2.1)——不再是「随机获得一件」盲选。 - **关卡完成节奏体感**:血回满→20% 部分回血 + 三选一选件后,L2/L3 的紧张度与「这局能走多远」驱动是否成立(读数带内:普通 L1 41.8%/L2 10.2%——体感不满不当场改数,归曲线调参批)。 - **钥石节奏体感**:Boss 逐杀掉落(首杀 3/复杀 2/2/3)后营地积累速度明显变慢——元进度产出重标(均值 1.38/3.01)归元进度设计批,体感反馈是其输入。 @@ -203,7 +203,7 @@ |---|---|---| | 1 | 商店货币显示 | 商店界面货币显示「GP」,不再出现「金币」 | | 2 | 图例/HUD 封印文案 | 图例与 HUD 显示「封印/封印印记」,不再出现「插旗/旗」;板面单字字形现为「封」 | -| 3 | 结算明细来源 | 结算明细来源显示「封印命中/封印未中」 | +| 3 | 封印判定归因 | 封印标中(印记化暴击弹道加重)与标空(负向兑付反馈)在演出面可分辨 | | 4 | 封印印记法阵呈现 | 三关封印格呈环+十字+环外压暗光圈、环径 82%±1px(机检读数=board_shot_probe seal_shot 段承载;实机目检见 51 节) | | 5 | 完美保险卡面文案 | 专长卡面文案读作「本场首次封印落空,不计入完美封印判定」,零「雷」字 | | 6 | 稀有档三选一 | 三选一带不再出现同调电池/完美保险;稀有档仅剩 ap/rap/time_sand 三种 | @@ -217,7 +217,7 @@ | # | 目检项 | 判据 | |---|---|---| -| 1 | 结算明细两行先后 | 「完美保险·标错豁免」行先于「封印未中」行呈现(豁免在前、未中不带金框) | +| 1 | 豁免与未中兑现先后 | 「完美保险·标错豁免」的兑付先于「封印未中」负向兑付呈现(豁免在前,演出链顺序可读) | | 2 | 未豁免态文案 | 无保险首次标错的「封印未中」行带金框,文案「本图完美封印已破——清图奖励不再加倍」可读 | | 3 | 高光行与横幅 | 对外高光行「完美封印!清图奖励 ×2」与全屏横幅「完美封印 ×2」显示正确、零「雷」字 | | 4 | 天赋树锋/守限次 | 同一关内第 3 次起踩危险格不再伤害减半、第 3 次标错不再返还行动点(每关限 2 的实际手感) | @@ -311,8 +311,8 @@ |---|---|---| | 1 | 选路屏状态栏与悬停高亮 | 状态栏文案(关卡名/GP/生命与血条/属性/加成行)与悬停格高亮、雾区信息面板——装配迁移+缓存后与改前一致,无错位、无缺项、无换格不刷新 | | 2 | 奖励节点战报文案 | 奖励节点停点战报行为新句「关卡奖励点(三选一——选毕推进)」,不再出现「内容待定」类旧表述 | -| 3 | 结算明细带轮摘要 | 多轮结算的明细里「上轮摘要」正常显示,逐轮分隔与明细行序可读 | -| 4 | 结算明细效果行与示警烟火来源 | 四类专长效果行(揭示/预览区/保险/排雷)文案与呈现同改前;示警烟火行来源标注 `fx_warning_beacon` 裸键渲染——可接受性与人眼可读性由本项定 | +| 3 | 结算明细带轮摘要 | 多轮结算的「上轮摘要」正常显示(摘要位+叙述行形态,明细行已退役) | +| 4 | 专长效果兑付与示警烟火来源 | 四类专长效果(揭示/预览区/保险/排雷)兑付演出同改前观感;示警烟火来源可辨(`fx_warning_beacon` 裸键渲染——可接受性由本项定) | | 5 | 调试角标发布态恒隐 | 菜单/设置面/对局中三处调试浮窗入口与角标恒不出现;浮窗仍可经开发工具宿主直调打开 | - **红灯信号**:第 1、4 项与改前呈现不一致即报缺陷;第 2、3、5 项按修复/删除预期判——旧文案仍在、摘要仍缺、角标仍可见即报缺陷。 - **结论回流**:实现缺陷归待办清单登记新条目;`fx_warning_beacon` 裸键的可读性判「不可接受」时,归呈现面后续批补来源中文名映射(`settlement.tres` 的 source_label_map 补键)。 @@ -323,7 +323,7 @@ | # | 目检项 | 判据 | |---|---|---| -| 1 | 停手偷袭技(趁隙偷袭) | 任意一轮玩家停手不挖,下一轮结算明细出现「趁隙偷袭」行——L2/L3 群行位敌人对停手状态的还手可见且因果可读(技能名承载) | +| 1 | 停手偷袭技(趁隙偷袭) | 任意一轮玩家停手不挖,下一轮结算演出链兑现「趁隙偷袭」——L2/L3 群行位敌人对停手状态的还手可见且因果可读(技能名承载) | | 2 | 低血防御技(孤注守势) | 地精血量降至约三分之一以下后的开轮,出「孤注守势」(自身防御向增益)——低血触发时机观感合理、增益行可读 | - **红灯信号**:两技不出现(机制未触发)或触发时机明显不合理(如满血触发、低血不触发)即报缺陷。 - **结论回流**:实现缺陷归待办清单登记新条目;触发观感类判读(频率/时机手感)归难度曲线调参批数值面,不在目检现场改数。 @@ -438,7 +438,7 @@ | 6 | 三关背景可辨为不同洞窟、远景有纵深、非贴墙 | 三关观感有区分度,符合 §6.1 构图契约 | | 7 | 背景无光柱/光带/光源实体 | 正常态与缺图回退态均无 | | 8 | 地面层观感 | 读作泥土/碎石非瓷砖,中低明度不刺眼 | -| 9 | 站桩与小石台踩在连续地面上;结算期明细带压住地面底带 | 层序正确、无悬空感 | +| 9 | 站桩与小石台踩在连续地面上;结算期明细带(摘要位形态)压住地面底带 | 层序正确、无悬空感 | | 10 | B 区文字可读性 | 轮次牌/演出提示/明细带对背景与地面均可读 | - **红灯信号**:立绘清晰度不可接受(灰矮人列为头号回退候选)、体量顺序错乱、背景读作贴墙、层序错位即报缺陷。 @@ -516,7 +516,7 @@ |---|---|---| | 1 | 深图卷轴视口实跑观感 | 深度 13+ 图拖拽平滑可达首末列;停点推进跟随方向感自然、当前节点居中锚即时;拖拽不误触选路 | | 2 | 指引件观感 | 深图两侧渐隐带与顶部平移提示 chip 可辨、不碍选路;浅图两件均不出现 | -| 3 | 结算明细减半标签 | 「挖掘惩罚减半(6→3)」一眼可读,无退役件名突兀感 | +| 3 | 结算明细减半标签 | 〔已退役〕明细行文字呈现随迭代 56 退役(逐行流水行删除),减半标签无目检对象——留存沿革,实机不再检 | - **结论回流**:观感问题归待办清单登记新条目;数值面不在目检现场改数。 @@ -541,3 +541,17 @@ | 2 | 完美封印双份兑付战内表现 | 完美封印第二份奖励的高光行与全屏横幅表现与既有观感一致(值零漂移,仅观感复核) | - **结论回流**:观感问题归待办清单登记新条目;数值面不在目检现场改数。 + +## 55 结算零逐行与封印改版目检(迭代 56) + +> 结算期逐行文字列表退役与封印受理即揭示改版落装后,机检已覆盖零逐行文字/FX 链等价/日志零文案与全字段/未生效 reason 四类/封印规则四条与 golden 三图换代(渲染闸),观感面按登记不阻塞立规不拦合并。 + +| # | 目检项 | 判据 | +|---|---|---| +| 1 | 结算期 B 区零逐行文字 | 结算全程 B 区无逐行文字列表;FX 排播链逐拍演出(弹道/受击闪白/伤害数字) | +| 2 | 新排播形态观感 | 伤害飘字/弹道/站桩反馈在退役逐行文字后的观感可读、无空窗感 | +| 3 | 封印受理瞬间揭示观感 | 受理瞬间格下身份揭示(地板+身份字形+法阵叠加)一眼可读、不脏面 | +| 4 | 封印悬停禁字与图例新句 | 悬停已封印格显示禁用反馈;图例封印行新句(受理即揭示/不可再挖开/零动作)读顺 | +| 5 | 封印清图高光 | 封印完成清图时清图高光(金粒喷泉+彩纸)正常触发 | + +- **结论回流**:观感问题归待办清单登记新条目;数值面不在目检现场改数。 diff --git a/待办清单.md b/待办清单.md index cd3574e9..9c9e8a0c 100644 --- a/待办清单.md +++ b/待办清单.md @@ -2,6 +2,20 @@ 本清单是流水线的唯一登记处:以后才做的事在此登记一条,随流水线段推进改状态,做完整条删除(条目记进度,不是各段的开工前置);各系统文档的「待办」节只留一行指路存根,不再自建条目。条目格式(标题=登记元数据含可选优先级,正文=实况/缺口/改动面/状态四属性)与状态机以 [doc-conventions §12.1](design/engineering/doc-conventions.md) 为权威。 +#### 写卡段判据锚钉防漂——易漂移文档改用节锚(2026-11-09 登记,来源=批次移交) + +**实况**:迭代 56 卡1 复核轮钉死的 ux/battle.md 行锚(:199/:272/:347)被同日「顶栏搬两侧」文档批修订冲漂(真锚 :200/:364/:439)——行锚钉死后同日文档批仍会冲漂;test-conventions §8.3 已有节锚两档机制(2026-11-07 架构收窄批立的防漂移机制)。 +**缺口**:还差写卡段对易漂移文档(ux/、常修订 GDD)改用节锚形态的规约落文。 +**改动面**:文档 +**状态**:待文档设计 + +#### iter-plan 预检义务补条——新增公开方法宿主余量实跑核对(2026-11-09 登记,来源=批次移交) + +**实况**:迭代 56 卡2 §14 预检读数「两宿主现行公开方法数远低于 20 上限」系凭印象未实跑(minesweeper_rules 恰 20 贴线,+1 即越),实现批停机呈报后用户裁「重新设计」(sealed_identity 落位重设计——BoardData.cell_identity)。 +**缺口**:还差 iter-plan 第 3 步预检读数义务补「新增公开方法的宿主余量实跑核对」(技能文件不入 git 豁免面直改;是否同步落规约归设计段定)。 +**改动面**:文档+工具代码 +**状态**:待文档设计 + #### 未决问题迁移——轮内刷新数值连锁重算(2026-11-07 登记,来源=批次移交) **实况**:原 architecture.md「未决问题」QQ-04(git 历史可考,架构收窄批迁出)。清图支配性条款⑤的轮内刷新数值连锁重算,判据=真人刷图行为获取期望。 @@ -36,14 +50,6 @@ **改动面**:文档 **状态**:待文档设计 -#### 封印动作改版——挖开与封印都揭示格子(2026-11-07 登记,来源=会话提及) - -**实况**:设计讨论与全仓扫描统计已完成,三裁在案(受理即揭示全揭示案/破封一击退役/MC 同批重锚)+封印格呈现预览用户人审通过(观感细化后置另立条目)。关联文档清单(闭合凭据):[排雷玩法](design/gdd/systems/排雷循环/排雷玩法.md) v2.0+[战斗结算](design/gdd/systems/战斗循环/战斗结算.md) v1.9+[地图战斗资源](design/gdd/systems/战斗循环/地图战斗资源.md) v1.7+[行动经济](design/gdd/systems/排雷循环/行动经济.md) v1.6+[地形变异](design/gdd/systems/排雷循环/地形变异.md) v1.4+[奇物](design/gdd/systems/冒险循环/奇物.md) v1.7+[术语表](design/gdd/术语表.md) v1.28+[教学引导](design/gdd/systems/表现与支撑/教学引导.md)(首遇提示句 2026-11-07 换代)+[ux/battle](design/ux/battle.md)(封印格呈现预览节)+[道具退役素材库](design/content-archive/道具退役素材库.md) 表五。需求卡片:reports/需求卡片-封印动作改版批-2026-11-07.md(复核记录节在卡,对抗复核一轮 13 发现全处置)。 - -**改动面**:文档+游戏代码 - -**状态**:文档设计已闭合+已写卡+已编迭代 56 - #### 封印格观感细化(2026-11-07 登记,来源=批次移交) **实况**:封印受理即揭示改版(需求卡片「封印动作改版批」2026-11-07)的呈现规格已随 [ux/battle](design/ux/battle.md)「封印格呈现预览」节定稿并过审——用户同日裁「观感细化后置」:色牌深浅、法阵与身份字形叠加的视觉密度、光圈强度等细化不阻塞实现批基线冻结。 @@ -71,14 +77,6 @@ **状态**:待文档设计 -#### 结算期逐行文字列表退役与日志零文案(2026-11-07 登记,来源=会话提及) - -**实况**:设计讨论 2026-11-07 会话闭合(用户裁定、待裁点零):撤掉结算期逐行滚动文字列表、保留伤害飘字与攻击特效、日志零文案只存字段。落点 [08-Alpha版本标准](design/gdd/08-Alpha版本标准.md) v1.29(现行不含「逐行结算排播」行)与 [需求卡片](reports/需求卡片-结算期文字列表退役批-2026-11-07.md)。日志逐行全字段落盘(game/presentation/playtest_logger.gd:130-143;开新/续玩均开会话,game/presentation/main.gd:247/:295),采集面零缺漏;多带 text 与平铺 display_name 两处中文文案,tools/analyze_playtest.py:83-88/:189/:434/:471-478 四处读 text 判读,须补 reason 字段并改读结构化字段。文字列表消费面=battle_log_view.gd:173-260/row_pacer.gd:100;动画特效走 target/target_id 不依赖行文案(battle_stage_view.gd:328-341)。[战斗结算](design/gdd/systems/战斗循环/战斗结算.md) v1.8 明细流水节规范句仍与本裁定相反(同步义务列卡片第 6 节)。 - -**改动面**:文档+游戏代码 - -**状态**:文档设计已闭合+已写卡+已编迭代 56 - #### 战斗画面优化——动画演出与美术表现(2026-11-07 登记,来源=会话提及) **实况**:用户令单独立条,专门承接战斗画面优化;文字列表退役先行,本条开工待用户发令。承接面=[战斗表现](design/gdd/systems/战斗循环/战斗表现.md) 输入清单(受击/弹道/退场/来源格可读化/高光兑现强化)与 P1 后置行;现行动画基础=站桩闪白/弹道/灰化(game/presentation/views/battle_stage_view.gd:327-363),演出链已在 [08-Alpha版本标准](design/gdd/08-Alpha版本标准.md) 标在役。美术资产按用户自立批处理,本条不代跑。 @@ -91,7 +89,7 @@ #### 结算明细文案入表(2026-11-07 登记,来源=批次移交) -**实况**:结算期文字列表退役批([需求卡片](reports/需求卡片-结算期文字列表退役批-2026-11-07.md),已编迭代 56)落地后,剩余玩家可见文案(清图奖励/Boss 解锁技名等 toast 与明细行显示名)的承载面换代——文案从代码字面量迁数据表,与 [战斗结算](design/gdd/systems/战斗循环/战斗结算.md) v1.9 :87「显示名等玩家可见文案是数据面字段」对齐。 +**实况**:结算期文字列表退役批(迭代 56 已落地,git 提交 d234a547)落地后,剩余玩家可见文案(清图奖励/Boss 解锁技名等 toast 与明细行显示名)的承载面换代——文案从代码字面量迁数据表,与 [战斗结算](design/gdd/systems/战斗循环/战斗结算.md) v2.0 :87「显示名等玩家可见文案是数据面字段」对齐。 **缺口**:还差一次文档设计讨论——入哪张表、哪些文案入表、日志零文案后 toast 文案的承载形态。 **改动面**:文档+游戏代码 **状态**:待文档设计