From d478cf70eaaf8bcd385dfef4cc94119ac21225e6 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Sat, 31 Oct 2026 05:59:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=99=E5=8D=A1(=E7=AB=99=E6=A1=A9=E5=90=8D?= =?UTF-8?q?=E5=AD=97=E8=A1=8C=E6=8F=90=E6=A1=A3=E4=B8=8E=E5=9C=B0=E5=8F=B0?= =?UTF-8?q?=E8=89=B2=E5=90=88=E5=B9=B6=E6=89=B9):=20=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E5=8D=A1=E7=89=87v1.1=E5=AE=9A=E7=A8=BF=E9=9B=B6=E5=BE=85?= =?UTF-8?q?=E8=A3=81=E7=82=B9=E2=80=94=E2=80=94=E5=90=8D=E5=AD=97=E8=A1=8C?= =?UTF-8?q?=E4=BA=94=E5=8F=96=E5=80=BC=E7=82=B9FS=5FCAPTION=E2=86=92FS=5FH?= =?UTF-8?q?INT+=E5=9F=BA=E7=BA=BF0.35h=E9=87=8D=E7=AE=97(=E7=89=8C?= =?UTF-8?q?=E9=A1=B6+18)+probe=E5=A2=9Ename=5Ffont=5Fsize=E9=94=AE/STAND?= =?UTF-8?q?=5FSTONE=5FRIM=C2=B7EDGE=E4=B8=A4=E5=B8=B8=E9=87=8F=E9=80=80?= =?UTF-8?q?=E5=BD=B9=E6=94=B9=E6=8C=87(=E5=8F=97=E5=85=89=E7=BA=BF?= =?UTF-8?q?=E4=B8=8E=E5=8F=A3=E6=B2=BF=E9=AB=98=E5=85=89=E2=86=92BRICK,?= =?UTF-8?q?=E6=8F=8F=E8=BE=B9=E2=86=92=E6=96=B0PLAZA=5FEDGE=E6=89=BF?= =?UTF-8?q?=E8=BD=BD#4C4038)/golden=E6=9D=BF=E9=9D=A2=E4=B8=89=E5=BC=A0?= =?UTF-8?q?=E7=94=B3=E6=8A=A5=E9=87=8D=E9=94=9A(=C2=A73=E7=94=B3=E6=8A=A5?= =?UTF-8?q?=E5=88=B6);=E6=96=AD=E8=A8=80=E9=9D=A2V10-V12=E4=B8=89=E9=94=9A?= =?UTF-8?q?=E4=B8=89=E4=BB=B6(probe=E5=AE=9E=E8=AF=BB+=E6=BA=90=E7=A0=81?= =?UTF-8?q?=E9=94=9A+FS=5FCAPTION=E8=AE=A1=E6=95=B0=E9=94=9A=3D=3D1+?= =?UTF-8?q?=E5=B8=B8=E9=87=8F=E8=A1=A8=E7=BB=8Fload().get=5Fscript=5Fconst?= =?UTF-8?q?ant=5Fmap=E2=80=94=E2=80=94=E7=B1=BB=E5=BC=95=E7=94=A8=E7=9B=B4?= =?UTF-8?q?=E8=B0=83parse=20error=20grilling=E5=AE=9E=E6=B5=8B)/V6?= =?UTF-8?q?=E5=9F=BA=E7=BA=BF149=E2=86=92150=E7=94=B3=E6=8A=A5+run=5Fall.g?= =?UTF-8?q?d=E6=B3=A8=E9=87=8A=E6=8D=A2=E4=BB=A3;grilling=E5=A4=8D?= =?UTF-8?q?=E6=A0=B8=E4=B8=89=E9=98=BB=E6=96=AD=E4=B8=A4=E5=BB=BA=E8=AE=AE?= =?UTF-8?q?=E5=85=A8=E8=90=BD(V11=E5=86=99=E6=B3=95parse=20error/=E4=B8=89?= =?UTF-8?q?=E6=B5=8B=E9=87=8F=E7=82=B9=E7=BC=BA=E5=88=A4=E6=8D=AE/?= =?UTF-8?q?=E4=B8=89=E7=BB=98=E5=88=B6=E7=82=B9=E6=94=B9=E6=8C=87=E7=BC=BA?= =?UTF-8?q?=E6=AD=A3=E8=AF=81/=E5=AF=B9=E7=85=A7=E8=A1=A8=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E5=8F=A5/=E7=BB=93=E6=9E=84=E5=9B=BE=E6=BC=8F?= =?UTF-8?q?=E8=A1=8C);=E8=83=BD=E5=8A=9B=E6=B8=85=E5=8D=95=E8=A1=A5?= =?UTF-8?q?=E8=A1=8C=E8=90=BD=E8=A1=A8(=E8=BF=AD=E4=BB=A343=E7=A7=BB?= =?UTF-8?q?=E4=BA=A4=E5=B0=8F=E4=BB=B6=E2=91=A0=E4=BA=86=E7=BB=93=E2=80=94?= =?UTF-8?q?=E2=80=94=E7=AB=99=E6=A1=A9=E5=91=88=E7=8E=B0=E5=AE=9A=E5=80=BC?= =?UTF-8?q?=E4=B8=8E=E7=B4=A0=E6=9D=90=E7=BB=91=E5=AE=9A=E8=A1=8C+?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E5=9F=9F=E8=A1=A8=E6=88=98=E6=96=97=E8=A1=A8?= =?UTF-8?q?=E7=8E=B0=E8=A1=8C,README=E5=B7=A5=E4=BD=9C=E6=A0=91=E5=90=8C?= =?UTF-8?q?=E6=89=B9=E5=90=AB=E5=B9=B6=E8=A1=8C=E4=BC=9A=E8=AF=9D=E6=8D=A2?= =?UTF-8?q?=E5=9B=BE=E7=B3=BB=E5=8D=A1=E8=83=BD=E5=8A=9B=E8=A1=8C=E4=BA=94?= =?UTF-8?q?=E8=A1=8C=E9=A1=BA=E5=B8=A6=E8=90=BD=E5=9C=B0);=E5=BE=85?= =?UTF-8?q?=E5=8A=9E=E6=B8=85=E5=8D=95=E4=B8=A4=E7=82=B9=E6=9D=A1=E7=9B=AE?= =?UTF-8?q?+=E5=B7=B2=E5=86=99=E5=8D=A1=C2=B7=E7=A7=BB=E4=BA=A4=E5=B0=8F?= =?UTF-8?q?=E4=BB=B6=E2=91=A0=E8=90=BD=E4=BD=8D;=E4=BC=B0=E6=97=B60.5?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=97=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/tests/README.md | 14 +- ...g-站桩名字行提档与地台色合并批-2026-10-31.md | 21 ++ ...片-站桩名字行提档与地台色合并批-2026-10-31.md | 188 ++++++++++++++++++ 待办清单.md | 8 +- 4 files changed, 221 insertions(+), 10 deletions(-) create mode 100644 reports/复核-grilling-站桩名字行提档与地台色合并批-2026-10-31.md create mode 100644 reports/需求卡片-站桩名字行提档与地台色合并批-2026-10-31.md diff --git a/game/tests/README.md b/game/tests/README.md index 8419681c..3fa305b7 100644 --- a/game/tests/README.md +++ b/game/tests/README.md @@ -114,10 +114,10 @@ tests/ | AP 扣费、末点耗尽即收轮与战斗收束清零 | 行动经济 | `MinesweeperRules.settle_batch()`(→`ActionEconomy.try_spend()`/`ActionEconomy.notify_combat_end()`) | `seal_polarity_test.gd:_smoke_seal_ap_exhausted`;`round_flow_skill_pool_test.gd:_smoke_full_battle`;`round_flow_skill_pool_test.gd:_smoke_active_refresh` | | 停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励) | 行动经济 | `BattleOrchestrator.player_request_refresh()`/`MinesweeperRules.settle_batch()` | `round_flow_skill_pool_test.gd:_smoke_active_refresh`;`seal_polarity_test.gd:_smoke_refresh_provenance_guard`;`refresh_feats_test.gd:test_no_feats_baseline` | | 换图系刷新链路与效果词表接线 | 行动经济×战斗结算×奇物 | `MinesweeperRules.settle_batch()`/`BattleOrchestrator.player_request_refresh()` | `effect_words_t1_test.gd:_init`;`forge_table_test.gd:_test_effect_kinds_closed`;`refresh_feats_test.gd:test_board_refresh_fact_only_on_success` | -| 换图基座:挖格产 RAP | 行动经济×奇物 | `MinesweeperRules.settle_batch()`/`BattleOrchestrator.player_request_refresh()` | `refresh_feats_test.gd:test_reserve_on_accepted_dig`;`refresh_feats_test.gd:test_double_base_stack` | -| 换图输出:刷新群伤与攻击蓄势 | 战斗结算×奇物 | `BattleOrchestrator.player_request_refresh()`→轮末 `settle_batch(stop)` | `refresh_feats_test.gd:test_blast_defers_to_combat_segment`;`refresh_feats_test.gd:test_charge_layers_attack_and_clear` | -| 换图生存:刷新护盾与回血 | 战斗结算×奇物 | `BattleOrchestrator.player_request_refresh()`→轮末 `settle_batch(stop)` | `refresh_feats_test.gd:test_shelter_layers_consumed_once`;`refresh_feats_test.gd:test_restoration_applies_at_round_end_and_caps` | -| 换图资源:旧图探索进度回收 | 地图战斗资源×战斗结算×奇物 | `MinesweeperRules.settle_batch(dig)`→`BattleOrchestrator.player_request_refresh()`→轮末 `settle_batch(stop)` | `refresh_feats_test.gd:test_recycle_progress_once_and_not_clear` | +| 换图基座:挖格产 RAP 与刷新折扣 | 行动经济×奇物 | `MinesweeperRules.settle_batch()`/`BattleOrchestrator.player_request_refresh()` | `refresh_feats_test.gd:test_reserve_on_accepted_dig`;`refresh_feats_test.gd:test_refresh_discount_gate_and_charge`;`refresh_feats_test.gd:test_double_base_stack` | +| 换图输出:刷新群伤与蓄力攻击 | 战斗结算×奇物 | `BattleOrchestrator.player_request_refresh()`→轮末 `MinesweeperRules.settle_batch(stop)` | `refresh_feats_test.gd:test_blast_defers_to_combat_segment`;`refresh_feats_test.gd:test_charge_layers_consumed_same_round` | +| 换图生存:全局固定减伤与轮末恢复 | 战斗结算×奇物 | `BattleOrchestrator.player_request_refresh()`→敌方攻击/危险格/错误封印/地形真实受伤入口 | `refresh_feats_test.gd:test_all_hero_damage_paths_emit_once`;`refresh_feats_test.gd:test_stone_mitigation_all_damage`;`refresh_feats_test.gd:test_rest_rotation_cap_and_clear` | +| 换图资源:刷新固定 GP 收益 | 战斗结算×奇物 | `BattleOrchestrator.player_request_refresh()` | `refresh_feats_test.gd:test_mine_profit_gp` | | 下轮行动点修正排队与兑现 | 行动经济 | `ActionEconomy.pending_ap_delta()`(排队经 `ActionEconomy.queue_ap_delta()`,写入方为效果引擎) | `seal_polarity_test.gd:_smoke_negative_dictionary`;`feat_vouchers_test.gd:_init` | **旅程段六:表现与支撑** @@ -133,6 +133,8 @@ tests/ | 中文字体随包与字形覆盖 | HUD框架 | `UiKit.load_font()` | `ui_font_asset_test.gd:_init`;`theme_projection_test.gd:_smoke_global_theme` | | 地形瓦片套与格面数字可读 | HUD框架 | `TilePalette.digit_ink_mode()`/`TilePalette.normalize_floor_luma()` | `terrain_tile_sets_test.gd:_test_set_completeness`;`terrain_tile_sets_test.gd:_test_hue_domains`;`terrain_tile_sets_test.gd:_test_digit_ink_modes` | | 站桩敌人呈现与结算演出落点 | 战斗表现 | `BattleStageView.enemy_standee_center()`/`BattleEndOverlay.open_victory()` | `standee_fx_sweep_test.gd:_init`;`pacing_queue_test.gd:_init` | +| 站桩呈现定值与素材绑定 | 战斗表现 | `UiKit.load_tex()`/`StandeeBody.name_line_probe()` | `standee_present_values_test.gd:_init` | +| B 区舞台背景三关变体与连续地面层(按 board_type 选图/地面层高度读布局表/四柱光柱退役) | HUD框架 | `BattleStageView.set_board_type()` | `stage_background_test.gd:_test_background_selection`;`stage_background_test.gd:_test_ground_layer_geometry`;`stage_background_test.gd:_test_beams_retired` | | 战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) | HUD框架 | `BoardView.set_cell_area()`(D 区可用面积 → 格边长);读面 `BoardView.cell_size` | `layout_probe.gd:_ready`;`board_gen_reward_test.gd:_smoke_layout_cell_formula` | | 调参测速批量模拟(逐帧步进与统计读数) | 调参测量 | `TuneSimController.run()`(调试浮窗批量模拟入口) | `tune_sim_batch_parity_test.gd:_init`(配对对拍套件,随测速循环批建) | | 战斗叙述与终局文案(数值带入/胜负互异) | HUD框架 | `BattleNarrator.battle_end_text()`/`BattleNarrator.boss_name()` | `battle_narrator_test.gd:_test_numeric_lines_carry_values`;`battle_narrator_test.gd:_test_end_text_differs_by_result`;`battle_narrator_test.gd:_test_boss_name_uses_boss_rowset` | @@ -165,13 +167,13 @@ tests/ | 战斗循环 | 地图战斗资源.md | 清图奖励双份与零路径;GP 钱包/escrow/商店收口/共享池;封印与极性路由/不可逆 | 已覆盖 | — | | 战斗循环 | 增益状态.md | 系统间契约词表与受理口径:五配方互异/掷点标签成员性/增益布尔受理;封印与极性路由/不可逆 | 部分覆盖 | 增益叠层/衰减/清除结算链无断言;见待办清单「能力清单覆盖缺口补齐」条 | | 战斗循环 | 战斗结算.md | 伤害公式与掷点乘区;伤害单据编排与回放;轮内流与结算五段全序 | 已覆盖 | — | -| 战斗循环 | 战斗表现.md | 站桩敌人呈现与结算演出落点 | 部分覆盖 | 死亡灰化与减动效演出档仅探针与人工目检;见待办清单「能力清单覆盖缺口补齐」条 | +| 战斗循环 | 战斗表现.md | 站桩敌人呈现与结算演出落点;站桩呈现定值与素材绑定 | 部分覆盖 | 死亡灰化与减动效演出档仅探针与人工目检;见待办清单「能力清单覆盖缺口补齐」条 | | 战斗循环 | 敌人系统.md | 技能池数据面与回放独立;Boss 半血解锁技门控;敌人技能池跨表链接校验 | 已覆盖 | — | | 排雷循环 | 地形变异.md | 变异布置门控;表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 已覆盖 | — | | 排雷循环 | 排雷玩法.md | 装板与开局免费展开(封锁格无资源、计入清图);挖/封印合法性与可辨拒绝(拒绝零副作用);封印不可逆与挖开封印格放行(兑付改判四情况) | 已覆盖 | — | | 排雷循环 | 棋盘生成.md | 棋盘按参数行出图、数字恒真;同参数同种子逐位复现、异种子不退化;可推理率与清图可达(合法性先于质量分)、重试有界、降级诚实 | 已覆盖 | — | | 排雷循环 | 行动经济.md | AP 扣费、末点耗尽即收轮与战斗收束清零;停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励);下轮行动点修正排队与兑现 | 已覆盖 | — | -| 表现与支撑 | HUD框架.md | 拒绝反馈分面可辨与未知兜底文案;结算明细带逐行呈现与排播节奏;模态覆盖层编排与输入锁;未开格类型微光(8 邻作用集/五组色相/零玩法写入);UI 全局主题与按钮五态(含对比度锚);中文字体随包与字形覆盖;地形瓦片套与格面数字可读;战斗叙述与终局文案(数值带入/胜负互异);玩家面文案与危险格格面字形;战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) | 已覆盖 | — | +| 表现与支撑 | HUD框架.md | 拒绝反馈分面可辨与未知兜底文案;结算明细带逐行呈现与排播节奏;模态覆盖层编排与输入锁;未开格类型微光(8 邻作用集/五组色相/零玩法写入);UI 全局主题与按钮五态(含对比度锚);中文字体随包与字形覆盖;地形瓦片套与格面数字可读;战斗叙述与终局文案(数值带入/胜负互异);玩家面文案与危险格格面字形;战斗屏三区几何与棋盘格边长(分辨率两档×四档板型);B 区舞台背景三关变体与连续地面层(按 board_type 选图/地面层高度读布局表/四柱光柱退役) | 已覆盖 | — | | 表现与支撑 | 存档序列化.md | 存档写盘⇄读回往返保真;三槽位隔离与激活失败回滚;槽位摘要窥视与坏槽三态;启动态无激活不写盘;旧档迁移链与断点续玩零跳号(集成);存档⇄RNG 快照往返保真(集成) | 已覆盖 | — | | 表现与支撑 | 教学引导.md | — | 未覆盖 | 教学形态与首遇时机待设计;见待办清单「教学形态未定」条 | | 表现与支撑 | 数据配置.md | 全表装载、就绪态与表清单目录对账;进度坐标查行:精确命中/向上取整/封顶/警告去重;运行期越域致命与进程非 0 退出;加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域;表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 已覆盖 | — | diff --git a/reports/复核-grilling-站桩名字行提档与地台色合并批-2026-10-31.md b/reports/复核-grilling-站桩名字行提档与地台色合并批-2026-10-31.md new file mode 100644 index 00000000..d3ecac22 --- /dev/null +++ b/reports/复核-grilling-站桩名字行提档与地台色合并批-2026-10-31.md @@ -0,0 +1,21 @@ +# 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 成立,可交迭代编排段。 diff --git a/reports/需求卡片-站桩名字行提档与地台色合并批-2026-10-31.md b/reports/需求卡片-站桩名字行提档与地台色合并批-2026-10-31.md new file mode 100644 index 00000000..23cb5ba9 --- /dev/null +++ b/reports/需求卡片-站桩名字行提档与地台色合并批-2026-10-31.md @@ -0,0 +1,188 @@ +# 需求卡片——站桩名字行提档与地台色合并批(名字行字号 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-反哺点-<日期>.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-实现报告-<日期>.md`——各卡状态+T0 三份改前读数与改后对拍+grep 取证原文+golden 重锚前后读数+实机目检总清单(登记不阻塞三项:名字行清晰可读且长名不截字/墙格口沿亮线观感无异/贴图缺位回退描边与顶缘线观感无异)+实现决定记录。 + - `reports/iter-反哺点-<日期>.md`——§5 同步面 art-bible 两行逐条有落点。 + - `reports/iter-验收审计-<日期>.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-验收审计-<日期>.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 先行不阻塞)。 diff --git a/待办清单.md b/待办清单.md index 17ae9305..0ff60559 100644 --- a/待办清单.md +++ b/待办清单.md @@ -4,15 +4,15 @@ #### 迭代 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 登记句已改注)。 +**实况**:证据=迭代 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 复核过)。 **改动面**:文档+游戏代码 -**状态**:文档设计已闭合 +**状态**:文档设计已闭合+已写卡 #### 迭代 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 全在册,零新增色)。 +**实况**:证据=迭代 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 行);②四色墨断言仍待执行。 **改动面**:游戏代码+工具代码 @@ -241,7 +241,7 @@ #### 「封锁-蓄力」combo 设计素材(2026-10-07 登记,来源=会话提及) -**实况**:换图系双基座七件设计定稿——掘进储能、折价换图、弃图轰击、换图蓄势、换图庇护、弃图休整、弃图回收;双基座允许叠加,后续效果在本轮五段结算内兑付,弃图回收按旧图探索进度发清图奖励。设计定稿=[奇物](design/gdd/systems/冒险循环/奇物.md) v1.2+[行动经济](design/gdd/systems/排雷循环/行动经济.md) v1.2+[战斗结算](design/gdd/systems/战斗循环/战斗结算.md) v1.3+[地图战斗资源](design/gdd/systems/战斗循环/地图战斗资源.md) v1.2。参考提案=[提案-弃图刷新系专长流派-2026-10-30](reports/提案-弃图刷新系专长流派-2026-10-30.md) v0.4;按用户要求保留为后续实现参考,不按「吸收即死」退役。需求卡片=[需求卡片-换图系双基座七件批-2026-10-31](reports/需求卡片-换图系双基座七件批-2026-10-31.md)。 +**实况**:换图系双基座七件设计定稿——矿脉储能、省力周转、崩壁冲击、蓄力周转、石层缓冲、坑道小憩、矿道红利;双基座允许叠加,后续效果在本轮五段结算内兑付。石层缓冲统一经全局 `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)。 **改动面**:文档+游戏代码