⑦T5: 收口批——出口报告落籍 design/qa/iter18-seed-exit-report-2026-10-07.md(完成定义六条判定/闸读数八行/过程红灯全披露四条/MC 零跑静态论证四点/代拍板追认单六项/实机目检清单 A-I 九节/台账+快照草稿供主控誊入)+roadmap 卡⑦状态列换代已落地未合并+生涯.md 调试角标迁宿主事实同步(开始层零调试入口+浮窗启动即开两屏角标再开——本项修订迭代15卡①P3甲的文档面落账)+main.gd 头注输入锁口径随批更新;批末重闸终局=冒烟 811/0+四探针全绿+ui_tune 专闸绿+run_all 17 套全绿+doc 三闸/熵增闸零新增+MC 零跑

This commit is contained in:
DKChan committed 2026-10-07 07:52:15 +08:00
1 parent c36daa6cae
commit 746507e753
4 files changed
+118 -5

No files matched your search

+5 -3
View File
@@ -6,13 +6,15 @@
## 一、信息架构
生涯入口是主菜单一级按钮,与营地平级(2026-10-06 用户裁,备选案与淘汰依据见任务书 P1)。现行主菜单按钮组由 `build_start_overlay` 构造(`game/presentation/ui_assembler.gd:104`):「冒险」组(继续上局 :138 / 开始冒险 :144)与「营地与系统」组(营地 :150 / 设置 :152 / 退出游戏 :156),另有右下角调试角标(DS_DEBUG=1 门控,与主按钮组非平级)。生涯按钮与营地平级同列一级;具体组帽归属与按钮排位属布局细节,归期一实装批(本文不画布局稿)。
生涯入口是主菜单一级按钮,与营地平级(2026-10-06 用户裁,备选案与淘汰依据见任务书 P1)。现行主菜单按钮组由 `build_start_overlay` 构造(`game/presentation/ui_assembler.gd:104`):「冒险」组(继续上局 :138 / 开始冒险 :144)与「营地与系统」组(营地 :150 / 设置 :152 / 退出游戏 :156)。生涯按钮与营地平级同列一级;具体组帽归属与按钮排位属布局细节,归期一实装批(本文不画布局稿)。
```
主菜单(开始覆盖层)
├─ 冒险组:继续上局 · 开始冒险
├─ 营地与系统组:营地 · 生涯(本提纲新增) · 设置 · 退出游戏
└─ 调试角标(DS_DEBUG=1 门控,非平级)
└─ 营地与系统组:营地 · 生涯(本提纲新增) · 设置 · 退出游戏
调试浮窗(迭代 18 卡⑦ P2 甲——入口迁宿主:开始层零调试入口;DS_DEBUG=1 会话浮窗启动即开,
战斗屏 HUD 与关卡地图屏各一枚「调试」角标可再开)
生涯(局外只读面)
├─ 跨局汇总(累计战绩与解锁总览)
@@ -0,0 +1,110 @@
# 出口报告:种子随机化与调试浮窗升级批(迭代 18 卡⑦)
> 批次:功能性呈现+组合根批(纯呈现与组合根接线,零数值改动=零 MC;核心层 rng_service/冒险 runner/存档 schema 零 diff)。
> worktree:`g-plan2-iter18-seed`(分支 `iter18-seed`,基点 = master adadf56)。
> 任务书:`design/research/任务书-种子随机化与调试浮窗升级批-2026-10-07.md`(v1.2 裁点全裁 P1-P6 甲,U0 已发)。
> 本报告按「吸收即死」纪律属中间文档,寿命=迭代寿命;结论同步见 roadmap 卡⑦行与本文 §十/§十一(台账与快照草稿,供主控誊入 active.md——active.md 本批零触碰)。
## 一、完成定义六条逐条判定(任务书 §1.2)
| # | 判定项 | 判定 | 依据 |
|---|---|---|---|
| 1 | 非首次冒险+种子框空 → 主种子随机;同种子行为逐位不变 | ✅ | `_seed_value()` 三分单点(main.gd):空/非法框×非首局(存档布尔 is_first_adventure_done=true)→ 引擎全局熵 `randi()`;冒烟 811/0 两次(改前基线+批末)逐位同数=同种子确定性零漂移;探针⑩连抽 4 次不全等 42 断言绿 |
| 2 | 首局固定种子(P5 甲=42);显式整数全场景优先(含首局) | ✅ | 首局(新档 false)恒 42;显式合法整数第一优先(探针⑩:777 优先断言+⑧真实路径 master_seed==42 断言)。**随批抓获并修复:初版分支条件写反(首局随机/非首局 42)——探针钉死显式值故轻闸未暴露,⑩断言面价值实证(见 §四-3)** |
| 3 | 断点续玩逐位不变(存档 master_seed 回填路径零改动) | ✅ | `_resume_from_menu` 零触碰种子判定(bp 载 master_seed 直入 adventure.resume_adventure);ui_struct_probe ⑦resume 专项绿(合计 24 守卫断言原样) |
| 4 | DS_DEBUG=1 启动即开;对局中可开(P2 甲);遮挡按 P1 甲 | ✅ | `_ready` 尾 `_show_debug_overlay()`(探针①自设环境变量断言启动即开绿);两屏角标(战斗屏 HUD 右下角标对+地图屏顶栏)真实信号路径开窗(探针⑨绿);遮挡=ModalStack 登记制零机制改动(他模态开暂隐/关后恢复——探针⑥+ui_click 模态遮挡族断言绿) |
| 5 | 当局数据只读区块(P4 甲六项)数值与只读访问器逐项一致 | ✅ | 区块=种子(adventure.master_seed 现值,非 _seed_value 重算;非对局=RNG 服务现值,未播种显「—」)/关卡(adventure.level_index)/节点/HP/GP(runner 成文出口)/钥石(adventure.keystone);探针⑨六项值对断言绿;零写通路(喂入制 update_run_data,纯标签零信号连接零动效)+白名单外零连接巡检(连接数=10 全在册)绿 |
| 6 | ui_tune_probe 换代全绿;冒烟全量绿;MC 零跑 | ✅ | 专闸 ui_tune_probe exit=0(§三);冒烟 811/0;MC 零跑(§五静态论证) |
## 二、任务卡完成态(T0-T5)
| 卡 | 状态 | 提交/落点 |
|---|---|---|
| T0 | ✅ | worktree 基线复读:冒烟 811/0 三闸全过(=主控 master adadf56 实测同数);§2 逐条复核全数在案(modal 登记列表现值、DS_DEBUG 门控点、五路消费面、遮挡机制 F6 一致——S1 未触发);HEAD 时点=adadf56 |
| T1 | ✅ | 40fb4a5(C1 三分单点+种子框默认空+占位提示+五探针种子钉死+ui_click 断言改向;五探针=审计点名单三件+ui_probe/ui_struct 同病灶随批修复——`_debug.start_single` 第五路与冒险段同吃种子框) |
| T2 | ✅ | dd2c57c(输入锁防护全套+P2 甲角标迁宿主+开始层 dbgbtn 退役)+ 5b3a8fd(两处轻闸红修复:角标对 HBox 锚定改入树后延迟预设+struct overlap 滚动区跨界豁免) |
| T3 | ✅ | dd2c57c 同批(当局数据只读区块+`_current_master_seed()` 单点+旧 :1174 诊断种子重算冒充病灶改向+模态开合单口挂 `_sync_debug_overlay`);keystone 取数改向随 T4 批修(c36daa6) |
| T4 | ✅ | c36daa6(ui_tune_probe 断言面换代全绿+fx lambda 转命名方法+三分写反修复+钥石域修正) |
| T5 | ✅ | 本报告+roadmap 卡⑦状态列+生涯.md 文档同步(提交见 §九) |
## 三、闸读数(T0 基线 → 批末)
| 闸 | 基线(T0) | 批末 | 判 |
|---|---|---|---|
| 冒烟(run_smoke 全量) | 811/0 三闸全过 | **811/0 三闸全过**(零漂移=S2 确定性反证通过) | ✅ |
| ui_input_probe | 十七断言绿 | 十七断言绿(含 case⑯ 暂停角标真点击——角标对 HBox 锚定修复后复验) | ✅ |
| ui_click_probe | 问题=0 | done=true 问题=0(含 P2 甲迁宿主改向断言:开始层角标退役+DS_DEBUG 未设不默认开) | ✅ |
| ui_layout_probe | exit 0 | exit 0 | ✅ |
| ui_struct_probe / ui_contrast_probe(probe_gate 默认段顺带) | 绿 | 零红 / 12 对全绿 | ✅ |
| **专闸 ui_tune_probe** | 基线态(八段旧断言面,本批换代对象) | **换代后 exit=0 全链路 PASS**(①启动即开+树序新基准+⑧显式种子真实路径+开冒险关窗+⑨对局中可开/输入不锁/角标不置灰/两钮禁用/当局数据六项值对+只读巡检零非法连接+零动效+⑩种子三分) | ✅ |
| run_all(game/tests) | **17 套全绿**(批末补测——见 §六-1 环境备注) | **17 套全绿**(exit 0;ui_font_asset_test 经导入缓存刷新后 PASS) | ✅ |
| doc 三闸 | — | link 死链 2(奇物.md:130,存量=主区同源)/ gdd_lint 2 不通过(06/07 两文件,存量=iter17 移交面)/ term --strict 疑似现行 1(拔旗,06 存量)——**本批零新增**(本批唯一文档 diff=生涯.md 两处事实同步,lint 绿) | ✅(零新增口径) |
| 熵增闸 | — | design/diagrams 越界 ×1(存量=iter17 移交第 1 条,主区同红已实证) | 移交披露 |
| MC | — | 零跑(§五) | ✅ |
对拍口径注:冒烟 811/0 在 T0(adadf56)、T1 后(40fb4a5)、T2/P2/T3 后(dd2c57c)、批末(含全部修复)四时点同数——同种子行为逐位不变的直接反证。
## 四、L1/L2 修复记录(过程红灯全披露,均为断言口径或组合根码缺陷、非核心层)
1. **T1 后 ui_click 暂态红(预期内)**:断言先行(开始层角标退役断言在 T1 提交、P2 甲迁宿主在 T2 落码)——T2 落码即消,非缺陷。
2. **角标对零尺寸锚角(T2 首轮轻闸两红)**:容器(HBox)出树时最小尺寸缓存陈旧为 0,MINSIZE 预设算出零尺寸锚角→暂停角标悬出屏边→ui_input case⑯ 角标真点击不中;struct 侧=[debug] 屏 overlap 假阳(当局数据区块加高列表后,滚动区内容未剪裁矩形跨界与滚区外关闭钮相交=滚动态样貌)。修复=预设改入树后延迟调用+grow 向左上(5b3a8fd)+struct overlap 规则补滚动区跨界豁免(恰好一枚在 ScrollContainer 内才豁免,同滚区两钮真重叠照红)。
3. **🔴 `_seed_value()` 三分分支写反(T4 探针换代抓获)**:初版 `not is_first_adventure_done()` 时返回 randi()=首局随机/非首局 42,与 P5 甲相反。轻闸未暴露的原因=全部探针已钉死显式种子值(显式优先分支先行);⑩种子三分断言(首局空档恒 42/非首局连抽不全等 42)双红灯抓获,c36daa6 修复。**此为探针换代义务(任务书 T4)的直接产出——断言面先行的价值实证。**
4. **当局数据钥石取数域错(T4 换代抓获)**:`_debug_run_data` 原读 `runner.keystone`——LevelRunner 无 keystone 域(钥石账在 AdventureRunner)→ 运行期脚本错误中断探针 `_ready` 协程=探针永不退出(「挂死」表象,实为静默中断)。两次按挂起纪律处置(禁杀他卡进程、按命令行精确匹配仅杀本 worktree 探针进程、隔 60s 重试)后经实时输出定位,修复=改读 `adventure.keystone`(c36daa6)。
## 五、MC 零跑静态论证(任务书 §6——零跑批发起禁令遵守)
1. **玩法行为零变更**:核心层(rng_service/adventure_runner/level_runner/存档)零 diff(`git diff adadf56 HEAD --stat` 可证,12 文件全在 presentation/ + smoke/ + 文档)。RNG 消费点零增减——随机种子生成走引擎全局熵 `randi()`,不触碰 rng_service 封闭流(C3 豁免面:组合根建种子不进玩法 RNG 消费)。
2. **同种子逐位不变**:冒烟全量(含统一流黄金向量、确定性复放、断点续玩 400 局对拍既有断言)四时点 811/0 零漂移——「如需复放锚,固定种子冒烟即对拍面」的条件已满足且零锚作废。
3. **随机化本身只改「新冒险种子取值分布」**:非首局空框时从恒 42 变为 [0, 2^31) 均匀取值——这是本批的功能目标而非数值改动(无任何表值/当量/概率变化);种子空间的统计性质(通关率分布等)属 M4 数值批统一调整范畴(2026-10-06 用户令殿后,未排期),本批无取证义务。
4. 综上:无数值改动=零 MC(两入口铁规+MC 触发细则),无 MC 对拍基准变更。
## 六、存量问题移交(均非本批产生,基线同态实证)
1. **ui_font_asset_test 批末初跑 2/2 红=worktree 环境性存量**:worktree 拷入的 `.godot` 导入缓存缺字体 .ttf 导入产物(「No loader found」)。已在基线 adadf56 分离检出对拍复现(同 2/2 红)=与本批零因果;按 probe_gate 冷检出同款 `--editor --quit` 刷导入后 PASS、run_all 17 套全绿。**移交项=四个并行 worktree 若同样报此红,同款一条命令可解**;主区缓存态未检(本批未触碰主区)。
2. gdd_lint 存量红 2 文件(06/07)/ doc_link 死链 2(奇物.md:130)/ doc_term 拔旗 1(06)/ 熵增闸 diagrams 越界 1——全部=iter17 出口报告 §五同名移交项,本批零触碰零新增。
3. ui_click_probe 旧断言「DS_DEBUG 门控失守」已随 P2 甲改向(卡④ AC④ 的开始层入口形态退役,门控语义移两屏角标+启动即开)——设置与本地化.md v0.2 版本历史行保留历史记录不回改(历史 changelog 非现行语义)。
## 七、代拍板记录(白名单内决断,commit 留痕,实机目检可推翻——追认单)
| # | 项 | 决断 | 出处 |
|---|---|---|---|
| 1 | 种子框占位提示词 | 「留空=随机 · 首局恒 42」 | T1 40fb4a5 |
| 2 | 当局数据区块标题与行文案 | 标题「当局数据(只读)」;行名 种子/关卡/节点/HP/GP/钥石;HP 显示「当前/上限」;缺位显「—」 | T3 dd2c57c |
| 3 | 浮窗 desc 文案换代 | 「开发调试专用(DS_DEBUG=1 会话:启动即开;战斗屏/地图屏「调试」角标可再开)……」 | T3 dd2c57c |
| 4 | 角标落点形制微调 | 战斗屏=右下角「调试+暂停」HBox 并排(角距 16px、钮距 8px、暂停居角位——17卡③同形制不变);地图屏=顶栏暂停角标右侧 | T2 dd2c57c |
| 5 | 当局数据区块位次 | 列表首位(胜利演出区块之前——当局速查置顶) | T3 dd2c57c |
| 6 | 断言编号与文案 | ui_tune_probe ①-⑩ 段(⑨=对局中可开+当局数据+只读巡检、⑩=种子三分);struct overlap 跨界豁免规则文案 | T4 c36daa6 |
## 八、实机目检清单(唯一硬人闸——DS_DEBUG=1 全流程)
前置:以 `DS_DEBUG=1` 环境变量启动游戏(真实档或测试档均可)。
- [ ] A 启动即开:主菜单出现悬浮「调试」浮窗,菜单本身可见可点(浮窗悬浮其上);开始菜单**无**「调试」角标(已迁宿主)。
- [ ] B 启动菜单直接点「调试 · 连续关卡两层」→ 浮窗收起 → 两层调试对局正常开打。
- [ ] C 对局中开合:战斗屏右下角「调试」角标点亮(DS_DEBUG 会话)→ 点击开浮窗 → 棋盘变暗但**关窗后立即可挖**(无锁死);浮窗开着时「暂停」角标**不置灰**可点(点开暂停层时浮窗暂隐、暂停关闭后浮窗自动恢复)。
- [ ] D 当局数据一致性:对局中开浮窗,六项(种子/关卡/节点/HP/GP/钥石)与实际局况一致;发生战斗/挖格/入账后重开浮窗数值随动。
- [ ] E 种子查看位:当局数据「种子」值 = 本局实际种子(DS_DEBUG 会话首局=42;非首局关浮窗开局后重开核对为随机值,非 42 即达意)。
- [ ] F 对局中按钮禁用态:对局中开浮窗,「运行模拟」与「调试·连续关卡两层」两钮置灰;回开始菜单(终局返回)后开浮窗两钮恢复可点。
- [ ] G 种子框行为(非首局档):空框点「开始冒险」→ 当局数据种子为随机值;手填 777 → 种子=777;断点续玩 → 种子=存档原种子。
- [ ] H 地图屏角标:关卡地图停点顶栏「调试」角标点亮可点(浮窗开时选路照常,关窗不扰动选路态)。
- [ ] I 玩家 UI 零变化确认:不开 DS_DEBUG 启动 → 全流程与改前观感一致(零调试元素、零种子露出)。
## 九、提交哈希清单(worktree 内全部)
| 提交 | 内容 |
|---|---|
| 40fb4a5 | ⑦T1:种子三分判定单点+种子框默认空+占位+五探针种子钉死+ui_click 断言改向 |
| dd2c57c | ⑦T2:输入锁死防护+P2 甲角标迁宿主+T3 当局数据只读区块(三件互锁一批) |
| 5b3a8fd | ⑦T2修复:角标对锚定入树后延迟预设+struct overlap 滚动区跨界豁免 |
| c36daa6 | ⑦T4:ui_tune_probe 断言面换代全绿+三分写反修复+钥石域修正+fx 命名方法 |
| (收口提交) | ⑦T5:出口报告+roadmap 卡⑦状态列+生涯.md 文档同步+main.gd 头注口径更新 |
## 十、台账条目草稿(供主控誊入 active.md——本批未触碰 active.md)
> 卡⑦(种子随机化+调试浮窗升级批)落地(2026-10-07,worktree g-plan2-iter18-seed,分支 iter18-seed,基点 adadf56,五提交 40fb4a5/dd2c57c/5b3a8fd/c36daa6/收口)。四件交付:①新冒险主种子三分随机化——判定单点 `_seed_value()`(显式合法整数全场景优先含首局/首局存档布尔判定恒 42〔P5 甲〕/非首局空框引擎全局熵 randi() 不走 rng_service 封闭流);种子框默认文本 42 改空+占位提示「留空=随机 · 首局恒 42」。②调试浮窗升级 P1-P6 甲全落——DS_DEBUG=1 启动即开(P3)+入口迁宿主两屏角标(战斗屏 HUD 右下「调试+暂停」标对+地图屏顶栏,P2 甲,开始层角标退役)+遮挡维持 ModalStack 登记制(P1 甲)+当局数据只读区块六项(种子=adventure.master_seed 现值〔诊断转储同病灶 :1174 随批改向 `_current_master_seed()` 单点〕/关卡/节点/HP/GP/钥石,喂入制零写通路零动效)+对局中开窗配套(输入锁/暂停角标判据改 has_open_excluding 排除式防「默认开×遮挡复活×has_open」棋盘锁死——审计🔴防线;对局中批量模拟与两层调试入口禁用+守卫兜底)。③探针面换代——ui_tune_probe 断言面 ①-⑩ 段换代全绿(启动即开/对局中可开+S1+ 停机点回归/当局数据六项值对/只读巡检零非法连接/零动效/种子三分单点断言),五探针种子钉死显式值(审计🔴——含 ui_probe/ui_struct 审计名单外同病灶两件随批修复)。④闸面——批末重闸全绿:冒烟 811/0(四时点零漂移=确定性反证)+四探针+run_all 17 套+doc 三闸/熵增闸存量零新增+MC 零跑(静态论证随出口报告)。过程红灯全披露随出口报告 §四(含 🔴 `_seed_value` 三分分支写反由探针换代抓获修复、钥石域错致探针静默中断的「挂死」归因);存量移交两项(ui_font_asset_test 系 worktree 导入缓存缺字体产物、基线对拍复现非本批因果+一条命令可解;doc/熵增存量面同 iter17)。人闸=DS_DEBUG=1 实机全流程目检(清单随出口报告 §八)。出口报告=`design/qa/iter18-seed-exit-report-2026-10-07.md`。
## 十一、快照草稿(供主控誊入 active.md「当前状态快照」节)
> 迭代 18 卡⑦(种子随机化与调试浮窗升级)已落地待收口:worktree g-plan2-iter18-seed 全部提交(未合并、未 push),批末重闸全绿(冒烟 811/0+ui_input/ui_click/ui_layout/ui_struct/ui_contrast/ui_tune 全绿+run_all 17 套+doc 三闸与熵增闸零新增存量+MC 零跑)。下一步=①用户实机人闸(DS_DEBUG=1 目检清单见 design/qa/iter18-seed-exit-report-2026-10-07.md §八)→②主控合并落回 master+主区全量复跑→③active.md 快照/台账誊记(草稿在出口报告 §十/§十一)。代拍板追认单六项在出口报告 §七(种子框占位词/区块文案/角标落点/断言编号等——目检可推翻)。并行四卡(③④⑤与本文卡)互不阻塞;卡⑦与⑥收官批零耦合。
终态 = worktree 内全部提交,**未合并、未 push**(合并落回 master 由用户/编排会话执行)。