合并(迭代47写卡批·机检预算裁决): 卡⑥营地模态句柄子容器批v1.0新立排执行序第一+卡④v3.2/卡⑤v1.5子容器口径+待办清单分域重构条登记+roadmap换代——停机呈报裁决最小改动落地,零基线欠账;合回后post-merge钩子自动跑CI全量域闸
This commit is contained in:
commit
c009cf7b1e
6 files changed
+174
-18
No files matched your search
@@ -56,4 +56,5 @@
|
||||
|
||||
- **零待裁点、零阻塞点**:卡④ §0.3 四道开工门全部裁断销号;卡⑤ 零真待裁点、开工按序随卡④ 代码波(迭代内排序,非跨迭代阻塞)。
|
||||
- 反哺点落文已完成(2026-11-01 本会话文档批,同批合回):camp-scene-prompts.md v1.3 §5 改已裁+art-bible.md v3.31 §6.2 待裁行改已裁;camp.md/art-bible 实装状态回填归迭代实现批 T6 义务。
|
||||
- **判定:迭代 47 可开工**(卡④ → 卡⑤ 按序,`/iter` 发令即起 T0)。
|
||||
- 机检预算互斥裁决(2026-11-01 用户裁,停机呈报=iter47 worktree):实现段实测两卡平铺合计 ui_modals.gd 类变量 19>S13 上限 15——裁**最小改动**=营地六句柄落 `ui_camp_modals.gd` 子容器(新立卡⑥ 前置基建,迭代 47 执行序第一位;卡④ v3.2/卡⑤ v1.5 随批改口径,卡⑤ v1.4「14→15 恰贴」算术缺陷一并订正);全量分域句柄分家登记待办清单另立批。双审预算审为单卡口径、未做跨卡同文件累加核对,已在裁决中注记。
|
||||
- **判定:迭代 47 可开工**(卡⑥ → 卡④ → 卡⑤ 按序,`/iter` 发令即起 T0)。
|
||||
@@ -1,6 +1,6 @@
|
||||
# 需求卡片:Esc 浮窗与营地顶栏批(营地顶部小 HUD 栏 · Esc 三钮浮窗)· 营地交互重做卡⑤
|
||||
|
||||
- 版本:**v1.4(现行有效卡)**。留痕:Q1/Q2/Q3 均于 2026-10-18 裁定(甲/甲/甲,见 §10,已裁非待裁);契约 2 随 Q3 升格;卡④ 2026-10-31 重立、2026-11-01 修订为 v3.1 现行有效卡,本卡随卡④ 代码波同行(改动沿革只进 git commit log);2026-11-01 grilling+godot-master 双审后用户令修订——契约 9 Esc 四态语义与接线定稿新立、契约 3 谓词钉死、契约 4 动线补浮窗自收、契约 5 刷新触发主体补钉、V4/V6 判据订正、§0 死信排序约束改述、文件表补 ui_modals/main_ui_build 两件、触发沿 echo 过滤。
|
||||
- 版本:**v1.5(现行有效卡)**。留痕:Q1/Q2/Q3 均于 2026-10-18 裁定(甲/甲/甲,见 §10,已裁非待裁);卡④ 2026-10-31 重立、2026-11-01 修订为 v3.1,本卡随卡④ 代码波同行;2026-11-01 grilling+godot-master 双审后用户令修订(v1.4)——契约 9 新立、契约 3 谓词钉死、契约 4 浮窗自收、V4/V6 订正、死信约束改述、文件表补两件;2026-11-01 用户裁机检预算互斥停机呈报(v1.5)——浮窗句柄改落 `ui_camp_modals.gd` 子容器(卡⑥ 前置建件,本卡 T1 落第六枚),`ui_modals.gd` 类变量 14 不升(原「14→15 恰贴」句作废),契约 7 补寻址形态。
|
||||
- 来源:[需求澄清-营地交互重做-2026-10-18.md](需求澄清-营地交互重做-2026-10-18.md)(唯一事实源:⑤裁决 9/10、④结构树语境、⑦切批原则⑤)
|
||||
- 归属:呈现层/组合根(`game/presentation/`)——营地交互重做五卡之五
|
||||
- 排期:未编入(2026-10-18 用户令:需求卡片不预占迭代号,批次归属按工作量另裁)
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
🔴 **契约 6 · 零动效**:浮窗直开直关,子树零 AnimationPlayer、源码禁 `create_tween`/`UiKit.motion` 令牌(生涯页同款契约,F7);减动效设置项不新增(在役项沿用)。
|
||||
|
||||
🔴 **契约 7 · 层序纪律+遮挡结论(订正)**:浮窗入 `ui_registry.gd LAYER_CONTRACT`(改层序只改合同表;唯一落位口 `apply_layer_contract()`——F6);禁散落 `move_child`。**与调试角标遮挡的结论**:`debug_badge` 是末位 `float` 类、不注册 ModalStack,`ModalStack.open` 只隐藏登记层 ⇒ 浮窗开不波及角标节点(结构语义);但角标**发布态恒隐**(F10,`main.gd:98` `_debug_entry` 缺省 false),故「角标恒压浮窗且保持可点/可见」不是本批可跑断言面——删该运行期断言,以「浮窗登记序+open 只动登记层」结构断言承载,开发期临时启用角标后的浮窗不遮角标观感归用户目检。另写明一条栈语义防误触 L3:浮窗开会隐藏登记序在其上的已开层(如 debug_overlay),关闭恢复——属既有栈语义非新决策。
|
||||
🔴 **契约 7 · 层序纪律+遮挡结论(订正)**:浮窗入 `ui_registry.gd LAYER_CONTRACT`(改层序只改合同表;唯一落位口 `apply_layer_contract()`——F6);禁散落 `move_child`。**与调试角标遮挡的结论**:`debug_badge` 是末位 `float` 类、不注册 ModalStack,`ModalStack.open` 只隐藏登记层 ⇒ 浮窗开不波及角标节点(结构语义);但角标**发布态恒隐**(F10,`main.gd:98` `_debug_entry` 缺省 false),故「角标恒压浮窗且保持可点/可见」不是本批可跑断言面——删该运行期断言,以「浮窗登记序+open 只动登记层」结构断言承载,开发期临时启用角标后的浮窗不遮角标观感归用户目检。另写明一条栈语义防误触 L3:浮窗开会隐藏登记序在其上的已开层(如 debug_overlay),关闭恢复——属既有栈语义非新决策。**浮窗句柄寻址(v1.5 钉死)=`ui.modals.camp.esc_overlay` 二层**(营地子容器,卡⑥ 建件;`ui.modals.flow.open/close` 调用形态不变——flow 是全局调度器、非句柄册成员)。
|
||||
|
||||
🔴 **契约 8 · provisional 口径留痕**:裁决 10「先按顶部小HUD栏设计」的「先」字留痕——HUD 栏形态按最小集落地(只承载钥石余额),扩项=新裁点。
|
||||
|
||||
@@ -111,9 +111,10 @@
|
||||
| `game/presentation/views/camp_hud_band.gd` | 营地顶栏小 HUD 栏:承载 `UiKit.keystone_badge`(钥石余额单口读数);挂接卡④ `CampRefreshBus.refresh()` 刷新 | 行为改动 | 新建 | V6/B2 |
|
||||
| `game/presentation/main_esc_flow.gd` | 组合根 Esc 流程承接件:键盘输入路由+营地语境判据+Q2 再按关窗+三出口动线(返回主菜单/设置/退出);静态承接件,main 侧留同名薄委托 | 行为改动 | 新建 | V1/V3/B1/B3 |
|
||||
| `game/presentation/main.gd` | 组合根:Esc 输入入口+`main_esc_flow.gd` 同名薄委托+返回主菜单动线接线 | 行为改动 | 复用既有(改) | V1/V3/B3 |
|
||||
| `game/presentation/ui_registry.gd` | `LAYER_CONTRACT` 加 `camp_esc_overlay` 槽(登记于营地层与 `settings_overlay` 之间,契约 3 正解)+`node()` 寻址 | 行为改动 | 复用既有(改) | V8/B1 |
|
||||
| `game/presentation/ui_registry.gd` | `LAYER_CONTRACT` 加 `camp_esc_overlay` 槽(登记于营地层与 `settings_overlay` 之间,契约 3 正解)+`node()` 寻址(`camp.*` 二层解析由卡⑥ 建件承担,本卡只消费) | 行为改动 | 复用既有(改) | V8/B1 |
|
||||
| `game/presentation/main_overlay_flow.gd` | `_on_settings_closed` 语境分支:营地浮窗路径关设置回浮窗、不回主菜单(契约 3;谓词=camp_esc_overlay.visible) | 行为改动 | 复用既有(改) | V4/B3 |
|
||||
| `game/presentation/ui_modals.gd` | 浮窗新句柄 `camp_esc_overlay` 落 UiModals 成员(`ui_registry.gd` node() 经 `modals.X` 寻址;13 现役句柄先例 :8-20;S13 触面——类变量 14→15 恰贴 ≤15 上限,登记预期值) | 行为改动 | 复用既有(改) | V8/B1 |
|
||||
| `game/presentation/ui_modals.gd` | 本卡零句柄新增(浮窗句柄落 `ui_camp_modals.gd` 子容器——卡⑥ 前置建件,2026-11-01 用户裁);类变量 14 预期不升(S13 触面消除,见「实现规范预算·存量触面一查」) | 非行为改动(卡⑤ 段零改) | 复用既有 | V8/B1 |
|
||||
| `game/presentation/ui_camp_modals.gd`(卡⑥ 新建) | 营地域句柄子容器:本卡 T1 落第六枚句柄 `esc_overlay`(寻址 `ui.modals.camp.esc_overlay` 二层;卡④ T3 已落五枚) | 行为改动 | 卡⑥ 新建(跨卡共改) | V8/B1 |
|
||||
| `game/presentation/main_ui_build.gd` | 浮窗实例化装配点:`.new()`+装配尾 `apply_layer_contract(root)`(先例 :105/:121/:242;S13 触面) | 行为改动 | 复用既有(改) | V8/B1 |
|
||||
| `game/presentation/views/camp_scene_view.gd`(卡④ 新建) | 顶栏预留位 `set_hud_band()` 填 `CampHudBand` 实例(卡④ T2 跨卡接口①「卡⑤ 填值」);本卡只填值、不改场景图铺底/命中区逻辑 | 行为改动 | 卡④ 新建(跨卡共改,仅顶栏填值) | V6/B2 |
|
||||
| `game/probe/screen_flow_probe.gd` | 探针宿主:扩展现 :153-165 Esc 合成段为营地语境浮窗断言+三动线+Q2 关窗+HUD 余额读数;与卡④ T5 营地键段按行域分界(§0) | 非行为改动(测试面) | 复用既有(改) | V1/V3/V4/V6 |
|
||||
@@ -154,7 +155,7 @@
|
||||
|
||||
### 存量触面一查
|
||||
|
||||
本卡触碰存量文件:`main.gd`/`ui_registry.gd`/`ui_modals.gd`/`main_ui_build.gd`/`main_overlay_flow.gd`/`camp_scene_view.gd`(卡④ 新建)/`screen_flow_probe.gd`/`ui_struct_probe.gd`。**T0 读数步骤写明「S13 键较 `tools/gdstyle_baseline.txt` 登记值只降不升」的预期与达成手段**:`main.gd` 组合根新增 Esc 输入入口与薄委托(不引入重复 load/循环内 await/循环内分配等 S13 违规类型,键只降不升);`ui_registry.gd` 合同表加一槽、`node()` 加一寻址分支(不新增公开方法面);`ui_modals.gd` 加一成员句柄(类变量 14→15 恰贴 ≤15 上限,预期值 15);`main_ui_build.gd` 加浮窗实例化与装配(方法面微增,T0 实测对账);`main_overlay_flow.gd` `_on_settings_closed` 加语境分支(单函数分支数仍 ≤8、返回 ≤6);`camp_scene_view.gd` 只填 `set_hud_band()` 顶栏位;探针改接=加断言段、不新增扫描面键。任何 S13 键被迫上升=§8 L3 停卡。**`main.gd` 为组合根架构先例,其公开方法基数不在本卡新件三查面内**(第 14 节三查只对新增文件)。
|
||||
本卡触碰存量文件:`main.gd`/`ui_registry.gd`/`ui_modals.gd`/`main_ui_build.gd`/`main_overlay_flow.gd`/`camp_scene_view.gd`(卡④ 新建)/`screen_flow_probe.gd`/`ui_struct_probe.gd`。**T0 读数步骤写明「S13 键较 `tools/gdstyle_baseline.txt` 登记值只降不升」的预期与达成手段**:`main.gd` 组合根新增 Esc 输入入口与薄委托(不引入重复 load/循环内 await/循环内分配等 S13 违规类型,键只降不升);`ui_registry.gd` 合同表加一槽、`node()` 加一寻址分支(不新增公开方法面);`ui_modals.gd` 零句柄新增(浮窗句柄落 `ui_camp_modals.gd` 子容器,类变量 14 预期——v1.4「14→15 恰贴」句作废:该算术只算本卡 +1、未算卡④ 同批净+4,两卡合计 19>15,2026-11-01 停机呈报裁决改子容器);`ui_camp_modals.gd`(卡⑥ 建件)本卡落第六枚句柄(类变量 5→6);`main_ui_build.gd` 加浮窗实例化与装配(方法面微增,T0 实测对账);`main_overlay_flow.gd` `_on_settings_closed` 加语境分支(单函数分支数仍 ≤8、返回 ≤6);`camp_scene_view.gd` 只填 `set_hud_band()` 顶栏位;探针改接=加断言段、不新增扫描面键。任何 S13 键被迫上升=§8 L3 停卡。**`main.gd` 为组合根架构先例,其公开方法基数不在本卡新件三查面内**(第 14 节三查只对新增文件)。
|
||||
|
||||
### 指标例外通道
|
||||
|
||||
@@ -181,7 +182,7 @@
|
||||
- [ ] 在 `camp_esc_overlay.gd` 实现 `set_close_path()`/`bind_signals()`:Q2 裁甲=再按 Esc 关窗(同键唤起/关闭单义切换),关闭由组合根路由、视图只发 `closed` 信号;三钮 `pressed` 外发不内含动线。
|
||||
- [ ] 在 `main_esc_flow.gd` 实现 `is_camp_context() -> bool`:判据=营地场景屏 visible(子界面是模态叠加非熄屏;复用 `screen_flow_probe.gd:54` 营地旗标先例——:53 是菜单行、:54 才是营地旗标,v1.4 订正);「子界面开态不唤浮窗」(Q1 甲)由契约 9① 现开集合判据承载,不并入本谓词;调试浮窗开态不影响判据(全局浮层、营地屏仍可见)。
|
||||
- [ ] 在 `main_esc_flow.gd` 实现 `on_esc_input(ev: InputEvent) -> void`/`open_overlay() -> void`/`close_overlay() -> void`:按**契约 9 四态优先序**路由(①除浮窗外任一登记模态开→无反馈②浮窗开→close③营地语境→open④非营地语境→无反馈),判据单点=ModalStack 登记册现开集合、禁手枚名单;接线定稿=事件驱动 `_unhandled_input`+`KEY_ESCAPE`(physical_keycode)、禁 Input 单例轮询、不挂 ui_cancel、pressed 且非 echo(契约 9 接线定稿 2026-11-01 已裁,不再 T0 选型)。
|
||||
- [ ] 在 `ui_registry.gd` `LAYER_CONTRACT` 加 `camp_esc_overlay` 槽(位于营地层与 `settings_overlay` 之间,契约 3 登记序正解)+`node()` 寻址;禁散落 `move_child`(F6)。
|
||||
- [ ] 在 `ui_registry.gd` `LAYER_CONTRACT` 加 `camp_esc_overlay` 槽(位于营地层与 `settings_overlay` 之间,契约 3 登记序正解)+`node()` 寻址;句柄落 `ui_camp_modals.gd` 子容器第六枚 `esc_overlay`(卡⑥ 前置建件,寻址 `ui.modals.camp.esc_overlay` 二层)——禁平铺回 `ui_modals.gd`(S13 上限,2026-11-01 用户裁);禁散落 `move_child`(F6)。
|
||||
- [ ] 在 `main.gd` 加 Esc 输入入口(`_unhandled_input`)与 `main_esc_flow.gd` 同名薄委托(探针 `main.X` 路径零改动);`main.gd` 的 `_unhandled_input` 将是产品码首个键盘入口——`main_esc_flow.gd` 头注自陈此身份(2026-11-01 双审注)。
|
||||
- [ ] 零动效(契约 6):浮窗子树零 AnimationPlayer、源码禁 `create_tween`/`UiKit.motion` 令牌(仿 `ui_struct_probe.gd:379-391`)。
|
||||
- 产出:`CampEscOverlay.setup_buttons()`/`set_close_path()`/`bind_signals()`、`closed` 信号;`MainEscFlow.on_esc_input()`/`is_camp_context()`/`open_overlay()`/`close_overlay()`;`LAYER_CONTRACT` 新槽键 `camp_esc_overlay`;T2 按接口块接线。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 需求卡片:营地场景图新建批(交互式营地 · 七物件绑定 · 四柜台拆解)· 营地交互重做卡④
|
||||
|
||||
- 版本:**v3.1(现行有效卡)**。留痕:2026-10-21 用户令退回美术设计段待闭合;2026-10-31 用户令重立——美术设计已闭合(样张过审+art-bible 条款版本),据 req-card 第〇步重立为现行有效卡,零设计待裁点;2026-11-01 grilling+godot-master 双审后用户令修订——§0.3 四道代码段开工门裁断销号(五裁点逐点拍板/P3·P5 销号口径落定/T1 后处理授权形态落定)、§2 现状事实换 2026-11-01 盘面、Godot 审查风险项落 T1·T2·V 面(1024 档换算式逐张登记/节点选型钉死/layout fail-fast 校验+场景层序断言入 V1)。
|
||||
- 版本:**v3.2(现行有效卡)**。留痕:2026-10-21 用户令退回美术设计段待闭合;2026-10-31 用户令重立——美术设计已闭合(样张过审+art-bible 条款版本),据 req-card 第〇步重立为现行有效卡,零设计待裁点;2026-11-01 grilling+godot-master 双审后用户令修订(v3.1)——§0.3 四道代码段开工门裁断销号、§2 换新盘面、Godot 风险项落卡;2026-11-01 用户裁机检预算互斥停机呈报(v3.2)——营地六句柄改落 `ui_camp_modals.gd` 子容器(卡⑥ 前置建件),`ui_modals.gd` 类变量 14→14 零基线,存量触面一查补列 ui_modals/ui_registry/main_ui_build 三件,全量分域分家登记待办清单另立批。
|
||||
- 来源:[需求澄清-营地交互重做-2026-10-18.md](需求澄清-营地交互重做-2026-10-18.md)(目标体验原话/目标结构树+纵深稿/裁决 5·6·7·8·10/验收方式/切批原则④)+ 样张过审(2026-10-31 用户裁定,清单 [artwork/candidates/_终稿裁定-2026-10-31.txt](../artwork/candidates/_终稿裁定-2026-10-31.txt):各素材第一张样本稿为终稿、保留全部待选稿)+ [art-bible.md](../design/art/art-bible.md) v3.31 §6.2(营地场景 10 层口径)(**唯一事实源**:样张过审 2026-10-31 + art-bible.md v3.31 §6.2;配套 [camp.md](../design/gdd/ux/camp.md) v2.2/[camp-scene-prompts.md](../design/art/camp-scene-prompts.md) v1.2/[asset-path-map.md](../design/art/asset-path-map.md)/[art-assets-checklist.md](../design/art/art-assets-checklist.md) §3.5 同步;需求澄清为目标体验事实源)
|
||||
- 归属:呈现层+美术线(`game/presentation/` + 场景素材)——营地交互重做五卡之四,**最大件**
|
||||
- 排期:未编入(2026-10-18 用户令:需求卡片不预占迭代号,批次归属按工作量另裁)
|
||||
@@ -208,8 +208,9 @@ req-card 第〇步+卡头 2026-10-21 退回令口径=美术设计闭合(
|
||||
| `game/presentation/views/confirm_dialog.gd` | 三钮化(继续上一段冒险/开始新冒险/取消) | 行为改动 | 复用既有(改) | V3/B1 |
|
||||
| `game/presentation/camp_shop_presenter.gd` | 投影目标改线+写口尾刷新改路由+open/close 编排迁位(契约 4;路径订正——v3.0 写 `presenters/` 子目录不存在) | 行为改动 | 复用既有(改) | V4/V8/B1 |
|
||||
| `game/presentation/camp_flow_context.gd` | 类型化字段语义订正(路径订正——v3.0 写 `core/` 子目录不存在) | 行为改动 | 复用既有(改) | V4/B1 |
|
||||
| `game/presentation/ui_modals.gd` | 新场景根句柄与四子界面句柄落 UiModals 成员面(先例 :8-20 现役句柄;槽名 T0 定稿,2026-11-01 双审补列) | 行为改动 | 复用既有(改) | V1/V8 |
|
||||
| `game/presentation/main_ui_build.gd` | 新层实例化装配点:各 `.new()`+装配尾 `apply_layer_contract(root)`(先例 :105/:121/:242;2026-11-01 双审补列) | 行为改动 | 复用既有(改) | V1/V8 |
|
||||
| `game/presentation/ui_camp_modals.gd` | 营地域模态句柄子容器(卡⑥ 前置建件;本卡 T3 落场景根+四子界面五枚句柄,卡⑤ T1 落浮窗句柄;寻址 `ui.modals.camp.X` 二层) | 行为改动 | 新建(卡⑥) | V1/V8 |
|
||||
| `game/presentation/ui_modals.gd` | 本卡零句柄新增(营地域句柄落 ui_camp_modals.gd 子容器,2026-11-01 用户裁);类变量 14 不升(S13 预期,见「实现规范预算·存量触面一查」) | 非行为改动(卡④ 段零改) | 复用既有 | V1/V8 |
|
||||
| `game/presentation/main_ui_build.gd` | 新层实例化装配点:各 `.new()`+装配尾 `apply_layer_contract(root)`(先例 :105/:121/:242);五句柄赋值经 `modals.camp.X` 子容器 | 行为改动 | 复用既有(改) | V1/V8 |
|
||||
| `main.gd`(组合根) | 断点弹窗移位+ConfirmDialog 三钮消费方编排+营地入口改挂+篝火动线+开层互斥/关层收闭 | 行为改动 | 复用既有(改) | V3/V4/V7/B1 |
|
||||
| `game/assets/art/scene/scene_camp_*.png`(10 张) | 10 层场景素材终稿(asset-ingest 第 3 步拷入,命名对齐 `UiKit.TEX_CAMP_*`——常量十键本批在 `ui_kit.gd` 新增) | 非行为改动(美术资源) | asset-ingest | V1/V10 |
|
||||
| `game/probe/shot_probe.gd` | camp 截图路径改场景图+收闭改接篝火动线 | 非行为改动(测试面) | 复用既有(改) | V1 |
|
||||
@@ -235,6 +236,7 @@ req-card 第〇步+卡头 2026-10-21 退回令口径=美术设计闭合(
|
||||
| `camp_scene_view.gd` | 盘上视图件=CampOverlay(四柜台覆盖层,形态本批退役、与场景图形态正交,反参照禁复用)、CareerOverlay(生涯全屏页,职责不同)、camp_screen.gd(屏壳)。**无**「场景图铺底+七物件命中区+点选反馈」同职责实现 → 不能复用,须新建视图件;屏壳复用既有 `camp_screen.gd` 改造,不新建屏壳 | grep `camp_scene`/`scene_camp` 视图标识符盘上无第二处;素材消费常量 `UiKit.TEX_CAMP_*` 单点(asset-path-map.md §3),不另立路径常量 | 呈现层视图,零 Core 写调用;命中区 `_gui_input()` → `object_pressed(key: String)` 信号 → 组合根 → 开界面/写口;10 层装载经 `UiKit.load_tex()`(exists 守卫、禁 preload);不直连 MetaProgression |
|
||||
| `camp_scene_layout.tres` | grep `game/data/tables/` 无营地坐标表;坐标草案在 artwork HTML(不入 git)与 camp-scene-prompts §2.3(设计文档,非运行时数据源)。数值单一事实源要求落 `data/tables/` → 新建 | 坐标事实只此一处;禁在 `camp_scene_view.gd`/探针/T 卡各写一份坐标字面量(契约 8 禁自定规格、数值单点) | 视图启动时经 ConfigDB 单点读取(schema 类+表现域容器类型化成员,先例 battle_layout.tres);坐标值按 §0.3-3 五裁点裁断(2026-11-01)由 T2 定值落入 |
|
||||
| `camp_refresh_bus.gd` | grep 现役 `refresh_camp` 绑定 CampOverlay 句柄(F5),随四柜台形态**退役**(卡⑤/§0.5 明确「非已退役的 refresh_camp」);新单口须同时刷新现开界面与场景根 HUD、职责不同 → 不能复用,须新建 | grep `camp_refresh`/刷新单口类标识符盘上无第二处;卡⑤ HUD 刷新挂此单口,不另立第二口 | 组合根拆件:七写口尾 → `CampRefreshBus.refresh(camp_data: Dictionary) -> void` → 现开界面刷新+场景根 HUD 刷新;一次性刷新,不新增写口语义(契约 4) |
|
||||
| `ui_camp_modals.gd`(卡⑥ 建件,本卡落五枚) | grep 句柄分域容器无先例;`UiModals` 本体=按技术角色平铺的注册面容器(职责不同)、`ModalFlow`=调度器非句柄册 → 不能复用,须新建(卡⑥ 已立卡) | grep `UiCampModals`/`ui_camp_modals` 无第二处;营地句柄寻址唯一落点 | RefCounted 不挂树;`main_ui_build` 构造注入 `ui_modals.camp`;`register_layer`/LAYER_CONTRACT/树序零触碰(句柄册结构≠树结构) |
|
||||
| `forge_view.gd`/`treasure_view.gd`/`tree_view.gd`/`codex_view.gd` | 界面逻辑**已实现**于 CampOverlay 内(F4:`_forge_workbench`/`_ws_scroll`/`_tree_holder`/图鉴占位);本批是抽出承载壳、**复用既有界面逻辑**(行板/写口链路零重设计,契约 4),非从零新写 → 新建壳、迁移逻辑 | grep `forge_view`/`treasure_view`/`tree_view`/`codex_view`/`_forge_rows`/`_forge_workbench` 盘上无第二处定义;`forge_workbench_test.gd:33` 消费 `_forge_rows`/`_forge_workbench`,抽出后同迁,断言零改只换承载类 | 各视图发意图信号(`buy_requested`/`tree_buy_requested`/`forge_*`)→ 组合根 → CampShopPresenter → MetaProgression 写口(Core 零 UI 不破);五界面各带返回/关闭钮;开合走模态栈单口、层序入 `LAYER_CONTRACT` |
|
||||
|
||||
### 非新增件说明
|
||||
@@ -254,12 +256,13 @@ req-card 第〇步+卡头 2026-10-21 退回令口径=美术设计闭合(
|
||||
|---|---|---|---|---|
|
||||
| `camp_scene_view.gd` | 预期 ≤8:`setup_layers()`/`bind_hotspots()`/`set_feedback_state()`/`get_hotspot_rect()`/`set_hud_band()`/`_on_hotspot_input()` 等,远低 ≤20 | 预期 ≤12:10 层纹理句柄+命中区表+反馈态+名牌节点;收编进内聚结构,低 ≤15 | 无自存量文件迁入函数 | 三查通过;T0 实测实数回填,超阈值即拆件或砍面(砍面=退设计段裁职责) |
|
||||
| `camp_refresh_bus.gd` | 预期 ≤3:`refresh()`/`bind_targets()`/`_dispatch()`,远低 ≤20 | 预期 ≤4:现开界面句柄+场景根 HUD 句柄+投影数据,低 ≤15 | 自 `camp_shop_presenter.gd` 迁入刷新路由;先查 `tools/gdstyle_baseline.txt` 源函数键,branches/returns/函数长超默认登记值的迁移即拆函数(拆分不改语义,不算迎合机检) | 三查通过;迁入后补跑 S13,不凭旧读数放行 |
|
||||
| `ui_camp_modals.gd`(卡⑥ 建件) | 预期 ≤1(`_init`) | 预期 5(本卡 T3 落五枚;卡⑤ 落满 6),低 ≤15 | 无迁入函数 | 三查通过(卡⑥ 卡面已立预算) |
|
||||
| 四界面 view(各) | 各预期 ≤6:`open()`/`close()`/`bind_rows()`/`_on_action()` 等,远低 ≤20 | 各预期 ≤10:复用既有行板成员(`_forge_workbench`/`_ws_scroll`/`_tree_holder`),低 ≤15 | 自 `camp_overlay_view.gd` 迁入对应界面函数;逐个对 `tools/gdstyle_baseline.txt` 源键,超登记值即拆函数 | 三查通过;抽出后实测实数回填 |
|
||||
| `camp_scene_layout.tres` | 不适用(数据件,无方法) | 不适用(结构键,非类变量) | 不适用(无迁入函数) | 结构键唯一,坐标值按 §0.3-3 五裁点裁断(2026-11-01)由 T2 定值落入 |
|
||||
|
||||
### 存量触面一查
|
||||
|
||||
本卡触碰存量文件:`camp_screen.gd`/`camp_shop_presenter.gd`/`camp_flow_context.gd`/`confirm_dialog.gd`/`career_overlay.gd`/`camp_overlay_view.gd`(退役)/`main.gd`/探针七件/`forge_workbench_test.gd`。**T0 读数步骤写明「S13 键较 `tools/gdstyle_baseline.txt` 登记值只降不升」的预期与达成手段**:CampOverlay 拆解=删四柜台代码(键只降);`camp_shop_presenter.gd` 改造=投影目标改线、不新增公开方法/成员;`main.gd` 组合根=断点弹窗移位+消费方编排(新增私有状态量一枚,S13 类级键只降不升);探针改接=替换断言段、不新增扫描面键。任何 S13 键被迫上升=§8 L3 停卡。
|
||||
本卡触碰存量文件:`camp_screen.gd`/`camp_shop_presenter.gd`/`camp_flow_context.gd`/`confirm_dialog.gd`/`career_overlay.gd`/`camp_overlay_view.gd`(退役)/`main.gd`/`ui_modals.gd`/`ui_registry.gd`/`main_ui_build.gd`/探针七件/`forge_workbench_test.gd`。**T0 读数步骤写明「S13 键较 `tools/gdstyle_baseline.txt` 登记值只降不升」的预期与达成手段**:`ui_modals.gd` 类变量 14→14(−平铺 `camp_overlay`+camp 容器成员由卡⑥ 建件承担——营地域句柄一律落 `ui_camp_modals.gd` 子容器,2026-11-01 用户裁,禁平铺);`ui_registry.gd` +camp 二层解析分支(分支数 ≤8);`main_ui_build.gd` 装配行改指(方法面微增,T0 实测对账);CampOverlay 拆解=删四柜台代码(键只降);`camp_shop_presenter.gd` 改造=投影目标改线、不新增公开方法/成员;`main.gd` 组合根=断点弹窗移位+消费方编排(新增私有状态量一枚,S13 类级键只降不升);探针改接=替换断言段、不新增扫描面键。任何 S13 键被迫上升=§8 L3 停卡。
|
||||
|
||||
### 指标例外通道
|
||||
|
||||
@@ -274,7 +277,7 @@ req-card 第〇步+卡头 2026-10-21 退回令口径=美术设计闭合(
|
||||
- 取用:待办清单条目状态(文档设计已闭合+美术设计已闭合+已写卡)、§0 重立凭据、art-bible v3.31 §6.2、camp.md v2.2、camp-scene-prompts.md v1.2、`_终稿裁定-2026-10-31.txt`、布局草案-1280x800.html。
|
||||
- [ ] 复核 §2 F1–F20 全部 `file:line` 行号;四柜台界面清单与探针面清单(F8)逐点过——漂移即停卡核对,不猜行号。
|
||||
- [ ] 设计输入齐备检查:Q1(美术渠道=B 已裁)/Q2(参照物已补)/Q4(条带=甲)/Q5(三钮=甲)/Q6(过渡口径=甲)/Q8(出稿方式=甲)状态逐项核为已裁;**代码段开工门**(§0.3 四项)状态逐项核为已裁断销号(2026-11-01)——若发现裁断实况反转=L3 停机呈报,禁批内自补。
|
||||
- [ ] **新场景根句柄名+四子界面(forge/treasure/tree/codex view)+场景层 `LAYER_CONTRACT` 槽名定稿**(显式验收点,2026-11-01 双审补立——卡⑤ 只消费不改名);落 `ui_modals.gd` 成员面+`main_ui_build.gd` 装配点(卡⑤ v1.4 文件表同步列)。
|
||||
- [ ] **新场景根句柄名+四子界面(forge/treasure/tree/codex view)+场景层 `LAYER_CONTRACT` 槽名定稿**(显式验收点,2026-11-01 双审补立——卡⑤ 只消费不改名);句柄落 `ui_camp_modals.gd` 子容器(卡⑥ 前置建件,寻址 `ui.modals.camp.X` 二层)+`main_ui_build.gd` 装配点(卡⑤ v1.5 文件表同步列)。
|
||||
- [ ] **跨卡排序登记**:camp 断言基线建立在无 HUD 场景屏(本卡 T5);卡⑤ T2 落 HUD 后由卡⑤ 限 HUD 区显式更新+呈报(卡⑤ v1.4 §0 已对齐)。
|
||||
- [ ] 规格清单依赖核检:样张批规格清单产出时点 vs 本批排期——按 Q6 甲过渡口径执行(1280 工程档+烛光黄/木色,终档置换归反哺点),禁 T0 现场发挥。
|
||||
- [ ] 跑 `bash tools/static_scan.sh` 开发期局部读数(gdstyle 键=S13,闸件 `tools/gdstyle_gate.py`——原 `tools/gdstyle.sh` 不存在,v3.1 订正),记录 `camp_screen.gd`/`camp_shop_presenter.gd`/`main.gd` 当前行数、类变量、公开方法数;登记 S13 基线键(预期只降不升)。本步为最窄确认,不构成验收。
|
||||
@@ -311,7 +314,7 @@ req-card 第〇步+卡头 2026-10-21 退回令口径=美术设计闭合(
|
||||
- [ ] 锻造工坊/秘宝匣/天赋树/图鉴四界面自 CampOverlay 抽出为独立可开界面(`forge_view.gd`/`treasure_view.gd`/`tree_view.gd`/`codex_view.gd`,承载形态=§9 拍板;约束=写口链路零改、零新素材、界面逻辑复用);**五界面各带返回/关闭钮**(现四者共用 CampOverlay 底栏关闭钮随拆解消失,卡⑤ Q1 甲案前提即此)。
|
||||
- [ ] 按契约 11 拆分边界纪律落四界面:每界面写职责语句与单一变化原因(实现报告逐件一行)、有集体身份;禁凑计数袋、禁沿阈值轴硬拆;拆不出内聚单元=停卡呈报走豁免。
|
||||
- [ ] 生涯页入口自主菜单生涯钮改挂帐篷旁笔记本(CareerOverlay 本体零改);**生涯页返回钮文案禁含「营地」字样**(ui_struct_probe.gd:382 nojump 禁词表含「营地」——career_overlay.gd:27 现「返回」安全,改文案时避坑)。
|
||||
- [ ] 入口改挂后各界面开合走模态栈单口;层序入 `LAYER_CONTRACT`。
|
||||
- [ ] 入口改挂后各界面开合走模态栈单口;层序入 `LAYER_CONTRACT`;五枚句柄(场景根+四子界面)落 `ui_camp_modals.gd` 子容器(卡⑥ 前置建件,寻址 `ui.modals.camp.X` 二层)——禁平铺回 `ui_modals.gd`(S13 上限,2026-11-01 用户裁)。
|
||||
- [ ] **CampShopPresenter 承接面改造(契约 4)**:投影目标改线(五界面/场景根)、七写口尾刷新改路由(经营地刷新单口——**各写口尾→现开界面刷新+场景根 HUD 刷新一闸完成**)、open/close 编排从 campbtn 迁位到卡③ 进档动作、CampFlowContext 字段语义订正、探针缝保位(组合根薄委托缝,T0 复核现役行号——原引 main.gd:1163-1171 超出文件实长);`on_camp_attune_toggle` 口尾(:102)只 refresh_camp、不调 `_refresh_presentations` 保持原样。
|
||||
- [ ] 新建 `camp_refresh_bus.gd` 实现 `CampRefreshBus.refresh(camp_data: Dictionary) -> void`(T0 接口块);卡⑤ HUD 刷新挂此单口,非已退役的 `refresh_camp`;头注自陈「非 autoload、非信号广播——组合根单点推送」(防被读成已否决的全局事件总线形态,2026-11-01 双审注)。
|
||||
- [ ] **图鉴占位态(契约 5)**:独立界面壳=§9 第 2 条承载形态;文案照录 camp_overlay_view.gd:168 现行锁文,「柜台结构位预留」中『柜台』称谓随形态订正(L2 记录,零新文案);V6 断言锚定新视图占位标签。
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
# 需求卡片:营地模态句柄子容器批(UiCampModals 分域句柄容器 · camp_overlay 句柄迁移)· 营地交互重做卡⑥(前置基建)
|
||||
|
||||
- 版本:**v1.0(现行有效卡)**。留痕:2026-11-01 用户裁(迭代 47 机检预算互斥停机呈报裁决=最小改动先走:营地域六句柄落子容器,全量分域分家登记待办清单另立批)。
|
||||
- 来源:2026-11-01 用户裁决(**唯一事实源**:本卡 §2 现状实测+`design/engineering/code-conventions.md` §1.1 拆分判据;需求性工程条目证据指认=迭代 47 机检预算互斥停机呈报〔ui_modals.gd 类变量 14,卡④⑤ 平铺合计 19>S13 上限 15〕+用户裁决留痕,属重构基建、无设计线前置)
|
||||
- 归属:呈现层/组合根(`game/presentation/`)——营地交互重做卡⑥,**迭代 47 执行序第一位**(卡④ T3 落五句柄、卡⑤ T1 落浮窗句柄的本批前提)
|
||||
- 开工门:U0(随迭代 47 `/iter` 发令,无独立开工令)+零待裁点
|
||||
|
||||
## 1. 目标与完成定义
|
||||
|
||||
**目标**:给营地域模态句柄立独立子容器,使迭代 47 营地域六句柄(场景根+四子界面+Esc 浮窗)不再平铺进 `ui_modals.gd`——该文件类变量终值 14(不超 S13 上限 15),零基线登记;调度器/层序合同/登记口三件全局职责零改动。
|
||||
|
||||
**完成定义**:
|
||||
1. `ui_camp_modals.gd`(类名 UiCampModals,RefCounted)新件在役;`ui_modals.gd` 持 `camp` 成员一枚,`camp_overlay` 平铺成员删除——类变量 14→14;
|
||||
2. `camp_overlay` 句柄寻址迁移 `ui.modals.camp.overlay`,全仓引用(组合根+探针)改指完毕,现役营地探针段复跑绿(行为零变化的证明);
|
||||
3. `ui_registry.gd node()` 支持 `camp.*` 二层寻址(循现役 `modals.X` 一层形态顺延);
|
||||
4. `main_ui_build.gd` 装配赋值改经子容器;S13 读数 `ui_modals.gd`=14 不升;
|
||||
5. 批末按改动域选档全绿;三份 `reports/` 产出物写齐(T2)。
|
||||
|
||||
## 2. 现状事实(2026-11-01 实测;开工日 T0 复核)
|
||||
|
||||
| # | 事实 | 出处 |
|
||||
|---|---|---|
|
||||
| F1 | `ui_modals.gd` 类变量 14 枚=flow+13 模态句柄;gdstyle 直跑零命中(14≤15) | `game/presentation/ui_modals.gd:7-20` |
|
||||
| F2 | S13 类变量上限=15(gdstyle v0.4.0 默认 `quality/max-class-variables`,超即 NEW 键红);15 枚文件直跑零命中、20 枚合成文件实测 warn | `tools/gdstyle_gate.py`;停机呈报实测凭据 |
|
||||
| F3 | 卡④⑤ 原平铺写法合计 19>15(卡④ 净+4=场景根+四子界面−`camp_overlay` 退役;卡⑤ +1 浮窗)——迭代 47 机检预算互斥成因;2026-11-01 用户裁=子容器方案,禁基线特批 | 停机呈报-迭代47机检预算互斥-2026-11-01.md(iter47 worktree 在档,裁决已吸收本卡与卡④⑤) |
|
||||
| F4 | `camp_overlay` 句柄现役消费面=组合根开合+探针(screen_flow_probe 营地旗标/回退段、ui_click_probe 营地段)——迁移面以 T0 grep 实查清单为准 | `main.ui.modals.camp_overlay` 全仓引用位 |
|
||||
| F5 | `ui_registry.gd node()` 现经 `modals.X` 一层寻址;LAYER_CONTRACT 与 `apply_layer_contract` 与本批正交(句柄册结构≠场景树结构——子容器不挂树、零树序影响) | `game/presentation/ui_registry.gd`(node() 寻址段,T0 复核) |
|
||||
|
||||
## 3. 设计契约(红线,违反=L3 停机呈报)
|
||||
|
||||
🔴 **契约 1 · 行为零变化**:纯句柄搬家+容器新立;LAYER_CONTRACT/登记序/树序/`register_layer`/ModalFlow 零改动;现有探针断言**零改判据**(只改寻址)。
|
||||
|
||||
🔴 **契约 2 · 寻址唯一形态**:营地六句柄(含本卡迁入的 `camp.overlay`)寻址一律 `ui.modals.camp.X` 二层;禁平铺回 `ui_modals.gd`(卡④ T3 落五句柄、卡⑤ T1 落 esc 时同规——两卡契约区已载)。
|
||||
|
||||
🔴 **契约 3 · UiModals 只减不增**:本卡后类变量 14(flow+12 平铺句柄+camp 容器成员),卡④⑤ 阶段终值保持 14;任何新句柄平铺回顶层=S13 NEW 红=L3。
|
||||
|
||||
🔴 **契约 4 · 禁无效成员**:子容器内不预占句柄——本卡只迁 `camp_overlay` 一枚实件;五枚新句柄随卡④ T3 创建视图时落、esc 随卡⑤ T1 落;禁空占位凑结构(code-conventions §1.1 第⑤条同款)。
|
||||
|
||||
🔴 **契约 5 · 拆分边界纪律**(判据权威=code-conventions §1.1,本卡写条款不复制定文):本卡新建分域容器沿**职责轴**——UiCampModals=可命名领域概念「营地交互域模态组」(营地场景图+其子界面+其浮窗)、单一变化原因=营地交互重做;非凑计数袋;实现报告逐件一行承载职责语句。
|
||||
|
||||
## 4. 范围边界
|
||||
|
||||
**做**:UiCampModals 新件+`ui_modals.gd` 持 camp 成员+`camp_overlay` 句柄迁移+`node()` camp 二层寻址+装配与全仓引用改指。
|
||||
|
||||
**不做**(明示去向):
|
||||
- 其余 12 枚存量句柄分域分家、flow 自 UiModals 升格独立持有 → 待办清单「模态句柄册分域重构」条(2026-11-01 登记,另立批);
|
||||
- 卡④ 的五枚新句柄实装 → 卡④ T3;esc 句柄 → 卡⑤ T1;
|
||||
- LAYER_CONTRACT/模态栈语义任何改动 → 无(契约 1)。
|
||||
|
||||
## 5. 关联文档同步面
|
||||
|
||||
| 文档 | 关联点 | 同步义务 |
|
||||
|---|---|---|
|
||||
| `design/engineering/architecture/architecture.md` | 呈现层模块清单(UiCampModals 新件归属) | 反哺点 · 列清单(实现批禁写 `design/`) |
|
||||
| `待办清单.md`(仓库根) | 营地交互重做条实况补卡⑥路径;本卡来源裁决 | 已同步(2026-11-01 写卡段登记维护)——实现批禁写 |
|
||||
| `roadmap.md`(仓库根) | 迭代 47 行需求卡片列(卡⑥ 排第一)+预计周期 | 已换代(2026-11-01 编排入表,写卡/编排段动作)——实现批禁写 |
|
||||
| `game/tests/README.md` | 能力行:**零新增能力**(V1–V3 全落既有「模态覆盖层编排与输入锁」) | 已核:零增行;实现批禁写 |
|
||||
| `game/presentation/*`、`game/probe/*`、`game/tests/**` | 实施/断言本体 | 实施本体(可写) |
|
||||
|
||||
## 卡前·文件结构与职责(T0 前)
|
||||
|
||||
| 文件 | 职责 | 改动类型 | 落位 | 对照表行 |
|
||||
|---|---|---|---|---|
|
||||
| `game/presentation/ui_camp_modals.gd` | 营地域模态句柄子容器(RefCounted;本卡 1 枚 `overlay`,卡④⑤ 落满 6 枚;头注自陈禁平铺回 ui_modals) | 行为改动 | 新建 | V1 |
|
||||
| `game/presentation/ui_modals.gd` | 持 `camp` 成员(_init 构造);删除平铺 `camp_overlay` 成员 | 行为改动 | 复用既有(改) | V1 |
|
||||
| `game/presentation/main_ui_build.gd` | 装配赋值改经子容器(`modals.camp.overlay = …`) | 行为改动 | 复用既有(改) | V1 |
|
||||
| `game/presentation/ui_registry.gd` | `node()` 增 `camp.*` 二层解析分支(循 `modals.X` 先例) | 行为改动 | 复用既有(改) | V2 |
|
||||
| 全仓 `camp_overlay` 句柄引用位(组合根+探针,T0 grep 列清单) | 寻址改指 `ui.modals.camp.overlay`(断言零改) | 非行为改动(寻址改指) | 复用既有(改) | V1 |
|
||||
|
||||
## 落位与可复用性预检
|
||||
|
||||
| 新件 | 复用面(grep 同职责实现) | 唯一面(grep 同名同义标识符) | 分层与交互面 |
|
||||
|---|---|---|---|
|
||||
| `ui_camp_modals.gd` | grep 句柄分域容器/分组容器无先例;`UiModals` 本体=按技术角色平铺的注册面容器(职责不同);`ModalFlow`=调度器非句柄册 → 不能复用,须新建 | grep `UiCampModals`/`ui_camp_modals`/`camp_modals` 无第二处;营地句柄寻址唯一落点 | RefCounted 不挂树;`main_ui_build` 构造注入 `ui_modals.camp`;`register_layer`/LAYER_CONTRACT/树序零触碰 |
|
||||
|
||||
**非新增件说明**:`ui_modals.gd`/`main_ui_build.gd`/`ui_registry.gd`/探针=存量改造;**数据件/RNG/Core 零触碰**(纯呈现层簿记);Core 零 UI 依赖不因新件绕过。
|
||||
|
||||
## 实现规范预算
|
||||
|
||||
gdstyle v0.4.0 默认阈值:公开方法 ≤20、类变量 ≤15、单函数分支 ≤8、返回 ≤6。
|
||||
|
||||
| 触面 | ①公开方法数 | ②成员变量数 | ③迁移函数对账 | 结论 |
|
||||
|---|---|---|---|---|
|
||||
| `ui_camp_modals.gd` | 预期 ≤1(`_init`) | 预期 1(本卡)→6(卡④⑤ 落满) | 无迁入函数 | 三查通过 |
|
||||
| `ui_modals.gd`(存量) | 不适用 | 14→14(−平铺 `camp_overlay`+`camp` 容器成员) | 无 | S13 只降不升 |
|
||||
| `ui_registry.gd`(存量) | 不适用 | 不适用 | 无 | node() +1 解析分支,分支数 ≤8 |
|
||||
| `main_ui_build.gd`(存量) | 不适用 | 不适用 | 无 | 装配行改指 |
|
||||
|
||||
## 6. 任务卡
|
||||
|
||||
### T0 事实坐实(≈0.25d)
|
||||
|
||||
- 取用:§2 F1–F5、营地交互重做条(已编迭代 47)、卡④ v3.2/卡⑤ v1.5 契约 2。
|
||||
- [ ] 复核 §2 全部 `file:line`;grep 全仓 `modals.camp_overlay` 引用位列清单(改指面:组合根+探针逐处)。
|
||||
- [ ] 实读 `ui_registry.gd node()` 寻址形态,定 `camp.*` 二层解析的顺延写法(循 `modals.X` 先例,禁另造第三种寻址)。
|
||||
- [ ] 跑 `bash tools/static_scan.sh` 登记 S13 基线读数(`ui_modals.gd` 类变量 14)。
|
||||
- 产出:引用位清单、寻址形态结论、S13 基线读数。
|
||||
|
||||
### T1 实装与验证(≈0.25d)
|
||||
|
||||
- [ ] 新建 `ui_camp_modals.gd`(RefCounted;`var overlay: CampOverlay`;头注自陈「营地交互域句柄子容器,终态六枚,新营地句柄禁平铺回 ui_modals」)。
|
||||
- [ ] `ui_modals.gd`:持 `camp: UiCampModals`(`_init` 构造);删除平铺 `camp_overlay` 成员。
|
||||
- [ ] `main_ui_build.gd` 装配改指;全仓引用位按 T0 清单改指 `ui.modals.camp.overlay`(逐处留痕)。
|
||||
- [ ] `ui_registry.gd` `node()` 增 `camp.*` 二层解析分支。
|
||||
- [ ] 验证:现役营地探针段复跑绿(screen_flow_probe 营地段+ui_click_probe 营地段——断言零改只换寻址);`system_test.gd` V1c 合同树序链复跑绿(:94-106);gdstyle S13 读数 `ui_modals.gd`=14。
|
||||
- 产出:子容器在位+迁移绿证+引用位改指留痕表;卡④ T3/卡⑤ T1 按契约 2 落新句柄。
|
||||
|
||||
### T2 产出物落位卡(≈0.25d,末卡)
|
||||
|
||||
- [ ] 里程碑步出口跑一次改动域全套闸:`bash tools/run_all_gates.sh --code`;回执 `all_green=true`;波内修复只做出红最小单元最窄确认。
|
||||
- [ ] 独立验收审计(未参与实现的会话/子代理),产出 `reports/iter<N>-验收审计-<日期>.md`;未过禁合并。
|
||||
- [ ] 合并前写齐三份 `reports/`:实现报告/反哺点清单(§5 每条有落点)/验收审计。
|
||||
- 产出:三份 `reports/` 齐全+闸全绿+审计通过;合回后本地 CI 全量复验。
|
||||
|
||||
**估时合计 ≈0.75d**(T0 0.25+T1 0.25+T2 0.25)。
|
||||
|
||||
## 7. 验证闸:改动—验收对照表
|
||||
|
||||
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| V1 句柄迁移零行为漂移 | `ui_camp_modals.gd` 新件;`ui_modals.gd` 持 camp/删平铺成员;`main_ui_build.gd` 装配改指;全仓引用改指 | `screen_flow_probe.gd:_ready`(营地段)+`ui_click_probe.gd:_ready`(营地段)〔句柄子容器批 V1〕 | 探针 | 现役营地探针段复跑(断言零改、寻址新) | 全段绿=行为零变化证明;改指后全仓 grep 零 `modals.camp_overlay` 平铺寻址残留(静态判据) | 既有:模态覆盖层编排与输入锁 |
|
||||
| V2 层序合同零漂移 | `ui_registry.gd` node() 扩展 | `system_test.gd:_ready`(V1c 合同树序链 :94-106 复跑)〔句柄子容器批 V2〕 | 系统测试 | LAYER_CONTRACT 单一事实源 | 树序链绿=合同与落位零漂移(子容器不挂树、零树序影响) | 既有:模态覆盖层编排与输入锁 |
|
||||
| V3 S13 读数 | `ui_modals.gd` 类变量 14 | gdstyle S13 读数(T1 验证步留痕)〔句柄子容器批 V3〕 | 静态读数 | `bash tools/static_scan.sh` | `ui_modals.gd` 类变量=14(基线键零上升) | 既有:模态覆盖层编排与输入锁 |
|
||||
|
||||
**测试方式两分法**:V1/V2 机检自动化;V3 静态读数留痕(gdstyle 基线机制域内)。**测试削弱申报:零削弱**(断言零改判据,只换寻址)。**独立验收审计**:合并前由未参与实现的会话/子代理执行(四件事口径同 test-conventions §8.7),报告落 `reports/iter<N>-验收审计-<日期>.md`,未过禁合并。**闸口径**:轻闸每卡出口自跑;批末 `--code` 关联档全绿才合并;MC 零跑(零数值零行为)。回归措辞按模板:里程碑步出口一次全套闸,波内修复只跑红件。
|
||||
|
||||
## 8. 异常分级
|
||||
|
||||
- **L1(自救一次)**:改指拼写、探针寻址写法、node() 解析分支写法、manifest 登记遗漏。
|
||||
- **L2(记录继续;同一红连续三次升 L3)**:行数较 T0 预期漂移但 S13 键不升。
|
||||
- **L3(立即停卡写报告等用户)**:迁移后任一现役营地断言红且非寻址成因(=行为被意外触碰);机检预算互斥(`ui_modals.gd` 类变量被迫>14、或子容器被塞入非营地句柄=拆分边界破)——停卡退回写卡段,禁造第三条路。
|
||||
|
||||
## 9. 代拍板白名单(超清单必呈报)
|
||||
|
||||
1. `node()` camp 解析的具体实现形态(match/字典——循现役先例域内)。
|
||||
2. 子容器头注措辞(契约 4 自陈内容域内)。
|
||||
|
||||
超出必须呈报:寻址形态、文件落位、契约数字、句柄归属。
|
||||
|
||||
## 10. 待裁点:零待裁点,开工门=U0(随迭代 47 发令)
|
||||
|
||||
**零待裁点。** 2026-11-01 用户裁留痕:最小改动=本卡+卡④ v3.2/卡⑤ v1.5 落子容器;全量分域句柄分家=待办清单「模态句柄册分域重构」条(另立批,不属迭代 47)。
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
|
||||
- **阶段**: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 规划、退回待设计,待美术/设计定稿后重新立卡)。
|
||||
- **下一步**:迭代 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 规划、退回待设计,待美术/设计定稿后重新立卡)。
|
||||
|
||||
## 里程碑时间线
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
| 迭代 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 个工作日 | — |
|
||||
| 迭代 47 | 待开工 | reports/需求卡片-营地场景图新建批-2026-10-18.md<br>reports/需求卡片-ESC浮窗与营地顶栏批-2026-10-18.md | 2026-11-01 | ≈14.25 个工作日〔用户特批 2026-11-01 超 10 个工作日〕 | — |
|
||||
| 迭代 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 个工作日〕 | — |
|
||||
|
||||
- 迭代 38 收口为带红合并〔用户特批 2026-10-26〕:09 静态扫描 S13 gdstyle 恶化 2 条经批准记入基线存量红(git 提交 c4c69701),卡② 停卡退上游,处方已于 2026-10-26 修订定稿 v1.3(git 提交 b3ea7532),随「gdstyle 存量债全量清偿」条目波 7 待编排。
|
||||
- 迭代 39 收口为带红合并〔用户特批 2026-10-27〕:02 EV 锚 goblin 0.9148∉[1.00,1.20](触发器批有意行为改动,fp f74b9a48ef4a)已随 EV 锚重锚批换带归绿(git 提交 ba5105aa);08d 生涯.md:55 行号漂移已随 2026-10-28 批后收尾反哺落文修复归绿。三卡拆分后终局 gdstyle 恶化 2 条(battle_orchestrator max-file-length、level_map_screen max-class-variables)归迭代 40 卡①还债与迭代 41 存量债序列。
|
||||
|
||||
@@ -448,11 +448,20 @@
|
||||
|
||||
**实况**:2026-10-17~18 需求讨论澄清会话产出结论文档,用户令按工作内容维度拆卡、卡片不预占迭代号。五卡已写(顺序=执行顺序):①存档制数据层改造批 ②主菜单三入口化批 ③选档界面新建批 ④营地场景图新建批 ⑤Esc 浮窗与营地顶栏批(各卡估时与内容见卡片自身)。三道复核:grilling 子 Agent 对抗审查(五卡各一)→v1.1;用户裁定「事项按推荐的来」→v1.2;用户两次订正(**卡④留在批内不踢出**;前置归用户自立批,Agent 不代跑不代产——曾越权起草的点选反馈设计稿 v0.1 已撤回删除)→卡④ v2.2;**卡④ 2026-10-21 用户令退回美术设计段、2026-10-31 用户令据 req-card 第〇步重立为 v3.0 现行有效卡(美术设计已闭合=样张过审+art-bible 条款版本 v3.24 §6.2)**。①②③⑤ 零待裁点可编工程波次:②③ 硬耦合同波(「进入存档」钮落点=选档界面),① 是 ③ 前置;⑤ 随 ④ 代码波同行。Alpha 出口裁决(2026-10-21 用户裁):五卡整体列入 Alpha——08「三 · 界面」已开条目,Alpha 出口依赖五卡完工与卡④三个用户侧前置销号。**工程波次一已落地(2026-10-22)**:卡①②③ 随迭代 33 实现批合回 master(合并提交 ebf40947/5c2a7bcf/508f190b,总收口 6e8f72b2),三卡需求卡片与批次产出物已按「吸收即死」退役(设计口径已吸收进 存档序列化.md/生涯.md/camp.md/08-Alpha版本标准.md v1.13/art-bible.md v3.18,反哺落文凭据=文档批 git 提交 1864f157+9f7b3e8a);卡④(营地场景图)退回美术设计段待重立卡、卡⑤(Esc 浮窗)随卡④ 代码波同行,两卡未编排——编入哪一迭代由用户经迭代编排段发令。关联文档:
|
||||
- 设计澄清定稿:reports/需求澄清-营地交互重做-2026-10-18.md(v1.0:目标体验原话/目标结构树+纵深稿/10 条交互裁决/验收口径/切批原则/遗留待裁)
|
||||
- 卡④:reports/需求卡片-营地场景图新建批-2026-10-18.md(**v3.0 现行有效卡**,2026-10-31 用户令据 req-card 第〇步重立=美术设计已闭合;样张过审+art-bible 条款版本 v3.24 §6.2,见代码段开工门)
|
||||
- 卡⑤:reports/需求卡片-ESC浮窗与营地顶栏批-2026-10-18.md
|
||||
- 卡④:reports/需求卡片-营地场景图新建批-2026-10-18.md(**v3.2 现行有效卡**,2026-10-31 重立 v3.0、2026-11-01 双审修订 v3.1、同日机检预算裁决修订 v3.2=营地六句柄落 ui_camp_modals.gd 子容器;样张过审+art-bible v3.31 §6.2,开工门已全部销号)
|
||||
- 卡⑤:reports/需求卡片-ESC浮窗与营地顶栏批-2026-10-18.md(**v1.5 现行有效卡**,2026-11-01 双审修订 v1.4、同日机检预算裁决修订 v1.5)
|
||||
- 卡⑥(前置基建):reports/需求卡片-营地模态句柄子容器批-2026-11-01.md(**v1.0**,2026-11-01 用户令立——营地模态句柄子容器 UiCampModals+camp_overlay 句柄迁移,迭代 47 执行序第一位)
|
||||
|
||||
**代码段开工门(/iter 闸门)**:卡④ 已重立为 v3.0 现行有效卡(美术设计已闭合=样张过审 2026-10-31+art-bible 条款版本 v3.24 §6.2,据 req-card 第〇步);原「美术设计闭合后重立卡,再谈编迭代」判据已满足,可编迭代;**重立卡判据=卡头 v2.3 用户令「美术设计闭合(样张过审+art-bible 条款版本)后重立卡,再谈编迭代」**。前置登记(P1–P5 属代码段开工门,非重立卡前置):P1 美术渠道(**2026-10-22 已裁=B 插画级新产**,✦ 渠道作者自跑远程生图管线;规格沿用 art-bible §8.1/§8.2 既有裁决);P2 像素规格(Q6 甲过渡口径已裁,执行归用户线);P3 点选反馈设计稿(用户线,未受命开工;Agent 曾越权起草 v0.1,已按用户令撤回删除;**代码段开工门**);P4 参照物(**2026-10-23 已补**=artwork/2026-10-23-营地场景/Gemini_Generated_Image_ykrc0nykrc0nykrc.jpg,已进 camp-scene-prompts.md §1 风格参考图表、与纵深稿对表、围墙结构冲突已呈报;参照物是参考图,保留 artwork/ 不入游戏目录);P5 GDD/art-bible 落文(文档批,用户发令;**代码段开工门**)。**2026-10-31 用户裁定:保留全部待选稿、各素材第一张样本稿为终稿、「目前我看每个都还可以接受」=样张过审完成;art-bible 条款版本已落 v3.24 §6.2(camp.md v2.2/camp-scene-prompts v1.2/asset-path-map/art-assets-checklist/评估报告同步)——卡④ 重立判据两样已齐。** 终稿指定清单= artwork/candidates/_终稿裁定-2026-10-31.txt(用户准备在游戏内做最终审核)。重立卡已完成(v3.0 现行有效卡);以下为**代码段 `/iter` 开工门**(不阻塞编迭代):P3/P5 两项用户侧前置未销号(P2 Q6 甲口径已裁不阻塞写卡、终档置换归反哺点)、camp-scene-prompts §5 五个待裁点(帐篷尺寸/门扇高宽/布告板位置/描边颜色追认/环境子板色值)未清零;十张终稿仍为原始候选未做后处理未落 `game/assets/art/`,此属实现段 T1/素材录入(asset-ingest 第 3 步终稿拷入),用户 2026-10-31 令只生成素材不做后续,开工时另发令。
|
||||
**代码段开工门(/iter 闸门)**:卡④ 已重立为 v3.0 现行有效卡(美术设计已闭合=样张过审 2026-10-31+art-bible 条款版本 v3.24 §6.2,据 req-card 第〇步);原「美术设计闭合后重立卡,再谈编迭代」判据已满足,可编迭代;**重立卡判据=卡头 v2.3 用户令「美术设计闭合(样张过审+art-bible 条款版本)后重立卡,再谈编迭代」**。前置登记(P1–P5 属代码段开工门,非重立卡前置):P1 美术渠道(**2026-10-22 已裁=B 插画级新产**,✦ 渠道作者自跑远程生图管线;规格沿用 art-bible §8.1/§8.2 既有裁决);P2 像素规格(Q6 甲过渡口径已裁,执行归用户线);P3 点选反馈设计稿(用户线,未受命开工;Agent 曾越权起草 v0.1,已按用户令撤回删除;**代码段开工门**);P4 参照物(**2026-10-23 已补**=artwork/2026-10-23-营地场景/Gemini_Generated_Image_ykrc0nykrc0nykrc.jpg,已进 camp-scene-prompts.md §1 风格参考图表、与纵深稿对表、围墙结构冲突已呈报;参照物是参考图,保留 artwork/ 不入游戏目录);P5 GDD/art-bible 落文(文档批,用户发令;**代码段开工门**)。**2026-10-31 用户裁定:保留全部待选稿、各素材第一张样本稿为终稿、「目前我看每个都还可以接受」=样张过审完成;art-bible 条款版本已落 v3.24 §6.2(camp.md v2.2/camp-scene-prompts v1.2/asset-path-map/art-assets-checklist/评估报告同步)——卡④ 重立判据两样已齐。** 终稿指定清单= artwork/candidates/_终稿裁定-2026-10-31.txt(用户准备在游戏内做最终审核)。重立卡已完成(v3.0 现行有效卡)。**2026-11-01 用户令修订换代**:卡④ v3.1→v3.2、卡⑤ v1.4→v1.5(双审修订+机检预算裁决——营地六句柄落 ui_camp_modals.gd 子容器,卡⑥ 前置建件);**代码段 `/iter` 开工门已全部裁断销号**——P3 销号口径=camp.md v2.2 四态规格即设计稿;P5 销号口径=形态落文完成、实装回填归反哺点(camp-scene-prompts v1.3 §5 已改已裁+art-bible v3.31 §6.2 同步,本会话文档批落文);十张终稿后处理授权随 `/iter` 开工令一并生效(不再两次发令)。**开工门清零,迭代 47 可开工,执行序=卡⑥ 句柄子容器 → 卡④ → 卡⑤。**
|
||||
|
||||
**改动面**:文档+游戏代码+美术素材
|
||||
|
||||
**状态**:文档设计已闭合+美术设计已闭合+已写卡+已编迭代 47
|
||||
|
||||
#### 模态句柄册分域重构(2026-11-01 登记,来源=会话提及)
|
||||
|
||||
**实况**:重构证据=`game/presentation/ui_modals.gd:7-20`(类变量 14 实测)+停机呈报-迭代47机检预算互斥-2026-11-01.md(卡④⑤ 平铺合计 19>S13 上限 15)——按技术角色平铺 13 模态句柄+flow,迭代 47 营地域新增六句柄顶格 S13 类变量上限 15(2026-11-01 用户裁:最小改动先走——营地六句柄落 `ui_camp_modals.gd` 子容器,随迭代 47 卡⑥/卡④/卡⑤ 落地,本条只登记**全量分家**)。目标形态=存量句柄按域分组抽容器(局内 run 六件/菜单与跨语境归组)+ModalFlow 自 UiModals 升格独立持有;行为零变化、纯句柄搬家;返工面=全仓探针深员寻址+`ui_registry.gd node()` 寻址+`main_ui_build.gd` 装配。拆分判据权威=code-conventions §1.1(沿职责轴;营地子容器先例=`ui_camp_modals.gd`,随迭代 47 落地后为准)。
|
||||
|
||||
**改动面**:游戏代码
|
||||
|
||||
**状态**:待写卡
|
||||
Reference in new issue
Block a user