合并(迭代46批后收尾): 反哺点落文七处(奇物v1.4/行动经济v1.4/战斗结算v1.5/地图战斗资源v1.4/architecture v1.27/art-bible v3.34/battle.md下限句退役换锚点判据)+目检四项登记体验验证清单㊹+产出物退役十一件(三卡/两反哺点/两报告/两审计/停机呈报/卡B复核)+待办清单三条目整删+roadmap迭代46行已完成与当前位换代+art-bible入库合并冲突标记修复+refresh_feats_test补登记run_all.gd(02全量漏件补位,能力行代码面锚定成立); 文档域闸验收通过与基线一致(回执73fc11eb); 合回后post-merge钩子自动跑CI全量域闸
This commit is contained in:
commit
de5e31ed55
22 files changed
+44
-1381
No files matched your search
@@ -1,10 +1,6 @@
|
||||
# 美术圣经(Art Bible)— Dungeon Sweeper
|
||||
|
||||
<<<<<<< HEAD
|
||||
> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)· 状态:**第 1–9 节定稿**;现行为 v3.33,历次修订明细见 git 提交史
|
||||
=======
|
||||
> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)· 状态:**第 1–9 节定稿**;现行为 v3.33,历次修订明细见 git 提交史
|
||||
>>>>>>> docs-mood-ban
|
||||
> 项目:Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)· 状态:**第 1–9 节定稿**;现行为 v3.34,历次修订明细见 git 提交史
|
||||
>
|
||||
> **Art Director Sign-Off(AD-ART-BIBLE)**:历次批均未签核——此为 Lean/Solo 模式(非 PHASE-GATE)下的现行治理状态;full 门禁签核时机待用户表态。
|
||||
> 风格基调:地牢题材但**非暗黑风**——轻快明亮的幻想冒险风,全年龄;像素风;角色 2~3 头身。
|
||||
@@ -176,7 +172,7 @@
|
||||
- **高墙瓦片体系|光照纪律(单一北受光)**:北缘 = 墨线内侧 1px 微亮棱(就地取色提亮,禁宽亮带);西/东缘 = 墨线后直进纹理、不加修饰;南缘 = 墨线 + 立面窄暗条(约 1/3 格高,横层理叠石、禁竖条纹栅栏感)。验收:目检〈北缘亮棱、南缘窄暗条;无宽亮带、无竖条纹栅栏感〉
|
||||
- **高墙瓦片体系|凹角收头**:角点单像素落线;南立面侧凹角加 1px 立面收头——带身与转角竖线同列收尾,禁悬空、禁突出。验收:目检〈凹角收头与转角竖线同列,无悬空突出〉
|
||||
- **高墙瓦片体系|现行定稿**:`game/assets/art/board/terrain_*`(16 唯一墙瓦片 + 5 地面瓦片变体;词表与查表逻辑落码于 `board_world.gd`)。验收:机检〈terrain_* 素材 16 墙瓦片 + 5 地面变体在库,查表逻辑与词表一致〉
|
||||
- **高墙瓦片体系|高墙感 D 投影档与整板悬崖**:南临空墙格 = 立面口沿高光 2px `Color8(196,172,132)` + 双段暗带(0.16/0.25 格边,黑罩 α0.60/0.82);北邻墙地面格 = 三段渐隐投影(顶带 0.22 格边,α0.28 起);整板悬崖 = 板底/右侧 `DEPTH_PX 8px` 暗面 + 列分隔竖缝 + 岩层横纹 + 口沿高光 + 接触 AO + 底线收边 + 悬浮影(游戏 `board_world.gd` 同款结构件,样张脚本与游戏渲染常量同源)。验收:目检〈南临空墙格呈口沿高光+双段暗带;北邻墙地面格呈三段渐隐投影;整板悬崖结构件齐备〉
|
||||
- **高墙瓦片体系|高墙感 D 投影档与整板悬崖**:南临空墙格 = 立面口沿高光 2px `#C9AF83`(201,175,131——代码色 `BRICK`,与掩尘枚同源单点) + 双段暗带(0.16/0.25 格边,黑罩 α0.60/0.82);北邻墙地面格 = 三段渐隐投影(顶带 0.22 格边,α0.28 起);整板悬崖 = 板底/右侧 `DEPTH_PX 8px` 暗面 + 列分隔竖缝 + 岩层横纹 + 口沿高光 + 接触 AO + 底线收边 + 悬浮影(游戏 `board_world.gd` 同款结构件,样张脚本与游戏渲染常量同源)。验收:目检〈南临空墙格呈口沿高光+双段暗带;北邻墙地面格呈三段渐隐投影;整板悬崖结构件齐备〉
|
||||
- **变异格形状通道**(双通道之"形",与色无关):底砖圆角外轮廓不变,砖面内缘绘一圈定宽专属几何纹带(纹带形全作不与他类共用),砖心留白予数字与旗;验收标准 = **灰度截图下仍可分类**。种类清单 = 地形变异六类型已定稿(地形变异 GDD;荆棘丛/藤蔓缠绕/岩浆/烬覆/落石/矿尘):**纹带形按轴只分两种**——伤害轴(荆棘丛/岩浆/落石)= 刺/缺排斥形,信息轴(藤蔓缠绕/烬覆/矿尘)= 遮蔽/缠绕形;同轴跨图类型只做色板变体(§4.3 `variant_tint` 槽),不做新纹形。岩浆纹带橙红须与危险红互辨(变异格不是雷,色相邻近有混淆风险);信息轴遮蔽呈现禁止侵入数字字形占位区(§1.4 验收 1 延伸)。验收:目检〈六类型纹带灰度下仍可分类,同轴不新增纹形;岩浆纹带与危险红互辨〉 ←原一(纹理位次第 4,让位于数字/小人/旗);原三
|
||||
|
||||
### 3.3 UI 形状语法(方向指导,细则见 §7.1)
|
||||
@@ -216,7 +212,7 @@
|
||||
- **重甲冷灰金属材质色 `#868C9A`(ARMOR_PLATE_COLD,token 名暂拟、随实装批登记)**|语义/UI token 板(**分层①**,占 1 枚额度,**余量 2→1**;用户裁):重甲档甲材质色;character-design §5.3 通道 = 甲面覆盖率 × 甲材质色,甲材质色按甲档统一,故石君王岩石板甲**同引本枚、不另计额度**;材质色跨屏恒定,落分层①不落分层②(环境色才随场景走)。过门情况:第二道门按宽松口径(禁止三通道全 <8)与在册色逐一比对,**无三通道全 <8 的对 → 过门**;§4.2 语义检查过门(色相 222°,不占红/金/蓝/紫赤/绿语义段、不在 300°–345° 禁入带;材质色不进信息层与语义物件岗)。对比实测:对深素底 `#282220` 4.65:1、对舞台底 `#3E362C` 3.52:1(图形 ≥3:1 门槛);相对亮度 L≈0.261 落 §2 世界中层 0.22–0.45 带。验收:机检〈本值入板后全板色对中三通道差全部 <8/255 的对数 = 0〉
|
||||
- **卓尔浅紫灰皮 `#A79CB8`(DRIDER_SKIN,token 名暂拟、随实装批登记)**|语义/UI token 板(**分层①**,占 1 枚额度,**余量 1→0,额度用尽**;用户裁):蛛化卓尔精灵上体皮色(体块主色,L≈0.355 落 §2 世界中层带)。过门情况:第二道门同上行口径,**无三通道全 <8 的对 → 过门**;§4.2 语义检查过门(色相 264°,避开 300°–345° 禁入带,紫赤独占仍归 `#8F2F6A`;不占本节五语义段)。对比实测:对深素底 `#282220` **6.04:1**、对舞台底 `#3E362C` **4.57:1**——**两处均过图形 ≥3:1 门槛**(本轮新算)。验收:机检〈本值入板后全板色对中三通道差全部 <8/255 的对数 = 0〉
|
||||
- **换色合并登记五处(用户裁,部件色落值)**|按本表「不过门即触发换色合并、禁加色绕行」执行,五处**零新增额度**(各件原拟新增候选一律不取):① 主角铲刃浅铁灰(原拟 `#A8AEB8`)→ 并入 `FOG_MEMORY_INK #C4C4C4`,**部件取值 = `#C4C4C4`**;② 主角提灯铜色(原拟 `#C08A3A`)→ 并入 `GOLD_DEEP #B07A14`,**部件取值 = `#B07A14`**;③ 食人魔酋长暖褐皮(原拟 `#B08050` / `#A97C4E`)→ 并入 `暖石 #B8A582`,**部件取值 = `#B8A582`**;④ 石君王灰皮(原拟 `#9A968C` / `#949089`,按**次级皮**口径——板甲视同体块主色、灰皮属次级皮故不受 L 0.22–0.45 约束)→ 并入 `STONE #786E62`,**部件取值 = `#786E62`**;⑤ 轻甲护甲图标木色 `#8A5A34`(深素底下 2.72:1 不过门;原拟新增木色亮档 `#C49A5E`)→ 并入 `WARM_FAINT #CDB88C`,**部件取值 = `#CDB88C`**(8.08:1)。**一色两岗代价已随裁定接受**:① 的 `#C4C4C4` 语义岗 = 迷雾记忆墨(§6.5)、② 的 `#B07A14` 属金族(§4.2 金只说收益与兑现)——两者均作角色随身件材质色用,不进信息层与语义物件岗;③④⑤ 无语义岗冲突。验收:机检〈五处部件取值点全部改指合并目标色,四枚原拟新增候选值零入板〉
|
||||
- **换色合并登记三处**|按本表「不过门即触发换色合并、禁加色绕行」执行,三处零新增额度:①`#C4AC84`(地台顶缘受光线,代码 `STAND_STONE_RIM`)→ 并入 `#C9AF83`(掩尘,并与 §8.2 高墙口沿高光 `Color8(196,172,132)` 统一为同一枚);②`#5A4C3A`(地台描边,代码 `STAND_STONE_EDGE`)→ 并入 `#4C4038`;③`#3E342A`(舞台底,代码 `STAGE_BG`)→ 并入 `#3E362C`(状态槽底)。①②的绘制点全部改指合并目标色、源常量删除——程序化回退绘制与已落合并值的贴图保持一致;③随 §6.1 舞台背景插画批一并处置:背景资产接管该绘制面时本常量随绘制点退役或改指,禁单独为改值出批。验收:机检〈①②两枚源常量全仓零引用,绘制点全部改指合并目标色〉
|
||||
- **换色合并登记三处**|按本表「不过门即触发换色合并、禁加色绕行」执行,三处零新增额度:①地台顶缘受光线 `#C4AC84` 已并入 `#C9AF83`(掩尘枚 `BRICK`,与 §8.2 高墙口沿高光同枚)——源常量已删除(全仓零引用,退役断言测试串为预期例外),绘制点全部改指 `#C9AF83`;②地台描边 `#5A4C3A` 已并入 `#4C4038`(代码 `PLAZA_EDGE`,ui_kit 唯一落点)——源常量已删除,绘制点全部改指;③舞台底 `#3E342A`(代码 `STAGE_BG`)→ 并入 `#3E362C`(状态槽底)——随 §6.1 舞台背景插画批一并处置:背景资产接管该绘制面时本常量随绘制点退役或改指,禁单独为改值出批。程序化回退绘制与已落合并值的贴图保持一致。验收:机检〈①②两枚源常量全仓零引用,绘制点全部改指合并目标色〉
|
||||
|
||||
**对比硬指标(可测)**:数字可读性由**格底明度分档**承载——棋盘数字亮墨 **L≥0.75** 对**已开格底 L 0.08–0.14** ⇒ 直画对比 **≥4.5:1 恒成立**(WCAG AA,样张逐组合抽测冻结);**色牌后备**:色牌素色恒定 **L≥0.70**、牌上数字深墨 **L≤0.027** ⇒ 任意牌墨组合 ≥4.5:1(实测样例:#33261B/#F5EAD3 = 12.3:1)。未开格底槽(含全部图类型)相对亮度 **L≥0.30**(墙顶面受光档)、HSV 饱和 **≤0.55**、避 Boss 禁入色相带;已开格底走世界底层档(见上)。物件识别不依赖格底(§5.1 轮廓通道),旗面、金色不作识别依赖。验收:机检〈亮墨对已开格底 ≥4.5:1;未开格底 L≥0.30、饱和 ≤0.55;任意牌墨组合 ≥4.5:1〉 ←原二;地形变异 AC-9
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
## 文档状态
|
||||
|
||||
- 版本:1.26
|
||||
- 最近更新:2026-10-30(迭代 42 反哺点落文——ShopSession 行对外暴露格按委托壳拆除后实测直连面重写:完整直连方法清单+set_shop_pool 调用面改述;沿革查 git)
|
||||
- 版本:1.27
|
||||
- 最近更新:2026-11-01(迭代 46 反哺点落文——BattleRefreshFlow 行增补+damage_controller/action_economy/GrantSegment 三处现状化:全局受伤唯一发射口与消费族、换图刷新流程件、dig_paid 命中单点与折后价入参;沿革查 git)
|
||||
- 引擎:Godot 4.7.2-stable(GDScript 单语言;2026-09-07 锁定)
|
||||
- 评审模式:solo(`review-mode.txt`,2026-09-12 用户拍板——TD/LP 门禁按 solo 跳过,用户授权架构产出自主推进、迭代期回调)
|
||||
- 覆盖 GDD:现行全集(根索引=`design/gdd/02-系统清单.md`,文档树构成以根索引为准)
|
||||
@@ -89,7 +89,7 @@
|
||||
| **SlotStore**(`core/slot_store.gd`,D3 存档槽位域件,已建件——迭代 41 存量债批) | 存档三槽位文件域唯一所有者(自 save_manager 收编槽位族):槽位挂载与模板、激活与建删、槽位摘要窥视(peek 族);改名覆盖原语(_rename_overwrite)留 save_manager(IO 原语单点) | 槽位读写原语族+摘要投影(公开 10/类变量 4;SaveManager 与菜单消费方经 `save.slots.` 直连) | save_manager(注入路径与模板配置);FileAccess——LOW |
|
||||
| **MetaStateStore**(`core/meta_state_store.gd`,D3 存档内元进度数据件,已建件——迭代 41 存量债批) | 存档内元进度数据的读写唯一层(自 save_manager 收编 accessor 族:钥石/道具解锁/树节点与叉侧/锻造路线/同调/真视/计数器/摘要——数据读写原语,不含业务规则);save_manager 与 meta_progression 双 God Class 的共同病根=该数据域摊在两文件,本件即其归一 | 写口原语 13+只读投影 6(tree_state/forge_state/attune_state/career_state 四投影+keystone_balance/item_unlocked)=公开 19(add_keystone 私有 `_add_keystone`),零 _data 副本零缓存;MetaProgression 业务层与营地/锻造 UI 消费方经 `save.meta_state.` 直连(meta 的纯转发读方法已退役) | save_manager(序列化接线);FileAccess——LOW |
|
||||
| **RngService**(autoload,D2) | master_seed、各流 scope 计数器(封闭流词表现值以 `RngServiceCore.PURPOSE_TAGS` 为准;增流走 P1 评审) | `set_master_seed()`(唯一调用方 C2);`open_stream(stream)` 有状态门面;`derive_at(stream, scope)` 纯函数;只读计数器 | ConfigDB(无) | 无——纯逻辑 |
|
||||
| **action_economy**(A3) | AP/RAP 账本、last_round_end、轮次相位机 {Idle, Active, Waiting}、结束仲裁 | 意图与通知布尔面:notify_round_start / request_dig / request_stop / request_refresh / notify_settlement_done / notify_combat_end;预授权通道:grant_reserve_ap / finish_round_stop;ap/rap/phase 只读 | ConfigDB(ActionEconomyTable);effect_engine(事件发射 dispatch——基础层内同层引用);B1 回发 next_round_mode/battle_over | 无 |
|
||||
| **action_economy**(A3) | AP/RAP 账本、last_round_end、轮次相位机 {Idle, Active, Waiting}、结束仲裁;dig_paid 命中施加抽私有单点(_apply_dig_paid_hits——矿脉储能入池面) | 意图与通知布尔面:notify_round_start / request_dig / request_stop / request_refresh(收折后价入参——折价计算归 BattleRefreshFlow 单点)/ notify_settlement_done / notify_combat_end;预授权通道:grant_reserve_ap / finish_round_stop;ap/rap/phase 只读 | ConfigDB(ActionEconomyTable);effect_engine(事件发射 dispatch——基础层内同层引用);B1 回发 next_round_mode/battle_over | 无 |
|
||||
| **variation 定义**(A4) | VariationTable schema(现行 6 行:六 region——贫矿脉 global 行 2026-10-16 用户令屏蔽删行,global 型机制代码保留)与 F1 候选池门控谓词 | `variant_pool(level_index, board_type, node_type="")`(门控三维:unlock+board_types+节点身份——global 行仅 boss/elite 入池,缺省跳过零扰动);`global_variant_row(level_index, board_type, node_type)`(全局型单行决议访问器) | ConfigDB(VariationTable) | 无 |
|
||||
| **status_container**(B3) | 状态实例容器(战斗域生命周期、跨轮跨图延续) | 5 API:notify_battle_start / apply_effect / query_active / decay_round / notify_battle_end | ConfigDB(StatusEffectTable) | 无(RefCounted) |
|
||||
| **effect_engine**(内容数据驱动扩展批 iter17 建域) | 零运行时可变状态的系统(见「架构原则」条 8):全同步解释器——事件由宿主在明确代码点位显式调 dispatch 进件,命中序=装载声明序(feats→treasure→树规则)写死保种子复放,不是事件总线/事件循环;事件/事实/效果类型/算子四词表封闭 + 树规则合成订阅六键(posture 每关首轮窗/sense 两组限次 counter 闸·adv_ 前缀走冒险桶跨战斗持久) | rebuild(每战重建订阅表)/`dispatch(ctx, event, payload, facts)`/`validate_trigger_row` + 静态计数口 `counter`·`counter_add`·`counter_spend`·`bucket_of`·`counter_id_legal`(计数器读写只经 EffectContext 引用束,无导出/灌入接口) | ConfigDB(feats/treasure 行集)、EffectContext(四桶引用由宿主持有:round/battle 桶归编排器、level 桶归关卡域、adventure 桶归应用层——RunLedger 已随迭代 39 拆件批退役,桶字典由 adventure_runner 持有) | 无(零随机全确定) |
|
||||
@@ -119,7 +119,8 @@
|
||||
| **battle_orchestrator**(B1) | 段序骨架(七段结构冻结)、轮 facts 缓冲、可回放步骤流、[明细行协议](../../gdd/systems/战斗循环/战斗结算.md#明细流水每一行都能指回你刚才的哪一步棋)(基础行型+扩展行两层 + 字段分层,词表以 owner「明细流水」节为准)、条款③⑤闭合对账、**战斗域全部跨系统调用权**、效果引擎宿主面与树规则挂点施加面(**已拆出 BattleFxHost 并实装(2026-10-28 迭代 40——battle_fx_host.gd/reward_grant.gd 两件在库,效果引擎宿主面归 BattleFxHost 行承载,拆件细则见「战斗编排域拆件定稿」节);2026-10-29 零豁免裁设计闭合:RoundCycle/BattleFacts 两新件随批(宿主 38→15、S13 豁免第三条注销——见下两行与定稿节轴丁)**) | `begin_battle(encounter)`;窗口/刷新意图提交面(扮演 D1);`level_clear()`;步骤流(输出契约) | B2/B3/B4 全调用面(**唯一调用方=B1 域文件集:battle_orchestrator.gd + settlement/ 五段段类 + damage_controller + 拆件后三新件**);A3 request_refresh 代理 + 回发;A2 install/retire + 三事件订阅;A1 generate(attempt 非 scope 事件);D2 SettlementTable + set_reload_gate | 无(零随机、禁 await——切片 88 冒烟实证可回放) |
|
||||
| **BattleFxHost**(`core/battle_fx_host.gd`,B1 域·效果引擎宿主件,2026-10-26 编排域拆件设计定稿——实现批建件) | 效果引擎挂点施加面唯一承载(自 battle_orchestrator 收编 fx 族):事件发射与事实判定(_fx_emit/_fx_fact)、主角 AC 基线与本轮/本战 AC 累积、bonus_delta 四轴累积(战末宿主 drain 汇入账本)、揭示待兑队列与兑付(含 _fx_revealing 再入闸——同步信号回环防二次缓冲二次兑付)、树规则合成订阅的 round/battle 桶计数器持有(桶随编排器生灭语义不变) | 构造=引用束注入(防 _init max-parameters 新键);bind 时注入 emit Callable(行发射经宿主协议面单点)与兑付 Callable(RewardGrant 授予面——揭示队列 flush 回调);只读投影分两类消费方:AC 累积/bonus_delta 供宿主呈现快照与战末 drain,揭示态供宿主 A2 订阅旁路判定;`luck_bias_for(cell_count) -> int` 偏运合计查询口(体内三参形 dispatch——reward_roll 发射与 bias_rewards 求和自 RewardEconomy 收回本件,RewardEconomy 经注入 Callable 消费) | EffectEngine(EffectContext 引用束);RngServiceCore(fx_reveal 封闭流——除该流外零随机);A2 minesweeper(板读与 fx_reveal 调用);A3 action_economy(queue_ap_delta/charge_layers 读);B3 status_container 读;B2 unit_container 读(hp_ratio);DamageController(set_hero_ac_override);ConfigDB;encounter 引用 | 无(零 await——效果引擎全同步解释器) |
|
||||
| **RewardGrant**(`core/reward_grant.gd`,B1 域·奖励授予件,2026-10-26 编排域拆件设计定稿——实现批建件) | 奖励授予唯一兑付管线(自 battle_orchestrator 收编 grant 族):极性字典路由与封印溢价兑付(_grant_routed)、三种行应用(flat/percent/gp)、伤害单据提交面(_submit 族)、清图奖励与身份授予、秘宝使用编排(use_treasure 四步)、战斗域 GP 缓冲 escrow 与授予段暂存伤害闸(_defer_board_damage/_deferred_board) | use_treasure 编排入口(treasure_interact_controller 经组合根现值回调直连);授予入口(结算段类直调);只读投影(escrow 读与 GP 掉落合计——宿主呈现快照与 _roll_gp_drop 消费) | B4 RewardEconomy(polarity_row/grant);B1 域 DamageController(开单);BattleFxHost 引用(treasure_used 事件发射与计数器消耗);A2 minesweeper(校验回调/fx_reveal/remove_mines_in);A3 action_economy(相位闸/grant_ap/queue_ap_delta);B3 status_container(apply_effect/池读);B2 unit_container(hero_unit/heal);ConfigDB;注入 emit Callable、宿主 fatal Callable(battle_result 状态机唯一写点留宿主)、宿主 attune 读投影(_attune_safe_seen)、encounter 账本引用;TreasureItems 经宿主 setter 转发注入(库存注入时序在宿主构造之后) | 无(零随机零 await——授予期零随机口径,roll 值授予前已定) |
|
||||
| **damage_controller**(B1 域·伤害单据管线) | 伤害单据唯一兑现管线(单据九栏目声明→分量掷点/克制修正/伤害下限归一→明细行发射;双方同规) | 兑付入口(编排侧开单)+ fx 揭示回调注入位 | B2 单位实例(单据目标传入);B1 注入(EffectContext 引用束与编排回调) | 无 |
|
||||
| **damage_controller**(B1 域·伤害单据管线) | 伤害单据唯一兑现管线(单据九栏目声明→分量掷点/克制修正/伤害下限归一→明细行发射;双方同规);`damage_taken` 唯一发射口(_emit_hero_damage_taken)+唯一消费族(_apply_hero_damage_effects)——敌方攻击/地形/危险格/错误封印直伤四路径统一发射,board_flat_hero 结账前统一发射 | 兑付入口(编排侧开单)+ fx 揭示回调注入位 | B2 单位实例(单据目标传入);B1 注入(EffectContext 引用束与编排回调) | 无 |
|
||||
| **BattleRefreshFlow**(`core/battle_refresh_flow.gd`,B1 域·换图刷新流程件,已建件——迭代 46) | 弃图刷新流程唯一承载(自编排器收编):刷新可用性门(相位/每轮上限/储备门槛)、折后价单点(_effective_refresh_cost——专长行声明序第一命中、floor 取整、can 与执行同源)、换图执行序(扣储备→used+1→旧资源退役→旧板退役→装新板→board_refreshed 成功事实登记) | can_refresh/execute 两公开入口;调用路径呈现层→编排器两公开方法单行转发→本件;A3 request_refresh 收折后价入参 | 编排器(宿主,B1 域内唯一调用方约束同族适用);A3 action_economy(折价扣费与拒绝判据);A2 装板壳(装板与退役);RewardGrant(apply_board_refreshed 成功事实消费);feats 折价行经 ConfigDB;static_scan S7_B1_SET 已增补本件(判据口径不变) | 无(零随机零 await) |
|
||||
| **BoardInstaller**(`core/board_installer.gd`,B1 域·装板域件,2026-10-29 尾波清偿批设计闭合——实现批建件,细则见「战斗编排域拆件定稿」节轴丙) | 棋盘安装与变异布置域唯一承载(自 battle_orchestrator 收编装板族六函数):生成受理、全局作用域变异决议、资源摇号资格域组装(roll_board 恰一次)、region 变异决议与连通片布置;BoardGenerator 实例随件自建自接线(宿主成员退役)——宿主侧装板后状态复位(封印/完美计数清零、板序推进、board_changed 发射、秘宝叠加层退役)留宿主薄壳,时序逐字保持 | `install(during_round) -> bool` 单入口;构造=引用束注入(rng/db/minesweeper/reward_economy/encounter 只读引用+宿主 fatal Callable——防 _init max-parameters 新键) | A1 board_generator(件内持有);A2 install_board;B4 roll_board/board_skew 写;A4 变异决议行集经 ConfigDB;board_gen/variant_place 两封闭流随件、流名与开流时点零漂移 | 无(零 await——装板全同步) |
|
||||
| **RoundCycle**(`core/round_cycle.gd`,B1 域·轮循环驱动件,已建件——迭代 44) | 轮循环驱动域唯一承载(自宿主收编 7 成员):结算五段段件持有与驱动、重入门闸、开轮摇号、踩雷账 | 三参直构(host/fx_host_ref/reward_grant_ref——五段构造透传不落成员);段驱动入口由宿主接线调用;实测类变量 8/公开方法 3 | B1 宿主;settlement/ 五段段类;A3 相位读 | 无 |
|
||||
| **BattleFacts**(`core/battle_facts.gd`,B1 域·战斗事实件,已建件——迭代 44) | 战斗事实域唯一承载(自宿主收编 14 成员):受理事实(encounter)、轮 facts 缓冲(reveals/seals/path)、封印判定账、事实溯源、同调快照读面;attune 状态两成员随件(行为函数留宿主) | 零参直构;宿主与段类经注入引用读写;实测类变量 15(贴顶)/公开方法 4(reset_round+三 mark 写口) | B1 宿主;A2/A3 只读 | 无 |
|
||||
@@ -131,7 +132,7 @@
|
||||
|
||||
### 战斗域装配现状(迭代 27——2026-10-17 用户裁写入;RunLedger 段已随迭代 39 拆件批退役,四账去向见下「冒险域拆分(现状登记)」节)
|
||||
|
||||
- **结算五段**:B1 编排器的每轮结算序列拆为 `game/core/settlement/` 五个段类——GrantSegment(①授予段,含封印判定与 counter/grant 助手单点)→ AuraSegment(②增益/减益段)→ CombatSegment(③战斗段)→ DecaySegment(④衰减段)→ VerdictSegment(⑤判定段,返回裁定,终局早退语义留 B1)。段序骨架冻结于 `SettlementTable.segment_order` 语义,B1 退为段序编排+接线;段类可直接 `new()` 单测(`settle_segments_test` 在役)。
|
||||
- **结算五段**:B1 编排器的每轮结算序列拆为 `game/core/settlement/` 五个段类——GrantSegment(①授予段,含封印判定与 counter/grant 助手单点、成功刷新事实消费面 apply_board_refreshed 与轮末治疗计数兑付面)→ AuraSegment(②增益/减益段)→ CombatSegment(③战斗段)→ DecaySegment(④衰减段)→ VerdictSegment(⑤判定段,返回裁定,终局早退语义留 B1)。段序骨架冻结于 `SettlementTable.segment_order` 语义,B1 退为段序编排+接线;段类可直接 `new()` 单测(`settle_segments_test` 在役)。
|
||||
|
||||
### 战斗编排域拆件定稿(2026-10-26 用户裁写入——gdstyle 存量债波 1 设计闭合;同日独立审查(grilling+godot-master 双子代理)阻断 8 条去重 6 组全折入本节,v1.18;2026-10-28 迭代 40 实现批合回(合并提交 514457d1),本节为现状登记)
|
||||
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
>
|
||||
> **兑付频率(先看这条,它是三条渠道的共同前提)**:奇物**不是打一场战斗给一份**。关内的普通战斗节点打完了什么也不给;一关之内奇物**只兑付一次**,触发点是**关底 Boss 被击败**——而按 [冒险结构](冒险结构.md) 的定义,打掉关底 Boss 恰好就等于"通过这一关",这两件事是同一个时刻,不是一条链上的两步。
|
||||
>
|
||||
> 状态:**已实现**(2026-10-04 双层 BD 实施批落地);现行为 v1.3。本文件是奇物的唯一定义文档。
|
||||
> 状态:**已实现**(2026-10-04 双层 BD 实施批落地);现行为 v1.4。本文件是奇物的唯一定义文档。
|
||||
>
|
||||
> 数值纪律:本文件只写概念、取值域与指路;每件给多少、效果是什么一律不进正文,事实源是 `data/tables/feats.tres` 与 `data/tables/adventure.tres`。
|
||||
|
||||
## 专长(重设计·基础框架 v1)
|
||||
|
||||
> 本节是专长分类的现行事实源(2026-10-07 用户终审认同写入文档)。件表为设计声明——数值全 provisional 归调参批;命名全为代号,正式命名归用户。**新框架已实装:`feats.tres` 30 行=基础 27+迁入 2+规则豁免 1,行为与数据行 1:1。**
|
||||
> 本节是专长分类的现行事实源(2026-10-07 用户终审认同写入文档)。件表为设计声明——数值全 provisional 归调参批;命名全为代号,正式命名归用户。**新框架已实装:`feats.tres` 37 行=基础 27+迁入 2+规则豁免 1+换图系 7(换图系七件 2026-11-01 迭代 46 落表),行为与数据行 1:1。**
|
||||
|
||||
### 设计原则
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|---|---|---|
|
||||
| 血税 | 本局:踩雷 −2 最大生命;标中 +1 攻击(**均下一战起生效**——战末汇入冒险加算区) | 双向都痛都爽,一句话讲得清;双向同账、本局累积、冒险收束清零。生命上限/攻击系属战界重建属性,即时改会被重建冲掉,故滞后一战兑付(2026-10-12 追认⑨回写;卡面 desc 同步补「下一战起生效」) |
|
||||
|
||||
### 换图系(7 件,设计定稿,待实现)
|
||||
### 换图系(7 件,已实装——2026-11-01 迭代 46 落表 `feats.tres`,稀有度 14/13/10/0、每件持有上限 1)
|
||||
|
||||
换图系把「弃图刷新」从坏图逃生改成主动构筑行为。两件基座分别解决 RAP 的来源与价格;后续专长让成功刷新产生输出、生存或 GP 资源收益。七件不要求一次拿齐,不设强制先拿基座、集件标签或集件奖励。
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
- **成功才触发**:后续五件只认成功换图;刷新被拒绝时不产生事实,也不给输出、生存或资源收益。同一轮多次成功刷新按发生顺序逐次登记。
|
||||
- **轮末兑付**:刷新不新增结算段。崩壁冲击走本轮战斗段末结账,石层缓冲在每次主角受伤时消费,坑道小憩与矿道红利走本轮授予段兑付。
|
||||
- **全局受伤面**:石层缓冲覆盖敌方攻击、危险格、错误封印资源格与地形造成的主角伤害;临时生命值不在本流派设计范围内。
|
||||
- **基线不变**:没有这些专长时,RAP 来源、刷新成本、清图奖励与伤害结果保持原规则。数值与稀有度归 `feats.tres`,落表前本节只作设计声明。
|
||||
- **基线不变**:没有这些专长时,RAP 来源、刷新成本、清图奖励与伤害结果保持原规则。数值与稀有度归 `feats.tres`(已落表——稀有度档 14/13/10/0、每件持有上限 1;数值全 provisional 归调参批)。
|
||||
|
||||
### 迁入登记(秘宝域迁出件;实装批落地后并入件表)
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 地图战斗资源
|
||||
|
||||
> 一句话:格面资源的产出、极性字典与清图奖励封装
|
||||
> 状态:已定稿(自旧体系迁移);现行为 v1.3
|
||||
> 状态:已定稿(自旧体系迁移);现行为 v1.4
|
||||
|
||||
## 设计目的
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
|
||||
### 清图奖励对象:整图封装,可配置可替换
|
||||
|
||||
清图奖励不属于任何一格的格面资源——它是作用域为整张板的独立奖励对象:把一张图的雷全部清完(全部安全格开完)时结算发的那一份。装板摇号时与格子资源同批判尾摇定身份;清图批兑付恰好一次;完美封印(零误标且至少一次封印标中)追加第二份同身份兑付。
|
||||
清图奖励不属于任何一格的格面资源——它是作用域为整张板的独立奖励对象:把一张图的雷全部清完(全部安全格开完)时结算发的那一份。装板摇号时与格子资源同批判尾摇定身份;清图批兑付恰好一次;完美封印(零误标且至少一次封印标中)追加第二份同身份兑付。清图奖励只在清图批兑付:弃图刷新不触发清图事件,换来的新图不发清图奖励;刷新专长的固定 GP 收益走战斗内缓冲入账,不属清图奖励封装。
|
||||
|
||||
它是可配置可替换的封装:数据面上是清图池里的一行(现行默认槽 clear_default),换行即换内容,机制零改动。按图类型差异化已留结构位——`clear_<图类型>` 命名空间预留,不同地图类型可以配不同的清图奖励;词表现行 = {dungeon, underdark, deep_underdark}(2026-09-19 定稿两值、第三关内容批 2026-09-20 增 deep_underdark,玩家侧「地图类型」),差异化内容启用随内容批。
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 战斗结算
|
||||
|
||||
> 一句话:轮末结算的编排与逐行兑现
|
||||
> 状态:已定稿(自旧体系迁移);现行为 v1.4
|
||||
> 状态:已定稿(自旧体系迁移);现行为 v1.5
|
||||
|
||||
## 设计目的
|
||||
|
||||
@@ -266,9 +266,9 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值
|
||||
|
||||
挖掘期刷新是玩家在挖掘中途主动换图,经[行动经济](../排雷循环/行动经济.md)扣费:扣费成功后按"旧板退役、生成新板、装板、资源预分配恰一次、变异布置"编排,本轮不打断——没有结算段、没有轮次结束。储备不足被拒是玩家决策的合法结果,不是编排错误。刷新图不发清图奖励,完美封印计数随装板重置。
|
||||
|
||||
### 换图系专长:刷新事实与本轮兑付(设计定稿,待实现)
|
||||
### 换图系专长:刷新事实与本轮兑付(已实装——2026-11-01 迭代 46)
|
||||
|
||||
持有换图系后续专长时,成功刷新除执行上述换图编排外,还产生一次 `board_refreshed` 事实。事实只在新板装板成功后登记;刷新被拒绝时不产生事实,任何后续效果都不触发。同一轮多次成功刷新按发生顺序逐次登记,不合并成一次。
|
||||
持有换图系后续专长时,成功刷新除执行上述换图编排外,还产生一次 `board_refreshed` 事实——它是换图系效果兑付的统一事实挂点。事实只在新板装板成功后登记恰一次;刷新被拒绝时不产生事实,任何后续效果都不触发。同一轮多次成功刷新按发生顺序逐次登记,不合并成一次。
|
||||
|
||||
刷新只登记事实,不当场插入结算。各效果在既有五段与对应消费点兑付:
|
||||
|
||||
@@ -280,7 +280,7 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值
|
||||
| 坑道小憩 | 每次刷新事实累计 1 点恢复量,最多 3 点;本轮授予段合计回复生命,封顶生命上限,随后清零;满血时记未生效行 |
|
||||
| 矿道红利 | 每次刷新事实固定获得 1 GP,走战斗内 GP 缓冲并在授予段留痕;不按旧图探索进度折算,也不与清图奖励绑定 |
|
||||
|
||||
全局受伤事件统一:`damage_taken` 是主角受到伤害的唯一效果事件,覆盖敌方攻击、危险格、错误封印资源格与地形造成的主角伤害。石层缓冲订阅该事件并在现行伤害下限之前消费;旧有订阅同一事件的专长也按这一完整语义生效。临时生命值不在此机制内。
|
||||
全局受伤事件统一:`damage_taken` 是主角受到伤害的唯一效果事件——敌方攻击、危险格、错误封印资源直伤与地形四条伤害路径统一经同一发射口发出、同一消费族消费,对该事件的全部既有订阅(减免、护甲修正、反击攒点、护盾吸收)对四条路径同等生效。石层缓冲订阅该事件并在现行伤害下限之前消费。临时生命值不在换图系流派设计范围内。
|
||||
|
||||
崩壁冲击若击杀最后敌人,仍由本轮判定段按既有顺序判胜,不新增挖掘期即时胜利出口。换图系效果使用扩展行留痕:崩壁冲击走伤害单据,石层缓冲在受伤消费行体现减免,坑道小憩与矿道红利分别走治疗与 GP 入账记录。刷新事实来源不指向单一棋盘格,使用明细流水的专长刷新效果来源豁免,不伪造来源格。
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 行动经济
|
||||
|
||||
> 一句话:每轮行动点怎么花、停手与刷新的代价
|
||||
> 状态:已定稿(自旧体系迁移);现行为 v1.3
|
||||
> 状态:已定稿(自旧体系迁移);现行为 v1.4
|
||||
|
||||
## 设计目的
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
停手与刷新合起来构成这本账的基线节拍:满行动点一轮停手,正好攒够一次刷新。行动点修正队列会扰动该节拍的实际兑现(+1 轮可多挖一格),不变式本身不动;对账归曲线调参批。
|
||||
|
||||
### 换图系专长对储备与刷新的改写(设计定稿,待实现)
|
||||
### 换图系专长对储备与刷新的改写(已实装——2026-11-01 迭代 46 落表 `feats.tres`)
|
||||
|
||||
换图系两件基座分别改写 RAP 的来源与刷新价格。它们只给持有专长的玩家增加规则,不改变无专长时的基线账本。
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
| 矿脉储能 | 每次付费挖格被受理后,额外获得表值 RAP;安全格与危险格同口径 | 连锁展开只随首格的一次付费动作结算,不逐格追加;封印、移动、刷新不产 RAP |
|
||||
| 省力周转 | 弃图刷新的 RAP 成本为基线的 50% | 只改价格;AP、轮次、每轮刷新上限与换图流程不变 |
|
||||
|
||||
两件基座可以同时持有并叠加:付费挖格照常产 RAP,刷新同时按半价扣费。两条规则作用在不同账户入口,不互相覆盖,也不设互斥。刷新仍须储备达到折后门槛才受理;储备不足或超过每轮次数上限时拒绝,状态不变。RAP 仍在战斗结束清零,刷新本身不返 RAP。
|
||||
两件基座可以同时持有并叠加:付费挖格照常产 RAP,刷新同时按半价扣费。两条规则作用在不同账户入口,不互相覆盖,也不设互斥。折后价向下取整,受理门槛判断与实际扣费使用同一个折后值,只改价格不改拒绝判据——刷新仍须储备达到折后门槛才受理;储备不足或超过每轮次数上限时拒绝,状态不变。RAP 仍在战斗结束清零,刷新本身不返 RAP。
|
||||
|
||||
无矿脉储能时,挖格不新增 RAP;无省力周转时,刷新成本仍读全局基值。后续输出、生存与资源专长如何使用成功刷新这个事实,归[战斗结算](../战斗循环/战斗结算.md)。
|
||||
|
||||
@@ -249,8 +249,8 @@
|
||||
| move_ap_cost | int | 表值(冻结 0) | 移动免费——冻结,非调参项 |
|
||||
| chain_ap_cost | int | 表值(冻结 0) | 连锁免费——冻结,非调参项 |
|
||||
| refresh_cap_per_round | int | 表值(provisional,结构位预留) | 每轮刷新上限,开轮重置计数 |
|
||||
| (跨表)矿脉储能产 RAP | int [1, 64] | 设计定稿,待入 `feats.tres` | 每次受理的付费挖格兑付一次;连锁不逐格追加 |
|
||||
| (跨表)省力周转成本率 | percent | 50%(结构已裁,待入 `feats.tres`) | 只改持有者的刷新价格;双基座叠加时不覆盖矿脉储能 |
|
||||
| (跨表)矿脉储能产 RAP | int [1, 64] | 表值(已入 `feats.tres`,provisional 归调参批) | 每次受理的付费挖格兑付一次;连锁不逐格追加 |
|
||||
| (跨表)省力周转成本率 | percent | 表值 50%(已入 `feats.tres`) | 只改持有者的刷新价格;双基座叠加时不覆盖矿脉储能 |
|
||||
| (跨表)跨冒险行动点加成 | int [0,10] / int [0,99],冒险表 | adventure_table bonus_ap_flat / bonus_cap_ap(provisional) | 三选一 AP 件兑现值与全冒险次数上限;加成轴语义见「跨冒险行动点加成轴」节 |
|
||||
|
||||
字段名注记:2026-09-18 措辞完成批已全链对齐正式名——表字段与本文行名统一为 `refresh_cap_per_round`,刷新入口命名与表字段口径对齐(命名统一登记兑现,切片临时名零残留)。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **Status**: Complete(现行)
|
||||
> **Author**: user + ux-designer
|
||||
> **Last Updated**: 2026-10-29
|
||||
> **Last Updated**: 2026-11-01
|
||||
> **Platform Target**: PC (Steam)——Keyboard/Mouse 主(全部操作纯鼠标可完成)、Gamepad Partial 非 MVP、Touch None(同 technical-preferences)
|
||||
> **上游修订依赖**: 弃图刷新挖掘期受理已随布局决策 4 落稿上游(2026-09-12:行动经济 Active 受理 + 每轮上限 2 次、排雷玩法 Active·仅刷新路径装板、战斗结算的挖掘期刷新编排 + 恒同盘不变、系统索引的刷新规则同步——见 OQ11)
|
||||
> **Template**: UX Spec
|
||||
@@ -141,7 +141,7 @@
|
||||
```
|
||||
|
||||
- N = 棋盘长宽两边的较大者;格间距 2px;垂直预留 24px(上 12 / 下 12);悬崖厚度 8px;结构钳制区间 [26, 46]px。
|
||||
- 可读下限 30px——与结构钳制分开:钳制管算式不越界,下限管玩家能否看清。
|
||||
- 格边长可读性以用户验收的现行画面为锚点(2026-11-01 用户裁——现行渲染值即基准,基座档 14×14=28px 达标);全域不设人造的格边长可读阈值。结构钳制 [26, 46] 只管算式结果不越界;格边长接线守卫=生产写入值与上式单点算式的返回值严格相等,最大板型的推定读数仅留痕观察、不作判红依据。
|
||||
- N 的取值与每关板型的对应关系读[棋盘生成](../systems/排雷循环/棋盘生成.md),现行值的事实源是 `data/tables/board_gen.tres`。
|
||||
- 数字字号 = max(18, ceil(格边长 × 0.5)),像素字体整数倍缩放(canvas_items stretch 保证清晰)。
|
||||
|
||||
|
||||
@@ -198,6 +198,7 @@ func _suites() -> Array:
|
||||
{"path": "res://tests/unit/battle_settlement/roll_multiplier_test.gd", "expect": 0}, # 掷点与乘区宿主(敌攻击类型轴/护甲掷点行为面/乘区接线/伤害类型克制与标错/fresh 池攻击链——批 B 自 smoke_all 迁入)
|
||||
{"path": "res://tests/unit/battle_settlement/seal_polarity_test.gd", "expect": 0}, # 封印与极性宿主(末点 AP 封印/封印不可逆四情况/清图奖励双份与弱形式/刷新 provenance 守卫/极性路由与封印溢价/负向字典/格面资源资格——批 B 自 smoke_all 迁入)
|
||||
{"path": "res://tests/unit/battle_settlement/round_flow_skill_pool_test.gd", "expect": 0}, # 轮内流与技能池宿主(全战斗回放/轮内刷新与 V5 快照单源/遭遇区间骰/结算五段全序/技能池数据面·回放独立·EV 锚·死亡打断·校验拒绝/妨害附加/四桶计数——批 B 自 smoke_all 迁入)
|
||||
{"path": "res://tests/unit/battle_settlement/refresh_feats_test.gd", "expect": 0}, # 换图系专长七件宿主(迭代 46 卡A——基座产 RAP 与折价同源/成功事实恰一次/全局受伤四路径恰一次/石层缓冲/崩壁延迟/蓄力层/坑道小憩/矿道红利 GP/七件数据与牌库/无专长基线;原经卡片申报走 02 关联档选跑,卡片退役后补登记由 02 全套件承接)
|
||||
{"path": "res://tests/unit/battle_settlement/variant_placement_test.gd", "expect": 0}, # 变异布置宿主(战内布置段门控与数量公式/全局变异兜底回落与资源面偏斜——批 B 自 smoke_all 迁入)
|
||||
{"path": "res://tests/unit/battle_settlement/skill_unlock_test.gd", "expect": 0}, # Boss 半血解锁技·容器机制(门谓词/闩不可逆/双面过滤/保底不逼锁定/零扰动)
|
||||
{"path": "res://tests/unit/battle_settlement/extended_row_violation_test.gd", "expect": 1, "negative": true}, # 卡④ wr2-np 扩展行必载 effect_id 负路径(行协议运行期违约面首个负面套件——独立进程豁免错误扫描)
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
# 迭代 46 GDD 反哺点清单(2026-10-31)
|
||||
|
||||
> 接收方:待办清单「反哺点专条」通道——用户会话逐条裁决后由文档批写入 `design/`,写入后本清单条目清掉(吸收即死)。
|
||||
> 依据:迭代 46 实现报告(同目录)与实测评读数。实现批禁写 `design/`,以下为待裁决落文面。
|
||||
|
||||
## 卡A 换图系双基座七件批
|
||||
|
||||
1. **[奇物.md]** 基础件表(或专长实装状态句):七件(矿脉储能/省力周转/崩壁冲击/蓄力周转/石层缓冲/坑道小憩/矿道红利)由设计声明改为**已实装**(feats.tres 37 行、稀有度 14/13/10/0、cap 均 1);「双基座叠加、后续效果本轮五段结算内兑付」已在案零改述。依据=实现报告 §二 V2–V11。
|
||||
2. **[行动经济.md]** 两件基座由「待实现」改为在册:付费挖格 +1 RAP(受理后一次性入池、拒绝轮零入池)、刷新成本折价 50%(floor 取整、can 与执行同源、只改门槛与扣费不改拒绝判据)。依据=V2/V3。
|
||||
3. **[战斗结算.md]** 全局 `damage_taken` 落码状态补记:敌方攻击/地形/危险格/错误封印资源直伤四路径统一经唯一发射口与唯一消费族;**地形路径消费面自三件扩为五件(+shield)——铁壁自此对地形伤害生效;危险格/错误封印直伤路径自此纳入 damage_taken 订阅面**(用户已裁全局语义,实现报告 §六);成功刷新事实 `board_refreshed` 为七件订阅主挂点(装新板后恰一次发射)。依据=V5/V4。
|
||||
4. **[地图战斗资源.md]** 清图奖励语义确认句:矿道红利不绑清图奖励(每次成功刷新固定 +1 GP 走战斗内缓冲,不读旧图探索进度、不触发清图事件;刷新图零清图奖励守卫不变)——若现行正文已含此意则零改(本行核对性反哺)。依据=V10/V12。
|
||||
5. **[architecture.md]** 「模块归属」增补/现状化三行:①**BattleRefreshFlow**(新 B1 域拆件——刷新可用性门/折价扣费/换图执行/成功事实登记,调用路径呈现层→编排器单行转发→流程件→行动经济/装板壳/授予段;static_scan S7_B1_SET 已随批增补该文件,判据口径不变);②**damage_controller** 行现状化(damage_taken 唯一发射口 `_emit_hero_damage_taken`+唯一消费族 `_apply_hero_damage_effects`(原名 _enemy_shield_apply 改名)+board_flat_hero 结账前统一发射);③**action_economy** 行现状化(dig_paid 命中施加抽私有 `_apply_dig_paid_hits` 单点;request_refresh 收折后价入参)+**grant_segment** 行现状化(apply_board_refreshed 成功事实消费+round_end heal value_counter 兑付面)。依据=实现报告 §五/§八.6。
|
||||
|
||||
## 卡B 站桩名字行提档与地台色合并批
|
||||
|
||||
6. **[art-bible.md §4.1]** 换色合并登记①②句的代码指称换代:①「代码 `STAND_STONE_RIM`」②「代码 `STAND_STONE_EDGE`」两源常量已删除(全仓零引用——唯一残留=退役断言测试串,预期例外);②合并目标 `#4C4038` 补代码名 **`PLAZA_EDGE`**(ui_kit 唯一落点)。依据=卡B 对照表 3/4 行+grep 取证(实现报告 §三)。
|
||||
7. **[art-bible.md §8.2]** 高墙瓦片体系条口沿高光行:「Color8(196,172,132)」值随换值换代为 **`#C9AF83`(201,175,131)**(并档掩尘枚 BRICK 单点);程序化回退顶缘线与口沿高光两绘制点已改指。依据=对照表 3 行。
|
||||
|
||||
## 卡C 棋盘格边长口径收口批(停摆——随裁决落文)
|
||||
|
||||
8. **[battle.md §棋盘格尺寸公式]** 算例表(:148-152)与实机偏差实测落点:1280 档实板可用面积 **(1022, 454)**(算例假设 486 可用高)→ 实测 L1 格边 40px、13×13 推定 30px(恰达标)、**14×14 推定 28px(低于可读下限 30)**;1080 档 (1662, 734) → L1=46、13/14 推定=46(钳制顶格)。落文方向随「30px 下限适用域」裁决(读法甲/乙见停机呈报 §三):读法乙需补「下限按视口档分级」条+算例表填实测值或标注「按旧布局口径」。依据=停机呈报 §一/§四。
|
||||
|
||||
## 术语表
|
||||
|
||||
9. 零新增术语——本批新名(BattleRefreshFlow/_cell_for/PLAZA_EDGE/counter_id 三枚)均属代码标识符与数据行键,不入术语表(登记口径=概念规范名)。
|
||||
@@ -1,12 +0,0 @@
|
||||
# 迭代 46 GDD 反哺点清单——卡C(2026-11-01)
|
||||
|
||||
> 接收方:待办清单「反哺点专条」通道——用户会话逐条裁决后由文档批写入 `design/`,写入后本清单条目清掉(吸收即死)。
|
||||
> 卡A/卡B 反哺条见同目录 `iter46-反哺点-2026-10-31.md`;本文件只收卡C v2.0。
|
||||
|
||||
1. **[battle.md §棋盘格尺寸公式 :144]** 「可读下限 30px——与结构钳制分开:钳制管算式不越界,下限管玩家能否看清」整句**退役**:整句删除,或改写为「格边长可读性以用户验收的现行画面为基准;结构钳制 [26,46] 管算式不越界」(措辞由文档批裁)。依据=2026-11-01 用户三项裁定(锚点=用户验收的现行渲染值,基座档 14×14=28px 达标;30 无实测背书)+停机呈报读数链(`reports/停机呈报-棋盘格边长口径收口批-2026-10-31.md`)+实现报告 §四锚点留档(`iter46-实现报告-卡C-2026-11-01.md`)。随句建议同节载明判据现行形态:全域禁人造格边长可读阈值,接线守卫=生产写入值与单点算式严格相等,最大板推定读数留痕不作判红。
|
||||
|
||||
2. **作废声明**:`iter46-反哺点-2026-10-31.md` 第 8 条(battle.md 算例表改数——随「30px 下限适用域」读法甲/乙裁决落文)**作废**——`:148-152` 算例表已随布局几何单点化批(1cdef6ba)退役,无落点;读法甲/乙之争已被 2026-11-01 用户三项裁定取代(下限句退役,不再有适用域问题)。文档批落文时以本条为准,10-31 清单第 8 条不再执行。
|
||||
|
||||
## 术语表
|
||||
|
||||
零新增术语——本批新名 `_cell_for` 属代码标识符,不入术语表(登记口径=概念规范名)。
|
||||
@@ -1,109 +0,0 @@
|
||||
# 迭代 46 实现报告(2026-10-31)
|
||||
|
||||
> 批次:迭代 46 三卡——卡A 换图系双基座七件批 · 卡B 站桩名字行提档与地台色合并批 · 卡C 棋盘格边长口径收口批。
|
||||
> 工作区:`D:\code\g-plan2-iter46`(分支 iter46,自 b5b2c555 检出)。
|
||||
> **批内状态总览:卡A 收口 · 卡B 收口 · 卡C 停摆(L3 #2 预设停机点,呈报见主区 `reports/停机呈报-棋盘格边长口径收口批-2026-10-31.md`)**。合并阻塞等裁决。
|
||||
|
||||
## 一、各卡状态
|
||||
|
||||
| 卡 | 状态 | 出口证据 |
|
||||
|---|---|---|
|
||||
| 卡A 换图系双基座七件批 | **收口**(T0–T8 全落) | `tools/run_all_gates.sh --code` 7 闸全绿(回执 commit 45b53d68 时点);此后 S9/S7 修正与卡B 提交待迭代级复跑 |
|
||||
| 卡B 站桩名字行提档与地台色合并批 | **收口**(T0–T3 全落) | standee_present_values_test 26 checks 绿;golden 板面三张 0.00% 留痕;gdstyle 零新增键 |
|
||||
| 卡C 棋盘格边长口径收口批 | **停摆**(T0 完成;T1–T3 改动已验未提交;T4 未走) | 卡C §9 L3 #2:实板可用面积代入 14×14 得 28px < 30px(1280 档)——停卡呈报等裁决 |
|
||||
|
||||
## 二、卡A 实际对照表(改动—验收)
|
||||
|
||||
| 需求点 | 改动(文件:行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 结果 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| V1 词表扩签 | effect_engine.gd EVENTS 20→22/MINE_EVENTS 同步换图刷新面/EFFECT_KINDS 32→34;forge_table/effect_words 计数换代 | `effect_words_t1_test.gd:_init`(新增①-a 两断言);`forge_table_test.gd:_test_effect_kinds_closed` | 单元 | validate 与整表加载 | EVENTS=22、EFFECT_KINDS=34、出域仍拒(旧负例全保留) | 绿(20/41 checks) |
|
||||
| V2 矿脉储能 | action_economy.gd dig_paid 命中环累计 grant_reserve_ap(扣费受理后一次性入池·拒绝轮零入池);feats.tres vein_reserve 行 | `refresh_feats_test.gd:test_reserve_on_accepted_dig` | 接口 | `settle_batch(dig)`(AutoPlayer 真实挖掘) | RAP 恰+1(8→9)、AP 按表扣(8→7)、耗尽轮增量==受理挖数 | 绿 |
|
||||
| V3 省力周转 | BattleRefreshFlow `_effective_refresh_cost`(声明序第一命中 floor(base×mult/100),can 与执行同源);request_refresh 收折后价入参;easy_swap 行 | `test_refresh_discount_gate_and_charge`;`test_double_base_stack` | 接口 | `player_request_refresh()` | base 8→扣 4;两次折后扣尽 8→0;门槛拒零受理;双基座同场生效 | 绿 |
|
||||
| V4 成功事实 | battle_refresh_flow execute 成功序(折价扣RAP→used+1→旧资源退役→旧板退役→装新板→apply_board_refreshed);编排器两公开方法单行转发 | `test_board_refresh_fact_only_on_success` | 集成 | `player_request_refresh()` | 非 Active/每轮上限/RAP 不足三拒面零事实零换图(probe_br_counter 计数+board_changed 双观测);成功恰一次 | 绿 |
|
||||
| V5 全局受伤 | damage_controller `_emit_hero_damage_taken` 唯一发射口+`_apply_hero_damage_effects` 唯一消费族(改名自 _enemy_shield_apply,组合次序冻结);敌方攻击/棋盘直伤/地形三路径接入;grant_segment 删本地 _terrain_damage_reduce | `test_all_hero_damage_paths_emit_once`;`test_no_duplicate_damage_taken_event` | 集成 | 敌方攻击、dig danger、seal wrong、terrain 四真实入口 | 每路径承伤单据在案且计数器==行数(逐单恰一次);context 标记闸防地形二次发射 | 绿 |
|
||||
| V6 石层缓冲 | round_swap_guard 计数+damage_taken when≥1 damage_reduce 2(round 桶轮始自清) | `test_stone_mitigation_all_damage` | 集成 | 刷新→危险格(pierce 8)/地形两真实受伤路径 | pierce 8→6(双刷不叠加)、未刷新轮不减(8)、地形 max(下限, effect_value−2) 逐单闭合 | 绿 |
|
||||
| V7 崩壁冲击 | apply_board_refreshed open_ticket blast→reward_grant.defer_ticket(案C 同队列);SOURCE_EXEMPT_CLASSES+fx_board_refresh;wall_blast 行 | `test_blast_defers_to_combat_segment` | 集成 | 刷新→停手 | 刷新时点零伤害行;战斗段末恰一单 ×2 全体存活敌 | 绿 |
|
||||
| V8 蓄力周转 | swap_charge_layers 战斗桶+attack_bonus value_counter+set0(既有消费面零新码) | `test_charge_layers_consumed_same_round` | 接口 | 两次刷新→停手(主角先手攻击) | 双刷 2 层→攻击后 0;白盒预置 3 层时刷新被闸(上限 3);战斗新建 0 | 绿 |
|
||||
| V9 坑道小憩 | round_swap_rest+round_end heal value_counter(grant_segment 新增 `_round_end_heal_value_counter`——先于 set0 行消费层值) | `test_rest_rotation_cap_and_clear` | 集成 | 刷新→停手(轮末授予段) | 回复 min(3,缺血)==3、层清 0、满血发未生效行、自然累计 2 路径 | 绿 |
|
||||
| V10 矿道红利 | board_refreshed grant_gp→escrow+fx_grant_gp 行(apply_board_refreshed 消费);mine_profit 行 | `test_mine_profit_gp` | 集成 | `player_request_refresh()` | escrow 每成功+1(0→1→2)、fx_grant_gp 行在案、拒绝零变化 | 绿 |
|
||||
| V11 数据与池 | feats.tres 七行(rarity 14/13/10/0·cap 1);adventure_feats 30→37/牌库 132→139 | `test_seven_feats_validate_and_pool`;adventure_feats `_smoke_feats` | 单元 | ConfigDB 整表与冒险牌库 | rows 37、relic 37、14/13/10、deck 139、validate 空、禁词 0、七件计数器引用闭合 | 绿(85/138 checks) |
|
||||
| V12 无专长回归 | round_flow/seal 旧基线零改动(刷新体迁移编排器单行转发) | `_smoke_active_refresh`;`_smoke_refresh_provenance_guard`;`test_no_feats_baseline` | 单元+集成 | 现行刷新/清图入口 | RAP8、AP 保留、上限 2、刷新图零清图、挖格零产 RAP、表基线扣费 | 绿(134/70 checks) |
|
||||
|
||||
**窄测实跑记录**:refresh_feats 85 · adventure_feats 138 · round_flow 134 · seal_polarity 70 · damage_controller 44 · effect_words 20 · forge_table 41 · config_db 29——全绿。批末 `--code` 闸 00/01/02/03/05/09/10 全绿(回执 45b53d68)。
|
||||
|
||||
## 三、卡B 实际对照表(改动—验收)
|
||||
|
||||
| # | 需求点 | 改动 | 验收测试 | 结果 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | 名字行字号提档 FS_HINT 14 | standee_body.gd 五取值点+name_line_probe 增 name_font_size | 〔名字行 V10〕探针实读==FS_HINT+两绘制点源码锚+FS_CAPTION 计数锚==1 | 绿 |
|
||||
| 2 | 名字行几何随档联动 | _name_baseline 偏移 17→18+注释换代 | V6 换代读数 150±0.51(8px 档)且 < plinth_top_y | 绿 |
|
||||
| 3 | 受光线常量退役改指 BRICK | ui_kit 删 STAND_STONE_RIM;standee_body:386+cell_base_layer:176 改指 | 〔名字行 V11〕常量表零键+BRICK==#C9AF83+两绘制点源码锚;grep 反证(仅剩测试断言串——预期例外) | 绿 |
|
||||
| 4 | 描边常量退役改指新 token | ui_kit 删 STAND_STONE_EDGE+增 PLAZA_EDGE=Color8(76,64,56);standee_body:385 改指 | 〔名字行 V12〕PLAZA_EDGE 逐位+常量表零旧键+描边源码锚 | 绿 |
|
||||
| 5 | 板面 golden 与换值一致 | (预期重锚——实际无需) | render_gate 板面三张 0.00%(改后跑,基线未动) | 绿(见实现决定 #4) |
|
||||
| 6 | 批末收口 | 全批 | 迭代级 --code 闸(待卡C 裁决后统一走) | 待迭代出口 |
|
||||
|
||||
卡B 改前读数(T0):standee_present_values_test 18 checks 绿 · gdstyle 5 键全基线内 · 渲染闸绿(--code 回执 45b53d68 内 05 闸)· 字体度量 ts(14px)=(14,20)。
|
||||
|
||||
## 四、卡C 停摆实况(改动已验未提交)
|
||||
|
||||
- T0 完成:行号重锚(board_view set_cell_area 现 :206-224、layout_probe MIN_CELL :15、冒烟 :53-69);取档对账 resolve_row(1,0)/(2,0)/(3,0)/(3,9)=10/12/13/14 全符;改前读数 board_gen_reward_test 62 绿+layout_probe 两档绿+gdstyle board_view max-public-methods 27 持平。
|
||||
- T1 算式单点:`BoardView._cell_for(n, avail)` 提取(逐位同式)+set_cell_area 改调——等价性由 board_gen_reward_test 既有断言承载(62 checks 绿)+gdstyle 持平。
|
||||
- T2 探针:MIN_CELL 36→30+注释改指 battle.md+BoardViewScript preload+零尺寸前置+13/14 推定断言——**推定断言触发 L3 #2(14×14=28<30)**。
|
||||
- T3 冒烟四档:取样表 [{1,0,10},{2,0,10→12},{3,0,13},{3,9,14}]+板型一致断言+算式单点等价断言——74 checks 绿(单元面全过:钳制 [26,46] 面无越界)。
|
||||
- 三件改动**未提交**(停摆卡不提交),随裁决处置(可复用——行为零变化)。
|
||||
- 停机呈报:主区 `reports/停机呈报-棋盘格边长口径收口批-2026-10-31.md`(分歧读法/建议案/待办回退拟稿)。
|
||||
|
||||
## 五、结构预算(S13 前后)
|
||||
|
||||
| 触面 | 前测 | 后测 | 判定 |
|
||||
|---|---|---|---|
|
||||
| battle_orchestrator.gd | 811 行/类变量 15(卡A 写 38 系笔误) | 803 行(−8 达标)/类变量 15 | 只降不升 ✓ |
|
||||
| reward_grant.gd | 类变量 15 | 15(defer_ticket 为方法零增员) | ✓ |
|
||||
| grant_segment.gd | 类变量 3/公开方法 1 | 3/2(apply_board_refreshed);私有新增 1(_round_end_heal_value_counter)≤4 | ✓ |
|
||||
| damage_controller.gd | 公开方法 9 | 9(私有净增 1:_emit_hero_damage_taken)≤2 | ✓ |
|
||||
| action_economy.gd | 公开方法 15 | 15(命中环抽私有 _apply_dig_paid_hits——S13 分支超限重构,分支本体逐字迁入) | ✓ |
|
||||
| battle_refresh_flow.gd(新件) | — | 公开函数 2(can_refresh/execute)/类变量 0 | ≤20/≤15 ✓ |
|
||||
| gdstyle_gate | 5 键全基线内 | 5 键全基线内零新增零恶化 | ✓ |
|
||||
|
||||
## 六、旧 damage_taken 专长覆盖面变化
|
||||
|
||||
全局统一后,订阅 `damage_taken` 的既有专长(背水 hp_ratio when/石肤 ac_bonus+counter_add/保险丝 counter_add)与换图系石层缓冲的覆盖面变化:
|
||||
|
||||
- **敌方攻击路径**:不变(原即经 _enemy_shield_apply 全组合消费)。
|
||||
- **地形路径**:消费族从本地三件(damage_reduce/ac_bonus/counter_add)扩为全局五件(+shield)——**铁壁(shield)自此对地形伤害生效**(用户已裁全局语义;卡A §十二削弱申报第 2 条在案)。
|
||||
- **危险格/错误封印资源直伤路径(board_flat_hero)**:原零事件,现统一发射——上述专长自此对这些路径生效(同上申报面)。
|
||||
- 无专长基线逐位零漂移(V12 全绿;同一伤害恰一次由 V5 钉死)。
|
||||
|
||||
## 七、实机目检总清单(登记不阻塞)
|
||||
|
||||
1. 〔卡A〕玩家持基座与收益件后,是否主动规划刷新而非只在坏图刷新(行为观感)。
|
||||
2. 〔卡B〕站桩名字行 14px 清晰可读且长名不截字(验收底线句)。
|
||||
3. 〔卡B〕墙格口沿亮线换值后观感无异(#C4AC84→#C9AF83)。
|
||||
4. 〔卡B〕贴图缺位回退描边与顶缘线观感无异(PLAZA_EDGE/BRICK 程序化回退)。
|
||||
5. 〔卡C·停摆批登记〕第三关 14×14 板格面数字在基座档的可辨读性(28px 实况——随裁决)。
|
||||
|
||||
## 八、实现决定记录(超白名单/偏差备案)
|
||||
|
||||
1. **卡A 自洽扫描笔误三处(不改合同)**:「类变量 38」实为 15;gdstyle_baseline.txt:9 引用实无 battle_orchestrator 键(该文件现无 S13 键);稀有度断言实挂 :476 非 :465。T0 按实数重锚记录,合同(只降不升/换代判据)不受影响。
|
||||
2. **卡A T0 工具名**:卡写 `bash tools/gdstyle.sh game`——该文件不存在,实际工具 `python tools/gdstyle_gate.py`(与卡B/C 一致),按实跑。
|
||||
3. **MINE_EVENTS 同步口径**:卡A T1「同步 :19 的 MINE_EVENTS」取「两新事件入集」读法——弃图刷新属扫雷侧动作面,流派铁律订阅集随之认列(零机械消费面差异,mine_covered 生产无强制点)。
|
||||
4. **卡B golden 预期红未现**:卡预期「板面三张红→重锚」,实测三张 0.00%——口沿高光换值 #C4AC84→#C9AF83 每通道差 ≤5,低于逐像素容差(≤16 差/≤2%),golden 判定零变化;重锚步骤无需执行(基线未动、零差留痕达成 V5 判据;禁借重锚夹带红线零触碰)。
|
||||
5. **S9 修正**:四处显式非参数化容器注解改 `:=` 推断(R1)——零行为改动。
|
||||
6. **S7 域集增补**:`static_scan.sh` S7_B1_SET 增补 battle_refresh_flow.gd——换图刷新流程件=卡A C13 拆分边界的 B1 域拆件(承载 retire_mapping/装板编排调用,卡A §八明列新结算族件);判据口径不变(B2/B3/B4 对外 API 仍限 B1 域调用)。**architecture.md「模块归属」需补 BattleRefreshFlow 行——已入反哺点清单**。
|
||||
7. **V11 引用闭合判据域**:全表扫描发现预存行完美保险 when 读 insurance_used 无 counter_add 写入方(消费点落账合法形态——feats.tres 注记在案)——判据域收窄为「换图系七件自身引用闭合」,预存形态不入判据。
|
||||
8. **apply_board_refreshed 访问形态**:BattleRefreshFlow 经 `oc._rounds._grant_seg` 直调(round_cycle 不在卡A §八改动文件清单内,不加转发壳——沿结算族直调惯例)。
|
||||
9. **卡A T8「代拍板追认单」不另立**:iter 技能与 process-conventions §2 定「超白名单记实现报告实现决定记录,不另立追认单」——本批全部决定在上列备案,白名单内决定零追认面。
|
||||
10. **测试断言口径修正(开发期自纠)**:V5②③④ 聚合判据从「两来源行合计」修正为「全 hero 行数」(盲挖途经的其他直伤单据一并入账);V2 辅证改「RAP 增量==受理挖数」(移位耗 AP 不入账);V4 时序修正(停手再入 RAP)——均为测试侧修正,生产码零回退。
|
||||
11. **V9 上限 3 承载形态**:每轮刷新上限 2(表值)使自然路径层值至多 2——「上限 3」判据由白盒计数器预置+真实刷新入口承载(test-conventions §5.4 计数器直改属数据面注入),自然累计 2 另设战场钉死。
|
||||
|
||||
## 九、独立验收审计结论
|
||||
|
||||
- **审计方**:未参与实现的子代理(独立会话上下文),2026-10-31 执行。
|
||||
- **报告**:`reports/iter46-验收审计-2026-10-31.md`(本目录)。
|
||||
- **结论**:**审计通过(零缺漏)**——卡A V1–V12 与卡B 6 行对照表逐行通过;尾缀全可 grep;真实入口零绕过(V2 真挖/V3·V4·V10 经 player_request_refresh/V5 四路径真实战斗驱动);自跑复核 refresh_feats 85/standee 26/adventure_feats 138/round_flow 134/seal_polarity 70/effect_words 20/forge_table 41 全绿+gdstyle 5 键零新增+render_gate 三张 0.00% 实跑;削弱核对全部落在两卡申报面内(round_flow/seal 零进 diff,禁删面原样在案);无变异/撤销类取证。
|
||||
- **审计附加发现处置**:①两枚新件 .uid 边车未随批提交——已补提交(.gitignore 要求);②static_scan S8_FILES 与 S7_B1_SET 未同步增补新件——已同步(新件零 await,扫描面实跑绿);③V10 断言消息在求值前格式化的显示瑕疵(判据本体正确,零处置);④V9 私有读前置守卫附注(审计方判例外不阻塞——判据主面走公共 step_row 信号)。
|
||||
|
||||
## 十、遗留读数义务
|
||||
|
||||
- 卡C 裁决后:探针两档 bv.size/L1 格边/13·14 推定读数已录本报告第四节与停机呈报——重写卡可直接引用,无需重采。
|
||||
- 无 MC/数值验证义务(本批无数值改动,feats.tres 七行为卡内 provisional 值——归调参批)。
|
||||
@@ -1,70 +0,0 @@
|
||||
# 迭代 46 实现报告——卡C 棋盘格边长口径收口批 v2.0(2026-11-01)
|
||||
|
||||
> 批次:迭代 46 卡C(v2.0 重立回编——2026-11-01 用户三项裁定后写卡批重立,合并提交 e7090bc9)。卡A/卡B 已于 2026-10-31 收口合回,见同目录 `iter46-实现报告-2026-10-31.md`。
|
||||
> 工作区:`D:\code\g-plan2-iter46`(分支 iter46,卡C 段基点=master 5269ed40,WIP 三件按 v2 卡 §12 判定复用两件返工一件)。
|
||||
> 需求卡片:`reports/需求卡片-棋盘格边长口径收口批-2026-10-30.md`(v2.0 定稿,零待裁点)。
|
||||
|
||||
## 一、卡C 状态
|
||||
|
||||
**收口**(T0–T4 全落)。游戏行为零变化:算式逐位同式、`set_cell_area` 副作用尾链零动、两条生产调用路径不改、画面像素零变化。本批改动全部落在守卫面=**人造阈值退役+算式单点+13/14 两档入卫**。
|
||||
|
||||
## 二、T0 改前基线读数(2026-11-01,master 5269ed40 态实测)
|
||||
|
||||
| 读数 | 结果 |
|
||||
|---|---|
|
||||
| `python tools/gdstyle_gate.py` | 扫描面 142 件、命中 5 条全在基线、基线外新违规 0、较登记值恶化 0(board_view.gd `max-public-methods=27`/`max-class-variables=31` 持平) |
|
||||
| 单件跑 `board_gen_reward_test` | all green(**62 checks**——改前基线值) |
|
||||
| 单件跑 `layout_probe` | 2 档 PASS(旧阈值形态「≥36px」消息,即本批退役对象) |
|
||||
| 四档取档对账(`resolve_row(1,0)/(2,0)/(3,0)/(3,9)`,临时对账件跑后即删) | 10×10/12×12/13×13/14×14,与卡 §2 第 6 条全符 |
|
||||
| `battle_layout.tres` 五字段 | stage_h=252/ap_bar_h=44/info_panel_w=240/log_band_h_dig=24/log_band_h_settle=84,与卡 §2 第 8 条全符 |
|
||||
|
||||
行号重锚:卡 §2 行号在 5269ed40 上逐一核实(`layout_probe.gd:15` MIN_CELL/`board_view.gd:206-215` 内联算式/`board_zone_view.gd:91-92` 生产调用路径+`board_view.rebuild` 末尾调用/`board_gen_reward_test.gd:53-69` 冒烟)——卡成文时点(3499638d)至 T0 时点间零漂移。`tools/gdstyle_baseline.txt` 两键登记值与卡 §2 第 5 条一致(:11=31、:22=27)。
|
||||
|
||||
## 三、实际对照表(改动—验收)
|
||||
|
||||
| # | 需求点 | 改动 | 验收测试(名称+实际落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 结果 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | 探针阈值退役+格边长接线守卫 | `layout_probe.gd` MIN_CELL 常量整行删除;阈值断言换等价断言(:106-109) | 「两档几何不变量+格边长等价」`layout_probe.gd:_ready`(PASS 行 :45 尾缀〔格边长 V1〕;失败路径 :107) | 探针 | `godot --headless --path game res://probe/layout_probe.tscn` | 实读 `cell_size`(生产经 `set_cell_area` 真实写入)与 `_cell_for(n, bv.size)` 同输入严格相等——生产停止调单点算式即红;`_board` 内部字段直查=受控例外(板型 N 无公开出口,卡 §14.2);`grep -rn "MIN_CELL\|可读门槛\|可读下限" game/` 零命中(已跑,exit=1 零命中) | 绿(两档全过,基座实读 40px) |
|
||||
| 2 | 算式单点(`_cell_for`) | `board_view.gd:210` 改调 `static _cell_for`(:226,逐位同式);:206 注释补唯一落点句 | 「算式单点等价」`board_gen_reward_test.gd:75-76`(尾缀〔格边长 V2〕) | 单元 | `godot --headless --path game --script res://tests/unit/core/board_gen_reward_test.gd` | `set_cell_area` 写入的 `_cell` 与 `BoardView._cell_for(n, avail)` 返回值逐档严格相等(同一事实两路读取,分叉即红) | 绿(四档 4 断言全过;既有四套断言全绿=等价性证明,62→74 checks) |
|
||||
| 3 | 13×13/14×14 进入冒烟 | `board_gen_reward_test.gd:58` 循环集改四档取样表 [(1,0,10),(2,0,12),(3,0,13),(3,9,14)];:69-74 板型一致+既有两断言(前缀 L%d D%d) | 「格边长冒烟四档板型」同函数(尾缀〔格边长 V3〕) | 单元 | 同上 | 13/14 两档首次被断言:取档尺寸与实表一致、网格高 ≤ 可用高−24、格边 ∈ [26,46](既有断言逐字保留) | 绿(四档 12 断言全过,10/12/13/14 实测 41/33/31/28px) |
|
||||
| 4 | 最大板推定守卫(留痕型) | `layout_probe.gd:_check_one` 零尺寸前置(:112-114 记红)+13/14 推定留痕(:116-119 采集,:47-50 PASS 后打印) | 「最大板推定留痕」同探针(尾缀〔格边长 V4〕) | 探针 | 同行 1 | ①零尺寸前置(size ≤ 0 记红);②推定读数打印并与本报告 §四留档锚点读数逐值对拍,不一致=卡 §9 L3 #2 呈报(禁实现侧改锚) | 绿(基座 30/28、全屏 46/46——与锚点逐值一致,零对拍偏差) |
|
||||
| 5 | 批末收口 | 全批 | 代码域闸 `tools/run_all_gates.sh --code` | 全量闸 | `tools/run_all_gates.sh --code` | 所选域全绿回执(`game/tests/.gates/receipt.json`) | 绿(`all_green=true`,七闸 00/01/02/03/05/09/10,commit e3e206d0,域=code·scope=related[presentation],`changed_vs_baseline=[]`) |
|
||||
|
||||
**测试削弱申报核对**(卡 §8 申报全集四条,实际执行逐条对上):①探针阈值断言删除=申报 1 的执行面,补偿三件全落(等价断言/四档结构钳制/推定留痕对拍);②PASS 消息改写=申报 2;③循环集 2→4 档纯增量、样本值 (1036,460) 未改、既有两断言逐字保留=申报 3;④未发生恢复阈值、删旧断言、放宽区间、换读取入口任一项=申报 4 成立。另:既有几何不变量(三区非零/不越视口/互不重叠/view 含于 D 区)与视口档位表零改动(卡 §14.1 核对通过)。
|
||||
|
||||
## 四、锚点读数留档(两档视口 × 四板型——未来批次对照基准)
|
||||
|
||||
锚点=用户验收的现行渲染值(2026-11-01 用户裁,卡 §2 第 7 条)。本批探针实跑复核:
|
||||
|
||||
| 视口 | board_view.size(实读) | 10 板 | 12 板 | 13 板 | 14 板 |
|
||||
|---|---|---|---|---|---|
|
||||
| 基座 1280×800 | (1022.0, 454.0) | **40px(实读)** | 33px(单点算式读) | **30px(推定打印)** | **28px(推定打印)** |
|
||||
| 16:9 全屏 1920×1080 | (1662.0, 734.0) | 46px(实读·钳制顶格) | 46px(单点算式读) | **46px(推定打印)** | **46px(推定打印)** |
|
||||
|
||||
基座档 10 板实读经等价断言与 `_cell_for(10, (1022,454))` 严格相等(V1 守卫当轮执行);13/14 推定由探针 V4 打印(当轮留痕);12 板与全屏 10/12 三格由单点算式读数件在两档真实可用面积上读出(一次性临时件,当轮跑批留痕后即删):基座 12 板=33px、全屏 10/12=46px。全表与卡 §2 第 7 条锚点逐值一致,零对拍偏差。
|
||||
|
||||
## 五、实机目检总清单(登记不阻塞)
|
||||
|
||||
1. **第三关 14×14 板格面数字清楚可辨**——2026-11-01 用户已实际背书现行画面(锚点裁定),登记照留(卡 T4)。
|
||||
|
||||
## 六、实现决定记录
|
||||
|
||||
代拍板白名单 6 项全部按卡执行(`_cell_for` 局部变量名与注释措辞/四档取样表用字典数组/探针消息文案与 PASS 措辞/尾缀〔格边长 V1–V4〕编排/`BoardViewScript` 常量名/`bv.get("_board")` 取值形态),零超范围裁决。超白名单备案三件(均属测量面承载,判据零扩张):
|
||||
|
||||
1. **探针 `_board == null` 前置**(`layout_probe.gd:104-105`)——卡片明列判据只有零尺寸前置与等价断言;null 前置防「内部直查遇 null 即脚本错误静默跳过剩余断言」(test-conventions §7 失败模式),属测量面防御。撤销方式=删该分支(等价断言改回无条件求值)。
|
||||
2. **探针新增两成员 `_cell_reads`/`_est_reads`**(`layout_probe.gd:17-18`)——PASS 行基座实读与推定留痕打印的承载面;探针不在 S13 扫描面,无预算约束。撤销方式=删成员与两处打印(PASS 行退回无读数形态)。
|
||||
3. **单点算式锚点全表读数件**(本报告 §四 12 板与全屏 10/12 三格补读)——卡 §2 第 7 条锚点表含四板型,探针打印只覆盖 13/14(卡定死),全表留档用一次性临时脚本对两档实读可用面积逐板型读 `_cell_for`(当轮跑批留痕后即删)。撤销方式=无(纯读数,不落码)。
|
||||
|
||||
## 七、遗留读数义务
|
||||
|
||||
零。本批无数值改动,MC/verifier 零跑(卡 §4 范围边界 6)。§四全表读数已当轮留痕,无待补。
|
||||
|
||||
## 八、S13 结构预算与批末闸对账
|
||||
|
||||
- `board_view.gd`:`max-public-methods` **27→27**(`_cell_for` 私有名不计数)、`max-class-variables` **31→31**(零新增成员——钳制界未外提)、无 NEW 键;gdstyle 全批「基线外新违规 0、较登记值恶化 0」。
|
||||
- 探针与测试件不在 S13 扫描面(扫描面=产品码,测量面直构为既有惯例)。
|
||||
- 批末代码域闸:`tools/run_all_gates.sh --code` 全绿(回执落 `game/tests/.gates/receipt.json`,T4 当轮执行)。
|
||||
|
||||
## 九、独立验收审计结论
|
||||
|
||||
独立验收审计由未参与实现的子代理执行,报告=`reports/iter46-验收审计-卡C-2026-11-01.md`。结论:**通过,可合并**——五项全过(对照表五行逐行核对/自跑最窄测试实读:探针基座实读 40px·推定 30/28·46/46·单元 74 checks 全绿/判据绑定面钉生产写入值/测试削弱逐处对上卡 §8 申报全集/全仓无人造阈值回归且无变异·撤销取证)。一处非阻断备注已处置:实现报告 §三 行 1 判据绑定面格补「受控例外」句(审计报告原文备注定格于补句前)。审计方自跑读数与本实现会话当轮实跑逐值一致。未过不得合并红线未触发。
|
||||
@@ -1,130 +0,0 @@
|
||||
# 迭代 46 独立验收审计报告
|
||||
|
||||
> 审计方:独立验收审计子代理(未参与本批实现——迭代 loop 内启动,符合 test-conventions §8.7 两入口铁规)。
|
||||
> 日期:2026-10-31。
|
||||
> 工作区:`D:\code\g-plan2-iter46`(分支 iter46,基点 b5b2c555)。Godot:`Godot_v4.7.2-stable_win64_console.exe`。
|
||||
> 审计范围:合并候选=卡A(换图系双基座七件批)+卡B(站桩名字行提档与地台色合并批)已提交 diff=`git diff b5b2c555..c10bbc11`(10 笔提交=9 实现+1 收尾文档;20 文件,+1231/−96)。卡C(棋盘格边长)停摆不计。
|
||||
> 审计方式:不采信实现报告「已全绿」自述——逐行核对对照表两端、自跑最窄套件与闸件、对照 diff 逐处核对削弱申报。本审计只写本报告,零源码/测试/数据文件改动。
|
||||
|
||||
## 一、审计自跑记录(当轮真实执行)
|
||||
|
||||
| 套件/闸 | 结果 | 与报告申报对照 |
|
||||
|---|---|---|
|
||||
| refresh_feats_test | **all green (85 checks)**,exit 0 | 与报告§二 申报 85 一致 |
|
||||
| standee_present_values_test | **all green (26 checks)**,exit 0 | 与报告§三 申报 26 一致 |
|
||||
| adventure_feats_test | **all green (138 checks)**,exit 0 | 与报告§二 申报 138 一致 |
|
||||
| round_flow_skill_pool_test | **all green (134 checks)**,exit 0 | 与报告§二 申报 134 一致 |
|
||||
| seal_polarity_test(附加) | all green (70 checks),exit 0 | 与报告§二 申报 70 一致 |
|
||||
| effect_words_t1_test(附加,V1) | all green (20 checks),exit 0 | 与报告§二 申报 20 一致 |
|
||||
| forge_table_test(附加,V1) | all green (41 checks),exit 0 | 与报告§二 申报 41 一致 |
|
||||
| gdstyle_gate | 5 键全基线内、基线外新违规 0、恶化 0 | 与报告§五「零新增零恶化」一致 |
|
||||
| static_scan.sh | exit 0——S7 ok(B2/B3/B4 符号收敛 B1 文件集)/S8 ok/S13 ok | S7 新域集生效见§六① |
|
||||
| render_gate.sh(窗口化实跑) | 板面三张+menu_boot 全 **changed=0.00%**,全绿 | 与报告§八.4 一致,见§三行 5 |
|
||||
|
||||
## 二、卡A 对照表逐行核对(V1–V12)
|
||||
|
||||
| 需求点 | 测试存在 | 尾缀可 grep | 真实入口无绕过 | 判定 |
|
||||
|---|---|---|---|---|
|
||||
| V1 词表扩签 | `effect_words_t1_test.gd:_init` 新增①-a 两断言+`forge_table_test.gd:_test_effect_kinds_closed` 22/34 换代 | 〔换图系批 V1〕×2+〔锻造工坊批 V11〕×2 | ConfigDB 整表加载+词表常量直读 | **通过**(实跑 20/41 checks 绿;diff 核对 effect_words 纯增量 5 行,旧出域负例零删) |
|
||||
| V2 矿脉储能 | `test_reserve_on_accepted_dig` | 〔换图系批 V2〕×3 | 经 `_auto_dig`→`settle_batch([move]+[dig])` 真实付费挖格;辅证 `_drain_round_rap_accounting` 仍走 settle_batch 逐挖计数 | **通过**(RAP 8→9、AP 按表扣、耗尽轮增量==受理挖数三面全钉) |
|
||||
| V3 省力周转 | `test_refresh_discount_gate_and_charge`+`test_double_base_stack` | 〔换图系批 V3〕×6 | 经 `orch.player_request_refresh()` 唯一入口;can 与执行同源(`_effective_refresh_cost` 单点,diff 核实编排器两公开方法单行转发) | **通过**(折后 −4×2、门槛拒 can=false 且执行拒、双基座同场生效) |
|
||||
| V4 成功事实 | `test_board_refresh_fact_only_on_success` | 〔换图系批 V4〕×6 | 经 `player_request_refresh()`;非 Active 拒=decay 行内同步探测(round_flow_skill_pool_test:161 先例同款),上限拒/RAP 不足拒均在 Active 相位真入口 | **通过**(三拒面 probe_br_counter==0+board_changed 计数冻结双观测;成功恰一次×2+新轮×2) |
|
||||
| V5 全局受伤 | `test_all_hero_damage_paths_emit_once`+`test_no_duplicate_damage_taken_event` | 〔换图系批 V5〕×8 | **四路径全真实战斗驱动、零直调 `_emit`**:①敌方攻击=boss 战零挖掘连停三轮(enemy_action 行在案);②地形=AutoPlayer 盲挖 flat_damage 变异格+stop;③危险格=真挖直接伤型雷格;④错误封印=真 `seal_place`+stop | **通过**(每路径「承伤行数==计数器」恰一次+无重复消费两样本;实跑读数 行2=计2/行9=计9/行2=计2/行2=计2) |
|
||||
| V6 石层缓冲 | `test_stone_mitigation_all_damage` | 〔换图系批 V6〕×3 | 刷新经 `player_request_refresh`;危险格/地形经真挖+stop 结算 | **通过**(pierce 8→6 双刷不叠=叠加态 4 反证钉死;未刷轮不减=round 桶轮始清空;地形 max(下限, effect_value−2) 逐单闭合) |
|
||||
| V7 崩壁冲击 | `test_blast_defers_to_combat_segment` | 〔换图系批 V7〕×2 | 刷新+停手(轮末授予段→战斗段末) | **通过**(刷新时点零伤害行=授予段不结账;停手后恰一单 value 2 全体存活敌) |
|
||||
| V8 蓄力周转 | `test_charge_layers_consumed_same_round` | 〔换图系批 V8〕×2 | 双刷+停手(主角先手攻击)真实消费 | **通过**(白盒预置 3 层上限闸=实现决定 #11 申报面;双刷 2 层攻击后清 0;战斗新建 0) |
|
||||
| V9 坑道小憩 | `test_rest_rotation_cap_and_clear` | 〔换图系批 V9〕×3 | 刷新经真入口;轮末恢复在授予段(stop 触发) | **通过(附未注例外,见§五)**(回复 min(3,缺血)==3 且层清 0;满血未生效行+零 heal 行;自然累计 2 路径) |
|
||||
| V10 矿道红利 | `test_mine_profit_gp` | 〔换图系批 V10〕×4 | 经 `player_request_refresh()`;拒绝=RAP 不足真拒 | **通过**(escrow 每次+1、fx_grant_gp 行恰 1、拒绝零变化;消息文案时点瑕疵见§七.3,不涉判据) |
|
||||
| V11 数据与池 | `test_seven_feats_validate_and_pool`+adventure_feats `_smoke_feats` | 〔换图系批 V11〕×5+〔专长批 V2〕换代句 | ConfigDB 整表+冒险牌库真实启动(seed 71) | **通过**(validate 空/七行稀有度 cap 对表/desc 禁词/七件计数器引用闭合/三计数器在册;rows 37、14/13/10/0、deck 139;feats.tres 七行 trigger 结构逐行对照卡§十.T6 零出入) |
|
||||
| V12 无专长回归 | `test_no_feats_baseline`+round_flow `_smoke_active_refresh`+seal `_smoke_refresh_provenance_guard` | 〔换图系批 V12〕×4 | 挖格/刷新/停手全真入口 | **通过**(挖格零 RAP、表基线扣 8、AP 保留、第 3 次拒;round_flow/seal 两文件**零进 diff**——RAP8/上限2/AP保留/刷新图零清图/五段序/回放断言原样在案,134/70 checks 实跑绿) |
|
||||
|
||||
## 三、卡B 对照表逐行核对(6 行)
|
||||
|
||||
| # | 需求点 | 判定 |
|
||||
|---|---|---|
|
||||
| 1 | 名字行字号提档 FS_HINT 14 | **通过**——diff 核对五取值点(`:334-336` 两测量+`:467` 测量+`:474` 护甲绘制+`:476` 名字绘制)全改 `UiKit.FS_HINT`;`:114` 消散提示零触碰(FS_CAPTION 计数锚==1 断言在案且实跑绿);`name_line_probe` 增 `name_font_size` 键(探针实读==FS_HINT 绿) |
|
||||
| 2 | 名字行几何随档联动 | **通过**——`_name_baseline` 偏移 17→18+注释换代(diff 核实);V6 读数 150±0.51 与「8px 档」句换代=卡B§8 申报第 1 条面内;`baseline_y < plinth_top_y` 文字不压地台判据零改动且绿 |
|
||||
| 3 | 受光线常量退役改指 BRICK | **通过**——ui_kit 真删 `STAND_STONE_RIM` 无别名占位;`standee_body` 顶缘线与 `cell_base_layer:176` 口沿高光两绘制点改指 `BRICK`;V11=常量表零键+BRICK 逐位 c9af83+两处源码锚全绿;grep 全仓退役常量仅剩测试断言串(与报告§三「预期例外」申报一致) |
|
||||
| 4 | 描边常量退役改指新 token | **通过**——ui_kit 删 `STAND_STONE_EDGE`+原位增 `PLAZA_EDGE := Color8(76, 64, 56)`;`standee_body` 回退描边改指;V12=PLAZA_EDGE 逐位 4c4038+源码锚全绿 |
|
||||
| 5 | 板面 golden 与换值一致 | **通过**——审计方自跑 `bash tools/render_gate.sh`(窗口化):board_L1/L2/L3 与 menu_boot 全 0.00%;golden 五文件 git 零改动=基线未动、重锚未执行(与实现决定 #4 备案一致——#C4AC84→#C9AF83 灰度差约 2,低于容差 ≤16,0.00% 为必然);level_map.png 不在 render_gate 对比域、git 零改动 |
|
||||
| 6 | 批末收口 | **通过(遗留义务明示)**——迭代级 `--code` 闸未跑(卡B 行 6 申报「待迭代出口」);批内证据=commit 点 docs 域回执(fde1795d)全绿含 08c 流水线闸+审计方补跑 gdstyle/static_scan/render_gate/五套件全绿。合回后本地 CI 全量域闸为唯一强制验证点(process-conventions §1),本行遗留义务随合回 CI 承接 |
|
||||
|
||||
## 四、抽查断言原样输出行(当轮实跑摘录)
|
||||
|
||||
```
|
||||
[refresh_feats_test] all green (85 checks)
|
||||
[PASS] V5① 敌方攻击路径:承伤单据在案且逐单恰一次(行 2=计数 2)〔换图系批 V5〕
|
||||
[PASS] V5② 地形路径:地形单据在案且全单据逐张恰一次(行 9=计数 9——盲挖途经单据一并计入)〔换图系批 V5〕
|
||||
[PASS] V5③ 危险格路径:直伤单据在案且全单据逐张恰一次(行 2=计数 2)〔换图系批 V5〕
|
||||
[PASS] V5④ 错误封印路径:直伤单据在案且全单据逐张恰一次(行 2=计数 2)〔换图系批 V5〕
|
||||
[PASS] V2 受理付费挖格 RAP 恰 +1(8→9)〔换图系批 V2〕
|
||||
[PASS] V3 折后单次扣费(8→4,−4)〔换图系批 V3〕
|
||||
[PASS] V4 第 1 次成功(事实 +1 换图 +1)〔换图系批 V4〕
|
||||
[PASS] V6 S1 危险格减伤恰 2 且多刷不叠加(行值 [6]∈[6]——叠加态应为 4)〔换图系批 V6〕
|
||||
[PASS] V9 R1 轮末回复=min(3,缺血102) 且层清 0(heal 行值 [3])〔换图系批 V9〕
|
||||
[PASS] V10 第 1 次成功 escrow +1(0→0)〔换图系批 V10〕
|
||||
[PASS] V12 刷新受理并按表基线扣(−8)〔换图系批 V12〕
|
||||
[standee_present_values] all green (26 checks)
|
||||
[PASS] 基线读数与实装几何同源(基线 = 地台顶上方 8px 档:150 < 158——14px 档牌顶+18)〔样张批 V6〕
|
||||
[PASS] 名字行探针字号实读 = FS_HINT(几何单点出口 name_font_size)〔名字行 V10〕
|
||||
[PASS] 全文件 FS_CAPTION 仅剩消散提示一处(计数锚==1——三处宽度测量点强制换代)〔名字行 V10〕
|
||||
[PASS] 退役常量不在册(STAND_STONE_RIM/STAND_STONE_EDGE 零键)〔名字行 V11〕
|
||||
[PASS] PLAZA_EDGE 值逐位 #4C4038(合并目标②)〔名字行 V12〕
|
||||
[adventure_feats_test] all green (138 checks)
|
||||
[PASS] 专长带入池:37 件四级直映射(普通 14/优秀 13/稀有 10/传说 0)——牌库 102+37=139〔专长批 V2+迭代 46 换图系七件换代〕
|
||||
[round_flow_skill_pool_test] all green (134 checks)
|
||||
[seal_polarity_test] all green (70 checks)
|
||||
[effect_words_t1] all green (20 checks)
|
||||
[forge_table_test] all green (41 checks)
|
||||
```
|
||||
|
||||
```
|
||||
[render_gate] [golden] board_L1_dungeon.png — changed=0.00%(容差 ≤16 差/≤2%)OK
|
||||
[render_gate] [golden] board_L2_underdark.png — changed=0.00%(容差 ≤16 差/≤2%)OK
|
||||
[render_gate] [golden] board_L3_deep_underdark.png — changed=0.00%(容差 ≤16 差/≤2%)OK
|
||||
[render_gate] [golden] menu_boot.png — changed=0.00%(容差 ≤16 差/≤2%)OK
|
||||
[render_gate] 全绿
|
||||
```
|
||||
|
||||
注:V10 消息「escrow +1(0→0)」的两个读数均在 `player_request_refresh()` 求值前格式化——显示瑕疵;断言本体绑刷新后 `escrow == escrow0 + 1`,判据面正确(绿即真值)。
|
||||
|
||||
## 五、内部字段直查受控例外核对(test-conventions §80/§8.7 第 4 条)
|
||||
|
||||
| 直查行 | 性质 | 判定 |
|
||||
|---|---|---|
|
||||
| `orch.fx_host().counters_ctx`(refresh_feats_test 5 处:读计数器×3+白盒预置×2) | `counters_ctx` 是 BattleFxHost **公开成员**(无下划线),读经公共 API `EffectEngine.counter` | 非私有直查;存量套件 adventure_feats_test 同款先例 |
|
||||
| `EffectEngineScript.counter_add(...)` 白盒预置(V9/V8 上限 3 闸) | 计数器直改=数据面注入 | **已申报**——实现决定 #11(test-conventions §5.4 引用)+对照表 V8/V9 行「白盒预置」在案 |
|
||||
| `orch1._enemy_system.hero_unit()`(refresh_feats_test:518,V9 缺血读数) | **私有面直查 1 处** | **例外(手续缺注,不阻塞)**——对照表 V9 行与实现决定 #11 均未注该行理由。依据:①判据主面(heal 行/未生效行)经公共 `step_row` 信号在案,私有读只作前置量(`missing >= 3` 守卫),行为并非钉在私有面上;②存量套件 roll_multiplier_test.gd:51 同款先例;③公开替代面存在(`presentation_snapshot()` 含 hero.hp)。建议实现报告 V9 行补注一句(随合回流程,本审计不代改) |
|
||||
| 生产码 `oc._damage._emit_hero_damage_taken`/`oc._rounds._grant_seg` 直调 | 结算族内部协作 | 实现决定 #8 备案(结算族直调惯例)——非测试面,不在本节判域 |
|
||||
|
||||
## 六、附加核对(实现决定复核三项+卡C 脏面)
|
||||
|
||||
1. **S7_B1_SET 增补(实现决定 #6)——判据口径未变,通过**:static_scan.sh diff 仅 1 行清单+2 行注释;B2/B3/B4 三族符号交替式(14/5/9 符号)逐字未动;豁免语义(自家文件、注释/字符串排除、s7-b1-exempt)未动;`battle_refresh_flow.gd` 调 `oc._reward_economy.retire_mapping()` 命中 B4 符号,入 B1 域集与 C13 拆分边界自洽。审计实跑 static_scan:S7 ok(50 文件扫描面)。
|
||||
2. **S9 修正(f498d2ec)——零行为变化,通过**:4 处显式非参数化容器注解(`damage_controller.gd` 3 处 `: Dictionary`/`: Array`、`grant_segment.gd` 1 处)改 `:=` 推断,静态注解改写,无逻辑分支变化。
|
||||
3. **卡C 停摆脏面核对——申报一致,另见§七.1**:`git status` 修改面恰为申报的三件(`board_view.gd`/`layout_probe.gd`/`board_gen_reward_test.gd`),均未提交、不在审计 diff 内;另有 2 个未跟踪 `.uid` 文件(§七.1)。
|
||||
4. **golden 申报制核对**:golden 五文件(三张板面+level_map+menu_boot)git 零改动=重锚申报制零触发(实现决定 #4「无需重锚」与实跑 0.00% 互证);不存在借重锚夹带。
|
||||
|
||||
## 七、测试削弱核对清单(diff 被改/被删旧断言逐处 → 申报面)
|
||||
|
||||
| 位置 | 改动 | 申报依据 | 判定 |
|
||||
|---|---|---|---|
|
||||
| adventure_feats_test :464/:476 | 行数 30→37、稀有度 12/9/9→14/13/10、牌库 132→139 | 卡A§十二第 1 条(计数换代申报) | **通过**——零放宽:validate/禁词/退役钉面零删(diff 核对) |
|
||||
| forge_table_test :202 附近 | EFFECT_KINDS 32→34、EVENTS 20→22 | 卡A§十二第 1 条 | **通过** |
|
||||
| effect_words_t1_test :17-21 | 纯增量 5 行(两事件两效果在册) | 增量非削弱 | **通过**(旧负例全保留,diff 核对) |
|
||||
| standee_present_values_test V6 | 读数 149→150+「9px 档→8px 档」句 | 卡B§8 申报第 1 条 | **通过**(文字不压地台判据零改动) |
|
||||
| standee_present_values_test V10–V12 | 纯增量 8 断言+文件头注释换代 | 卡B§8 申报第 2 条 | **通过**(V5/V7/V8/V9 判据零改动,diff 核对) |
|
||||
| run_all.gd :191 | 套件注释 V5–V9→V5–V12 | 非行为改动(卡B§6 预告) | **通过** |
|
||||
| 禁删面(卡A§十二):RAP8 基线/每轮上限 2/AP 保留/刷新图零清图/伤害下限/五段序/同种子回放 | round_flow/seal 两文件零进 diff;伤害下限在 `_resolve_board_flat_hero` 保位(`maxi(下限, dealt)` 减后过下限=卡C4 同款) | 卡A§十二禁删令 | **通过**(134/70 checks 实跑绿承载) |
|
||||
| 生产面删除项 | `_terrain_damage_reduce` 删/编排器旧刷新体删/`_enemy_shield_apply` 改名/ui_kit 两常量删 | 卡A T2/T3 步骤明列+卡B§1/§3 | **通过**(全部卡面内,无未申报删改) |
|
||||
| 变异/撤销类取证 | 全 diff 无回退 hunk/注入破坏证明 | 卡A§十二+卡B§3 | **通过**(临时专长经 ConfigDB 表行追加=卡§十二「正常数据配置路径」申报一致) |
|
||||
|
||||
## 八、附加发现(不属验收对照面、不阻塞合并——处置建议随合回流程)
|
||||
|
||||
1. **批内新件两枚 `.uid` 未随批提交**:`game/core/settlement/battle_refresh_flow.gd.uid` 与 `game/tests/unit/battle_settlement/refresh_feats_test.gd.uid` 未跟踪(mtime 07:49,早于 T3 提交 07:52——非审计跑测所生成)。`.gitignore` 第 6 行明文「Godot 4 的 .uid 文件必须提交,不要忽略」,全仓其余 `.gd` 均有 `.uid` 入库伴件。已核零 UID 引用(grep 两 uid 串零命中),风险低;建议合回前补提交(本审计受只读约束不代提交)。
|
||||
2. **S8_FILES 未与 S7_B1_SET 同步增补**:await 零命中扫描集仍为 10 文件,新 B1 拆件不在其内。实查新件零 await(grep 证),当日无漏扫;但两清单同源 B1 域集出现分叉,建议 architecture「模块归属」BattleRefreshFlow 行落文(反哺点 #5)时同批补 S8_FILES。
|
||||
3. **V10 消息文案时点**(§四注):纯文案瑕疵,判据不受影响。
|
||||
4. **V9 私有读未注理由**(§五):建议补注。
|
||||
|
||||
## 九、结论
|
||||
|
||||
**审计通过(零缺漏)**——卡A 对照表 V1–V12 与卡B 对照表 6 行逐行通过(例外 1 处=V9 私有读手续缺注,附依据不阻塞);四套件+三附加套件+gdstyle+static_scan+render_gate 当轮自跑全绿;测试削弱全部在两卡申报面内,无未申报删改,无变异/撤销类取证;结构预算申报(803 行/类变量 15/各件增员)经实数核对全部相符。§八附加发现四条均不属验收对照面,随合回流程处置。
|
||||
@@ -1,91 +0,0 @@
|
||||
# 迭代 46 验收审计——卡C 棋盘格边长口径收口批 v2.0(2026-11-01)
|
||||
|
||||
> 审计方:独立子代理(未参与实现,只读证据+自跑最窄测试,不采信实现报告转述)。
|
||||
> 审计对象:commit `e3e206d0`(代码三件)+`8eaf7d87`(收尾文档两件);卡C 段基点 master `5269ed40`。
|
||||
> 依据:需求卡片 v2.0(§8 改动—验收对照表+测试削弱申报全集)、实现报告 §三 实际对照表、批末闸回执。
|
||||
> 审计工作区:`D:\code\g-plan2-iter46`(分支 iter46)。审计全程只读,唯一写入=本报告。
|
||||
|
||||
## 一、对照表逐行核对——通过
|
||||
|
||||
实现报告 §三 五行逐行核对,每行的验收测试真实存在、尾缀可 grep、真实入口未绕过改动点。
|
||||
|
||||
行 1(探针阈值退役+接线守卫):
|
||||
- 测试真实存在:`game/probe/layout_probe.gd:98-109`(读 `cell_size` → 等价断言),失败路径 `:107`,PASS 行 `:45`。
|
||||
- 尾缀 grep:`grep -n "格边长 V1" game/probe/layout_probe.gd` → `:45`/`:105`/`:107` 三处。
|
||||
- 真实入口:`layout_probe.tscn:6` 挂载 `res://probe/layout_probe.gd`(场景进,非脚本直调);探针断言对象=`main.tscn` 实例化的生产 UI 链(`main.ui.battle.board_zone.board_view`),非测试替身。
|
||||
- 报告附带的 grep 读数(MIN_CELL 零命中)由审计方独立复跑证实(见第五节)。
|
||||
|
||||
行 2(算式单点 V2):
|
||||
- 测试真实存在:`game/tests/unit/core/board_gen_reward_test.gd:75-76`,断言条件 `int(cell) == board_view_script._cell_for(n, avail)`。
|
||||
- 改动点行号核实:`board_view.gd:210`=`_cell = float(_cell_for(maxi(_board.width, _board.height), avail))`、`:226`=`static func _cell_for`——与报告所记 `:210`/`:226` 逐一相符。
|
||||
- 真实入口:`--script res://tests/unit/core/board_gen_reward_test.gd` 直跑(文件头 `:10` 自述同入口)。
|
||||
|
||||
行 3(四档冒烟 V3):
|
||||
- 测试真实存在:`board_gen_reward_test.gd:59` 四档取样表 `[(1,0,10),(2,0,12),(3,0,13),(3,9,14)]`,`:69`/`:71`/`:73` 三条 V3 断言。
|
||||
- 真实入口同行 2(同一宿主 `_init:33` 调 `_smoke_layout_cell_formula`)。
|
||||
|
||||
行 4(推定留痕 V4):
|
||||
- 测试真实存在:零尺寸前置 `layout_probe.gd:113-114`,推定采集 `:116-119`,PASS 后打印 `:47-50`,尾缀 `:49`/`:114`。
|
||||
- 真实入口同行 1。
|
||||
|
||||
行 5(批末收口):
|
||||
- `game/tests/.gates/receipt.json` 实读:`all_green=true`、`commit=e3e206d0f5646ecb8ece22ac08018c26e5591e1d`、七闸(00/01/02/03/05/09/10)exit 全 `0`、`domain=code`、`scope=related[presentation]`、`changed_vs_baseline=[]`——与报告行 5 所记一致。审计方未重跑全量闸(按审计约束,回执承载)。
|
||||
|
||||
## 二、自跑最窄测试抽查——通过
|
||||
|
||||
a. 探针两档(工作目录 `D:\code\g-plan2-iter46\game`):
|
||||
- 命令:`/d/code/godot/Godot_v4.7.2-stable_win64_console.exe --headless --path . res://probe/layout_probe.tscn`
|
||||
- 实测 exit 0。关键输出原文:
|
||||
- `[layout_probe] PASS — 2 档几何不变量全过+格边长等价成立(基座实读 40px)〔格边长 V1〕`
|
||||
- `[layout_probe] [基座 1280x800] 13 板推定 30px/14 板推定 28px(实板可用面积 (1022.0, 454.0))〔格边长 V4〕`
|
||||
- `[layout_probe] [16:9 全屏 1920x1080] 13 板推定 46px/14 板推定 46px(实板可用面积 (1662.0, 734.0))〔格边长 V4〕`
|
||||
- 读数与卡 §2 第 7 条锚点(基座 30/28、全屏 46/46,可用面积 1022×454/1662×734)逐值一致,零对拍偏差。审计方另按公式手工复核:基座 13 板 `(422−24)/13=30.6→30`、14 板 `(422−26)/14=28.28→28`、全屏 14 板 `(702−26)/14=48.3→钳制 46`——打印值与单点算式自洽。
|
||||
|
||||
b. 单元四档(同工作目录):
|
||||
- 命令:`…console.exe --headless --path . --script res://tests/unit/core/board_gen_reward_test.gd`
|
||||
- 实测 exit 0,收尾行 `[board_gen_reward_test] all green (74 checks)`。
|
||||
- 四档各四断言全 PASS:L1D0(41px)/L2D0(33px)/L3D0(31px)/L3D9(28px)——每档「板型一致〔格边长 V3〕」「网格高 ≤ 可用高−24〔格边长 V3〕」「格边 ∈ 26–46〔格边长 V3〕」「算式单点等价〔格边长 V2〕」各一条,16 条尾缀齐全。62→74 增量=每档净增 3 条 × 4 档,账目相符。
|
||||
|
||||
c. gdstyle(工作目录 `D:\code\g-plan2-iter46`):
|
||||
- 命令:`python tools/gdstyle_gate.py`
|
||||
- 实测 exit 0:`扫描面 142 个 .gd;命中 5 条,基线内 5 条,基线外新违规 0 条,较登记值恶化 0 条`。
|
||||
- 基线两键实读:`tools/gdstyle_baseline.txt:11`=`board_view.gd|quality/max-class-variables = 31`、`:12`=`board_view.gd|quality/max-public-methods = 27`——持平,无 NEW 键。
|
||||
|
||||
## 三、判据绑定面核查——通过(一处非阻断措辞备注)
|
||||
|
||||
1. 绑定的是生产写入值,不是多层防御后的终态:
|
||||
- 探针取值面=`cell_size` 公开只读属性(`board_view.gd:89-91` getter 直返 `_cell`),`_cell` 由 `set_cell_area` 在 `:210` 直接写入;生产写入路径两条未动(`board_zone_view.gd:92` resized 信号→`set_cell_area(_board_area.size)`、`board_view.gd:273` rebuild 末尾)。等价断言 `layout_probe.gd:106` 对 `bv.size`(实板可用面积)严格相等(`!=` 记红)——生产停调单点算式即红(基座档默认值 46 与算式值 40 分叉可捕)。
|
||||
- 单元取值面=真实调用 `set_cell_area(avail)` 后直读 `_cell`(`board_gen_reward_test.gd:65,67`),与同输入 `_cell_for(n, avail)` 逐档 int 严格相等(`:76`)——同一事实两路读取。
|
||||
2. 内部字段直查两处的例外依据:
|
||||
- 探针读 `_board`(`layout_probe.gd:103`):理由「板型 N 无公开出口」已载于代码注释 `:102`、卡 §7.3 T2 与卡 §14.2、报告 §六 白名单第 6 项。
|
||||
- 测试读 `_cell`(`board_gen_reward_test.gd:67`):批前既有取值面(卡 §2 第 4 条记载改前即如此),卡 §8 申报 4 明列 `cell_size`/`_cell` 为两合法入口、禁换别的入口——属守住的旧面,非新开直查。
|
||||
3. 非阻断措辞备注:卡 §14.2 与代码注释 `layout_probe.gd:102` 均称例外理由「对照表行 1 注明」,但实现报告 §三 行 1 判据绑定面格(以及卡 §8 行 1)未逐字带「N 无公开出口/受控例外」句——交叉引用指针落空。例外事实与理由已在他处完整承载(本节第 2 点所列四处),断言零削弱、无申报外改动,不判红;建议实现会话顺手把该句补进报告 §三 行 1(可选,不阻塞合并)。
|
||||
|
||||
## 四、测试削弱核查——通过
|
||||
|
||||
e3e206d0 负向行(删除行)全集逐处对账,全部落进卡 §8 申报四条,无申报外删改:
|
||||
|
||||
| 删除内容 | 对应申报 |
|
||||
|---|---|
|
||||
| `const MIN_CELL := 36.0` 整行 | 申报 1(阈值常量退役) |
|
||||
| `if cell < MIN_CELL:` +「< 可读门槛」记红两行 | 申报 1(阈值断言删除) |
|
||||
| 旧 PASS 消息(「格子 ≥36px」形态)两行 | 申报 2(文案随判据换代) |
|
||||
| `for L in [1, 2]` 与 `generate(L, 0, …)` 两行 | 申报 3(循环集 2→4 档)+白名单第 2 项(字典数组形态) |
|
||||
| 两条旧 Kit.check 的消息行 | 申报 3(前缀 L%d→L%d D%d——卡 §7.4 明许)+白名单第 4 项(尾缀编排) |
|
||||
| 冒烟 print 头行(「底部预留回归」→「·四档板型」) | 申报 3 同批日志头随档数换代(非断言,无条件面) |
|
||||
| `board_view.gd` 内联算式六行 | 非断言——逐字搬入 `_cell_for`(`board_view.gd:226-231` 对拍:SEP/DEPTH_PX 同源、reserve 24.0+d 同式、clampi(26,46) 留函数内),行为零变化由单元 74 checks 全绿承载 |
|
||||
|
||||
补偿三件全在位:等价断言(V1)、结构钳制四档(V3)、推定留痕(V4)。既有两断言条件逐字保留(`grid_h <= int(avail.y) - 24`、`cell >= 26.0 and cell <= 46.0`),样本 `Vector2(1036, 460)` 未改。既有几何不变量与视口档位表零改动(diff 负向行中无其一)。申报 4(禁恢复阈值/删旧断言/放宽区间/换读取入口)成立——四处均未发生。
|
||||
|
||||
## 五、全仓无人造阈值回归——通过
|
||||
|
||||
- `grep -rn "MIN_CELL\|可读门槛\|可读下限" game/` → 零命中(exit 1);扩到 `tools/`、`design/` 查 `MIN_CELL` 亦零命中。
|
||||
- 30/36 阈值形态穷举:三件改动文件中 30 仅两处且均非格边长判据(`board_gen_reward_test.gd:203`「板面 30% 锚」=雷数比例锚、`board_view.gd:659`「南部 30%」=墙面口径注释);36 零出现。全 `game/` 断言形态 grep(`(>|>=|<|<=)\s*(30|36)`)命中皆为无关域(RNG 位移 `>> 30`、商店 `1 << 30` 哨兵价、护甲 `<= 30` 属性域检);`clampi` 无 30/36 形态。格边长唯一区间判据仍是公式自带 `clampi(26, 46)`。
|
||||
- 变异类测试与撤销类取证:diff 负向行无「人为改错值验抓取」形态;无回退 hunk;测试代码无注入破坏分支(探针 `_board == null` 前置属测量面防御,报告 §六 第 1 项已备案,非变异)。
|
||||
- design/ 现状:`battle.md:144`「可读下限 30px」句仍在位=预期(实现批禁写 `design/`,退役走反哺点通道——`reports/iter46-反哺点-卡C-2026-11-01.md` 第 1 条已登记,卡 §5 明示不阻塞本批)。
|
||||
- 禁写面核查:卡C 段全区间 `5269ed40..8eaf7d87` 触碰文件恰为三件代码+两件 reports,`待办清单.md`/`体验验证清单.md`/`game/tests/README.md`/`design/` 零触碰。
|
||||
- 工作区漂移核查:三件代码文件 `git status` 干净——审计实跑的即 e3e206d0 提交的字节。
|
||||
|
||||
## 六、总结论
|
||||
|
||||
**通过。** 五项审计全过:对照表五行真实入口与尾缀齐全;自跑探针两档绿(基座实读 40px、推定 30/28 与 46/46 合锚点)、单元 all green 74 checks(四档 41/33/31/28px,V2/V3 全 PASS)、gdstyle 基线外新违规 0 恶化 0;判据绑生产写入值与 `_cell_for` 严格相等;删改逐处对上申报四条;全仓无人造阈值回归、无变异/撤销形态。唯一遗留=第三节第 3 点的交叉引用措辞备注(不判红、不阻塞合并,补句归实现会话可选动作)。
|
||||
@@ -1,55 +0,0 @@
|
||||
# 停机呈报:棋盘格边长口径收口批(迭代 46 卡C)——L3 #2 实板可读面不达标
|
||||
|
||||
> 日期:2026-10-31 · 呈报人:迭代 46 实现会话(iter 技能执行中)
|
||||
> 接收方:待办清单条目「棋盘格边长三方取值不一致——待扩板定档处置(2026-10-06 登记)」
|
||||
> 性质:实现段零裁断——需求卡片预设停机点触发(需求卡片-棋盘格边长口径收口批-2026-10-30.md §9 异常分级 L3 第 2 条),停该卡呈报退回上游,等用户裁决。
|
||||
|
||||
## 一、触发了什么
|
||||
|
||||
需求卡片 §7.3 T2 规定探针新增「实板可用面积下 13/14 板格边长推定」断言:以探针实读 `board_view.size` 代入算式单点 `BoardView._cell_for(n, size)`,`< 30px`(battle.md 可读下限)即记问题。§9 L3 第 2 条预设:实板可用面积代入 13/14 后 < 30 = 产品面问题,**停卡呈报,禁调低下限、禁换样本凑绿**。
|
||||
|
||||
当轮真实跑批实测(worktree iter46,种子 42,两档视口):
|
||||
|
||||
| 视口档 | board_view.size(实板可用面积) | L1 实测格边 | 13×13 推定 | 14×14 推定 |
|
||||
|---|---|---|---|---|
|
||||
| 基座 1280×800 | (1022.0, 454.0) | 40px ✓ | 30px(恰达标) | **28px < 30 ✗** |
|
||||
| 16:9 1920×1080 | (1662.0, 734.0) | 46px(钳制顶格) | 46px ✓ | 46px ✓ |
|
||||
|
||||
代入算式复核(1280 档):`min(1022−12−8, 454−32) = 422`;`(422 − 13×2) / 14 = 28.28 → floor 28` → 钳制 [26,46] 内 → 28px。**14×14 板在基座档的实板格边长低于 battle.md「可读下限 30px」**。
|
||||
|
||||
## 二、事实定性(这不是本批制造的回归)
|
||||
|
||||
1. 算式逐位未动(卡C 行为零变化,单元四档冒烟 74 checks 全绿——结构钳制 [26,46] 面全过)。
|
||||
2. 28px 是**存量事实**:现行生产公式对 14×14 板(board_gen.tres:L3 depth 9–13)在基座档一向算出 28px;本批新增的推定断言只是首次把它量出来。
|
||||
3. battle.md 算例表的「14×14 → 30px」按「可用高 486px」推算,而实机 D 列结构给出 454px——卡片 §2.8 已登记该偏差(「实机可用面积与算例不同源」),本读数即该偏差的实测落点。
|
||||
4. 同样数据下 13×13=30 恰好达标,仅 14×14 一档越线下。
|
||||
|
||||
## 三、分歧点与两种以上读法
|
||||
|
||||
**分歧点**:battle.md「可读下限 30px」(:144)的适用域——是否按视口档/板型分级适用。
|
||||
|
||||
- **读法甲(全域硬下限)**:30px 对一切视口档×板型组合生效 → 14×14 板在基座档不达标=产品缺陷,需要设计动作(改布局可用面积/改板型表/缩 14×14 适用域)。
|
||||
- **读法乙(按档分级)**:30px 下限以 1920 档为守卫面(推定断言只判 1080 档),基座档按实测算例记录(battle.md 算例本标注「随布局与板型变化,不是契约值」)→ 推定断言判据域改判 1080 档,基座档记录实测 28px 不下断言。
|
||||
- 两读法都属设计裁决(owner 文档 battle.md 的判据域修订),**实现段无权自裁**——读法乙虽不是「调低下限」(30 数值不动),但改变断言的适用域,同样超出卡片明列范围。
|
||||
|
||||
## 四、建议案(供裁决,禁代裁)
|
||||
|
||||
1. **建议主案=拆批**:迭代 46 以卡A(换图系七件批)+卡B(名字行提档与地台色合并批)先行合回——两卡已收口、代码域闸全绿(回执 45b53d68,commit 45b53d68 后另有 S9/S7 修正与卡B 提交);卡C 停摆退回写卡段,待 30px 下限适用域裁决后重立卡编入后续迭代。拆批合回前置=roadmap 迭代 46 行与待办清单条目状态换代(归文档批,本批禁写)。
|
||||
2. **裁决后的卡C 重写方向**(按所选读法):
|
||||
- 读法甲:重写卡范围收窄为「算式单点+门槛 36→30+四档冒烟+13 板推定」,14×14 不达标另立缺陷条目走设计段(布局或板型表动作)。
|
||||
- 读法乙:卡C 原范围保留,推定断言判据域改「1080 档 ≥30」+基座档实测记录句;battle.md 反哺点补「下限适用域分级」条。
|
||||
3. **卡C 已完成的可保留面**(worktree iter46 未提交改动,停摆卡不提交——随裁决处置):`board_view.gd` 算式单点提取 `_cell_for`(等价性已证:board_gen_reward_test 62→74 checks 全绿)、`layout_probe.gd` 门槛 36→30 与推定断言、`board_gen_reward_test.gd` 四档扩样。三件改动行为零变化,裁决后可直接复用。
|
||||
|
||||
## 五、待办清单条目状态回退+缺口补记(拟稿——落笔归上游段/用户)
|
||||
|
||||
条目「棋盘格边长三方取值不一致——待扩板定档处置(2026-10-06 登记,来源=批次移交)」:
|
||||
|
||||
- **状态**(现「已写卡+已编迭代 46」)→ 回退拟稿:`已写卡(卡C 停摆退回——L3 #2 实板可读面不达标)`。
|
||||
- **缺口补记拟稿**:`缺口:14×14 板基座档(1280×800)实板格边 28px 低于 battle.md 可读下限 30px 的适用域待设计裁决——1280 档实板可用面积 (1022,454)→28px、1080 档 (1662,734)→46px;13×13 两档均达标(30/46)。裁决点=读法甲(全域硬下限→产品缺陷走设计动作)vs 读法乙(下限按视口档分级→断言判据域改 1080 档)。裁决后重写卡C(算式单点/门槛对齐/四档冒烟三件已验可复用)。`
|
||||
|
||||
## 六、本批实况速览
|
||||
|
||||
- 卡A 换图系双基座七件批:**收口**(T0–T8 全落,--code 闸 7 闸全绿)。
|
||||
- 卡B 站桩名字行提档与地台色合并批:**收口**(26 checks 绿,golden 三张 0.00% 留痕)。
|
||||
- 卡C 棋盘格边长口径收口批:**停摆**(T0 完成、T1–T3 改动已验未提交、T4 未走)——本呈报。
|
||||
- 迭代合并:**阻塞**,等本呈报裁决(拆批合回 A+B,或卡C 闭合后整体合回)。
|
||||
@@ -1,21 +0,0 @@
|
||||
# grilling 复核——站桩名字行提档与地台色合并批需求卡片(2026-10-31)
|
||||
|
||||
> 接收方:reports/需求卡片-站桩名字行提档与地台色合并批-2026-10-31.md(v1.0→v1.1)。复核方=独立子代理对抗审查(未参与写卡;Godot 4.7.2 console 版实测断言写法)。本件属中间文档,随批退役。
|
||||
|
||||
## Findings 与处置(五条全落 v1.1)
|
||||
|
||||
| # | 级别 | 发现 | 处置(落卡位置) |
|
||||
|---|---|---|---|
|
||||
| 1 | 阻断 | V11 断言 `UiKit.get_script().get_script_constant_map()` 实测 parse error(类引用直调非静态函数不合法);机制本身可靠(实测枚举 186 键含目标常量) | T2 断言载体改 `load("res://presentation/views/ui_kit.gd").get_script_constant_map()`,依据随句注明(§7.3) |
|
||||
| 2 | 阻断 | 五取值点中三处宽度测量点零断言——漏改测量点时牌宽按 12px 计、文字溢素底牌,全断言仍绿 | V10 增第三断言=计数锚 `body_src.count("UiKit.FS_CAPTION") == 1`(改后仅剩 :114 消散提示一处),三测量点强制换代(§7.2/§8 行 1) |
|
||||
| 3 | 阻断 | 绘制点改指只有 grep 反证(旧名消失)无正证(落成错值也绿,golden 重锚还会冻结错值) | V11/V12 补三处绘制点源码锚正证:顶缘线 `ped.size.x, 2.0), UiKit.BRICK, true`、口沿 `FACADE_HIGHLIGHT_PX), UiKit.BRICK, true`、描边 `UiKit.PLAZA_EDGE`(§7.3/§8 行 3/4);grep 降为反证补充 |
|
||||
| 4 | 建议 | §8 首句「6 行对应完成定义第 1–6 条」对应关系不成立(第 5 条无行) | 首句改「第 1–4、6 条;第 5 条经 T3 核对步承载」(§8 首句) |
|
||||
| 5 | 建议 | `run_all.gd:191` 套件注释「V5–V9」增 V10–V12 后成死注,但该文件不在结构图 | §6 文件结构图补 run_all.gd 行(注释换代,非行为改动)+T2 增注释换代步(§7.3) |
|
||||
|
||||
## 无发现审点
|
||||
|
||||
步骤扫描(每步一动作一可核查结果)/名字一致性(PLAZA_EDGE、name_font_size、V10–V12 逐字一致且与盘面无冲突;V10 锚串与顺位徽标行无碰撞)/落位与复用(`Color8(76` 全仓零命中、`#4C4038` 仅探针注释非 token——新常量论证成立)/预算与契约(probe 增字典键非成员,gdstyle 三触面零基线键,S13 零新增预期成立;golden 重锚工具缺省只动板面三张,与禁触清单兼容)/估时(0.5 天与触面相称)。
|
||||
|
||||
## 结论
|
||||
|
||||
三阻断两建议全部落卡后 **PASS**——卡片 v1.1 成立,可交迭代编排段。
|
||||
@@ -1,431 +0,0 @@
|
||||
# 需求卡片:换图系双基座七件批
|
||||
|
||||
> 日期:2026-10-31
|
||||
> 性质:需求改动实现批卡片;零待裁点,开工门=U0。
|
||||
> 来源:待办清单「「封锁-蓄力」combo 设计素材」条。唯一事实源:[奇物](../design/gdd/systems/冒险循环/奇物.md) v1.3+[行动经济](../design/gdd/systems/排雷循环/行动经济.md) v1.3+[战斗结算](../design/gdd/systems/战斗循环/战斗结算.md) v1.4+[地图战斗资源](../design/gdd/systems/战斗循环/地图战斗资源.md) v1.3;参考设计过程件:[提案 v0.5](提案-弃图刷新系专长流派-2026-10-30.md)。
|
||||
> 估时:T0–T8 ≈ **7.75~8.5 个工作日**;切分预案见第十二节。
|
||||
|
||||
## 一、设计事实源
|
||||
|
||||
本卡实现下列已闭合设计,不重新裁断机制:
|
||||
|
||||
| 来源 | 本卡采用的事实 |
|
||||
|---|---|
|
||||
| [奇物 v1.3](../design/gdd/systems/冒险循环/奇物.md) | 基座先行原则、七件名称与职责、双基座叠加 |
|
||||
| [行动经济 v1.3](../design/gdd/systems/排雷循环/行动经济.md) | 付费挖格产 RAP、刷新成本减半、两件基座叠加 |
|
||||
| [战斗结算 v1.4](../design/gdd/systems/战斗循环/战斗结算.md) | 成功刷新事实、当轮结算兑付、全局 `damage_taken` |
|
||||
| [地图战斗资源 v1.3](../design/gdd/systems/战斗循环/地图战斗资源.md) | 现行清图奖励语义不变;旧探索进度回收方案已注销 |
|
||||
| [提案 v0.5](提案-弃图刷新系专长流派-2026-10-30.md) | 七件最终结构与行为验收面;保留作实现参考,不替代 GDD |
|
||||
|
||||
## 二、目标与完成定义
|
||||
|
||||
交付七件专长:
|
||||
|
||||
| 层 | feat_id | 显示名 | 稀有度/cap | provisional 数值 |
|
||||
|---|---|---|---|---|
|
||||
| 基座 | `vein_reserve` | 矿脉储能 | excellent/1 | 每次受理的付费挖格 +1 RAP |
|
||||
| 基座 | `easy_swap` | 省力周转 | excellent/1 | 刷新成本为基线 50% |
|
||||
| 输出 | `wall_blast` | 崩壁冲击 | excellent/1 | 全体存活敌各受 2 点 |
|
||||
| 输出 | `charge_rotation` | 蓄力周转 | excellent/1 | 每刷一次 +1 层,上限 3;下一次主角攻击消费全部层 |
|
||||
| 生存 | `stone_mitigation` | 石层缓冲 | common/1 | 当轮有成功刷新时,每次主角受伤固定 −2 |
|
||||
| 生存 | `tunnel_rest` | 坑道小憩 | common/1 | 每刷一次累计 1 点恢复,上限 3;本轮授予段合计回血 |
|
||||
| 资源 | `mine_profit` | 矿道红利 | rare/1 | 每次成功刷新固定 +1 GP |
|
||||
|
||||
完成定义:
|
||||
|
||||
1. `feats.tres` 30→37 行;稀有度 普通14/优秀13/稀有10/传说0;牌库 132→139。
|
||||
2. 两件基座可叠加;刷新次数与 RAP 清零限制保持现行。
|
||||
3. 所有主角伤害路径统一经过 `damage_taken`,每种伤害单据恰发射一次。
|
||||
4. 刷新效果只在成功刷新后产生;RAP 不足、相位非法、每轮上限均零触发。
|
||||
5. 崩壁冲击沿用案 C,在战斗段末结账;石层缓冲、坑道小憩、矿道红利均在本轮既有通道兑付。
|
||||
6. 无七件专长时现行行为逐位不漂移;持有旧 `damage_taken` 专长时按全局受伤语义生效。
|
||||
7. 新测试套件与计数回归全部通过,旧断言只允许因语义扩展而改,不得放宽阈值。
|
||||
|
||||
## 三、现状事实
|
||||
|
||||
1. `dig_paid` 在 AP 扣费前发射,消费环已有 counter/grant AP 通道,无 RAP 通道:[action_economy.gd:101](../game/core/action_economy.gd#L101)。
|
||||
2. `grant_reserve_ap()` 已存在,直接增加 RAP:[action_economy.gd:177](../game/core/action_economy.gd#L177)。
|
||||
3. `request_refresh()` 固定读全局基线成本:[action_economy.gd:199](../game/core/action_economy.gd#L199)。
|
||||
4. 刷新成功序=扣 RAP→计数→旧资源退役→旧板退役→装新板:[battle_orchestrator.gd:610](../game/core/battle_orchestrator.gd#L610)。
|
||||
5. 当前事件词表20种,效果词表32种:[effect_engine.gd:12](../game/core/effect_engine.gd#L12)。
|
||||
6. `damage_taken` 现只在敌方攻击路径发射:[damage_controller.gd:472](../game/core/damage_controller.gd#L472)。
|
||||
7. 地形伤害在开单前单独发射并只消费 `damage_reduce/ac_bonus/counter_add`,不消费 shield:[grant_segment.gd:174](../game/core/settlement/grant_segment.gd#L174)。
|
||||
8. 棋盘主角直伤在控制器终段只做伤害下限后扣血,不发射事件:[damage_controller.gd:569](../game/core/damage_controller.gd#L569)。
|
||||
9. 危险格与错误封印的负向资源直伤最终进入同一 `board_flat_hero` 单据:[reward_grant.gd:320](../game/core/reward_grant.gd#L320)、[reward_grant.gd:369](../game/core/reward_grant.gd#L369)。
|
||||
10. 授予段伤害单已有案 C 暂存队列,战斗段末统一补提交:[grant_segment.gd:24](../game/core/settlement/grant_segment.gd#L24)、[combat_segment.gd:114](../game/core/settlement/combat_segment.gd#L114)。
|
||||
11. `grant_gp` 现消费点写 `reward_grant.escrow` 并发专长 GP 行:[grant_segment.gd:265](../game/core/settlement/grant_segment.gd#L265)。
|
||||
12. `attack_bonus` 已支持 `value_counter`:[damage_controller.gd:360](../game/core/damage_controller.gd#L360)。
|
||||
13. GP 袋正常格面行值为3,普通战斗掉落均值3:[reward.tres:184](../game/data/tables/reward.tres#L184)、[shop.tres:7](../game/data/tables/shop.tres#L7)。
|
||||
14. 现行专长表30行、牌库132;稀有度12/9/9/0:[adventure_feats_test.gd:465](../game/tests/unit/core/adventure_feats_test.gd#L465)。
|
||||
15. 刷新真实入口回归已覆盖 RAP、AP保留、上限与刷新图零清图:[round_flow_skill_pool_test.gd:145](../game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd#L145)。
|
||||
16. BattleOrchestrator 当前811行,类变量与文件长度均有 S13 登记值:[battle_orchestrator.gd:600](../game/core/battle_orchestrator.gd#L600)、[gdstyle_baseline.txt:9](../tools/gdstyle_baseline.txt#L9)。
|
||||
17. `BattleFacts` 成员冻结15/15,不得新增刷新队列:[battle_facts.gd:10](../game/core/battle_facts.gd#L10)。
|
||||
18. `RewardGrant` 类变量封闭15/15,不得新增 GP/回收队列:[reward_grant.gd:13](../game/core/reward_grant.gd#L13)。
|
||||
|
||||
## 四、设计契约
|
||||
|
||||
- 🔴 **C1 无专长基线零扰动**:挖格不产 RAP、刷新成本8、伤害事件旧结果、GP与清图路径均保持现行。
|
||||
- 🔴 **C2 成功刷新才登记**:RAP不足、非Active、每轮第3次均不产生 `board_refreshed`;成本折扣只改变门槛与扣费,不改变拒绝判据。
|
||||
- 🔴 **C3 全局受伤事件恰一次**:敌方攻击、危险格、错误封印资源格、地形伤害都经统一 `damage_taken`;同一伤害单据不得重复发射。
|
||||
- 🔴 **C4 减伤固定不堆**:石层缓冲只看当轮是否至少成功刷新一次;同一轮多刷不提高减伤,减后仍走现行全局伤害下限。
|
||||
- 🔴 **C5 不引入临时生命**:本批不新增HP护盾池、承伤库存或生命上限变化。
|
||||
- 🔴 **C6 五段时序不变**:崩壁冲击走现有延迟伤害队列;坑道小憩在授予段;GP走现有战斗内缓冲。
|
||||
- 🔴 **C7 矿道红利不绑清图奖励**:每次成功刷新固定1 GP;不读取旧图探索进度、不触发清图事件。
|
||||
- 🔴 **C8 数值单源**:RAP产量、50%折扣、群伤、恢复、减伤、GP均从 `feats.tres` 读取;代码零玩法数值字面量。
|
||||
- 🔴 **C9 词表封闭**:只新增 `refresh_request`、`board_refreshed` 两事件与 `grant_reserve_ap`、`apply_discount` 两效果。
|
||||
- 🔴 **C10 结构预算**:BattleOrchestrator文件长度与类变量只降不升;新增流程件独立承载刷新生命周期。
|
||||
- 🔴 **C11 反自动刷新**:仍只允许玩家入口发起,RAP满不自动刷新。
|
||||
- 🔴 **C12 信息红线**:不揭示格、不改数字、不改棋盘生成分布。
|
||||
- 🔴 **C13 拆分边界**:`BattleRefreshFlow` 只负责刷新可用性、扣费、换图与成功事实登记;七件效果的算法留在效果引擎、授予段与伤害控制器。
|
||||
- 🔴 **C14 禁凑计数袋**:不把所有分支堆进一个无名 helper;中央受伤消费件只处理 `damage_taken` 命中组合。
|
||||
|
||||
## 五、行为结构
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[付费挖格受理] -->|矿脉储能| B[RAP增加]
|
||||
C[玩家请求刷新] -->|省力周转| D[折后成本]
|
||||
D -->|成功| E[board_refreshed]
|
||||
E --> F[崩壁冲击:延迟群伤单]
|
||||
E --> G[蓄力周转:当轮攻击层数]
|
||||
E --> H[石层缓冲:当轮全局减伤]
|
||||
E --> I[坑道小憩:当轮累计恢复]
|
||||
E --> J[矿道红利:1 GP]
|
||||
K[敌方攻击/危险格/错误封印/地形] --> L[damage_taken 恰一次]
|
||||
H --> L
|
||||
```
|
||||
|
||||
## 六、范围边界
|
||||
|
||||
做:
|
||||
|
||||
1. 扩两事件、两效果;统一全局 `damage_taken` 发射与消费。
|
||||
2. 实现两件基座、三件输出/两件生存/一件资源的数据行与消费点。
|
||||
3. 拆 `BattleRefreshFlow`,保持编排器入口与唯一通道。
|
||||
4. 新增七件专项测试,同步词表、专长池与刷新回归。
|
||||
5. 能力清单入表。
|
||||
|
||||
不做:
|
||||
|
||||
1. 不做探索进度回收、清图奖励折算或旧图快照。
|
||||
2. 不做临时生命值或独立护盾池。
|
||||
3. 不新增 UI、素材、渲染基线、MC档位。
|
||||
4. 不重构自爆流、不改 `增益状态`、不新增数据表。
|
||||
5. 不抬高刷新成本,不做全板开,不返 RAP。
|
||||
|
||||
## 七、关联文档同步面
|
||||
|
||||
| 文档 | 关联点 | 同步义务 |
|
||||
|---|---|---|
|
||||
| [奇物](../design/gdd/systems/冒险循环/奇物.md) | 七件由设计声明改为实装;行数、稀有度与验收口径 | 实现批禁写;落 `reports/iter<N>-反哺点-<日期>.md`,用户裁决后文档批执行 |
|
||||
| [行动经济](../design/gdd/systems/排雷循环/行动经济.md) | 两件基座由待实现改为在册 | 同上 |
|
||||
| [战斗结算](../design/gdd/systems/战斗循环/战斗结算.md) | 全局受伤事件与刷新事实落码状态 | 同上 |
|
||||
| [地图战斗资源](../design/gdd/systems/战斗循环/地图战斗资源.md) | 确认清图奖励不受矿道红利改变 | 同上 |
|
||||
| [架构文档](../design/engineering/architecture/architecture.md) | 新增事件、效果、BattleRefreshFlow与API边界 | 同上 |
|
||||
| [测试手册](../game/tests/README.md) | 换图系能力行 | 本写卡段已入表;实现批只核对名实一致 |
|
||||
|
||||
## 八、文件结构与职责
|
||||
|
||||
| 文件 | 职责 | 改动类型 | 验收行 |
|
||||
|---|---|---|---|
|
||||
| [effect_engine.gd](../game/core/effect_engine.gd) | 封闭词表扩两事件、两效果 | 行为改动 | V1 |
|
||||
| [action_economy.gd](../game/core/action_economy.gd) | dig_paid产RAP、折价成本受理 | 行为改动 | V2/V3 |
|
||||
| [battle_refresh_flow.gd](../game/core/settlement/battle_refresh_flow.gd) | 新建:刷新门、扣费、换图、成功事实 | 行为改动 | V4/V10 |
|
||||
| [battle_orchestrator.gd](../game/core/battle_orchestrator.gd) | 刷新公开口单行转发;来源豁免 | 行为改动 | V4 |
|
||||
| [damage_controller.gd](../game/core/damage_controller.gd) | 全局受伤消费、攻击层消费、延迟群伤目标解析 | 行为改动 | V5/V6/V7 |
|
||||
| [grant_segment.gd](../game/core/settlement/grant_segment.gd) | 刷新命中施加、GP、当轮恢复、地形路径接入统一消费 | 行为改动 | V5/V6/V7/V9 |
|
||||
| [reward_grant.gd](../game/core/reward_grant.gd) | 群伤单延迟入队 | 行为改动 | V6 |
|
||||
| [feats.tres](../game/data/tables/feats.tres) | 七行专长与数值 | 行为改动 | V2/V3/V6/V7/V8/V9/V11 |
|
||||
| [run_all.gd](../game/tests/run_all.gd) | 新测试登记 | 非行为改动 | V12 |
|
||||
| [refresh_feats_test.gd](../game/tests/unit/battle_settlement/refresh_feats_test.gd) | 新建七件与全局受伤链路专项 | 非行为改动 | V2–V10 |
|
||||
| [adventure_feats_test.gd](../game/tests/unit/core/adventure_feats_test.gd) | 专长行数、稀有度、牌库 | 非行为改动 | V11 |
|
||||
| [forge_table_test.gd](../game/tests/unit/data_config/forge_table_test.gd) | 事件/效果闭集计数 | 非行为改动 | V1 |
|
||||
| [effect_words_t1_test.gd](../game/tests/unit/core/effect_words_t1_test.gd) | 新词在册与出域拒绝 | 非行为改动 | V1 |
|
||||
| [round_flow_skill_pool_test.gd](../game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd) | 无专长基线回归 | 非行为改动 | V12 |
|
||||
| [README.md](../game/tests/README.md) | 能力清单 | 非行为改动 | V11 |
|
||||
|
||||
## 九、落位与可复用性预检
|
||||
|
||||
### 9.1 新增件
|
||||
|
||||
| 新件 | 复用结论 | 唯一落点 | 调用路径 |
|
||||
|---|---|---|---|
|
||||
| `BattleRefreshFlow` | 已查 `can_refresh`、`player_request_refresh`、`request_refresh`、商店代理、autoplay;没有同时负责成本查询与成功事实登记的现成件。不能复用 GrantSegment,因为刷新发生在授予段外;不能塞 BattleOrchestrator,因其文件长度贴顶 | `game/core/settlement/battle_refresh_flow.gd` | 呈现层→编排器转发→流程件→行动经济/装板壳/授予段 |
|
||||
| `refresh_feats_test.gd` | 现有刷新测试只覆盖无专长基线;专长宿主没有经真实 `player_request_refresh` 驱动七件的夹具 | `game/tests/unit/battle_settlement/refresh_feats_test.gd` | `settle_batch`/`player_request_refresh`/轮末结算 |
|
||||
| `_apply_hero_damage_effects` | 复用现有 `_enemy_shield_apply` 的组合算法,不新造事件消费件 | DamageController私有族 | 所有 `damage_taken` 发射点唯一消费 |
|
||||
|
||||
### 9.2 实现规范预算
|
||||
|
||||
| 触面 | 实测预算 | 结论 |
|
||||
|---|---|---|
|
||||
| `battle_refresh_flow.gd` | 公开函数2/类变量0 | ≤20/≤15,通过 |
|
||||
| `battle_orchestrator.gd` | 类变量38不变;当前811行,删除旧刷新体并改两行转发,目标下降至少8行 | S13只降不升 |
|
||||
| `action_economy.gd` | 公共方法15→15,仅扩参与局部状态 | ≤20,通过 |
|
||||
| `grant_segment.gd` | 类变量3→3;公开方法1→2;新增私有施加函数≤4 | ≤20/≤15,通过 |
|
||||
| `damage_controller.gd` | 公共方法不新增;现有 `_enemy_shield_apply` 改名为 `_apply_hero_damage_effects`,私有函数净增≤2 | S13逐键实测 |
|
||||
| `reward_grant.gd` | 类变量15→15;新增一个公开延迟入口 | 禁增员,通过 |
|
||||
| `feats.tres` | 同一专长表30→37 | 无第二数据源 |
|
||||
|
||||
## 十、任务卡
|
||||
|
||||
### T0 开工基线与预算实测(0.5d)
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] 读 `game/tests/.gates/ci-status.json`;CI红未修即停卡。
|
||||
- [ ] 复核第三节 file:line;任一事实漂移先停卡核对。
|
||||
- [ ] 跑开发期局部读数:`bash tools/gdstyle.sh game`。
|
||||
- [ ] 记录 BattleOrchestrator行数/类变量、RewardGrant类变量、DamageController与GrantSegment方法数。
|
||||
|
||||
产出:所有结构预算基线;本卡无事实漂移。
|
||||
|
||||
### T1 词表扩签与计数(0.5d)
|
||||
|
||||
接口块:
|
||||
|
||||
- EVENTS 新增:`refresh_request`、`board_refreshed`
|
||||
- EFFECT_KINDS 新增:`grant_reserve_ap`、`apply_discount`
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] 在 [effect_engine.gd:12](../game/core/effect_engine.gd#L12) 追加两事件,并同步 [effect_engine.gd:19](../game/core/effect_engine.gd#L19) 的 MINE_EVENTS。
|
||||
- [ ] 在 [effect_engine.gd:24](../game/core/effect_engine.gd#L24) 追加两效果;不新增fact/op/DO_KEYS。
|
||||
- [ ] 更新 [forge_table_test.gd:202](../game/tests/unit/data_config/forge_table_test.gd#L202):EVENTS20→22、EFFECT_KINDS32→34。
|
||||
- [ ] 更新 [effect_words_t1_test.gd:14](../game/tests/unit/core/effect_words_t1_test.gd#L14):两事件与两效果在册;旧出域负例全部保留。
|
||||
- [ ] 孤立验证:`effect_words_t1_test.gd`、`forge_table_test.gd`。
|
||||
|
||||
验收:词表封闭性无洞,旧词行为不变。
|
||||
|
||||
### T2 全局 `damage_taken` 统一(1.75d)
|
||||
|
||||
接口块:
|
||||
|
||||
```gdscript
|
||||
func _emit_hero_damage_taken(amount: int, damage_kind: String, source: String, cell: Vector2i, ri: int) -> Dictionary
|
||||
func _apply_hero_damage_effects(hits: Array, total: int) -> Dictionary
|
||||
```
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] 把 [damage_controller.gd:507](../game/core/damage_controller.gd#L507) 的敌方受伤消费族改名为 `_apply_hero_damage_effects`,保留 shield、damage_reduce、ac_bonus、counter_add 的组合次序。
|
||||
- [ ] 新增 `_emit_hero_damage_taken()`:payload必含 `kind/amount/source/cell/round/hp_ratio`,dispatch后调用唯一消费族,返回减后金额与命中束。
|
||||
- [ ] 敌方攻击改走该方法,保持现有“掷点后、交付前”消费时点。
|
||||
- [ ] `_resolve_board_flat_hero()` 在伤害下限前调用该方法;若单据 context 已标 `hero_damage_consumed=true` 则跳过,避免重复。
|
||||
- [ ] 地形伤害改为调用该方法并把 `hero_damage_consumed=true` 写入单据 context,删除本地重复消费:[grant_segment.gd:174](../game/core/settlement/grant_segment.gd#L174)。
|
||||
- [ ] 危险格与错误封印的负向主角直伤经 `board_flat_hero` 自动进入该方法,不新增第二发射点。
|
||||
- [ ] 写专项函数:
|
||||
- `test_all_hero_damage_paths_emit_once()`:注入临时 `counter_add damage_taken` 专长,从敌方攻击、危险格、错误封印、地形四种真实入口进入,每种单据恰好计数一次。
|
||||
- `test_no_duplicate_damage_taken_event()`:同一伤害不得出现两次消费。
|
||||
- [ ] 窄测:`refresh_feats|damage_controller|seal_polarity|round_flow` 红件最小复跑。
|
||||
|
||||
验收:`damage_taken` 字面语义覆盖所有主角承伤;无专长仍逐位保持原伤害。
|
||||
|
||||
### T3 两件基座(1d)
|
||||
|
||||
接口块:
|
||||
|
||||
```gdscript
|
||||
func request_refresh(cost_override: int = -1) -> bool
|
||||
static func _effective_refresh_cost(oc: BattleOrchestrator) -> int
|
||||
```
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] 在 [action_economy.gd:101](../game/core/action_economy.gd#L101) 的 `dig_paid` 命中环累计 `grant_reserve_ap`,只在扣费受理后一次性调用 `grant_reserve_ap()`;连锁不二次调用。
|
||||
- [ ] `refresh_request` 命中只认 `kind=="apply_discount" && mode=="refresh"`;取声明序第一个命中,按 `floor(base*cost_mult/100)` 计算。
|
||||
- [ ] 新建 `BattleRefreshFlow`:公开 `can_refresh(oc)`、`execute(oc)`;execute只在ActionEconomy扣费成功后继续。
|
||||
- [ ] 编排器两个公开方法改为单行转发,删除旧刷新体。
|
||||
- [ ] 写:
|
||||
- `test_reserve_on_accepted_dig()`:真实挖格入口,RAP+1,AP按表扣。
|
||||
- `test_refresh_discount_gate_and_charge()`:真实刷新入口成本4,can_refresh同源判断。
|
||||
- `test_double_base_stack()`:同时持两件时挖格产RAP、刷新扣4。
|
||||
- `test_no_feats_baseline()`:旧成本与RAP来源逐值不变。
|
||||
- [ ] 窄测 `--only=refresh_feats|round_flow`。
|
||||
|
||||
验收:两件基座改变行为但不破坏现行经济闸。
|
||||
|
||||
### T4 成功刷新事实与命中施加(1d)
|
||||
|
||||
接口块:
|
||||
|
||||
```gdscript
|
||||
static func execute(oc: BattleOrchestrator) -> bool
|
||||
func apply_board_refreshed(ri: int) -> void
|
||||
func defer_ticket(t: Dictionary) -> void
|
||||
```
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] `execute()` 成功序钉死:折价扣RAP→refresh_used+1→旧资源退役→旧板退役→装新板→GrantSegment `apply_board_refreshed(ri)`。
|
||||
- [ ] install失败时返回false且零效果;成功事实只在新板就位后发射。
|
||||
- [ ] `apply_board_refreshed()` dispatch一次 `board_refreshed`,payload `{round:ri}`,命中消费:
|
||||
- `counter_add` → 既有单点落账。
|
||||
- `grant_gp` → `reward_grant.escrow += value` 并发 `fx_grant_gp` 行。
|
||||
- `open_ticket && channel=="blast"` → `DamageController.KIND_BOARD_BLAST`、`TARGET_ALL_ALIVE`、`source_class="fx_board_refresh"`,调用新增 `defer_ticket()`。
|
||||
- [ ] 在 [battle_orchestrator.gd:35](../game/core/battle_orchestrator.gd#L35) 的来源豁免追加 `"fx_board_refresh"`。
|
||||
- [ ] 写 `test_board_refresh_fact_only_on_success()`、`test_mine_profit_gp()`。
|
||||
- [ ] 窄测 `--only=refresh_feats|round_flow`。
|
||||
|
||||
验收:拒绝刷新零事实;GP固定入账且每轮上限同时限制次数。
|
||||
|
||||
### T5 五件后续效果(1.75d)
|
||||
|
||||
接口块:
|
||||
|
||||
```gdscript
|
||||
func _apply_hero_damage_effects(hits: Array, total: int) -> Dictionary
|
||||
func _round_end_apply(ri: int) -> void
|
||||
```
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] 崩壁冲击已在T4延迟开单;确认授予段不结账、战斗段末按存活目标结账,最后敌死亡仍由判定段胜。
|
||||
- [ ] 石层缓冲用 `round_swap_guard`:成功刷新时+1;`damage_taken` 条件≥1时 `damage_reduce value=2`,不清层、不随伤害段变化。round桶轮始自然清空。
|
||||
- [ ] 坑道小憩用 `round_swap_rest`:成功刷新累计至上限3;`round_end` 命中 `heal value_counter=round_swap_rest`,调用 `units.heal()`封顶,满血发未生效行;随后同事件行 `counter_add set=0`。
|
||||
- [ ] 蓄力周转用战斗桶 `swap_charge_layers`:成功刷新至上限3;`attack_commit` 消费全部层数,随后清零;战斗新建自然清空。
|
||||
- [ ] 写:
|
||||
- `test_stone_mitigation_all_damage()`
|
||||
- `test_rest_rotation_cap_and_clear()`
|
||||
- `test_charge_layers_consumed_same_round()`
|
||||
- `test_blast_defers_to_combat_segment()`
|
||||
- [ ] 窄测 `--only=refresh_feats|damage_controller|seal_polarity`。
|
||||
|
||||
验收:五件只在成功刷新链生效;固定减伤不堆、恢复累计、GP定额。
|
||||
|
||||
### T6 七件数据行与牌库计数(1d)
|
||||
|
||||
接口块:`feats.tres` 行键沿用 `feat_id/display_name/rarity/cap/desc/triggers`,不扩schema。
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] 追加七行,trigger结构固定:
|
||||
|
||||
| feat_id | triggers |
|
||||
|---|---|
|
||||
| `vein_reserve` | `dig_paid → grant_reserve_ap value=1` |
|
||||
| `easy_swap` | `refresh_request → apply_discount mode=refresh cost_mult=50` |
|
||||
| `wall_blast` | `board_refreshed → open_ticket channel=blast value=2` |
|
||||
| `charge_rotation` | `board_refreshed when counter<3 → counter_add swap_charge_layers1`;`attack_commit when≥1 → attack_bonus value_counter=swap_charge_layers`;`attack_commit when≥1 → set0` |
|
||||
| `stone_mitigation` | `board_refreshed → counter_add round_swap_guard1`;`damage_taken when≥1 → damage_reduce value=2` |
|
||||
| `tunnel_rest` | `board_refreshed when<3 → counter_add round_swap_rest1`;`round_end when≥1 → heal value_counter=round_swap_rest`;`round_end when≥1 → set0` |
|
||||
| `mine_profit` | `board_refreshed → grant_gp value=1` |
|
||||
|
||||
- [ ] desc分别写:挖格储能、刷新半价、刷后群伤、刷后蓄力、当轮减伤、当轮恢复、刷后GP;禁“雷/旗”字面。
|
||||
- [ ] 行数30→37;稀有度12/9/9/0→14/13/10/0;relic令牌30→37;牌库132→139。
|
||||
- [ ] 同步 [adventure_feats_test.gd:465](../game/tests/unit/core/adventure_feats_test.gd#L465)、[:476](../game/tests/unit/core/adventure_feats_test.gd#L476),旧30行断言只按实数换代,不降低 validate/禁词检查。
|
||||
- [ ] 写 `test_seven_feats_validate_and_pool()`。
|
||||
|
||||
验收:七件全部数据驱动,跨表计数器引用闭合。
|
||||
|
||||
### T7 回归与能力名实核对(0.75d)
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] 核对 [README.md](../game/tests/README.md) 五类换图能力行,文件名与测试函数逐字一致。
|
||||
- [ ] `round_flow_skill_pool_test.gd:_smoke_active_refresh()` 无专长基线断言不删除、不放宽。
|
||||
- [ ] `seal_polarity_test.gd:_smoke_refresh_provenance_guard()` 继续证明刷新图零清图奖励。
|
||||
- [ ] 实跑关联窄测:
|
||||
`--only=refresh_feats|adventure_feats|round_flow|seal_polarity|damage_controller|effect_words|forge_table|config_db`
|
||||
- [ ] 出红只按红件最小复跑,波内不跑全量。
|
||||
|
||||
验收:新增与旧专长并存;无UI/素材改动,不新增golden。
|
||||
|
||||
### T8 批末出口与产出物(1d)
|
||||
|
||||
步骤:
|
||||
|
||||
- [ ] 里程碑出口跑 `bash tools/run_all_gates.sh --code`。
|
||||
- [ ] 回执必须 `all_green=true`、`dirty_game=false`。
|
||||
- [ ] 独立验收审计报告 `reports/iter<N>-验收审计-<日期>.md` 未过禁合并。
|
||||
- [ ] 轻闸全绿、合并前写齐:
|
||||
1. `reports/iter<N>-实现报告-<日期>.md`
|
||||
2. `reports/iter<N>-代拍板追认单-<日期>.md`
|
||||
3. `reports/iter<N>-反哺点-<日期>.md`
|
||||
- [ ] 实现报告列七卡状态、V1–V12读数、S13前后数、旧damage_taken专长覆盖面变化、玩家主动刷新目检项。
|
||||
- [ ] 反哺点逐条覆盖第七节六个目标。
|
||||
|
||||
完成定义:三份产出物齐全+代码域闸全绿+验收审计通过。
|
||||
|
||||
## 十一、验证闸:改动—验收对照表
|
||||
|
||||
| 需求点 | 改动(文件/行为) | 验收测试 | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| V1 词表扩签 | effect_engine;forge/effect_words | `effect_words_t1_test.gd:_init`;`forge_table_test.gd:_test_effect_kinds_closed` | 单元 | validate与整表加载 | EVENTS=22、EFFECT_KINDS=34、出域仍拒 | 新增:换图系刷新链路与效果词表接线 |
|
||||
| V2 矿脉储能 | action_economy dig_paid消费 | `refresh_feats_test.gd:test_reserve_on_accepted_dig` | 接口 | `settle_batch(dig)` | RAP恰+1、AP扣值与板资源不变 | 新增:换图基座:挖格产 RAP 与刷新折扣 |
|
||||
| V3 省力周转 | BattleRefreshFlow成本门 | `test_refresh_discount_gate_and_charge`;`test_double_base_stack` | 接口 | `player_request_refresh()` | base8→扣4;can与执行同源;两件都生效 | 新增:换图基座:挖格产 RAP 与刷新折扣 |
|
||||
| V4 成功事实 | BattleRefreshFlow install尾点 | `test_board_refresh_fact_only_on_success` | 集成 | `player_request_refresh()` | RAP不足/第3次上限/非Active均board_changed与效果零变化 | 新增:换图系刷新链路与效果词表接线 |
|
||||
| V5 全局受伤 | damage_controller统一发射消费 | `test_all_hero_damage_paths_emit_once`;`test_no_duplicate_damage_taken_event` | 集成 | 敌方攻击、dig danger、seal wrong、terrain触发 | 每路径一次事件、无重复扣血或重复counter | 新增:换图生存:全局固定减伤与轮末恢复 |
|
||||
| V6 石层缓冲 | round_swap_guard+damage_reduce | `test_stone_mitigation_all_damage` | 集成 | 刷新→四种真实受伤路径 | 每种伤害最终金额减2;多刷不增加;下限1保持 | 新增:换图生存:全局固定减伤与轮末恢复 |
|
||||
| V7 崩壁冲击 | open_ticket延迟队列 | `test_blast_defers_to_combat_segment` | 集成 | 刷新→停手 | 授予段无伤害行、战斗段末全体存活敌各受伤 | 新增:换图输出:刷新群伤与蓄力攻击 |
|
||||
| V8 蓄力周转 | counter+attack_bonus value_counter | `test_charge_layers_consumed_same_round` | 接口 | 两次刷新→本轮主角攻击 | 攻击加2层、随后0;战斗新建0;上限3 | 新增:换图输出:刷新群伤与蓄力攻击 |
|
||||
| V9 坑道小憩 | round_end heal消费 | `test_rest_rotation_cap_and_clear` | 集成 | 三次刷新→停手 | 回复3、上限3、层清0、hp≤max;满血未生效 | 新增:换图生存:全局固定减伤与轮末恢复 |
|
||||
| V10 矿道红利 | board_refreshed grant_gp | `test_mine_profit_gp` | 集成 | `player_request_refresh()` | escrow每次成功刷新+1;拒绝零变化;fx_grant_gp行在案 | 新增:换图资源:刷新固定 GP 收益 |
|
||||
| V11 数据与池 | feats七行;adventure计数 | `test_seven_feats_validate_and_pool`;adventure_feats | 单元 | ConfigDB整表与冒险牌库 | rows37、relic37、14/13/10、deck139、validate空、禁词0 | 既有:专长(奇物)授予与凭证保底 |
|
||||
| V12 无专长回归 | round_flow/seal旧基线 | `_smoke_active_refresh`;`_smoke_refresh_provenance_guard` | 单元+集成 | 现行刷新/清图入口 | RAP8、AP保留、上限2、刷新图零清图、五段与回放不降 | 既有:停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励) |
|
||||
|
||||
## 十二、测试方式与削弱申报
|
||||
|
||||
自动验证:
|
||||
|
||||
- V1–V12均从真实公共入口进入;计数器、事件行、escrow、hp与伤害行都是可观测提交面。
|
||||
- 不造变异或回退hunk证明;临时专长夹具通过现行ConfigDB注入,属正常数据配置路径。
|
||||
|
||||
真人目检:
|
||||
|
||||
- 登记一项:玩家持基座与收益件后,是否主动规划刷新而非只在坏图刷新。写入实现报告,不阻塞合回。
|
||||
|
||||
测试削弱申报:
|
||||
|
||||
- 允许把行数、稀有度、事件/效果计数从旧实数改到新实数。
|
||||
- 允许旧 `damage_taken` 行为测试增加危险格/错误封印路径,以体现用户已裁的全局语义;原敌方攻击与地形断言不得删除或放宽。
|
||||
- 禁止删除RAP8基线、每轮上限2、AP保留、刷新图零清图、伤害下限、五段序、同种子回放等断言。
|
||||
|
||||
## 十三、估时与切分预案
|
||||
|
||||
| T0 | T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | 合计 |
|
||||
|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
|
||||
| 0.5 | 0.5 | 1.75 | 1 | 1 | 1.75 | 1 | 0.75 | 1 | **8d** |
|
||||
|
||||
浮动±0.5d。
|
||||
|
||||
切分预案:段一=T0–T4+T6(基座、全局受伤事件、刷新事实、数据接线,约4.75d);段二=T5+T7–T8(五件收益兑现与回归出口,约3.5d)。两段各自独立可测、独立提交。
|
||||
|
||||
## 十四、异常分级
|
||||
|
||||
L1(自救一次):编译错误、签名拼写、manifest登记遗漏。
|
||||
|
||||
L2(记录继续;同红三次升L3):既有无关文档域红;局部测试文案漂移。
|
||||
|
||||
L3(停卡写报告):
|
||||
|
||||
- CI红未修。
|
||||
- 同一伤害出现两次 `damage_taken`,或某路径完全不出现。
|
||||
- 石层缓冲使伤害归零、突破下限或改变治疗语义。
|
||||
- 刷新生效出现清图奖励/探索进度耦合。
|
||||
- BattleOrchestrator或RewardGrant结构预算被迫上升。
|
||||
- 机检键与本卡契约互斥;禁为凑绿保留无效成员。
|
||||
- 任何需求点找不到真实入口与特有可观测提交面。
|
||||
|
||||
## 十五、代拍板白名单
|
||||
|
||||
允许实现期自拍:
|
||||
|
||||
1. 私有函数换行、局部变量名、内部注释位置。
|
||||
2. 测试断言消息措辞与helper顺序。
|
||||
3. 错误扫描暴露的纯格式修复。
|
||||
4. 不改变语义的前提下复用现有 `units.heal()`、counter API与GP行格式。
|
||||
|
||||
超清单必停卡呈报:
|
||||
|
||||
- 数值、稀有度、cap、counter_id、事件/效果名、来源类别、文件职责、验收入口。
|
||||
- 任何把清图奖励、探索进度、临时生命重新引入本批的改法。
|
||||
|
||||
## 十六、零待裁点
|
||||
|
||||
七件名称、收益对象、全局受伤范围、叠加规则、时序、数值与稀有度均由最终确认单锁定。本卡零待裁点,开工门=U0。
|
||||
|
||||
## 十七、开工门
|
||||
|
||||
1. 由 iter-plan 编入迭代后,`/iter` 才可开工;无迭代外执行通道。
|
||||
2. 开工前四份GDD凭据在待办清单闭合、CI绿、T0实测无漂移。
|
||||
3. 本卡预计8个工作日,符合迭代硬线。
|
||||
@@ -1,190 +0,0 @@
|
||||
# 需求卡片——棋盘格边长口径收口批 v2(阈值退役+格边长算式单点+冒烟扩四档板型)
|
||||
|
||||
状态行:v2.0 定稿——零待裁点(2026-11-01 用户裁:①可读性锚点=用户验收的现行渲染值——基座档 14×14 板实测 28px 即达标,battle.md「可读下限 30px」判据句退役(落文归文档批,走反哺点通道),探针旧值 36 一并废弃;②探针格边长判据换锚=实读值与单点算式严格相等+结构钳制保护+全档读数留痕,全仓禁任何人造格边长阈值;③阈值手抄常量 `MIN_CELL` 删除,禁第二份阈值抄本再入代码或测试)
|
||||
|
||||
接收方:待办清单条目「棋盘格边长三方取值不一致——待扩板定档处置(2026-10-06 登记,来源=批次移交)」(`待办清单.md` 在册)
|
||||
|
||||
来源:**设计事实源**=`design/gdd/ux/battle.md`「棋盘格尺寸公式」节(2026-11-01 实查——公式与结构钳制 [26,46] 在 `:137-146`;原 `:148-152` 算例表已于 2026-10-31 布局几何单点化批退役(commit 1cdef6ba),现行 `:148`=「算例不入文档」句;`:144`「可读下限 30px」句经 2026-11-01 用户裁退役,落文走 §5 反哺点通道,本卡判据零引用)。布局事实源=`game/data/tables/battle_layout.tres` 五字段(2026-10-31 布局几何单点化批起为分区几何唯一事实源)。四档板型事实源=`game/data/tables/board_gen.tres`。锚点裁决过程与实测读数链=[停机呈报-棋盘格边长口径收口批-2026-10-31](停机呈报-棋盘格边长口径收口批-2026-10-31.md)。
|
||||
|
||||
## 1. 目标与完成定义
|
||||
|
||||
这批做什么:把「棋盘格边长」在代码侧的残留旧口径收干净——**方向经 2026-11-01 用户裁换代**:不是把探针阈值 36 改成 30(v1 方向,已废),而是**把人造阈值整个退役**——可读性的锚点=用户验收过的现行渲染画面(基座档四档板型 40/33/30/28px),检查工具不再拿任何编造的下限给画面打分,只做两件事:①验证生产写入值与单点算式严格相等(接线守卫);②把四档板型在实板可用面积上的推定值留痕(回归对照基准)。同时完成 v1 已裁的两件:格边长算式收成单点(现在内联在 `set_cell_area` 里,任何「在别的板型/别的面积上求值」的需求都只能复写算式=造第二口径)、13/14 两档板型进入测试守卫。
|
||||
|
||||
**行为零变化**:算式逐位不变,`set_cell_area` 的副作用顺序(英雄脚锚重置 → `_refresh_slab` → `_update_world_size`)零改动,玩家可见画面零变化。
|
||||
|
||||
完成定义(全部满足才算完):
|
||||
1. 代码侧人造阈值归零:`layout_probe.gd` 的 `MIN_CELL` 常量删除,`grep -rn "MIN_CELL\|可读门槛\|可读下限" game/` 零残留;30 与 36 均不得以任何形态回到代码或测试判据。
|
||||
2. 格边长算式只剩一处落点(`BoardView._cell_for`),`set_cell_area` 只调它;探针与单元测试不再各自复写算式。
|
||||
3. 13×13 与 14×14 两档进入守卫并在当轮真实跑批中执行通过(单元四档冒烟+探针等价断言与推定留痕)。
|
||||
4. 代码域闸全绿;`tools/gdstyle_baseline.txt` 中 board_view.gd 各键只许持平或下降(MATCH——`max-public-methods` 保持 27、`max-class-variables` 保持 31)。
|
||||
5. 产出物三份落 `reports/`(实现报告/反哺点清单/验收审计报告),独立验收审计未过不合并。
|
||||
|
||||
**编队注记与估时**:估时 **0.5 个工作日**(T0 0.1/T1 0.15/T2 0.1/T3 0.1/T4 0.05),远低于迭代冻结线(5 个工作日),可编批;编入哪个迭代由迭代编排段定(worktree iter46 的未提交 WIP 三件中,T1 与 T3 两件按 v2 原样复用,T2 探针件按本卡新判据返工——见 §12)。本批触面=`game/presentation/views/board_view.gd`+`game/probe/layout_probe.gd`+`game/tests/unit/core/board_gen_reward_test.gd`,与在飞批次无文件交叠需编排段复核。
|
||||
|
||||
## 2. 现状事实
|
||||
|
||||
全部行号为 **2026-11-01 实查**(master 3499638d)——本批编入后须由 T0 按 T0 时点 master 重测重锚。
|
||||
|
||||
1. 算式内联在 `game/presentation/views/board_view.gd:206-215`(`set_cell_area`):`:209` N=`maxi(width,height)`、`:210` `sep := SEP`(`SEP := 2`)、`:211-212` `d := DEPTH_PX` 与 `reserve := 24.0 + d`、`:213` 一条 `int(floor((minf(avail.x - 12.0 - d, avail.y - reserve) - float((n - 1) * sep)) / float(n)))`、`:214` `clampi(cell, 26, 46)`。副作用尾链自 `:215` 起(英雄脚锚重置/`_refresh_slab`/`_update_world_size`)。
|
||||
2. 生产调用路径两条:`game/presentation/views/board_zone_view.gd:91-92`(`board_area.resized` → `set_cell_area(_board_area.size)`)与 `board_view.gd` `rebuild` 末尾 `set_cell_area(size)`——传入的都是棋盘视图实际可用区尺寸,`board_view` 为 `PRESET_FULL_RECT` 子级,故 `board_view.size` 即生产传入值。
|
||||
3. 探针阈值手抄件:`game/probe/layout_probe.gd:15` `const MIN_CELL := 36.0`,注释自陈出处为旧算例表「1280 档 12×12 → 36px」;`:93-95` 断言 `cell < MIN_CELL` 记红;`:44-45` PASS 消息引用 MIN_CELL。探针只进 L1(`:27` 起始冒险)、`:31` `press_candidate(0)`,实跑只遇 10×10(实读 40px),36 阈值从未在 28–35px 区间生效过——**该常量与旧算例表同源,旧算例表已退役(1cdef6ba),此抄本成为无源之值**。
|
||||
4. 格边长冒烟:`game/tests/unit/core/board_gen_reward_test.gd:53-69`(`_smoke_layout_cell_formula`):`:57` `for L in [1, 2]`、`:60` 样本 `avail := Vector2(1036, 460)`、`:63` 读 `board_view.get("_cell")`、`:64-66` 网格高 ≤ 可用高−24、`:67-68` 格边长 ∈ [26,46]。13×13 与 14×14 两档从未进入断言。
|
||||
5. **S13 顶格事实(2026-11-01 实查,gdstyle v0.4.0)**:`tools/gdstyle_baseline.txt` 登记 `board_view.gd|quality/max-public-methods = 27`(`:22`)与 `max-class-variables = 31`(`:11`),与静态清点逐一相符。对同一文件副本加一个公开静态函数后实测升 28(WORSENED 红);改名为下划线前缀(`_cell_for`)后持平 27。**故算式提取必须用私有名,且本批禁给 board_view.gd 新增任何成员(31 同样不容新增——钳制界不得提取为公开常量)**。
|
||||
6. 四档板型取档(`board_gen.tres` 实查 (level_index, node_depth) → 尺寸):L1 depth 0–3=10×10、L1 depth 4–6=12×12、L2 depth 0–9=12×12、L3 depth 0–8=13×13、L3 depth 9–13=14×14。即 `generate(1,0)`=10、`generate(2,0)`=12、`generate(3,0)`=13、`generate(3,9)`=14。
|
||||
7. **锚点读数(2026-10-31 探针实读,停机呈报在案;2026-11-01 用户裁定为现行锚点)**:基座 1280×800 档 `board_view.size`=(1022.0, 454.0),10/12/13/14 板 → 40/33/30/28px;16:9 1920×1080 档 (1662.0, 734.0) → 四档全部 46px(钳制顶格)。代入复核(1280 档 14 板):`min(1022−12−8, 454−32) = 422`;`(422 − 13×2) / 14 = 28.28 → floor 28` → 钳制 [26,46] 内 → 28px。
|
||||
8. 布局事实源换代(2026-10-31 布局几何单点化批,1cdef6ba):分区几何唯一事实源=`battle_layout.tres` 五字段(实查 `stage_h=252`/`ap_bar_h=44`/`info_panel_w=240`/`log_band_h_dig=24`/`log_band_h_settle=84`);容器内部结构(VBox 间距 4px、常驻操作提示条、面板边距)在代码中,实板可用面积以探针实读 `board_view.size` 为准,不静态推算。
|
||||
9. 旧判据毒性记录(v1 停机的根因,防复发):「可读下限 30px」与「36px 门槛」均无实测背书——30 系旧算例表(按假设可用高 486px 推算)的产物被写成规则,36 是探针从该表错抄的第二份手抄件;两者互相打架且与实机脱节,是 2026-10-31 停机的直接原因。本批后此类「文档句子↔代码常量」双写形态在本域不得再现(§3 契约②③)。
|
||||
|
||||
## 3. 设计契约(违反即返工,标 🔴 触碰=L3 停机呈报)
|
||||
|
||||
- 🔴 **锚点唯一**:格边长的判据锚=①用户验收的现行渲染值(§2 第 7 条读数表,只作记录与对照,不作判红阈值)+②公式自身结构钳制 [26,46](battle.md `:143`,单元冒烟既有断言承载)。**本批起全仓禁任何人造格边长可读阈值**——30、36 及其变体不得出现在任何代码、测试、探针判据中;发现即 L3。
|
||||
- 🔴 **阈值手抄禁令**:探针与测试不得新增阈值常量。与算式相关的判据一律经 `BoardViewScript._cell_for(...)` 等价比较或既有公开出口(`cell_size`)承载;唯一例外=单元冒烟既有的 [26,46] 区间断言(v1 前已存在,逐字保留)。
|
||||
- 🔴 **算式单点**:格边长算式只在 `BoardView._cell_for` 一处;`set_cell_area` 只调它。探针、测试、任何新调用方都不得复写这条算式(复写=造第二口径)。
|
||||
- 🔴 **私有名固定**:提取函数名必须是 `_cell_for`(下划线前缀)。依据=§2 第 5 条实测:公开名即令 `max-public-methods` 27→28 恶化;同理禁新增任何成员(`max-class-variables` 31 顶格)。实现期「顺手改成公开方法更好看」=L3。
|
||||
- 🔴 **行为零变化**:`set_cell_area` 的副作用顺序与数值逐位不变;`rebuild`/`resized` 两条调用路径不改;画面像素零变化。
|
||||
- 🔴 **禁为机检文本保留无效成员**(重构类卡条款,2026-10-25 立):禁止为迎合机检消息文本(含计数)而保留或新增无效成员/别名;机检键与本卡契约互斥时,实现段一律停卡呈报,不得自造第三条路。
|
||||
- 🔴 **拆分边界纪律**(结构类卡条款,2026-10-28 立,判据权威=code-conventions §1.1):①拆出单元 `_cell_for` 职责语句=「按 battle.md 格尺寸公式,由板型 N 与可用面积算格边长的无状态纯函数」,单一变化原因=公式本身,实现报告逐件一行承载;②集体身份=「算式唯一落点」(命得出名字,非凑计数袋);③「过阈值」只许作为发现信号,作为拆分或收拢的动机即违规;④按纪律拆不出内聚单元 → 停卡呈报走豁免/还债通道,禁硬拆凑绿(进 §9 L3)。
|
||||
- 🔴 **测试削弱申报制**:允许改动的旧断言全集见 §8「测试削弱申报」,未申报的删改由独立验收审计判红。
|
||||
- 🔴 **禁变异类测试与撤销类取证**:不得靠回退 hunk 或注入破坏证明断言有效。
|
||||
|
||||
## 4. 范围边界
|
||||
|
||||
做:算式提取为 `_cell_for` 并改调;探针删除 `MIN_CELL` 常量与阈值断言、改等价断言+推定留痕+零尺寸前置;格边长冒烟扩到四档板型并加算式单点等价断言。
|
||||
|
||||
不做(明示去向):
|
||||
1. **探针扩到 L3 推关**——v1 已裁不做(推关成本与红因混淆);维持。
|
||||
2. **battle.md「可读下限 30px」句的落文**——实现批禁写 `design/`;退役措辞走 §5 反哺点通道,文档批落文。本批判据不依赖该句(退役与否不阻塞实现)。
|
||||
3. **四档板型数值调整**——`board_gen.tres` 由设计侧定,本批只读不写。
|
||||
4. **布局表字段调整**——`battle_layout.tres`(含 `stage_h`)刚经布局几何单点化批落地,本批只读;任何为格边长而动的布局调整(如加高棋盘区)=另一张设计批的卡。
|
||||
5. **`set_cell_area` 副产物顺序调整**——零触碰。
|
||||
6. **MC/数值验证**——无数值改动零跑。
|
||||
|
||||
## 5. 关联文档同步面
|
||||
|
||||
| 文档 | 关联点(本批实现会改变它的哪条陈述) | 同步义务 |
|
||||
|---|---|---|
|
||||
| design/gdd/ux/battle.md(设计权威——实现批禁直改) | ①`:144`「可读下限 30px——与结构钳制分开:钳制管算式不越界,下限管玩家能否看清」句——2026-11-01 用户裁退役;依据=锚点裁决+停机呈报读数链(30 无实测背书、36 错抄自已退役的算例表)。推荐落文方向(措辞由文档批裁):整句删除,或改写为「格边长可读性以用户验收的现行画面为基准;结构钳制 [26,46] 管算式不越界」 | 反哺点通道:列进 `reports/iter<N>-反哺点-<日期>.md`(改哪节=`:144`、改成什么=删除或上述改写、依据=停机呈报+用户裁),用户裁决后归文档批落文。②v1 的「算例表改数」反哺条**作废**——`:148-152` 表已随 1cdef6ba 退役,无落点 |
|
||||
| game/tests/README.md(机械面——归写卡段维护) | 能力行「战斗屏三区几何与棋盘格边长(分辨率两档×四档板型)」v1 写卡段已入表;v2 判据换代不改能力名与真实入口 | 无增删(本行占位核对:批末核对表上名字与实况一致) |
|
||||
| design/gdd/systems/表现与支撑/HUD框架.md、design/art/art-bible.md §8.1/§8.2(已归一为指路) | 本批不改二者的任何陈述 | 无(本行占位——按规约查不出也要写明) |
|
||||
|
||||
## 6. 卡前文件结构图
|
||||
|
||||
| 文件 | 职责 | 新增/复用 | 行为改动? |
|
||||
|---|---|---|---|
|
||||
| game/presentation/views/board_view.gd | 修改:`set_cell_area` 内联算式抽成 `static func _cell_for(n, avail) -> int`,`set_cell_area` 改调;注释补「算式唯一落点」句 | 复用既有(抽自本文件既有代码,不新增文件/类/成员) | 否(算式逐位相同——对照表行 2 的等价断言承载) |
|
||||
| game/probe/layout_probe.gd | 修改:删 `:15` MIN_CELL 常量;`:93-95` 阈值断言换等价断言;`:44-45` PASS 消息改写并附 13/14 推定读数;新增 board_view 零尺寸前置与推定有效性判据 | 修改(v1 WIP 的探针件按本卡返工——v1 的「30 阈值+推定 ≥30」形态作废) | 是(守卫面换代——对照表行 1/4) |
|
||||
| game/tests/unit/core/board_gen_reward_test.gd | 修改:格边长冒烟循环扩四档板型+板型一致断言+算式单点等价断言 | 修改(v1 WIP 原样复用) | 是(测试面——对照表行 2/3) |
|
||||
|
||||
不触碰:`board_zone_view.gd`、`ui_assembler.gd`、`data/tables/board_gen.tres`、`data/tables/battle_layout.tres`、全部 `core/` 与 `data/` 代码、`game/tests/README.md`(v1 已入表)、其余探针与测试套件。
|
||||
|
||||
## 7. 任务卡 T0..T4
|
||||
|
||||
### 7.1 T0——读数重锚与取档对账(估时 0.1 个工作日)
|
||||
|
||||
- [ ] 按 T0 时点 master 重测重锚 §2 全部行号:`layout_probe.gd:15`/`:31`/`:44-45`/`:93-95`、`board_view.gd:206-215`、`board_zone_view.gd:91-92`、`board_gen_reward_test.gd:53-69`。
|
||||
- [ ] 四档取档复核:对 `db.combat.board_gen.resolve_row(L, D)` 逐组取 (1,0)(2,0)(3,0)(3,9),实测返回 `board_width` 依次为 10/12/13/14——不符=L3 停卡退回写卡段。
|
||||
- [ ] `battle_layout.tres` 五字段读数与 `battle.md:137-146` 现状句确认(`:144` 30px 句仍在位=预期,本批不碰,§5 反哺承载;若已被文档批提前退役亦不阻塞——本卡判据零依赖该句)。
|
||||
- [ ] 改前基线读数(孤立验证):`python tools/gdstyle_gate.py`(board_view.gd `max-public-methods` 实测 27 持平)+单件跑 `board_gen_reward_test`(绿)+单件跑 `layout_probe`(两档绿)。三条读数进实现报告 T0 节。
|
||||
- 取用:本卡 §2。产出:重锚后的行号与三份改前读数(T1–T4 对拍基准)。
|
||||
|
||||
### 7.2 T1——算式单点提取(估时 0.15 个工作日)
|
||||
|
||||
- [ ] `board_view.gd` 新增 `static func _cell_for(n: int, avail: Vector2) -> int`,函数体=`:210-214` 五行算式逐字搬入(`SEP`/`DEPTH_PX` 仍读本文件既有常量,`clampi(..., 26, 46)` 留在该函数内),返回 `int`。
|
||||
- [ ] `set_cell_area` 的 `:209-214` 六行替换为 `_cell = float(_cell_for(maxi(_board.width, _board.height), avail))`;`:215` 起副作用尾链一字不动。
|
||||
- [ ] `:204-205` 注释块补一句:算式唯一落点=`_cell_for`(探针与单元测试共用);名字带下划线是 S13 `max-public-methods` 27 顶格的约束,禁改公开名。
|
||||
- [ ] 孤立验证:单件跑 `board_gen_reward_test`(既有四套断言全绿=算式等价性证明)+`python tools/gdstyle_gate.py`(board_view.gd 各键持平,`max-public-methods` 仍 27)。
|
||||
- 取用:T0 读数。产出:`BoardView._cell_for(n: int, avail: Vector2) -> int`(调用面,T2/T3 逐字消费)。
|
||||
|
||||
### 7.3 T2——探针阈值退役与判据换锚(估时 0.1 个工作日)
|
||||
|
||||
- [ ] 删除 `layout_probe.gd:15` `const MIN_CELL := 36.0` 整行。
|
||||
- [ ] `:93-95` 阈值断言替换为**等价断言**:读 `var b = bv.get("_board")`(内部字段直查——受控例外,对照表行 1 注明理由:实跑板型 N 无公开出口),`var n := maxi(b.width, b.height)`;断言 `cell == float(BoardViewScript._cell_for(n, bv.size))`,失败消息含实板可用面积、n、两值(生产写入 vs 单点返回)。文件顶部加 `const BoardViewScript := preload("res://presentation/views/board_view.gd")`(静态调用载体)。
|
||||
- [ ] `:44-45` PASS 消息改写:去 MIN_CELL 引用,改为「三区几何不变量全过+格边长等价成立(基座实读 %.0fpx)」。
|
||||
- [ ] `_check_one` 追加两段:①board_view 零尺寸前置——`bv.size.x <= 0.0 or bv.size.y <= 0.0` 时记问题「board_view 零尺寸(可用面积不可信,推定无依据)」;②**推定留痕**:对 `n2 in [13, 14]` 取 `var est := BoardViewScript._cell_for(n2, bv.size)`,随 PASS 打印「13 板推定 %dpx/14 板推定 %dpx」留痕(实现报告对拍 §2 第 7 条锚点读数 30/28;对拍不一致=§9 L3 #2 呈报,禁实现侧改锚)。
|
||||
- [ ] 孤立验证:单件跑 `layout_probe`(两档全绿,PASS 行含推定读数)+`tools/probe_gate.sh` 默认段退出码 0+`grep -rn "MIN_CELL" game/` 零命中。
|
||||
- 取用:T1 `_cell_for`。产出:绿的两档探针日志含四档推定读数(T4 对拍基准)。
|
||||
|
||||
### 7.4 T3——格边长冒烟扩四档(估时 0.1 个工作日)
|
||||
|
||||
- [ ] `_smoke_layout_cell_formula` 的 `:57` 循环集改为四档取样表:`[{L:1,D:0,n:10}, {L:2,D:0,n:12}, {L:3,D:0,n:13}, {L:3,D:9,n:14}]`(按 §2 第 6 条的实表取档)。
|
||||
- [ ] 每档追加两条断言:①板型一致——`maxi(b.width, b.height) == 取样 n`(表改动导致取样落错档时红);②算式单点——`int(cell) == BoardViewScript._cell_for(n, avail)`(`set_cell_area` 写入值与纯函数返回同值)。
|
||||
- [ ] 既有两条断言(网格高 ≤ 可用高−24、格边长 ∈ [26,46])逐字保留,仅把消息前缀从 `L%d` 扩成 `L%d D%d`;`:60` 样本 `Vector2(1036, 460)` 不改(样本只承担算式不溢出面,真实可用面积守卫归探针 V1/V4)。
|
||||
- [ ] 孤立验证:单件跑 `board_gen_reward_test`(四档全绿)。
|
||||
- 取用:T1 `_cell_for`、T0 取档对账。产出:四档冒烟日志(T4 对拍基准)。
|
||||
|
||||
### 7.5 T4——批末收口与产出物落位(估时 0.05 个工作日)
|
||||
|
||||
- [ ] 批末代码域闸:`tools/run_all_gates.sh --code` 全绿(本批改动含 `game/` 下非 `.md` 行为载体 → 代码域)。里程碑步出口跑一次全套;波内修复只做出红最小单元的最窄确认。
|
||||
- [ ] S13 键账对账:board_view.gd 各键持平(`max-public-methods` 27 不变、`max-class-variables` 31 不变、无 NEW 键);探针与测试不在 S13 扫描面。
|
||||
- [ ] **产出物落位卡**(轻闸全绿后、合并前写齐,方算收口):
|
||||
- `reports/iter<N>-实现报告-<日期>.md`——各卡状态+T0 三份改前读数与各卡改后读数对拍+**锚点读数留档**(两档视口 × 四板型实读/推定全表=§2 第 7 条,未来批次对照基准)+实机目检总清单(登记不阻塞:「第三关 14×14 板格面数字清楚可辨」一项——2026-11-01 用户已实际背书现行画面,登记照留)。
|
||||
- `reports/iter<N>-反哺点-<日期>.md`——§5 同步面第 1 行(battle.md `:144` 退役)有落点。
|
||||
- `reports/iter<N>-验收审计-<日期>.md`——独立验收审计(未参与实现的会话或子代理执行,未过不得合并)。
|
||||
- 取用:T1–T3 全部产出。产出:代码域闸回执+三份 reports/ 产出物。
|
||||
|
||||
## 8. 验证闸(改动—验收对照表)
|
||||
|
||||
本批三处改动全部落在守卫面(阈值退役/算式落点/测试覆盖),游戏行为零变化,故无新玩法验收;用户目检一项登记不阻塞(T4)。对照表 5 行对应 §1 完成定义第 1–5 条。
|
||||
|
||||
| # | 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | 探针阈值退役+格边长接线守卫(等价判据) | `layout_probe.gd:15` 删常量;`:93-95` 阈值断言换 `cell == _cell_for(n, bv.size)` | 「layout_probe 两档几何不变量」`layout_probe.gd:_ready`(尾缀〔格边长 V1〕) | 探针 | `godot --headless --path game res://probe/layout_probe.tscn` | 实读 `cell_size`(生产经 `set_cell_area` 真实写入)与 `_cell_for` 同输入返回严格相等——生产停止调单点算式即红;`grep -rn "MIN_CELL" game/` 零命中 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
| 2 | 算式单点(`_cell_for`) | `board_view.gd:206-215` 抽函数并改调;`:204-205` 注释补唯一落点句 | 「格边长算式单点等价」`board_gen_reward_test.gd:_smoke_layout_cell_formula`(尾缀〔格边长 V2〕) | 单元 | `godot --headless --path game --script res://tests/unit/core/board_gen_reward_test.gd` | `set_cell_area` 写入的 `_cell` 与 `BoardView._cell_for(n, avail)` 返回值逐档严格相等(同一事实两路读取,分叉即红) | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
| 3 | 13×13/14×14 进入冒烟 | `board_gen_reward_test.gd:53-69` 循环集改四档取样+板型一致断言 | 「格边长冒烟四档板型」同函数(尾缀〔格边长 V3〕) | 单元 | 同上 | 13/14 两档首次被断言:取档尺寸与实表一致、网格高 ≤ 可用高−24、格边长 ∈ [26,46](公式自身结构钳制——既有断言逐字保留) | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
| 4 | 最大板推定守卫(实板可用面积,留痕型) | `layout_probe.gd:_check_one` 新增零尺寸前置+`n∈{13,14}` 推定(读数打印) | 「最大板推定留痕」同探针(尾缀〔格边长 V4〕) | 探针 | `godot --headless --path game res://probe/layout_probe.tscn` | ①零尺寸前置(size ≤ 0 记红);②推定读数打印并与实现报告留档的锚点读数(基座档 30/28px)逐值对拍,不一致=§9 L3 #2 呈报(禁实现侧改锚) | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
| 5 | 批末收口 | 全批 | 代码域闸:`tools/run_all_gates.sh --code` | 全量闸 | `tools/run_all_gates.sh --code` | 所选域全绿回执(`game/tests/.gates/receipt.json`) | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
|
||||
**测试削弱申报**(实现期允许的旧断言改动全集,超出即审计判红):
|
||||
1. **删除探针阈值断言**(`:93-95` `cell < MIN_CELL` 记红)=人造阈值退役的执行面(v1 申报的「36→30 放宽」作废,v2 直接删除)。补偿=行 1 等价断言(同测量对象上严格相等,强于区间阈值——生产接线断开即红)+行 3 结构钳制四档+行 4 读数留痕对拍;目检项「第三关 14×14 板格面数字清楚可辨」继续登记(2026-11-01 用户已实际背书现行画面)。
|
||||
2. `:44-45` PASS 消息改写=文案随判据换代,非削弱。
|
||||
3. 行 3 循环集从 2 档扩到 4 档=纯增量;`avail` 样本值不改;既有两条断言逐字保留。
|
||||
4. 显式禁止:恢复任何人造阈值(30/36 及变体)、删任何旧断言、放宽区间 [26,46]、把格子读取从 `cell_size`/`_cell` 换成别的入口。
|
||||
|
||||
**独立验收审计**:入口与报告=`reports/iter<N>-验收审计-<日期>.md`;审计方=未参与实现的会话或子代理,逐行核对对照表两端、抽查判据绑定面是否绑被测改动特有的可观测提交面(`cell_size`/`_cell` 取值与 `_cell_for` 返回)、核对削弱申报、确认全文无变异/撤销类取证、**并核查全仓无人造阈值回归**(grep 30/36 阈值形态);未过不得合并。
|
||||
|
||||
## 9. 异常分级
|
||||
|
||||
- **L1 自救**:单件跑红→定位该件最小单元修后重跑;探针单件超时→孤立复跑该件;`--only` 选跑零命中(用法错 exit 2)→修正选词重跑。
|
||||
- **L2 记录继续**:同一红连续 3 次同因→在实现报告「实现决定记录」记因后继续最窄确认。
|
||||
- **L3 停机写报告等用户**:
|
||||
1. **机检预算互斥=上游缺陷停卡退回写卡段**——`gdstyle_gate` 出 NEW 键或 board_view.gd `max-public-methods` 升 28/`max-class-variables` 升 32(即 `_cell_for` 的下划线被去掉或钳制界被提取为成员);禁改基线换绿,禁开豁免。
|
||||
2. **锚点冲突复现**——实现期任何一方(用户目检/新读数)推翻 §2 第 7 条现行渲染锚点,或有人再提人造阈值方案,或探针推定读数与 §2 第 7 条留档读数对拍不一致且复测排除环境因素;停卡呈报,禁实现侧自裁。
|
||||
3. **四档取档对不上**——`resolve_row(1,0)/(2,0)/(3,0)/(3,9)` 实测尺寸与 §2 第 6 条不符(表已改而本卡未跟上)。
|
||||
4. **算式等价性破**——T1 后既有四套断言出现改前不存在的红,说明提取改变了算式语义。
|
||||
5. **battle_layout.tres 被并发批改动**——T0 实读五字段与本卡 §2 第 8 条不符(布局几何单点化批之后又有布局批落地),读数锚点须重测重锚,停卡呈报。
|
||||
|
||||
## 10. 代拍板白名单(逐条列,超清单记实现报告「实现决定记录」)
|
||||
|
||||
1. `_cell_for` 内部局部变量名与注释措辞(算式、常量、clamp 数值不变)。
|
||||
2. 四档取样表用字典数组还是三元组数组(取值与断言不变)。
|
||||
3. 探针推定留痕与零尺寸前置的失败消息文案、PASS 消息措辞(判据不变)。
|
||||
4. 尾缀〔格边长 V1〕–〔格边长 V4〕的字样编排(含义不变)。
|
||||
5. `BoardViewScript` 常量名(preload 载体命名)。
|
||||
6. 探针内读取板型 N 的取值写法(`bv.get("_board")` 后取 `maxi(width, height)` 的具体表达式形态——直查事实与判据不变)。
|
||||
|
||||
## 11. 待裁点
|
||||
|
||||
**零待裁点,开工门=U0。** 2026-11-01 用户三项裁定已定案:①锚点=用户验收的现行渲染值——基座档 14×14=28px 达标,battle.md「可读下限 30px」与探针 36px 退役;②探针判据换锚=等价+结构钳制+读数留痕,禁人造阈值;③手抄常量 `MIN_CELL` 删除、禁第二份阈值抄本。v1 的「探针不扩到 L3」「算式提取用 `_cell_for` 私有名」两项裁定沿用。battle.md `:144` 句退役的落文走反哺点通道(文档批,用户发令),不阻塞本批。编批由迭代编排段定。
|
||||
|
||||
## 12. 落位与可复用性预检
|
||||
|
||||
**复用面**:本批零新增文件、零新增类、零新增成员。`_cell_for` 抽自 `board_view.set_cell_area` 既有内联算式——不能只留在原处内联,是因为探针要在「非当前板型(13/14)× 真实可用面积」上求值、单元测试要在四档板型上求值,内联形态无法复用,复写算式就是造第二口径。**worktree iter46 未提交 WIP 三件的复用判定**:`board_view.gd` 算式提取与 `board_gen_reward_test.gd` 四档冒烟两件=按本卡原样复用(等价性已证:单元 62→74 checks 全绿);`layout_probe.gd` 件=**返工**(其 v1 形态「MIN_CELL→30+推定 ≥30 断言」带有人造阈值,与本卡契约①③冲突——按 §7.3 重做)。探针与测试的既有工具件(`probe_ui_util.gd`、`test_kit.gd`)与本批职责无关,不复用也不扩展。
|
||||
|
||||
**唯一面**:算式唯一落点=`BoardView._cell_for`;四档板型唯一事实源=`board_gen.tres`(测试按 (L,D) 取行,不复制取值);分区几何唯一事实源=`battle_layout.tres` 五字段(本批只读);**格边长无阈值判据面**——2026-11-01 起本域不存在可读下限常数,唯一结构性界限=公式内 `clampi(..., 26, 46)`(不外提)。2026-11-01 实查 `game/` 下无 `cell_for`/`_cell_for` 同名或同义函数,无第二落点;`MIN_CELL` 仅 `layout_probe.gd:15` 一处(本批删除后 grep 零残留为证)。
|
||||
|
||||
**分层与交互面**:`_cell_for` 是无状态纯函数——零成员读写、零信号、零 RNG、零 UI 依赖、零 `load()`;调用路径=`set_cell_area`(生产)/探针 `_check_one`(经脚本常量静态调用)/单元测试(同前)。preservation:不新增跨层依赖,Core 零 UI 红线零触碰(本批不触 `core/`)。
|
||||
|
||||
## 13. 实现规范预算
|
||||
|
||||
**新件三查**:本批零新增文件——三查不适用(写「无新增件」)。
|
||||
|
||||
**存量触面一查**:触碰的存量件为 `board_view.gd`(S13 扫描面内)与探针/测试两件(不在 S13 扫描面)。`board_view.gd` 预期:`quality/max-public-methods` 保持 **27**(私有静态不计数,§2 第 5 条实测)、`quality/max-class-variables` 保持 **31**(零新增成员——钳制界禁提取为常量,§3 契约④)、`quality/max-branches|_paint_cell` 等函数级键持平(本批不增分支、不增成员、不增局部变量——`set_cell_area` 局部变量反而减少)。达成手段:算式整体搬出,函数体只留一行调用。
|
||||
|
||||
**指标例外申报**:无。
|
||||
|
||||
## 14. 源码级断言与探针契约面的随批义务(防漏项清单)
|
||||
|
||||
1. `layout_probe` 的既有两档视口表(`VIEWPORTS`)与三条几何不变量(三区非零/不越视口/互不重叠/view 含于 D 区)本批零改动——T2 只换代格边长判据,几何判据与档位表一字不动。
|
||||
2. `board_view` 的对外只读出口(`cell_size`)是探针取值面,本批不动;测试内部读 `_cell`、探针内部读 `_board`(板型 N 取值——受控例外,对照表行 1 已注明理由:N 无公开出口),不为此新开公开出口。
|
||||
3. `battle_layout.tres` 五字段为分区几何唯一事实源(1cdef6ba 起),本批只读;任何布局字段改动归设计批。
|
||||
4. `game/tests/README.md` 能力行由 v1 写卡段同批入表,v2 名字与入口不变,实现批不写该文件;批末核对表上名字与实况一致。
|
||||
@@ -1,188 +0,0 @@
|
||||
# 需求卡片——站桩名字行提档与地台色合并批(名字行字号 12→14 + 受光线/描边两常量退役改指)
|
||||
|
||||
状态行:v1.1 定稿——零待裁点(grilling 复核过:reports/复核-grilling-站桩名字行提档与地台色合并批-2026-10-31.md,三阻断两建议全落;两点裁决已于 2026-10-31 闭合落文 art-bible v3.29,见 §11)
|
||||
|
||||
接收方:待办清单条目「迭代 43 批后待裁两点——名字行字号档位/换色常量退役」(状态=文档设计已闭合,本卡写完推进「已写卡」)
|
||||
|
||||
来源:**设计事实源**=`design/art/art-bible.md` v3.29——§7.4 小字号豁免条款「站桩名字行同理提档」句(名字行提档 `FS_HINT` 14 归六档、不增列②装饰 caption 在册面、几何随档联动)+§4.1 换色合并登记三处①②(`#C4AC84`→并入掩尘 `#C9AF83`;`#5A4C3A`→并入 `#4C4038`)。验收底线(2026-10-31 用户裁)=名字行清晰可读、长名不截字。
|
||||
|
||||
## 1. 目标与完成定义
|
||||
|
||||
这批做什么:把 art-bible v3.29 两处新裁决落进代码——①站桩名字行(敌人名+护甲字形+全部宽度测量与基线)从 `FS_CAPTION`(12px)提到 `FS_HINT`(14px),名字行几何随档联动;②`STAND_STONE_RIM`/`STAND_STONE_EDGE` 两枚旧色常量删除,两个绘制点改指合并目标色(站桩石板顶缘受光线与棋盘墙格口沿高光共用枚→掩尘 `BRICK`;石板描边→新常量承载 `#4C4038`),使贴图缺位时的程序化回退绘制与已落合并值的贴图一致。顺带了结迭代 43 移交小件①(能力清单补行——写卡段随本卡同批入表)。
|
||||
|
||||
完成定义(全部满足才算完):
|
||||
1. 名字行五处取值点全取 `UiKit.FS_HINT`,基线偏移按 14px 档重算(0.35h 规则→牌顶+18),素底牌几何单点 `_name_plate_rect`/`_name_baseline` 仍是唯一算式落点。
|
||||
2. `STAND_STONE_RIM`/`STAND_STONE_EDGE` 在 `ui_kit.gd` 删除且全仓零引用;`UiKit` 脚本常量表断言两枚不在册。
|
||||
3. 两枚绘制点改指:`cell_base_layer.gd` 口沿高光与 `standee_body.gd` 顶缘受光线→`UiKit.BRICK`;`standee_body.gd` 回退描边→新常量 `UiKit.PLAZA_EDGE`(=Color8(76,64,56))。
|
||||
4. 渲染 golden 三张板面基线与口沿高光换值一致(改后跑 render_gate,红则重锚三张、重锚后 0.00% 留痕;level_map/menu_boot 不触不重锚)。
|
||||
5. 能力清单补行落表(`game/tests/README.md` 能力行+覆盖域表战斗表现.md 行,本卡成文同批完成)。
|
||||
6. 代码域闸全绿;产出物三份落 `reports/`,独立验收审计未过不合并。
|
||||
|
||||
## 2. 现状事实
|
||||
|
||||
全部行号为 **2026-10-31 实查**——编入后 T0 按 T0 时点 master 重测重锚。
|
||||
|
||||
1. 名字行字号取值点五处,全在 `game/presentation/views/standee_body.gd`:`:334-335` 护甲字形宽测量(贴图缺位时)、`:336` 名字宽测量(`_name_plate_rect` 内)、`:467` 护甲字形宽测量(绘制侧)、`:474` 护甲字形绘制、`:476` 名字绘制——全取 `UiKit.FS_CAPTION`。
|
||||
2. 同文件另有 `FS_CAPTION` 合法在役一处:`:114` 站桩消散提示(§7.4 ②在册面「站桩消散提示」)——本批不动,禁误改。
|
||||
3. 名字行几何单点:`_name_plate_rect`(`:331-338`,牌高 26 固定=护甲图标 24px+上下各 1px;牌宽=行宽+8 水平居中;牌底沿=地台顶)+`_name_baseline`(`:342-343`,返回 `plate.position + Vector2(4.0, 17.0)`;注释 `:341` 「12px 字形基线=中心+4」)。基线偏移遵循本文件既有 0.35h 规则(立绘字形 `:434` 用 `ts.y * 0.35`;12×0.35≈4.2→4,与 `+4` 吻合)→14×0.35≈4.9→**5**,新基线=牌顶+13+5=**牌顶+18**。
|
||||
4. 名字行探针 `name_line_probe()`(`standee_body.gd:63`)返回 Dictionary:`baseline_y`/`plinth_top_y`/`plate`/`plate_color`/`armor_icon`/`armor_tex_bound`——消费面=`ui_struct_probe` 与 `standee_present_values_test`。
|
||||
5. 地台程序化回退(`standee_body.gd:380-383`):`TEX_STAGE_PLAZA` 缺位时三段绘制——板身 `UiKit.STAND_STONE`、描边 `UiKit.STAND_STONE_EDGE`(`:382`)、顶缘受光线 2px `UiKit.STAND_STONE_RIM`(`:383`)。贴图在位时不走此路径(九宫格拉伸域 `:388-393`,贴图已落合并值 `#C9AF83`/`#4C4038`)。
|
||||
6. 口沿高光:`game/presentation/views/cell_base_layer.gd:176` `canvas.draw_rect(..., UiKit.STAND_STONE_RIM, true)`(墙格南立面受光亮线,线厚常量 `FACADE_HIGHLIGHT_PX := 2.0` 于 `:9`;与地台顶缘线共用同枚常量,行内注释「同值单点」)。设计出处=art-bible §8.2 高墙瓦片体系条(南临空墙格=立面口沿高光 2px `Color8(196,172,132)`)。
|
||||
7. `ui_kit.gd`:`:188` `STAND_STONE_EDGE := Color8(90, 76, 58)`、`:189` `STAND_STONE_RIM := Color8(196, 172, 132)`;合并目标①=`BRICK := Color8(201, 175, 131)`(`:165` 掩尘,在役);合并目标②=`#4C4038`=Color8(76,64,56)——**全仓无既有 token**(2026-10-31 grep `Color8(76` 零命中),需新常量承载。
|
||||
8. 全仓 `STAND_STONE_RIM`/`STAND_STONE_EDGE` 引用面=定义 1 处+消费 2 文件 3 行(`:382`/`:383`/`cell_base_layer:176`)——tests/probe/sim 零引用(grep 实查),删除无隐性断裂。
|
||||
9. 既有断言面 `game/tests/unit/presentation/standee_present_values_test.gd`:V6 硬编码几何读数 `baseline_y=149.0`/`plinth_top_y=158.0`(±0.51);V7 源码锚 `contains("HORIZONTAL_ALIGNMENT_LEFT, -1, UiKit.FS_HINT")`(contains 语义——名字行改 `FS_HINT` 后仍绿,零破坏);V5 先例=「绘制点取某常量」用源码锚承载。
|
||||
10. golden 触面:`game/tests/golden/` 板面三张(board_L1_dungeon/L2_underdark/L3_deep_underdark)渲染含墙格口沿高光像素——换值后逐像素比对必红;载体=`tools/render_gate.sh`(闸 05,窗口化)+重锚工具 `tools/golden_baseline_refresh.sh`。level_map/menu_boot 与站桩名字行均不在 golden 像素域。
|
||||
11. 能力清单:`game/tests/README.md` 无 `standee_present_values_test` 代表用例行(迭代 43 移交小件①在册待补,登记规格=能力「站桩呈现定值与素材绑定」/真实入口 `UiKit.load_tex()`/`StandeeBody.name_line_probe()`/代表用例 `standee_present_values_test.gd:_init`)。本会话即写卡会话,随本卡同批补行(§5)。
|
||||
12. gdstyle:`standee_body.gd` 无基线登记键(迭代 44 收尾 refresh 已清偿);本批零新增成员/函数,S13 预期零新增键。
|
||||
|
||||
## 3. 设计契约(违反即返工,标 🔴 触碰=L3 停机呈报)
|
||||
|
||||
- 🔴 **两个 12px 位不得混**:`FS_HINT` 只进名字行五取值点;`:114` 站桩消散提示的 `FS_CAPTION` 是 §7.4 ②在册面合法位,禁顺手改。
|
||||
- 🔴 **合并目标逐位**:受光线绘制点→`UiKit.BRICK`(`#C9AF83`),描边绘制点→`UiKit.PLAZA_EDGE`(=Color8(76,64,56));禁改 `BRICK` 值、禁引入任何近似替代值。
|
||||
- 🔴 **`STAGE_BG` 零触碰**:§4.1 ③已裁随舞台背景插画批处置——本批不改 `STAGE_BG` 值、不改 `battle_stage_view`、不动 `theme_projection_test.gd:669` 与 `ui_contrast_probe.gd:30`。
|
||||
- 🔴 **几何单点**:字号与基线联动只落在 `_name_plate_rect`/`_name_baseline` 两个既有单点内;探针、测试、任何调用方不得复写算式。
|
||||
- 🔴 **常量退役=真删**:`STAND_STONE_RIM`/`STAND_STONE_EDGE` 删除后禁留别名、转发常量或空注释占位(禁为机检保留无效成员)。
|
||||
- 🔴 **golden 重锚申报制**:三张板面基线重锚仅限口沿高光换值所致,重锚前后读数留实现报告;禁借重锚夹带其他像素变化。
|
||||
- 🔴 **测试削弱申报制**:允许改动的旧断言全集见 §8 申报节,未申报的删改由独立验收审计判红。
|
||||
- 🔴 **禁变异类测试与撤销类取证**:不得靠回退 hunk 或注入破坏证明断言有效。
|
||||
|
||||
## 4. 范围边界
|
||||
|
||||
做:名字行五取值点提档+基线重算+探针增 `name_font_size` 键;`ui_kit.gd` 删两常量+增 `PLAZA_EDGE`;三处绘制点改指;golden 三张板面重锚;既有 V6 读数换代;能力清单补行(写卡段,本卡成文同批)。
|
||||
|
||||
不做(明示去向):
|
||||
1. **`STAGE_BG` 改值**——随「战斗区背景图替换」批(art-bible §4.1 ③改注在案)。
|
||||
2. **`:114` 消散提示与②在册面其他位**——合法 caption 档,零触碰。
|
||||
3. **口沿高光独立语义 token 化**——拆枚是命名扩张,值同源且 art-bible 已裁「统一为同一枚」,禁另立。
|
||||
4. **battle.md/art-bible 直改**——实现批禁写 `design/`;§4.1 源常量名退役后的指称换代走 §5 反哺点通道。
|
||||
5. **长名截字的主动钳制逻辑**——现行无钳制,本批不新增行为;若目检发现截字=产品面问题走 L3 停卡呈报。
|
||||
6. **MC/数值验证**——无数值改动零跑。
|
||||
|
||||
## 5. 关联文档同步面
|
||||
|
||||
| 文档 | 关联点(本批实现会改变它的哪条陈述) | 同步义务 |
|
||||
|---|---|---|
|
||||
| design/art/art-bible.md(设计权威——实现批禁直改) | §4.1 换色合并登记①②句中「代码 `STAND_STONE_RIM`/`STAND_STONE_EDGE`」指称随退役失指;②合并目标 `#4C4038` 需补代码名 `PLAZA_EDGE`;§8.2 口沿高光行「`Color8(196,172,132)`」值随换值换代 | 反哺点通道:逐条列进 `reports/iter<N>-反哺点-<日期>.md`(改哪一节、改成什么、依据=本卡与实测读数),用户裁决后归文档批落文 |
|
||||
| design/art/art-bible.md §7.4 | 无(提档句 v3.29 已落文,实现后即为合规态) | 无(本行占位——按规约查不出也要写明) |
|
||||
| game/tests/README.md(机械面——归写卡段维护) | 能力行补行「站桩呈现定值与素材绑定」(迭代 43 移交小件①)+覆盖域表战斗表现.md 行补名 | 写卡段于本卡成文同批入表(已完成),实现批零增删零改行;批末核对表上名字与实况一致 |
|
||||
| design/gdd/ux/battle.md | 无——`:155` 名字行陈述(纯名字+护甲类型图标)不涉字号与色值 | 无(本行占位) |
|
||||
|
||||
## 6. 卡前文件结构图
|
||||
|
||||
| 文件 | 职责 | 新增/复用 | 行为改动? |
|
||||
|---|---|---|---|
|
||||
| game/presentation/views/ui_kit.gd | 删 `STAND_STONE_EDGE`/`STAND_STONE_RIM` 两常量;原位新增 `PLAZA_EDGE := Color8(76, 64, 56)`(注释=art-bible §4.1 ②合并目标·小石台描边回退用色) | 修改 | 是(色值换——对照表行 3/4) |
|
||||
| game/presentation/views/standee_body.gd | 名字行五取值点 `FS_CAPTION`→`FS_HINT`;`_name_baseline` 偏移 17.0→18.0+注释换代;回退描边 `:382`→`PLAZA_EDGE`、顶缘线 `:383`→`BRICK`;`name_line_probe` 增 `name_font_size` 键 | 修改 | 是(行 1/2/3/4) |
|
||||
| game/presentation/views/cell_base_layer.gd | 口沿高光 `:176`→`UiKit.BRICK`+行内注释换代 | 修改 | 是(行 3) |
|
||||
| game/tests/unit/presentation/standee_present_values_test.gd | 增 V10–V12 断言(提档/退役/新 token);V6 基线读数 149→150(申报) | 修改 | 是(测试面——行 1/2/3/4) |
|
||||
| game/tests/README.md | 能力行补行+覆盖域表战斗表现.md 行补名 | 修改 | 否(机械面文档,写卡段同批完成) |
|
||||
| game/tests/run_all.gd | 套件登记注释「V5–V9」→「V5–V12」换代 | 修改 | 否(注释换代,非行为改动) |
|
||||
|
||||
不触碰:`battle_stage_view.gd`、`board_view.gd`、`theme_projection_test.gd`、`ui_contrast_probe.gd`、`data/tables/` 全部、`core/` 全部。
|
||||
|
||||
## 7. 任务卡 T0..T3
|
||||
|
||||
### 7.1 T0——读数重锚与改前基线(估时 0.1 个工作日)
|
||||
|
||||
- [ ] 重锚 §2 全部行号(standee_body/cell_base_layer/ui_kit/test 五文件);复核实查结论第 7 条(`#4C4038` 无既有 token)与第 8 条(引用面仅三行)——不符=L3 停卡退回写卡段。
|
||||
- [ ] 改前读数(孤立验证):单件跑 `standee_present_values_test`(绿)+`python tools/gdstyle_gate.py`(三触面文件零新增键、既有键持平)+窗口化跑 `tools/render_gate.sh`(板面三张绿=改前基线确认,读数进实现报告 T0 节)。
|
||||
- [ ] 字体度量校验:`f.get_string_size("名", HORIZONTAL_ALIGNMENT_LEFT, -1, 14)` 实测 Fusion Pixel 14px 高度,核对 0.35h 推导(≈5);若实测推导出不同偏移,按实测定值并记实现报告「实现决定记录」。
|
||||
- 取用:本卡 §2。产出:重锚行号+三份改前读数+基线偏移定值(T1/T2 对拍基准)。
|
||||
|
||||
### 7.2 T1——名字行提档(估时 0.15 个工作日)
|
||||
|
||||
- [ ] `standee_body.gd` 五取值点(`:334-335`/`:336`/`:467`/`:474`/`:476`)`UiKit.FS_CAPTION`→`UiKit.FS_HINT`;`:114` 消散提示零触碰。
|
||||
- [ ] `_name_baseline` 返回 `plate.position + Vector2(4.0, 18.0)`;`:341` 注释改「14px 字形基线=中心+5(0.35h 规则,T0 实测校验)」。
|
||||
- [ ] `name_line_probe()`(`:63`)返回字典增键 `"name_font_size": UiKit.FS_HINT`(值出自几何单点所用字号常量)。
|
||||
- [ ] `standee_present_values_test.gd` 增三断言(尾缀〔名字行 V10〕):①probe 面——`int(nl.name_font_size) == UiKit.FS_HINT`(几何单点实读);②源码锚——`body_src.contains("HORIZONTAL_ALIGNMENT_LEFT, -1, UiKit.FS_HINT, UiKit.WARM")` 且 `body_src.contains("HORIZONTAL_ALIGNMENT_LEFT, -1, UiKit.FS_HINT, col")`(名字/护甲两绘制点,沿 V7 先例);③计数锚——`body_src.count("UiKit.FS_CAPTION") == 1`(改后全文件仅剩 `:114` 消散提示一处——三处宽度测量点随此锚强制换代)。
|
||||
- [ ] V6 基线读数 149.0→150.0、判据句「地台顶上方 9px 档」→「8px 档」(§8 申报第 1 条)。
|
||||
- [ ] 孤立验证:单件跑 `standee_present_values_test`(V5–V10 全绿)+`python tools/gdstyle_gate.py`(standee_body 键只降不升)。
|
||||
- 取用:T0 重锚行号与偏移定值。产出:`name_font_size` 探针出口(T3 对照表行 1 判据面)+绿的单件日志。
|
||||
|
||||
### 7.3 T2——地台色合并(估时 0.15 个工作日)
|
||||
|
||||
- [ ] `ui_kit.gd` 删 `:188`/`:189` 两常量;原位新增 `const PLAZA_EDGE := Color8(76, 64, 56)`,注释「小石台描边(art-bible §4.1 换色合并②合并目标——贴图已落此值,缺位回退同值)」。
|
||||
- [ ] `standee_body.gd:382` `STAND_STONE_EDGE`→`PLAZA_EDGE`;`:383` `STAND_STONE_RIM`→`BRICK`;`:365` 附近回退注释「STAND_STONE 族」句随改。
|
||||
- [ ] `cell_base_layer.gd:176` `STAND_STONE_RIM`→`BRICK`,行内注释「同值单点」句改「合并归掩尘枚(art-bible §4.1 ①)」。
|
||||
- [ ] `standee_present_values_test.gd` 增两断言(尾缀〔名字行 V11〕〔名字行 V12〕;常量面载体=`load("res://presentation/views/ui_kit.gd").get_script_constant_map()`——经 Script 对象取常量表,`UiKit` 类引用直调 `get_script()` 不合法〔grilling 实测 parse error〕):V11=常量表无 `STAND_STONE_RIM`/`STAND_STONE_EDGE` 两键、`BRICK` 值=Color8(201,175,131)、源码锚 `body_src.contains("ped.size.x, 2.0), UiKit.BRICK, true")`(顶缘受光线)与 `cell_src.contains("FACADE_HIGHLIGHT_PX), UiKit.BRICK, true")`(口沿高光——`cell_src`=同法读 `res://presentation/views/cell_base_layer.gd`);V12=`PLAZA_EDGE` 值=Color8(76,64,56)(§4.1 ②合并目标逐位)+源码锚 `body_src.contains("UiKit.PLAZA_EDGE")`(回退描边)。
|
||||
- [ ] `standee_present_values_test.gd` 文件头注释「V5–V9 断言面」句与 `game/tests/run_all.gd` 套件注释同步换代「V5–V12」(非行为改动)。
|
||||
- [ ] 批内静态取证:`grep -rn "STAND_STONE_RIM\|STAND_STONE_EDGE" game/ tools/ --include="*.gd" --include="*.py" --include="*.sh"` 零命中,输出原文落实现报告(绘制点改指的观测面局限申报见 §8——色值进 draw 命令无运行期读出面,由「常量不在册断言+grep 零引用+PLAZA_EDGE 值断言」三件合成承载)。
|
||||
- [ ] golden 改后比对:窗口化跑 `tools/render_gate.sh`——板面三张红(口沿高光换值所致)=预期证据,读数落实现报告。
|
||||
- [ ] golden 重锚:跑 `tools/golden_baseline_refresh.sh` 重锚板面三张基线;复跑 `tools/render_gate.sh` 三张 0.00% 留痕;`level_map`/`menu_boot` 禁触(§3 重锚申报制)。
|
||||
- [ ] 孤立验证:单件跑 `standee_present_values_test`(V5–V12 全绿)+`python tools/gdstyle_gate.py`(零新增键)。
|
||||
- 取用:T1 产出与 T0 读数。产出:退役常量断言面+重锚后 golden 三张+grep 取证原文。
|
||||
|
||||
### 7.4 T3——批末收口与产出物落位(估时 0.1 个工作日)
|
||||
|
||||
- [ ] 批末代码域闸:`tools/run_all_gates.sh --code` 全绿(本批改动含 `game/` 下非 `.md` 行为载体);里程碑步出口跑一次全套;波内修复只做出红最小单元的最窄确认。
|
||||
- [ ] 能力行核对:`game/tests/README.md` 能力行「站桩呈现定值与素材绑定」与覆盖域表战斗表现.md 行名字与实况一致(本卡成文时已落,实现批禁改)。
|
||||
- [ ] **产出物落位卡**(轻闸全绿后、合并前写齐,方算收口):
|
||||
- `reports/iter<N>-实现报告-<日期>.md`——各卡状态+T0 三份改前读数与改后对拍+grep 取证原文+golden 重锚前后读数+实机目检总清单(登记不阻塞三项:名字行清晰可读且长名不截字/墙格口沿亮线观感无异/贴图缺位回退描边与顶缘线观感无异)+实现决定记录。
|
||||
- `reports/iter<N>-反哺点-<日期>.md`——§5 同步面 art-bible 两行逐条有落点。
|
||||
- `reports/iter<N>-验收审计-<日期>.md`——独立验收审计(未参与实现的会话或子代理执行,未过不得合并)。
|
||||
- 取用:T1–T2 全部产出。产出:代码域闸回执+三份 reports/ 产出物。
|
||||
|
||||
## 8. 验证闸(改动—验收对照表)
|
||||
|
||||
本批两处行为改动(名字行字号与几何、两枚色值换)+一节常量面退役;无新玩法验收。对照表 6 行对应 §1 完成定义第 1–4、6 条;第 5 条(能力行落表)经 T3 核对步承载(本卡成文时已落表)。能力行=**新增:站桩呈现定值与素材绑定**(本卡成文同批入表,见 §5)。
|
||||
|
||||
| # | 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | 名字行字号提档 FS_HINT 14 | `standee_body.gd` 五取值点+`name_line_probe` 增 `name_font_size` | 「名字行绘制与几何取 FS_HINT」`standee_present_values_test.gd:_init`(〔名字行 V10〕) | 单元 | `godot --headless --path game --script res://tests/unit/presentation/standee_present_values_test.gd` | probe 几何单点实读 `name_font_size==UiKit.FS_HINT`+两绘制点源码锚+`FS_CAPTION` 计数锚==1(三处测量点强制换代,沿 V7 先例) | 新增:站桩呈现定值与素材绑定 |
|
||||
| 2 | 名字行几何随档联动 | `_name_baseline` 偏移 17→18;V6 读数换代 | V6 既有断言更新值(〔样张批 V6〕,申报第 1 条) | 单元 | 同上 | `baseline_y=150±0.51`(牌顶+18)且 `< plinth_top_y`(文字不压地台判据不变) | 新增:站桩呈现定值与素材绑定 |
|
||||
| 3 | 受光线常量退役改指 BRICK | `ui_kit.gd` 删 `STAND_STONE_RIM`;`standee_body.gd:383`+`cell_base_layer.gd:176` 改指 | 「退役常量不在册+掩尘值逐位」同套件(〔名字行 V11〕) | 单元 | 同上 | 常量表无该键+`BRICK==Color8(201,175,131)`+顶缘线/口沿高光两处源码锚(正证改指目标色);grep 零引用作反证补充(观测面局限申报:色值进 draw 命令无运行期读出面,正证由源码锚承载) | 新增:站桩呈现定值与素材绑定 |
|
||||
| 4 | 描边常量退役改指新 token | `ui_kit.gd` 删 `STAND_STONE_EDGE`+增 `PLAZA_EDGE`;`standee_body.gd:382` 改指 | 「描边合并目标逐位」同套件(〔名字行 V12〕) | 单元 | 同上 | `PLAZA_EDGE==Color8(76,64,56)`(§4.1 ②目标逐位)+常量表无旧键+描边行源码锚;grep 零引用反证补充 | 新增:站桩呈现定值与素材绑定 |
|
||||
| 5 | 板面 golden 与口沿高光换值一致 | golden 三张板面基线重锚 | `tools/render_gate.sh` 三张 0.00% | golden | 窗口化 `tools/render_gate.sh` | 重锚后逐像素零差留痕;level_map/menu_boot 零触 | 新增:站桩呈现定值与素材绑定 |
|
||||
| 6 | 批末收口 | 全批 | 代码域闸 `tools/run_all_gates.sh --code` | 全量闸 | `tools/run_all_gates.sh --code` | 所选域全绿回执(`game/tests/.gates/receipt.json`) | 新增:站桩呈现定值与素材绑定 |
|
||||
|
||||
**测试削弱申报**(实现期允许的旧断言改动全集,超出即审计判红):
|
||||
1. V6 基线读数 `149.0→150.0` 与判据句「9px 档→8px 档」——规格换代(字号 12→14,0.35h 规则推导),非放宽;文字不压地台判据(`baseline_y < plinth_top_y`)零改动。
|
||||
2. 新增断言=纯增量;V5/V7/V8/V9 判据零改动(V7 源码锚 contains 语义,名字行改档后自动覆盖,零破坏)。
|
||||
3. golden 三张板面重锚=有意色值换代的基线换代(§3 申报制),重锚前后读数留实现报告。
|
||||
4. 显式禁止:删任何旧断言、改 `BRICK` 值、把探针/测试的字号读取换成别的入口。
|
||||
|
||||
**独立验收审计**:入口与报告=`reports/iter<N>-验收审计-<日期>.md`;审计方=未参与实现的会话或子代理,逐行核对对照表两端、抽查判据绑定面(`name_font_size`/常量表/`PLAZA_EDGE` 值)、核对削弱申报与 golden 重锚申报、确认全文无变异/撤销类取证;未过不得合并。
|
||||
|
||||
## 9. 异常分级
|
||||
|
||||
- **L1 自救**:单件跑红→定位该件最小单元修后重跑;`--only` 选跑零命中→修正选词重跑。
|
||||
- **L2 记录继续**:同一红连续 3 次同因→在实现报告「实现决定记录」记因后继续最窄确认。
|
||||
- **L3 停机写报告等用户**:
|
||||
1. **机检预算互斥=上游缺陷停卡退回写卡段**——`gdstyle_gate` 出 NEW 键或既有键恶化;本批零新增成员/函数,任何键恶化都不许改基线换绿,禁开豁免。
|
||||
2. **实机可读面本身不达标**——目检发现名字行截字、叠压血条或 14px 观感劣化;产品面问题停卡呈报,禁缩字号、禁加钳制逻辑凑绿(钳制=行为扩张,归新裁决)。
|
||||
3. **改前实查与 §2 不符**——引用面超第 8 条清单、`#4C4038` 已有 token、或 V6 读数与实装几何不匹配且非字号所致。
|
||||
4. **golden 重锚夹带**——重锚后 diff 域超出口沿高光像素带(含名字行字号变化渗入板面基线的可能——板面不含站桩,预期零渗入;若渗入=停卡呈报)。
|
||||
|
||||
## 10. 代拍板白名单(逐条列,超清单记实现报告「实现决定记录」)
|
||||
|
||||
1. 注释与断言消息文案措辞(判据、数值不变)。
|
||||
2. `name_line_probe` 新键名(`name_font_size`)与其在返回字典中的位置。
|
||||
3. 尾缀〔名字行 V10〕–〔名字行 V12〕字样编排(含义不变)。
|
||||
4. T0 字体度量实测偏移与 0.35h 推导不一致时的定值(按实测,记录依据)。
|
||||
5. `PLAZA_EDGE` 常量在 `ui_kit.gd` 的落位行与注释句。
|
||||
|
||||
## 11. 待裁点
|
||||
|
||||
**零待裁点,开工门=U0。** 两点裁决已于 2026-10-31 用户裁闭合并落文 art-bible v3.29(§7.4 名字行提档句、§4.1 换色合并登记句换代;舞台底 `STAGE_BG` 对已裁随背景插画批,不在本卡)。编批由迭代编排段定。
|
||||
|
||||
## 12. 落位与可复用性预检
|
||||
|
||||
**复用面**:本批零新增文件、零新增函数/类。既有复用——字号档位取 `UiKit.FS_*` 既有单点(§7.4 六档);受光线合并目标复用既有 `BRICK` token;断言承载复用 `standee_present_values_test` 既有套件与源码锚先例(V5/V7);golden 重锚复用既有工具 `golden_baseline_refresh.sh`;能力行补行沿迭代 43 移交小件登记规格,不另立能力名。
|
||||
|
||||
**唯一面**:新增常量 `PLAZA_EDGE` 唯一落点=`ui_kit.gd`(色板 token 单点——`#4C4038` 全仓无既有 token,2026-10-31 grep 证实;禁在 `standee_body` 内联字面值);`name_font_size` 探针键唯一落点=`name_line_probe`(探针共用面单点);名字行几何唯一算式落点=`_name_plate_rect`/`_name_baseline`(本批不改此结构)。2026-10-31 实查无同名/同义标识符冲突(`grep PLAZA` 仅 `TEX_STAGE_PLAZA` 纹理路径族)。
|
||||
|
||||
**分层与交互面**:全部改动在 presentation 层与单元测试层——零跨层新依赖、零 Core 触碰、零 ConfigDB/RNG 触碰(无随机、无表值变化);探针消费方向不变(`ui_struct_probe`/测试→`name_line_probe` 只读)。
|
||||
|
||||
## 13. 禁为机检文本保留无效成员
|
||||
|
||||
本批含常量退役——`STAND_STONE_RIM`/`STAND_STONE_EDGE` 删除后禁留别名常量、转发成员或注释占位凑「零引用」判据;机检键与卡片契约互斥时实现段停卡呈报,禁自造第三条路(code-conventions §1.1 同款)。
|
||||
|
||||
## 14. 实现规范预算
|
||||
|
||||
**新件三查**:本批零新增文件——三查不适用(写「无新增件」)。
|
||||
|
||||
**存量触面一查**:`standee_body.gd`(S13 扫描面内,无基线登记键)——零新增成员/函数,`name_line_probe` 返回字典增键非成员,预期 S13 零新增、既有键持平;`ui_kit.gd` 常量净 −1(删 2 增 1);`cell_base_layer.gd` 零成员变化(引用换值)。达成手段:全部改动为常量引用替换与既有函数体内取值/偏移改写。
|
||||
|
||||
**指标例外申报**:无。
|
||||
|
||||
**估时合计**:T0 0.1+T1 0.15+T2 0.15+T3 0.1=**0.5 个工作日**(区间 0.4–0.6;切分预案=若 T0 字体度量或 golden 重锚节外生枝超软盒,T2 拆出独立卡,T1 先行不阻塞)。
|
||||
+3
-3
@@ -5,8 +5,8 @@
|
||||
## 当前位(只回答「现在该做什么」;三行内随批次换代,禁止在此扩写成状态快照)
|
||||
|
||||
- **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。
|
||||
- **迭代位**:迭代 1–45 全部已完成——迭代 45(呈现层状态件+gdstyle 尾波补件两卡)2026-10-31 合回(合并提交 f817ab2d,独立验收审计通过零缺漏,行为零变化),批后收尾闭合(2026-10-31):反哺点七条处置闭合(architecture 六条落文=breakpoint_store/board_hover/单格两件/站桩两件四行现状化+构造句改述与 7 项引用束/15 贴顶实况+gdstyle 截断缺陷节清偿结果;第 7 条工具观察迁待办新条)、目检三项登记体验验证清单 ㊸、产出物退役九件(两报告/反哺点/审计/两停机呈报+两卡+两设计文档)、worktree 两件清理(iter45+assert-slim-b2)。迭代 44 收尾记录见 git 提交 9eedf896。
|
||||
- **下一步**:迭代 46 进行中〔用户裁拆批 2026-10-31〕——卡A 换图系双基座七件批+卡B 站桩名字行提档与地台色合并批已收口合回(合并提交 34bb62a5,独立验收审计通过,CI 全量绿);卡C 棋盘格边长口径收口批 **v2.0 重立回编**(用户裁锚点换代:可读性锚点=用户验收的现行渲染值,基座档 14×14=28px 达标,battle.md 可读下限 30px 句与探针 36px 人造阈值全退役,探针判据换锚=实读与单点算式严格相等+结构钳制+13/14 推定留痕;v2.0 卡经 grilling 独立复核,写卡批合并提交 e7090bc9,CI 全量绿),待 `/iter` 发令回 worktree iter46 续工(WIP 算式单点与四档冒烟两件复用、探针件返工)。battle.md `:144` 可读下限句退役归文档批待发令。迭代 47(营地交互卡⑥句柄子容器前置+卡④⑤)已编排待开工。待编池:冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。
|
||||
- **迭代位**:迭代 1–46 全部已完成——迭代 46(换图系双基座七件批+站桩名字行提档与地台色合并批+棋盘格边长口径收口批 v2.0 三卡)分两段合回(卡A/B 合并提交 34bb62a5=2026-10-31、卡C 合并提交 ab5a45af=2026-11-01,独立验收审计均通过,行为面读数全机检承载),批后收尾闭合(2026-11-01):反哺点九条处置闭合(奇物 v1.4 七件已实装+行动经济 v1.4 两基座在册与折价取整同源细则+战斗结算 v1.5 全局受伤四路径统一经唯一发射口消费族与刷新事实统一挂点+地图战斗资源 v1.4 清图奖励只在清图批兑付+architecture v1.27 BattleRefreshFlow 行增补与 damage_controller/action_economy/GrantSegment 三处现状化+art-bible v3.34 换色合并①②实况化与口沿高光换值 #C9AF83+battle.md 可读下限 30px 句退役换锚点判据句;术语表零新增;10-31 清单第 8 条算例表改数不执行——算例表已随布局几何单点化批退役、无落点)、目检四项登记体验验证清单 ㊹(卡C 一项已随锚点裁定由用户实机背书免登记)、art-bible v3.33 入库合并冲突标记顺手修复(两侧同文取一)、产出物退役十一件(三需求卡片+两反哺点清单+两实现报告+两验收审计+停机呈报+卡B grilling 复核)+refresh_feats_test 补登记进 run_all.gd 套件清单(原经卡片申报走 02 关联档选跑、卡片退役后 02 全套件无此件——补登记由全量 CI 承接,能力行代码面锚定随之成立)。迭代 45 收尾记录见 git 提交 457e0739,迭代 44 见 9eedf896。
|
||||
- **下一步**:迭代 47(营地模态句柄子容器批卡⑥→营地场景图新建批卡④→ESC浮窗与营地顶栏批卡⑤,≈15 个工作日〔用户特批 2026-11-01 超 10 个工作日〕)已编排待 `/iter` 发令开工;迭代 48(状态合并累加制+立绘显示档+战斗区背景替换三卡,≈6.1 个工作日)已编排队后。待编池:冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。
|
||||
|
||||
## 里程碑时间线
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
| 迭代 43 | 已完成(2026-10-30) | 已退役(git 历史可考) | 2026-10-29 | ≈6.5 个工作日 | 已退役(git 历史可考) |
|
||||
| 迭代 44 | 已完成(2026-10-30) | 已退役(git 历史可考) | 2026-10-29 | ≈7.875 个工作日 | 已退役(git 历史可考) |
|
||||
| 迭代 45 | 已完成(2026-10-31) | 已退役(git 历史可考) | 2026-10-29 | ≈7 个工作日 | 已退役(git 历史可考) |
|
||||
| 迭代 46 | 进行中 | reports/需求卡片-换图系双基座七件批-2026-10-31.md<br>reports/需求卡片-站桩名字行提档与地台色合并批-2026-10-31.md<br>reports/需求卡片-棋盘格边长口径收口批-2026-10-30.md | 2026-11-01 | ≈8.625 个工作日 | — |
|
||||
| 迭代 46 | 已完成(2026-11-01) | 已退役(git 历史可考) | 2026-11-01 | ≈8.625 个工作日 | 已退役(git 历史可考) |
|
||||
| 迭代 47 | 待开工 | reports/需求卡片-营地模态句柄子容器批-2026-11-01.md<br>reports/需求卡片-营地场景图新建批-2026-10-18.md<br>reports/需求卡片-ESC浮窗与营地顶栏批-2026-10-18.md | 2026-11-01 | ≈15 个工作日〔用户特批 2026-11-01 超 10 个工作日〕 | — |
|
||||
| 迭代 48 | 待开工 | reports/需求卡片-状态合并累加制批-2026-11-01.md<br>reports/需求卡片-立绘显示档批-2026-11-01.md<br>reports/需求卡片-战斗区背景替换-B区舞台插画与地面层-2026-10-31.md | 2026-11-01 | ≈6.1 个工作日 | — |
|
||||
|
||||
|
||||
@@ -517,3 +517,17 @@
|
||||
|
||||
- **红灯信号**:悬停三语义缺失或错位、站桩演出异常、整帧出现可见差异即报缺陷。
|
||||
- **结论回流**:呈现缺陷归待办清单登记新条目。
|
||||
|
||||
## ㊹ 迭代 46——三卡实机目检(2026-11-01 随批后收尾登记)
|
||||
|
||||
> 三卡分两段合回:卡A 换图系双基座七件批+卡B 站桩名字行提档与地台色合并批(2026-10-31,合并提交 34bb62a5)、卡C 棋盘格边长口径收口批 v2.0(2026-11-01,合并提交 ab5a45af)。三卡独立验收审计均通过;行为面读数全部机检承载(探针/单元/渲染闸),本节为观感复核面。登记不阻塞(2026-10-12 真人检测立规);机检读数与论证详见实现报告(git 提交 34bb62a5/ab5a45af 一线可考)。卡C 登记项「第三关 14×14 板格面数字可辨读性」已随 2026-11-01 锚点裁定由用户实际背书现行画面,不再单列观测项。
|
||||
|
||||
| # | 目检项 | 判据 |
|
||||
|---|---|---|
|
||||
| 1 | 持换图系基座与收益件后,玩家是否主动规划刷新而非只在坏图刷新(卡A 行为观感) | 刷新从「坏图逃生」扩为「主动构筑」的动机可感知;观感复核,异常报缺陷不当场改数 |
|
||||
| 2 | 站桩名字行 14px 清晰可读且长名不截字(卡B 验收底线句) | 名字行清晰可读,长名不截字 |
|
||||
| 3 | 墙格口沿亮线换值后观感无异(卡B——`#C4AC84`→`#C9AF83`,golden 0.00% 已证逐位一致) | 实机口沿高光观感与改前无异 |
|
||||
| 4 | 贴图缺位回退描边与顶缘线观感无异(卡B——`PLAZA_EDGE`/`BRICK` 程序化回退) | 回退描边与顶缘线观感与改前无异 |
|
||||
|
||||
- **红灯信号**:名字行截字或不可读、口沿高光或回退描边观感异常、刷新动机体验异常即报缺陷。
|
||||
- **结论回流**:呈现缺陷归待办清单登记新条目。
|
||||
@@ -30,14 +30,6 @@
|
||||
|
||||
**状态**:文档设计已闭合+已写卡+已编迭代 48
|
||||
|
||||
#### 迭代 43 批后待裁两点——名字行字号档位/换色常量退役(2026-10-30 登记,来源=批次移交)
|
||||
|
||||
**实况**:证据=迭代 43 反哺点清单 1/8/10(已按吸收即死退役,git 历史可考)。①**B 区高度 270 vs 252——已裁并落地(2026-10-30 用户裁)**:取代码标准 `stage_h`;布局几何(`stage_h` / `info_panel_w` / `ap_bar_h` / `log_band_h_dig` / `log_band_h_settle`)入驻 `game/data/tables/battle_layout.tres`,经 `ConfigDb.presentation.battle_layout` 单点读取;游戏代码、文档、样张工具三面改指该表,文档去数值化。②**站桩名字行 12px 档位归属**——standee_body.gd 名字行取 `UiKit.FS_CAPTION`(12px),art-bible §7.4 字号档位表下属「清单外 11–13px」。③**art-bible §4.1 换色合并残余三处**——`STAGE_BG` 换值(#3E342A→#3E362C)未执行;`STAND_STONE_RIM`(#C4AC84)仍被 board_cell_unit 口沿高光在役引用;`STAND_STONE_EDGE`(#5A4C3A)由地台缺位回退路径在役引用。**2026-10-31 用户裁两点闭合**:①名字行提档 `FS_HINT` 14 归六档、不增列②装饰 caption 在册面(design/art/art-bible.md v3.29 §7.4 小字号豁免条款;验收底线=名字清晰可读、长名不截字);②换色合并拆解——`STAND_STONE_RIM`/`STAND_STONE_EDGE` 两对照合并执行(绘制点改指目标色+源常量删除,归小批写卡),`STAGE_BG` 对随「战斗区背景图替换」批一并消化(art-bible v3.29 §4.1 登记句已改注)。需求卡片:reports/需求卡片-站桩名字行提档与地台色合并批-2026-10-31.md(v1.1 定稿零待裁点,grilling 复核过)。
|
||||
|
||||
**改动面**:文档+游戏代码
|
||||
|
||||
**状态**:文档设计已闭合+已写卡+已编迭代 46
|
||||
|
||||
#### 迭代 43 批后移交小件——能力清单补行+四色墨断言(2026-10-30 登记,来源=批次移交)
|
||||
|
||||
**实况**:证据=迭代 43 反哺点清单 9/13(已按吸收即死退役,git 历史可考)。逐条:①**能力清单补行**——game/tests/README.md 能力清单无战斗一屏样张批 V5–V9 代表用例行(卡片成文早于清单 2026-10-29 改版定稿),归写卡段随下一写卡会话按 test-conventions §8.3 补行(能力=站桩呈现定值与素材绑定;代表用例=`game/tests/unit/presentation/standee_present_values_test.gd:_init`,真实入口=`UiKit.load_tex()`/`StandeeBody.name_line_probe()`),并同步覆盖域表「战斗表现.md」行。②**意图徽标四色墨补机检断言**——样张脚本 S1 文字对比为绘图用色值对表,意图徽标四色墨(对 PANEL_DATA 垫牌)未入 CHECKS;独立审计复算 4.97–5.62 全 ≥4.5 事实成立仅缺机检断言,`tools/render_sample_sheet_v3.py` CHECKS 补一条对表断言(values 全在册,零新增色)。**2026-10-31 写卡会话落位**:①能力清单补行已随「站桩名字行提档与地台色合并批」卡片成文同批入表(能力行+覆盖域表战斗表现.md 行);②四色墨断言仍待执行。
|
||||
@@ -252,14 +244,6 @@
|
||||
|
||||
**状态**:文档设计已闭合+已写卡(备选)
|
||||
|
||||
#### 「封锁-蓄力」combo 设计素材(2026-10-07 登记,来源=会话提及)
|
||||
|
||||
**实况**:换图系双基座七件设计定稿——矿脉储能、省力周转、崩壁冲击、蓄力周转、石层缓冲、坑道小憩、矿道红利;双基座允许叠加,后续效果在本轮五段结算内兑付。石层缓冲统一经全局 `damage_taken` 对所有主角伤害固定减伤;矿道红利每次成功刷新固定给 1 GP,不采用旧图探索进度回收清图奖励。设计定稿=[奇物](design/gdd/systems/冒险循环/奇物.md) v1.3+[行动经济](design/gdd/systems/排雷循环/行动经济.md) v1.3+[战斗结算](design/gdd/systems/战斗循环/战斗结算.md) v1.4+[地图战斗资源](design/gdd/systems/战斗循环/地图战斗资源.md) v1.3。参考提案=[提案-弃图刷新系专长流派-2026-10-30](reports/提案-弃图刷新系专长流派-2026-10-30.md) v0.5;按用户要求保留为后续实现参考,不按「吸收即死」退役。需求卡片=[需求卡片-换图系双基座七件批-2026-10-31](reports/需求卡片-换图系双基座七件批-2026-10-31.md)。
|
||||
|
||||
**改动面**:文档+游戏代码
|
||||
|
||||
**状态**:文档设计已闭合+已写卡+已编迭代 46
|
||||
|
||||
#### 袋装摇号(格面资源池结构备选——保底型增多后的重构方向)(2026-10-07 登记,来源=会话提及)
|
||||
|
||||
**实况**:地图战斗资源池保底结构(四档概率 + 按型保底 + 档位保底上限,现行事实源=[地图战斗资源](design/gdd/systems/战斗循环/地图战斗资源.md)候选集合节)以「摇完整板校验补签」的补丁式实现起步——简单够用。备选正规形态=**袋装摇号**:装板时按各档配额数好牌再洗开发放,保底天然成立、分布精确;代价=摇号结构重写 + 偏运硬币/board_skew 两路权重投影须改为袋面投影。启用条件=保底登记型增多、补签逻辑复杂化时。来源=2026-10-07 地图层题四讨论,用户裁「先挂在待办清单」。
|
||||
@@ -292,17 +276,6 @@
|
||||
|
||||
**状态**:待文档设计+待美术设计
|
||||
|
||||
#### 棋盘格边长三方取值不一致——待扩板定档处置(2026-10-06 登记,来源=批次移交)
|
||||
|
||||
**实况**:扩板已落地(四档板型 10/12/13/14 在跑),2026-10-26 文档面已按单点维护归一:①格边长口径的唯一出处收敛到 [战斗屏规格](design/gdd/ux/battle.md)「棋盘格尺寸公式」——公式含格间距与垂直预留,可读下限 30px,1280 档算例 43/36/33/30 标注为随布局变化的非契约值;②[美术圣经](design/art/art-bible.md) §8.1 改为指路 battle.md、只锁资产侧两条比例,§8.2 甲类整数倍纪律已剔除砖面 tile(瓦片随格边长整格铺满,允许非整数倍);③[HUD框架](design/gdd/systems/表现与支撑/HUD框架.md) 只留装板可行性不等式,删去 36/45 定值档与旧算例;④demo 原型 44px 那一路随 `src/` 退役消失。剩余为代码面两处与口径不同步:`game/probe/layout_probe.gd:15` 的格子可读门槛 `MIN_CELL := 36.0` 仍取 12×12 的旧锚点值,比 battle.md 的可读下限 30px 严——现探针只进 10×10 的 L1 故仍全绿,一旦覆盖 13×13(33px)与 14×14(30px)即会误报红;`game/tests/unit/core/board_gen_reward_test.gd:53` 的格边长冒烟只跑 L1/L2,13×13 与 14×14 无覆盖。断言改动后按 `game/tests/README.md`「能力清单」核对受影响行(验证集清单已退役——test-conventions §8.3)。
|
||||
|
||||
- 需求卡片:[需求卡片-棋盘格边长口径收口批-2026-10-30](reports/需求卡片-棋盘格边长口径收口批-2026-10-30.md)(2026-10-30 写 v1.0;迭代 46 触发 L3#2 停机退回写卡段后,2026-11-01 用户裁重立 **v2.0**——可读性锚点=用户验收的现行渲染值(基座档 14×14=28px 达标)、人造阈值退役(battle.md 可读下限 30px 句与探针 36px 全废、`MIN_CELL` 手抄常量删除)、探针判据换锚=实读与单点算式严格相等+结构钳制+13/14 推定留痕;v1 的「探针门槛 36→30 对齐」方向作废)。
|
||||
- 停机呈报:[停机呈报-棋盘格边长口径收口批-2026-10-31](reports/停机呈报-棋盘格边长口径收口批-2026-10-31.md)(迭代 46 实现会话触发卡片 §9 L3 #2 预设停机点,2026-10-31 用户裁拆批退回写卡段。**2026-11-01 裁决已落**:14×14 基座档 28px 不再是「低于下限的不达标值」——用户裁可读性锚点=现行渲染画面本身,30/36 属无实测背书的历史编造数全部退役;battle.md `:144` 句退役归文档批落文(反哺点通道)。卡C v2.0 按此重立:算式单点与四档冒烟两件 WIP 复用,探针件返工)。
|
||||
|
||||
**改动面**:游戏代码
|
||||
|
||||
**状态**:已写卡+已编迭代 46
|
||||
|
||||
#### 立绘清晰度回退评估——原稿分辨率+三档显示(2026-10-13 登记,来源=playnote)
|
||||
|
||||
**实况**:来源=playnote 用户试玩记录「现在的立绘太丑了,像素化的粒度太低了,导致根本看不清立绘;看是否可以改回用较为高清的图片?还有一个问题是大小的问题……现在地精的图片看起来比熊地精还要大,这并不合理」。2026-10-13 用户裁定:与「第二 / 三关棋盘观感」同属**美术线更新**。**两个子问题均已定**:子问题一=怪物大小比例——体量语义改生物体型(character-design §5.2,弃强度线性映射),2026-11-01 进一步归并为三档绝对显示高;子问题二=像素粒度/是否回退高清——2026-10-14 裁不回退高清(裁决录=[美术审计-cursor会话存档](reports/美术审计-cursor会话存档-2026-10-14.md) §2.2),2026-11-01 会话查明根因=入包前 `dom_block_resize` 把原稿 189px 细节砍到 74–94(现行入包稿与原稿降采样**逐像素相同**),当日用户裁终态方案:**保留原稿分辨率、入包禁再降采样、显示按三档绝对高缩放**(小型 96=地精/巨蜘蛛/灰矮人;中型 144=主角/钩爪恐魔/熊地精;大型 188=食人魔酋长/蛛化卓尔/灰矮人石君王;宽随源比例、NEAREST)。同日裁:2026-10-14「须手绘重产」方向作废,现有形象即终稿、禁改形象。已接受项:五件源高低于档高属放大显示(主角 92/钩爪 94/熊地精 123/地精 90/巨蜘蛛 81);食人魔酋长显示宽 157 超桩盒 150。2026-10-28 为重产新增的色板额度议题(含 `#A79CB8` 去留)按用户令保留在板、另批讨论,本批不动色板。
|
||||
|
||||
Reference in new issue
Block a user