merge: 初始展开收窄批T0-T8全落(迭代14①号卡;S1停机呈报用户裁方案A;冒烟767/0)
This commit is contained in:
commit
85dc9afe7d
9 files changed
+179
-34
No files matched your search
@@ -127,6 +127,16 @@
|
|||||||
- **红灯信号**:标旗 rush 复发(首轮全标旗不挖——δ 与完美排雷 ×2 叠加通胀是既有联动面:旗溢价三件套 δ↔p_perfect↔ap_per_round 同窗检算,难度曲线与Boss 调参联动表在册)。
|
- **红灯信号**:标旗 rush 复发(首轮全标旗不挖——δ 与完美排雷 ×2 叠加通胀是既有联动面:旗溢价三件套 δ↔p_perfect↔ap_per_round 同窗检算,难度曲线与Boss 调参联动表在册)。
|
||||||
- **结论回流**:体感 → 本条目记录;数值终值(δ 值与 ×1.5 档留后手)归调参批,不在试玩现场改数。**判式换代文本(行动经济 F1 条款3/战斗结算 验收标准/难度曲线与Boss 联动表三处修订稿)随批呈用户人闸**——追认单随出口报告。
|
- **结论回流**:体感 → 本条目记录;数值终值(δ 值与 ×1.5 档留后手)归调参批,不在试玩现场改数。**判式换代文本(行动经济 F1 条款3/战斗结算 验收标准/难度曲线与Boss 联动表三处修订稿)随批呈用户人闸**——追认单随出口报告。
|
||||||
|
|
||||||
|
### ⑬ 初始展开收窄体感(2026-10-05 初始展开收窄批随批登记——迭代14①号卡;任务书 §T8 四信号组)
|
||||||
|
|
||||||
|
- **机制一句**:开局免费展开(R₀)从「一口气开掉约 2/3 板」收窄——剃雷域从全域 flood 缩到出生 5×5(shave_ring_radius=1),另加生成期 R₀≤cap 重掷闸封顶(10×10≤45 / 12×12≤43 / 13×13≤51 / 14×14≤59)。实测开局免费展开均值:10×10 68.6→39.7 格、12×12 83.2→37.9 格。
|
||||||
|
- **对症信号(「开一大片」体感)**:开局第一挖还会不会「唰一下开掉大半张图」?预期=开场仍是出生区连锁、但明显比以前克制;「开了片面积」的失控感是否消退。
|
||||||
|
- **节奏信号(单板停留时长)**:单块雷图的挖掘轮数/停留时长变化(免费信息变少 → 每板要多挖几格才有全图视野)——是变紧凑了还是变拖沓。
|
||||||
|
- **策略信号(连锁与微光预读)**:玩家是否更依赖读数字推雷/类型微光预读(免费视野少了,推理工具的使用率应上升)。
|
||||||
|
- **迷雾联动信号(记忆态使用率)**:视野外扩道具(魔法提灯 +2)与记忆态(暗淡已见格)的使用频率变化。
|
||||||
|
- **红灯信号**:开局连续多板几乎无免费展开(R₀ 常年 ≈9-15,体感「开局一片黑」);或可推理率体感骤降(数字不够推)。前者=剃雷半径 r 回调面(P1 旋钮 [0,2]),后者归 S1 相变警戒复测。
|
||||||
|
- **结论回流**:体感 → 本条目记录;参数终值(r 0/1/2、cap 收紧路径 45→40 等)归 P1-P3 拍板面(读数后置,MC 四带复算挂 07 现行义务),不在试玩现场改数。
|
||||||
|
|
||||||
## 验收读数重测义务(履行留痕 + 现行义务)
|
## 验收读数重测义务(履行留痕 + 现行义务)
|
||||||
|
|
||||||
**已履行**(按序换代,旧读数各随其批作废留痕不入本单):①验收读数重测批(2026-09-19——Boss 单独出列/承伤带/通关率基线全量重测,硬化翻倍期·乏力死效果期·充能期旧读数作废);②迭代 5 基线重测(统一随机流后 MC+verifier 双窗);③**数值修复批新尺重测(2026-10-01)**——模拟档位重构后全量重测,新锚 `sim-data/runsum_numfix_final_n200_20261001.jsonl`,全旧带作废只测不判([numfix 报告](../qa/numfix-newruler-readings-2026-10-01.md));④**迭代 10 奖励重构批重锚(2026-10-01)**——四代锚 77000/78000/79000/80000(改前/重构后/共享池后/掷定前置后,各 400 局),普通 L1 41.8%/L2 10.2% 带内([读数报告](../qa/m3-iter10-clear-rate-readings-2026-10-01.md));⑤**T19 真人标定局收口(2026-10-03 用户裁)**——有效局 2(1 通关 1 死于 L3 首战,[读数报告](../qa/t19-real-playtest-readings-2026-10-02.md)),用户裁定**佐证级收口不再补局**;k 预期带同日立(**正常 >0.5、预警 <0.3**),字段随 81000 重锚入库后补算终值。
|
**已履行**(按序换代,旧读数各随其批作废留痕不入本单):①验收读数重测批(2026-09-19——Boss 单独出列/承伤带/通关率基线全量重测,硬化翻倍期·乏力死效果期·充能期旧读数作废);②迭代 5 基线重测(统一随机流后 MC+verifier 双窗);③**数值修复批新尺重测(2026-10-01)**——模拟档位重构后全量重测,新锚 `sim-data/runsum_numfix_final_n200_20261001.jsonl`,全旧带作废只测不判([numfix 报告](../qa/numfix-newruler-readings-2026-10-01.md));④**迭代 10 奖励重构批重锚(2026-10-01)**——四代锚 77000/78000/79000/80000(改前/重构后/共享池后/掷定前置后,各 400 局),普通 L1 41.8%/L2 10.2% 带内([读数报告](../qa/m3-iter10-clear-rate-readings-2026-10-01.md));⑤**T19 真人标定局收口(2026-10-03 用户裁)**——有效局 2(1 通关 1 死于 L3 首战,[读数报告](../qa/t19-real-playtest-readings-2026-10-02.md)),用户裁定**佐证级收口不再补局**;k 预期带同日立(**正常 >0.5、预警 <0.3**),字段随 81000 重锚入库后补算终值。
|
||||||
|
|||||||
@@ -95,10 +95,11 @@
|
|||||||
|
|
||||||
| 反退化规则 | 内容 |
|
| 反退化规则 | 内容 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 先布后删 | 先把 N 颗雷在"全格 − 出生 3×3"上布完,再把开局免费展开域外扩一圈内的雷移除——只减不增、不重投、无迭代,必然终止且可复现;实际雷数与 N 的差额随指标观测 |
|
| 先布后删 | 先把 N 颗雷在"全格 − 出生 3×3"上布完,再把剃雷域内的雷移除——只减不增、不重投、无迭代,必然终止且可复现;实际雷数与 N 的差额随指标观测。**剃雷域已收窄(2026-10-05 初始展开收窄批)**:从「开局免费展开(flood)域∪外扩一圈」缩到「出生 3×3 ∪ 外扩 r 环」(切比雪夫距离 ≤1+r,r=shave_ring_radius 现行 1 → 5×5=25 格)——全域剃雷=开局免费展开巨大(10×10 板 R₀ 均值 68.6=板面 68.6%)的根因;收窄后开局免费展开=出生邻域剃雷诱发的自然连锁,均值降至板面约四成(10×10 实测 39.7) |
|
||||||
| 出生区安全 | 出生 3×3 与开局免费展开域内恒无雷;变异不落两域由布置段顺序保障(非本管线义务) |
|
| 出生区安全 | 出生 3×3 与开局免费展开域内恒无雷;变异不落两域由布置段顺序保障(非本管线义务) |
|
||||||
| 开局白给板拒绝 | 开局免费展开域不得覆盖全部安全格——等于即退化板,尝试弃用重试;运行期另有同义兜底不变式,归[排雷玩法](排雷玩法.md) |
|
| 开局白给板拒绝 | 开局免费展开域不得覆盖全部安全格——等于即退化板,尝试弃用重试;运行期另有同义兜底不变式,归[排雷玩法](排雷玩法.md) |
|
||||||
| 清图可达性 | 每个安全格都必须能从出生区沿安全格八向连通走到;带孤岛安全格的板判非法,不进降级候选 |
|
| 清图可达性 | 每个安全格都必须能从出生区沿安全格八向连通走到;带孤岛安全格的板判非法,不进降级候选 |
|
||||||
|
| R₀≤cap 重掷闸(2026-10-05 初始展开收窄批) | 每次尝试出板后实测自然 R₀(开局免费展开格数),超过该行 r0_max_cap 即整板作废同流重试——合法性先于质量评分(同白给板先例);全部尝试超阈 → 既有三分出口接受最不坏+非法产物标记诚实降级,玩家永不卡死;闸触发次数随指标集 r0_cap_rejected 观测(占比过高=剃雷半径与闸配比失衡信号) |
|
||||||
|
|
||||||
清图可达性与可推理率是两道独立的闸:合法性先查、质量分后算——一张"分高但通不了"的图没有意义。另一条推理前提也由本系统保证:数字恒真,每个非雷格的数字恒等于它的八邻雷数,整局推理都建立在这句话上。
|
清图可达性与可推理率是两道独立的闸:合法性先查、质量分后算——一张"分高但通不了"的图没有意义。另一条推理前提也由本系统保证:数字恒真,每个非雷格的数字恒等于它的八邻雷数,整局推理都建立在这句话上。
|
||||||
|
|
||||||
@@ -210,6 +211,8 @@
|
|||||||
| min_safe_count | int [1, 999] | 现行值见 board_gen.tres | 最小安全格数下限 |
|
| min_safe_count | int [1, 999] | 现行值见 board_gen.tres | 最小安全格数下限 |
|
||||||
| max_gen_attempts | int [1, 32] | 域 [1, 32],现行按行取值见 board_gen.tres | 生成-验证重试上限;受成本闸联合约束 |
|
| max_gen_attempts | int [1, 32] | 域 [1, 32],现行按行取值见 board_gen.tres | 生成-验证重试上限;受成本闸联合约束 |
|
||||||
| board_type | String,词表 {dungeon, underdark, deep_underdark} | 现行值见 board_gen.tres(词表 v1.1,2026-09-20 第三关内容批增补) | 图类型标签(玩家侧「地图类型」);域校验 = 词表成员检查 |
|
| board_type | String,词表 {dungeon, underdark, deep_underdark} | 现行值见 board_gen.tres(词表 v1.1,2026-09-20 第三关内容批增补) | 图类型标签(玩家侧「地图类型」);域校验 = 词表成员检查 |
|
||||||
|
| shave_ring_radius | int [0, 2] | 现行 1(board_gen.tres 全行) | 先布后删剃雷半径:剃雷域=距出生中心切比雪夫距离 ≤1+r 的格(r=1 → 5×5=25 格;r=0 即只剃出生 3×3 本身=无环剃雷)。**2026-10-05 初始展开收窄批新参数**(调参项非结构冻结) |
|
||||||
|
| r0_max_cap | int [出生格数 9, 板格数一半](护栏,违例加载期致命) | 现行按板形:10×10=45 / 12×12=43 / 13×13=51 / 14×14=59(board_gen.tres) | 自然 R₀(开局免费展开格数)上限闸=合法性门;超阈整板重掷、耗尽走三分出口。板面 30% 锚(30/43/51/59)经 S1 停机呈报用户裁上调:10×10→45(r=1 自然均值 39>30 结构性倒挂;其余行 30% 锚维持)。**2026-10-05 初始展开收窄批新参数** |
|
||||||
|
|
||||||
结构冻结(非调参项):键结构与每关深度 0 锚行、四阶段顺序(变异布置段 2026-09-20 已移出管线)、solver_rules、可推理率的合法信息源枚举、及格线域下限 0.85、成本闸常数(结构护栏,登记于 registry board_gen_table 条目,调整走文档修订)、先布后删语义。
|
结构冻结(非调参项):键结构与每关深度 0 锚行、四阶段顺序(变异布置段 2026-09-20 已移出管线)、solver_rules、可推理率的合法信息源枚举、及格线域下限 0.85、成本闸常数(结构护栏,登记于 registry board_gen_table 条目,调整走文档修订)、先布后删语义。
|
||||||
|
|
||||||
@@ -227,6 +230,8 @@
|
|||||||
- 降级诚实:零合法板照常出图,必带非法产物标记与最高级告警;进程不死锁,玩家界面得到诚实告知。
|
- 降级诚实:零合法板照常出图,必带非法产物标记与最高级告警;进程不死锁,玩家界面得到诚实告知。
|
||||||
- 加载期校验:布雷数下限、计数可行性、标签非空等违例组合加载期致命。
|
- 加载期校验:布雷数下限、计数可行性、标签非空等违例组合加载期致命。
|
||||||
- 黄金图回归:手工核验小板集的可推理率输出与登记整数对逐位相等(整数对比对,禁浮点容差);换生成参数(推理定义、信息源、定义版本号)必须重制向量并入版本库。
|
- 黄金图回归:手工核验小板集的可推理率输出与登记整数对逐位相等(整数对比对,禁浮点容差);换生成参数(推理定义、信息源、定义版本号)必须重制向量并入版本库。
|
||||||
|
- R₀≤cap 闸(2026-10-05 初始展开收窄批):每张出图自然 R₀ ≤ 该行 r0_max_cap(合法板),或带非法产物标记(accept_worst 诚实降级);闸触发次数入指标集 r0_cap_rejected。
|
||||||
|
- 剃雷域参数化(同批):剃雷域=出生中心切比雪夫 ≤1+shave_ring_radius 的方域,出图 ring_removed ≤ 域内候选雷格数 (3+2r)²−9;同种子布雷序列与收窄前逐位一致(零 RNG 消费变化)。
|
||||||
- 表实一致:配置表字段定义与 registry `board_gen_table` 条目一致。
|
- 表实一致:配置表字段定义与 registry `board_gen_table` 条目一致。
|
||||||
|
|
||||||
## 版本历史
|
## 版本历史
|
||||||
@@ -237,3 +242,4 @@
|
|||||||
| v0.2 | 2026-09-15 | 雾格残留清理:删除「待拍板」五项旧版失义条目(雾参数两字段与雾域跨字段校验、双判据与 inferability_core、雾相关生成约束、雾致清图预算增量两指标、黄金图向量的 core 整数对);验收标准「表实一致」条去掉指向该节的清理登记。参数表、五阶段管线与三分支出图等现行规则不变 |
|
| v0.2 | 2026-09-15 | 雾格残留清理:删除「待拍板」五项旧版失义条目(雾参数两字段与雾域跨字段校验、双判据与 inferability_core、雾相关生成约束、雾致清图预算增量两指标、黄金图向量的 core 整数对);验收标准「表实一致」条去掉指向该节的清理登记。参数表、五阶段管线与三分支出图等现行规则不变 |
|
||||||
| v0.3 | 2026-09-17 | 数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 data/tables/*.tres 与 registry),3 处失同步修正(雷密度、可推理率及格线、生成尝试上限——文档面旧 provisional 值与 board_gen.tres 现值不一致,改指路);成本闸 16384 改标注「结构护栏常数,登记于 registry board_gen_table 条目」,其余引用处指路;调参表「现行值」列整列指路化 |
|
| v0.3 | 2026-09-17 | 数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 data/tables/*.tres 与 registry),3 处失同步修正(雷密度、可推理率及格线、生成尝试上限——文档面旧 provisional 值与 board_gen.tres 现值不一致,改指路);成本闸 16384 改标注「结构护栏常数,登记于 registry board_gen_table 条目」,其余引用处指路;调参表「现行值」列整列指路化 |
|
||||||
| v0.4 | 2026-09-20 | **第三关内容批(与切片代码 / registry / 03-内容规模 / 难度曲线与Boss / 地形变异 同批,参数行值零改动)**:图类型词表 v1.0 → v1.1,增补第三值 deep_underdark(灰矮人矿道方向);正文词表句与调参表 board_type 行随批同步(L3 = deep_underdark)。[地图战斗资源](../战斗循环/地图战斗资源.md)的图类型差异化插槽句不随批动——clear_deep_underdark 启用仍为预留 |
|
| v0.4 | 2026-09-20 | **第三关内容批(与切片代码 / registry / 03-内容规模 / 难度曲线与Boss / 地形变异 同批,参数行值零改动)**:图类型词表 v1.0 → v1.1,增补第三值 deep_underdark(灰矮人矿道方向);正文词表句与调参表 board_type 行随批同步(L3 = deep_underdark)。[地图战斗资源](../战斗循环/地图战斗资源.md)的图类型差异化插槽句不随批动——clear_deep_underdark 启用仍为预留 |
|
||||||
|
| v0.5 | 2026-10-05 | **初始展开收窄批(迭代14①号卡 T7——甲乙混合,用户裁 D1-D5+S1 方案A)**:①反退化规则表「先布后删」行换代(剃雷域=出生 3×3∪外扩 r 环参数化,全域 flood 剃雷退役)+新增「R₀≤cap 重掷闸」行;②调参表 +2 行(shave_ring_radius [0,2] 现行 1 / r0_max_cap 护栏 [9,半板] 现行 45/43/51/59——10×10 经 S1 停机呈报用户裁上调 30→45);③验收标准 +2 条(R₀≤cap 闸 / 剃雷域参数化+ring_removed 量级);④改后结构读数入 registry initial_expansion_narrowing 条(R₀ 均值 39.7/37.9/42.8/46.6,收窄自 68.6/83.2;雷密度 19.2-21.6% <25% 相变线;inf 全行达标);玩法侧零改动(排雷玩法「初始展开恰等」验收原样为真);裸数字截断路否决退役(D3)不立文 |
|
||||||
@@ -175,6 +175,7 @@ entities:
|
|||||||
mvp_reference_rows: L1·D0 与 L2·D0 两参考行——**全部 provisional,仅 schema 自洽性证明,曲线数值归 难度曲线与Boss 调参所有权**;参考行现行值不列于本 registry,读 data/tables/board_gen.tres(2026-09-18 指路化收口——原 d0.10/t0.95/att16、d0.12/t0.92/att16 读数随切片 SLICE-TUNED 改值作废)。**2026-09-20 第三关内容批**:L3 战斗/Boss 节点 (3, 0/1/4/5/6/7/8) 七行精确铺满——板面 13×13 / Boss 14×14(「Boss 板 = 本关最大板形」纪律)、min_safe_count 70/82(~0.42 格占比外推)、max_gen_attempts 32/32、board_type=deep_underdark;行值全 provisional 归 难度曲线与Boss
|
mvp_reference_rows: L1·D0 与 L2·D0 两参考行——**全部 provisional,仅 schema 自洽性证明,曲线数值归 难度曲线与Boss 调参所有权**;参考行现行值不列于本 registry,读 data/tables/board_gen.tres(2026-09-18 指路化收口——原 d0.10/t0.95/att16、d0.12/t0.92/att16 读数随切片 SLICE-TUNED 改值作废)。**2026-09-20 第三关内容批**:L3 战斗/Boss 节点 (3, 0/1/4/5/6/7/8) 七行精确铺满——板面 13×13 / Boss 14×14(「Boss 板 = 本关最大板形」纪律)、min_safe_count 70/82(~0.42 格占比外推)、max_gen_attempts 32/32、board_type=deep_underdark;行值全 provisional 归 难度曲线与Boss
|
||||||
minesweeper_dual_containment: 双包含回验登记 排雷玩法 GDD——① 排雷玩法 实际展开域 ⊆ 棋盘生成 排除域(既有)② 棋盘生成 求解器初始态 ⊆ 排雷玩法 实际初始展开域(F1 注记④度量保真对偶)
|
minesweeper_dual_containment: 双包含回验登记 排雷玩法 GDD——① 排雷玩法 实际展开域 ⊆ 棋盘生成 排除域(既有)② 棋盘生成 求解器初始态 ⊆ 排雷玩法 实际初始展开域(F1 注记④度量保真对偶)
|
||||||
golden_vectors: 推理器黄金图回归向量协议(五类手工核验小板,整数对比对禁浮点容差,逐格信息源推导记录入版本库;换 solver_rules/信息源/metric_version = GDD 修订 + 向量重制)——数据配置 R2 先例同源
|
golden_vectors: 推理器黄金图回归向量协议(五类手工核验小板,整数对比对禁浮点容差,逐格信息源推导记录入版本库;换 solver_rules/信息源/metric_version = GDD 修订 + 向量重制)——数据配置 R2 先例同源
|
||||||
|
initial_expansion_narrowing: (2026-10-05 初始展开收窄批 T1-T3,迭代14①——D1-D5 已裁+S1 停机呈报用户裁方案A)两新参数:**shave_ring_radius**(int [0,2] knob 现行 1——剃雷域=距 spawn_center 切比雪夫距离 ≤1+r 的格,r=1→5×5=25 格;原「R₀ flood 域∪外扩 1 环」全域剃雷退役=开局开阔地巨大根因治理;零 RNG 消费变化,同种子布雷序列逐位一致)+ **r0_max_cap**(int 护栏 [出生格数 9, 板格数一半] 加载期致命;0=闸关 legacy 防御口径;现行按板形投值 **45**〔10×10〕/43〔12×12〕/51〔13×13〕/59〔14×14〕——板面 30% 锚**除 10×10 用户裁 S1 方案A 上调 30→45**:r=1 自然 R₀ 均值 39>30 锚结构性倒挂〔94% 尝试被拒、inf 0.976→0.719、常态 accept_worst 非法板〕,P1「上调若闸过频」预案字面执行;12×12/13×13 健康侧〔inf 达标、拒绝 42%<50% S1 线〕维持)。机制面:R₀≤cap 合法性闸(r0_cap_exceeded——合法性先于质量评分同 inv4 先例;超阈整板作废同流重试;耗尽走既有三分出口 accept_worst 诚实降级)+ metrics 增 r0_cap_rejected 尝试事实(占比=闸触发率读数)。改后结构读数(calibrate_boards 200 板/行,2026-10-05,种子 900000 系):R₀ 均值 39.7/37.9/42.8/46.6(改前 68.6/83.2——10×10 收窄 42%、12×12 收窄 54%)、尾部被闸精确截断(r0_max==cap 全行)、实际雷密度 19.2-21.6%(<25% 相变线;改前 12.9/15.7% 上浮=知情登记,联动四带复算归 T6)、闸触发率 22%/42%/42%/24%(全 <50%)、inferability 0.939/0.881/0.929/0.921 全行 ≥0.88。T6 MC 四带复算读数批后置(跑批待用户批准,07 挂单);**锚换代声明**:改前 R₀ 结构读数(68.6/83.2 等)与清图率历史锚只测不判
|
||||||
referenced_by: [排雷玩法, 战斗结算, 地图战斗资源, 难度曲线与Boss, 存档序列化]
|
referenced_by: [排雷玩法, 战斗结算, 地图战斗资源, 难度曲线与Boss, 存档序列化]
|
||||||
|
|
||||||
- name: minesweeper_event_surface
|
- name: minesweeper_event_surface
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat
|
|||||||
"min_safe": int(row.min_safe_count),
|
"min_safe": int(row.min_safe_count),
|
||||||
"max_attempts": int(row.max_gen_attempts),
|
"max_attempts": int(row.max_gen_attempts),
|
||||||
"board_type": String(row.board_type),
|
"board_type": String(row.board_type),
|
||||||
|
# 初始展开收窄批(迭代14① T1——两新参数;.get 缺省=legacy 调用方防御口径:shave_r=1 现行投值、
|
||||||
|
# r0_cap=0 闸关。正式表行全行投值,加载期校验在 BoardGenTable.validate)
|
||||||
|
"shave_r": int(row.get("shave_ring_radius", 1)),
|
||||||
|
"r0_cap": int(row.get("r0_max_cap", 0)),
|
||||||
}
|
}
|
||||||
var best_legal: BoardData = null
|
var best_legal: BoardData = null
|
||||||
var best_legal_score := -1.0
|
var best_legal_score := -1.0
|
||||||
@@ -38,6 +42,7 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat
|
|||||||
var attempts_used := 0
|
var attempts_used := 0
|
||||||
var accepted: BoardData = null
|
var accepted: BoardData = null
|
||||||
var accept_mode := ""
|
var accept_mode := ""
|
||||||
|
var r0_cap_rejected := 0
|
||||||
for k in range(1, params.max_attempts + 1):
|
for k in range(1, params.max_attempts + 1):
|
||||||
attempts_used = k
|
attempts_used = k
|
||||||
var b := _attempt(params, rng_stream, db)
|
var b := _attempt(params, rng_stream, db)
|
||||||
@@ -45,6 +50,9 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat
|
|||||||
if best_bad == null or _lex_less(badness, best_badness):
|
if best_bad == null or _lex_less(badness, best_badness):
|
||||||
best_bad = b
|
best_bad = b
|
||||||
best_badness = badness
|
best_badness = badness
|
||||||
|
# R₀≤cap 重掷闸触发计数(迭代14① T3——尝试事实,与合法性判定独立记录;占比=T5 闸触发率读数)
|
||||||
|
if int(params.r0_cap) > 0 and b.compute_r0().size() > int(params.r0_cap):
|
||||||
|
r0_cap_rejected += 1
|
||||||
if legality(b, params, db):
|
if legality(b, params, db):
|
||||||
var m: Dictionary = measure_inferability(b) # 求解器每合法板恰一次(O3 收口——此前重复调用两次)
|
var m: Dictionary = measure_inferability(b) # 求解器每合法板恰一次(O3 收口——此前重复调用两次)
|
||||||
var inf: float = m["inferability"]
|
var inf: float = m["inferability"]
|
||||||
@@ -66,7 +74,7 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat
|
|||||||
accept_mode = "accept_worst"
|
accept_mode = "accept_worst"
|
||||||
accepted.illegal_product = true
|
accepted.illegal_product = true
|
||||||
push_error("[棋盘生成] attempts 耗尽零合法——接受最不坏出图 + 非法产物标记(玩家永不卡死)")
|
push_error("[棋盘生成] attempts 耗尽零合法——接受最不坏出图 + 非法产物标记(玩家永不卡死)")
|
||||||
_finalize(accepted, params, attempts_used, accept_mode, db)
|
_finalize(accepted, params, attempts_used, accept_mode, db, r0_cap_rejected)
|
||||||
return accepted
|
return accepted
|
||||||
|
|
||||||
|
|
||||||
@@ -99,12 +107,16 @@ func _attempt(params: Dictionary, rng_stream: RandomNumberGenerator, db) -> Boar
|
|||||||
for i in range(0, mini(n_mines, domain.size())):
|
for i in range(0, mini(n_mines, domain.size())):
|
||||||
b.mines[domain[i]] = true
|
b.mines[domain[i]] = true
|
||||||
_compute_digits(b)
|
_compute_digits(b)
|
||||||
# 先布后删:0 格闭包(布后基准)外扩 1 环内的雷移除(只减不增、无迭代)
|
# 先布后删:剃雷域 = 距 spawn_center 切比雪夫距离 ≤1+r 的格(迭代14①收窄批 T2——原「R₀ flood 域∪
|
||||||
|
# 外扩 1 环」全域剃雷=开局开阔地巨大根因〔10×10 板 R₀ 均值 68.6=板面 68.6%〕;收窄后开阔地=
|
||||||
|
# 出生邻域外的自然 flood。r 读表 shave_ring_radius(r=1 → 5×5=25 格;r=0 即只剃出生 3×3)。
|
||||||
|
# 只减不增、无迭代语义不变;ring_removed 指标语义不变(现值变小=预期);零 RNG 消费变化——
|
||||||
|
# 同种子布雷序列逐位一致,仅移除域收窄。
|
||||||
|
var shave_r: int = int(params.get("shave_r", 1))
|
||||||
var ring := {}
|
var ring := {}
|
||||||
for c in b.compute_r0():
|
for c in b.all_cells():
|
||||||
for n in b.neighbors8(c):
|
if maxi(absi(c.x - b.spawn_center.x), absi(c.y - b.spawn_center.y)) <= 1 + shave_r:
|
||||||
if not ring.has(n):
|
ring[c] = true
|
||||||
ring[n] = true
|
|
||||||
var removed := 0
|
var removed := 0
|
||||||
for c in ring.keys():
|
for c in ring.keys():
|
||||||
if b.mines.has(c):
|
if b.mines.has(c):
|
||||||
@@ -300,6 +312,12 @@ func _legality_faults(b: BoardData, params: Dictionary) -> Array:
|
|||||||
var min_safe: int = int(params.get("min_safe", params.get("min_safe_count", 0)))
|
var min_safe: int = int(params.get("min_safe", params.get("min_safe_count", 0)))
|
||||||
if b.safe_cells().size() < min_safe:
|
if b.safe_cells().size() < min_safe:
|
||||||
faults.append("min_safe_short")
|
faults.append("min_safe_short")
|
||||||
|
# ⑤ R₀≤cap 重掷闸(迭代14①收窄批 T3——合法性先于质量评分,同 inv4 白给板先例;超阈整板作废
|
||||||
|
# 同流重试〔重试共用 board_gen 流,attempt 边界非 scope 事件〕;全部尝试超阈 → 既有三分出口
|
||||||
|
# accept_worst 诚实降级+非法产物标记(玩家永不卡死)。cap=0 = 闸关(legacy 调用方防御口径)
|
||||||
|
var r0_cap: int = int(params.get("r0_cap", 0))
|
||||||
|
if r0_cap > 0 and r0.size() > r0_cap:
|
||||||
|
faults.append("r0_cap_exceeded")
|
||||||
return faults
|
return faults
|
||||||
|
|
||||||
|
|
||||||
@@ -313,7 +331,7 @@ func _neighbor_mine_count(b: BoardData, c: Vector2i) -> int:
|
|||||||
|
|
||||||
# ==================== 产出上报(生成期指标集) ====================
|
# ==================== 产出上报(生成期指标集) ====================
|
||||||
|
|
||||||
func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode: String, _db) -> void:
|
func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode: String, _db, r0_cap_rejected: int = 0) -> void:
|
||||||
var m := measure_inferability(b)
|
var m := measure_inferability(b)
|
||||||
# 产物断言(棋盘生成 出生区安全与反退化布雷):实际雷数 ≤ 目标雷数 N——先布后删只减不增,失败即致命
|
# 产物断言(棋盘生成 出生区安全与反退化布雷):实际雷数 ≤ 目标雷数 N——先布后删只减不增,失败即致命
|
||||||
var n_target: int = int(round(float(params.density) * float(params.w * params.h - BoardData.SPAWN_AREA_CELLS)))
|
var n_target: int = int(round(float(params.density) * float(params.w * params.h - BoardData.SPAWN_AREA_CELLS)))
|
||||||
@@ -332,6 +350,8 @@ func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode
|
|||||||
"illegal_product": accept_mode == "accept_worst",
|
"illegal_product": accept_mode == "accept_worst",
|
||||||
"ring_removed": attempt_facts.get("ring_removed", 0),
|
"ring_removed": attempt_facts.get("ring_removed", 0),
|
||||||
"r0_count": m["r0"],
|
"r0_count": m["r0"],
|
||||||
|
# R₀≤cap 重掷闸尝试事实(迭代14① T3——占比=T5 闸触发率读数,过高=甲乙配比失衡信号)
|
||||||
|
"r0_cap_rejected": r0_cap_rejected,
|
||||||
}
|
}
|
||||||
b.illegal_product = accept_mode == "accept_worst"
|
b.illegal_product = accept_mode == "accept_worst"
|
||||||
b.degraded_product = accept_mode == "accept_best"
|
b.degraded_product = accept_mode == "accept_best"
|
||||||
|
|||||||
@@ -65,6 +65,17 @@ func validate() -> Array:
|
|||||||
var bt: String = str(row.get("board_type", ""))
|
var bt: String = str(row.get("board_type", ""))
|
||||||
if not BOARD_TYPE_VOCABULARY.has(bt):
|
if not BOARD_TYPE_VOCABULARY.has(bt):
|
||||||
errs.append({"category": "cross_field", "message": "(%d,%d) board_type 越词表: %s" % [L, D, bt]})
|
errs.append({"category": "cross_field", "message": "(%d,%d) board_type 越词表: %s" % [L, D, bt]})
|
||||||
|
# 初始展开收窄批两参数(迭代14① T1——加载期校验违例致命;缺省 shave=1 现行投值 / cap=0 闸关防御口径)
|
||||||
|
var sr: int = int(row.get("shave_ring_radius", 1))
|
||||||
|
if sr < 0 or sr > 2:
|
||||||
|
errs.append({"category": "domain", "message": "(%d,%d) shave_ring_radius 越域 [0,2]: %d" % [L, D, sr]})
|
||||||
|
var r0_cap: int = int(row.get("r0_max_cap", 0))
|
||||||
|
if r0_cap > 0:
|
||||||
|
# 护栏(任务书 §二):cap ≥ 出生格数 9(BoardData.SPAWN_AREA_CELLS)、cap ≤ 板格数一半
|
||||||
|
if r0_cap < BoardData.SPAWN_AREA_CELLS:
|
||||||
|
errs.append({"category": "cross_field", "message": "(%d,%d) r0_max_cap 低于出生保障面 %d: %d" % [L, D, BoardData.SPAWN_AREA_CELLS, r0_cap]})
|
||||||
|
if r0_cap > (w * h) / 2:
|
||||||
|
errs.append({"category": "cross_field", "message": "(%d,%d) r0_max_cap 超板格数一半 %d: %d" % [L, D, (w * h) / 2, r0_cap]})
|
||||||
anchor_ok[L] = anchor_ok.get(L, false) or D == 0
|
anchor_ok[L] = anchor_ok.get(L, false) or D == 0
|
||||||
for L in anchor_ok.keys():
|
for L in anchor_ok.keys():
|
||||||
if not anchor_ok[L]:
|
if not anchor_ok[L]:
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 50,
|
"min_safe_count": 50,
|
||||||
"max_gen_attempts": 16,
|
"max_gen_attempts": 16,
|
||||||
"board_type": "dungeon"
|
"board_type": "dungeon",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 45
|
||||||
}, {
|
}, {
|
||||||
"level_index": 1,
|
"level_index": 1,
|
||||||
"node_depth": 1,
|
"node_depth": 1,
|
||||||
@@ -25,7 +27,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 50,
|
"min_safe_count": 50,
|
||||||
"max_gen_attempts": 16,
|
"max_gen_attempts": 16,
|
||||||
"board_type": "dungeon"
|
"board_type": "dungeon",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 45
|
||||||
}, {
|
}, {
|
||||||
"level_index": 1,
|
"level_index": 1,
|
||||||
"node_depth": 2,
|
"node_depth": 2,
|
||||||
@@ -36,7 +40,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 50,
|
"min_safe_count": 50,
|
||||||
"max_gen_attempts": 16,
|
"max_gen_attempts": 16,
|
||||||
"board_type": "dungeon"
|
"board_type": "dungeon",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 45
|
||||||
}, {
|
}, {
|
||||||
"level_index": 1,
|
"level_index": 1,
|
||||||
"node_depth": 3,
|
"node_depth": 3,
|
||||||
@@ -47,7 +53,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 50,
|
"min_safe_count": 50,
|
||||||
"max_gen_attempts": 16,
|
"max_gen_attempts": 16,
|
||||||
"board_type": "dungeon"
|
"board_type": "dungeon",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 45
|
||||||
}, {
|
}, {
|
||||||
"level_index": 1,
|
"level_index": 1,
|
||||||
"node_depth": 4,
|
"node_depth": 4,
|
||||||
@@ -58,7 +66,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 60,
|
"min_safe_count": 60,
|
||||||
"max_gen_attempts": 24,
|
"max_gen_attempts": 24,
|
||||||
"board_type": "dungeon"
|
"board_type": "dungeon",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 43
|
||||||
}, {
|
}, {
|
||||||
"level_index": 2,
|
"level_index": 2,
|
||||||
"node_depth": 0,
|
"node_depth": 0,
|
||||||
@@ -69,7 +79,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 60,
|
"min_safe_count": 60,
|
||||||
"max_gen_attempts": 24,
|
"max_gen_attempts": 24,
|
||||||
"board_type": "underdark"
|
"board_type": "underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 43
|
||||||
}, {
|
}, {
|
||||||
"level_index": 2,
|
"level_index": 2,
|
||||||
"node_depth": 1,
|
"node_depth": 1,
|
||||||
@@ -80,7 +92,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 60,
|
"min_safe_count": 60,
|
||||||
"max_gen_attempts": 24,
|
"max_gen_attempts": 24,
|
||||||
"board_type": "underdark"
|
"board_type": "underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 43
|
||||||
}, {
|
}, {
|
||||||
"level_index": 2,
|
"level_index": 2,
|
||||||
"node_depth": 4,
|
"node_depth": 4,
|
||||||
@@ -91,7 +105,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 60,
|
"min_safe_count": 60,
|
||||||
"max_gen_attempts": 24,
|
"max_gen_attempts": 24,
|
||||||
"board_type": "underdark"
|
"board_type": "underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 43
|
||||||
}, {
|
}, {
|
||||||
"level_index": 2,
|
"level_index": 2,
|
||||||
"node_depth": 5,
|
"node_depth": 5,
|
||||||
@@ -102,7 +118,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 60,
|
"min_safe_count": 60,
|
||||||
"max_gen_attempts": 24,
|
"max_gen_attempts": 24,
|
||||||
"board_type": "underdark"
|
"board_type": "underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 43
|
||||||
}, {
|
}, {
|
||||||
"level_index": 2,
|
"level_index": 2,
|
||||||
"node_depth": 6,
|
"node_depth": 6,
|
||||||
@@ -113,7 +131,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 60,
|
"min_safe_count": 60,
|
||||||
"max_gen_attempts": 24,
|
"max_gen_attempts": 24,
|
||||||
"board_type": "underdark"
|
"board_type": "underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 43
|
||||||
}, {
|
}, {
|
||||||
"level_index": 2,
|
"level_index": 2,
|
||||||
"node_depth": 7,
|
"node_depth": 7,
|
||||||
@@ -124,7 +144,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 60,
|
"min_safe_count": 60,
|
||||||
"max_gen_attempts": 24,
|
"max_gen_attempts": 24,
|
||||||
"board_type": "underdark"
|
"board_type": "underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 43
|
||||||
}, {
|
}, {
|
||||||
"level_index": 2,
|
"level_index": 2,
|
||||||
"node_depth": 9,
|
"node_depth": 9,
|
||||||
@@ -135,7 +157,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 60,
|
"min_safe_count": 60,
|
||||||
"max_gen_attempts": 24,
|
"max_gen_attempts": 24,
|
||||||
"board_type": "underdark"
|
"board_type": "underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 43
|
||||||
}, {
|
}, {
|
||||||
"level_index": 3,
|
"level_index": 3,
|
||||||
"node_depth": 0,
|
"node_depth": 0,
|
||||||
@@ -146,7 +170,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 70,
|
"min_safe_count": 70,
|
||||||
"max_gen_attempts": 32,
|
"max_gen_attempts": 32,
|
||||||
"board_type": "deep_underdark"
|
"board_type": "deep_underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 51
|
||||||
}, {
|
}, {
|
||||||
"level_index": 3,
|
"level_index": 3,
|
||||||
"node_depth": 1,
|
"node_depth": 1,
|
||||||
@@ -157,7 +183,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 70,
|
"min_safe_count": 70,
|
||||||
"max_gen_attempts": 32,
|
"max_gen_attempts": 32,
|
||||||
"board_type": "deep_underdark"
|
"board_type": "deep_underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 51
|
||||||
}, {
|
}, {
|
||||||
"level_index": 3,
|
"level_index": 3,
|
||||||
"node_depth": 4,
|
"node_depth": 4,
|
||||||
@@ -168,7 +196,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 70,
|
"min_safe_count": 70,
|
||||||
"max_gen_attempts": 32,
|
"max_gen_attempts": 32,
|
||||||
"board_type": "deep_underdark"
|
"board_type": "deep_underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 51
|
||||||
}, {
|
}, {
|
||||||
"level_index": 3,
|
"level_index": 3,
|
||||||
"node_depth": 5,
|
"node_depth": 5,
|
||||||
@@ -179,7 +209,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 70,
|
"min_safe_count": 70,
|
||||||
"max_gen_attempts": 32,
|
"max_gen_attempts": 32,
|
||||||
"board_type": "deep_underdark"
|
"board_type": "deep_underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 51
|
||||||
}, {
|
}, {
|
||||||
"level_index": 3,
|
"level_index": 3,
|
||||||
"node_depth": 6,
|
"node_depth": 6,
|
||||||
@@ -190,7 +222,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 70,
|
"min_safe_count": 70,
|
||||||
"max_gen_attempts": 32,
|
"max_gen_attempts": 32,
|
||||||
"board_type": "deep_underdark"
|
"board_type": "deep_underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 51
|
||||||
}, {
|
}, {
|
||||||
"level_index": 3,
|
"level_index": 3,
|
||||||
"node_depth": 7,
|
"node_depth": 7,
|
||||||
@@ -201,7 +235,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 70,
|
"min_safe_count": 70,
|
||||||
"max_gen_attempts": 32,
|
"max_gen_attempts": 32,
|
||||||
"board_type": "deep_underdark"
|
"board_type": "deep_underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 51
|
||||||
}, {
|
}, {
|
||||||
"level_index": 3,
|
"level_index": 3,
|
||||||
"node_depth": 9,
|
"node_depth": 9,
|
||||||
@@ -212,7 +248,9 @@ rows = [{
|
|||||||
"solver_rules": "single_subset",
|
"solver_rules": "single_subset",
|
||||||
"min_safe_count": 82,
|
"min_safe_count": 82,
|
||||||
"max_gen_attempts": 32,
|
"max_gen_attempts": 32,
|
||||||
"board_type": "deep_underdark"
|
"board_type": "deep_underdark",
|
||||||
|
"shave_ring_radius": 1,
|
||||||
|
"r0_max_cap": 59
|
||||||
}]
|
}]
|
||||||
|
|
||||||
; 切片调参登记(SLICE-TUNED provisional,调参所有权仍归 C3):
|
; 切片调参登记(SLICE-TUNED provisional,调参所有权仍归 C3):
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ func _initialize() -> void:
|
|||||||
quit(1)
|
quit(1)
|
||||||
return
|
return
|
||||||
var gen = load("res://core/board_generator.gd").new()
|
var gen = load("res://core/board_generator.gd").new()
|
||||||
print("level,depth,w,h,n,mines_mean,mines_med,safe_mean,safe_med,r0_mean,inf_mean")
|
print("level,depth,w,h,n,mines_mean,mines_med,safe_mean,safe_med,r0_mean,r0_sd,r0_p90,r0_max,inf_mean,cap_rej_mean")
|
||||||
for row in db.board_gen.rows:
|
for row in db.board_gen.rows:
|
||||||
var rd := {
|
var rd := {
|
||||||
"level_index": int(row.level_index), "node_depth": int(row.node_depth),
|
"level_index": int(row.level_index), "node_depth": int(row.node_depth),
|
||||||
@@ -36,6 +36,9 @@ func _initialize() -> void:
|
|||||||
"mine_density": float(row.mine_density), "inferability_target": float(row.inferability_target),
|
"mine_density": float(row.mine_density), "inferability_target": float(row.inferability_target),
|
||||||
"solver_rules": String(row.solver_rules), "min_safe_count": int(row.min_safe_count),
|
"solver_rules": String(row.solver_rules), "min_safe_count": int(row.min_safe_count),
|
||||||
"max_gen_attempts": int(row.max_gen_attempts), "board_type": String(row.board_type),
|
"max_gen_attempts": int(row.max_gen_attempts), "board_type": String(row.board_type),
|
||||||
|
# 初始展开收窄批(迭代14①)两新参数透传(.get 缺省与生成器防御口径一致)
|
||||||
|
"shave_ring_radius": int(row.get("shave_ring_radius", 1)),
|
||||||
|
"r0_max_cap": int(row.get("r0_max_cap", 0)),
|
||||||
}
|
}
|
||||||
var fdb := FakeDB.new()
|
var fdb := FakeDB.new()
|
||||||
fdb.row = rd
|
fdb.row = rd
|
||||||
@@ -43,6 +46,7 @@ func _initialize() -> void:
|
|||||||
var safes: Array = []
|
var safes: Array = []
|
||||||
var r0s: Array = []
|
var r0s: Array = []
|
||||||
var infs: Array = []
|
var infs: Array = []
|
||||||
|
var cap_rejs: Array = []
|
||||||
for i in range(n):
|
for i in range(n):
|
||||||
var rg := RandomNumberGenerator.new()
|
var rg := RandomNumberGenerator.new()
|
||||||
rg.seed = 900000 + i
|
rg.seed = 900000 + i
|
||||||
@@ -53,12 +57,14 @@ func _initialize() -> void:
|
|||||||
safes.append(b.safe_cells().size())
|
safes.append(b.safe_cells().size())
|
||||||
r0s.append(int(b.metrics.r0_count))
|
r0s.append(int(b.metrics.r0_count))
|
||||||
infs.append(float(b.metrics.inferability))
|
infs.append(float(b.metrics.inferability))
|
||||||
|
cap_rejs.append(int(b.metrics.get("r0_cap_rejected", 0)))
|
||||||
if mines.is_empty():
|
if mines.is_empty():
|
||||||
printerr("L%d d%d 生成全部失败" % [int(row.level_index), int(row.node_depth)])
|
printerr("L%d d%d 生成全部失败" % [int(row.level_index), int(row.node_depth)])
|
||||||
continue
|
continue
|
||||||
print("%d,%d,%d,%d,%d,%.1f,%d,%.1f,%d,%.1f,%.3f" % [
|
print("%d,%d,%d,%d,%d,%.1f,%d,%.1f,%d,%.1f,%.2f,%d,%d,%.3f,%.2f" % [
|
||||||
int(row.level_index), int(row.node_depth), int(row.board_width), int(row.board_height),
|
int(row.level_index), int(row.node_depth), int(row.board_width), int(row.board_height),
|
||||||
mines.size(), _mean(mines), _med(mines), _mean(safes), _med(safes), _mean(r0s), _mean(infs)])
|
mines.size(), _mean(mines), _med(mines), _mean(safes), _med(safes), _mean(r0s),
|
||||||
|
_sd(r0s), _p90(r0s), _max(r0s), _mean(infs), _mean(cap_rejs)])
|
||||||
quit(0)
|
quit(0)
|
||||||
|
|
||||||
|
|
||||||
@@ -69,6 +75,26 @@ func _mean(a: Array) -> float:
|
|||||||
return t / float(a.size())
|
return t / float(a.size())
|
||||||
|
|
||||||
|
|
||||||
|
func _sd(a: Array) -> float:
|
||||||
|
var m := _mean(a)
|
||||||
|
var t := 0.0
|
||||||
|
for v in a:
|
||||||
|
t += (float(v) - m) * (float(v) - m)
|
||||||
|
return sqrt(t / float(a.size()))
|
||||||
|
|
||||||
|
|
||||||
|
func _p90(a: Array) -> int:
|
||||||
|
var b := a.duplicate()
|
||||||
|
b.sort()
|
||||||
|
return int(b[mini(a.size() - 1, int(ceil(a.size() * 0.9)) - 1)])
|
||||||
|
|
||||||
|
|
||||||
|
func _max(a: Array) -> int:
|
||||||
|
var b := a.duplicate()
|
||||||
|
b.sort()
|
||||||
|
return int(b[b.size() - 1])
|
||||||
|
|
||||||
|
|
||||||
func _med(a: Array) -> int:
|
func _med(a: Array) -> int:
|
||||||
var b := a.duplicate()
|
var b := a.duplicate()
|
||||||
b.sort()
|
b.sort()
|
||||||
|
|||||||
+36
-3
@@ -360,7 +360,9 @@ func _smoke_adventure() -> void:
|
|||||||
cand_ok = false
|
cand_ok = false
|
||||||
var seen := {}
|
var seen := {}
|
||||||
for c in cands:
|
for c in cands:
|
||||||
var ckey := "%s|%s" % [String((c as Dictionary).get("kind", "")), String((c as Dictionary).get("tier", ""))]
|
# 身份键 = kind|tier|relic_id(迭代14① T4 断言基线复核——TP0 v2.2 relic 按 relic_id 分列
|
||||||
|
# 不参与同 kind 去重〔_token_identity relic: 前缀〕,同 tier 三枚不同流派件=三个不同选项合法态)
|
||||||
|
var ckey := "%s|%s|%s" % [String((c as Dictionary).get("kind", "")), String((c as Dictionary).get("tier", "")), String((c as Dictionary).get("relic_id", ""))]
|
||||||
if seen.has(ckey):
|
if seen.has(ckey):
|
||||||
cand_ok = false
|
cand_ok = false
|
||||||
seen[ckey] = true
|
seen[ckey] = true
|
||||||
@@ -1253,6 +1255,24 @@ func _smoke_board_generator() -> void:
|
|||||||
check(_board_dump(b2) == _board_dump(b3), "L%d 同种子两次生成逐格相同" % L)
|
check(_board_dump(b2) == _board_dump(b3), "L%d 同种子两次生成逐格相同" % L)
|
||||||
var b4 = board_generator.generate(L, 0, _mk_stream("board_gen", 778), _db)
|
var b4 = board_generator.generate(L, 0, _mk_stream("board_gen", 778), _db)
|
||||||
check(_board_dump(b2) != _board_dump(b4), "L%d 异种子产物不同(退化护栏)" % L)
|
check(_board_dump(b2) != _board_dump(b4), "L%d 异种子产物不同(退化护栏)" % L)
|
||||||
|
# ---- 初始展开收窄批断言(迭代14① T4)----
|
||||||
|
# ① 结构断言:R₀ ≤ cap(正式表行投值,合法性闸承载——出图必过);② r0_cap_rejected 尝试事实在位;
|
||||||
|
# ③ ring_removed 量级:剃雷域收窄后 ≤ 域内候选雷格数(5×5−出生 9=16——全域剃雷退役);
|
||||||
|
# ④ 闸压线行为:cap=9(出生保障面下限)时出图必 r0≤9 或 accept_worst 非法标记(三分出口诚实降级,玩家永不卡死)
|
||||||
|
var cap_val: int = int(row.get("r0_max_cap", 0))
|
||||||
|
check(cap_val >= BoardData.SPAWN_AREA_CELLS, "L%d r0_max_cap 正式行投值在位(%d ≥ 出生保障面 9——板面 30%% 锚)" % [L, cap_val])
|
||||||
|
check(int(b1.metrics.r0_count) <= cap_val, "L%d 结构断言 R₀=%d ≤ cap=%d(R₀≤cap 重掷闸承载)" % [L, int(b1.metrics.r0_count), cap_val])
|
||||||
|
check(int(b1.metrics.get("r0_cap_rejected", -1)) >= 0, "L%d r0_cap_rejected 尝试事实指标在位(本图 %d 次触发)" % [L, int(b1.metrics.get("r0_cap_rejected", -1))])
|
||||||
|
check(int(b1.metrics.get("ring_removed", 99)) <= (2 + int(row.get("shave_ring_radius", 1))) * (2 + int(row.get("shave_ring_radius", 1))) * 4 - 5, "L%d ring_removed=%d ≤ 剃雷域候选雷格数((3+2r)²−9——全域剃雷退役)" % [L, int(b1.metrics.get("ring_removed", 99))])
|
||||||
|
var row9: Dictionary = row.duplicate()
|
||||||
|
row9["r0_max_cap"] = BoardData.SPAWN_AREA_CELLS
|
||||||
|
row9["max_gen_attempts"] = 4
|
||||||
|
var stub9 := _BoardRowStub.new()
|
||||||
|
stub9.row = row9
|
||||||
|
var b9 = board_generator.generate(1, 0, _mk_stream("board_gen", 909), stub9)
|
||||||
|
check(b9 != null and (int(b9.metrics.r0_count) <= BoardData.SPAWN_AREA_CELLS or b9.illegal_product),
|
||||||
|
"L1 cap 压线 9:出图 R₀=%d %s(三分出口诚实降级——超阈即 accept_worst 非法标记,玩家永不卡死)" % [int(b9.metrics.r0_count), "≤9" if int(b9.metrics.r0_count) <= BoardData.SPAWN_AREA_CELLS else ">9→illegal_product"])
|
||||||
|
check(int(b9.metrics.get("r0_cap_rejected", 0)) >= 0 and String(b9.metrics.get("accept_mode", "")) != "", "L1 cap 压线出图指标集完整(accept_mode=%s / 闸触发 %d 次)" % [String(b9.metrics.get("accept_mode", "")), int(b9.metrics.get("r0_cap_rejected", 0))])
|
||||||
|
|
||||||
|
|
||||||
func _mk_stream(stream_name: String, scope: int) -> RandomNumberGenerator:
|
func _mk_stream(stream_name: String, scope: int) -> RandomNumberGenerator:
|
||||||
@@ -1313,6 +1333,15 @@ class _CountVariantRng extends RngServiceCore:
|
|||||||
return super.open_stream(purpose)
|
return super.open_stream(purpose)
|
||||||
|
|
||||||
|
|
||||||
|
# 板行覆盖桩(迭代14① T4——cap 压线行为断言;接口面 = resolve_board_gen 单点)
|
||||||
|
class _BoardRowStub:
|
||||||
|
var row: Dictionary
|
||||||
|
func resolve_board_gen(_L: int, _D: int) -> Dictionary:
|
||||||
|
return row
|
||||||
|
func status_effect_row(_id: String) -> Dictionary:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
func _smoke_global_variant() -> void:
|
func _smoke_global_variant() -> void:
|
||||||
print("--- 全局作用域变异 首发批(门控三维 + 替换制 + 资源面偏斜)---")
|
print("--- 全局作用域变异 首发批(门控三维 + 替换制 + 资源面偏斜)---")
|
||||||
# ① 跨字段互锁负样本(resource_face ⟺ scope=global 三条 + effect_value 新域 [0,50])
|
# ① 跨字段互锁负样本(resource_face ⟺ scope=global 三条 + effect_value 新域 [0,50])
|
||||||
@@ -3654,6 +3683,7 @@ func _smoke_shop_room() -> void:
|
|||||||
check(runner.effective_ac() == int(_db.hero.armor_class) + 1, "AC = 10+1(armor_class 加算区轴,无百分比通道)")
|
check(runner.effective_ac() == int(_db.hero.armor_class) + 1, "AC = 10+1(armor_class 加算区轴,无百分比通道)")
|
||||||
# 余额不足购买被拒(零副作用):hp_up 连购至不可负担后兜底拒绝
|
# 余额不足购买被拒(零副作用):hp_up 连购至不可负担后兜底拒绝
|
||||||
var guard_drain := 20
|
var guard_drain := 20
|
||||||
|
var hp_buys := 1 # 夹具前段已购 1 笔(购买 hp_up 受理断言)——总数 = 前段 + 本循环
|
||||||
while guard_drain > 0:
|
while guard_drain > 0:
|
||||||
guard_drain -= 1
|
guard_drain -= 1
|
||||||
var hp_price: int = int(_shop_products_by_id(runner.shop_products())["hp_up"]["price"])
|
var hp_price: int = int(_shop_products_by_id(runner.shop_products())["hp_up"]["price"])
|
||||||
@@ -3661,6 +3691,7 @@ func _smoke_shop_room() -> void:
|
|||||||
break
|
break
|
||||||
if not runner.buy_product("hp_up"):
|
if not runner.buy_product("hp_up"):
|
||||||
break
|
break
|
||||||
|
hp_buys += 1
|
||||||
var gp_dry: int = runner.gp
|
var gp_dry: int = runner.gp
|
||||||
var tier_dry: int = runner.purchased_tier("hp_up")
|
var tier_dry: int = runner.purchased_tier("hp_up")
|
||||||
var hp_dry: int = int(_shop_products_by_id(runner.shop_products())["hp_up"]["price"])
|
var hp_dry: int = int(_shop_products_by_id(runner.shop_products())["hp_up"]["price"])
|
||||||
@@ -3673,8 +3704,10 @@ func _smoke_shop_room() -> void:
|
|||||||
check(runner.effective_atk() == int(_db.hero.atk) + 1, "主角攻击生效值 = 2+1(基础表值 + 加算区)")
|
check(runner.effective_atk() == int(_db.hero.atk) + 1, "主角攻击生效值 = 2+1(基础表值 + 加算区)")
|
||||||
check(runner.pick_next_node(9) and runner.current_battle() != null, "选 Boss(节点 9)开战")
|
check(runner.pick_next_node(9) and runner.current_battle() != null, "选 Boss(节点 9)开战")
|
||||||
var snap: Dictionary = runner.current_battle().presentation_snapshot()
|
var snap: Dictionary = runner.current_battle().presentation_snapshot()
|
||||||
check(int(snap["hero"].get("atk", -1)) == int(_db.hero.atk) + 1 and int(snap["hero"].get("max_hp", -1)) == int(_db.hero.max_hp) + 3,
|
# max_hp 期望按实际购买笔数推导(迭代14① T4 断言基线复核——棋盘换代改变战局 GP 流,可购笔数
|
||||||
"战斗开始参数 = 基础表值 + 加算区(atk %d = 2+1 / max_hp %d = 17+3)" % [int(snap["hero"].get("atk", -1)), int(snap["hero"].get("max_hp", -1))])
|
# 随经济漂移;断言语义=「加算区笔数×3 全额入战斗开始参数」,不再锚死恰好 1 笔)
|
||||||
|
check(int(snap["hero"].get("atk", -1)) == int(_db.hero.atk) + 1 and int(snap["hero"].get("max_hp", -1)) == int(_db.hero.max_hp) + 3 * hp_buys,
|
||||||
|
"战斗开始参数 = 基础表值 + 加算区(atk %d = 2+1 / max_hp %d = %d+%d×3)" % [int(snap["hero"].get("atk", -1)), int(snap["hero"].get("max_hp", -1)), int(_db.hero.max_hp), hp_buys])
|
||||||
# 冒险收束(Boss 胜或败北——基线裸装口径任一结局)→ 钱包清零
|
# 冒险收束(Boss 胜或败北——基线裸装口径任一结局)→ 钱包清零
|
||||||
var fin_end := {}
|
var fin_end := {}
|
||||||
runner.level_finished.connect(func(p): fin_end["p"] = p)
|
runner.level_finished.connect(func(p): fin_end["p"] = p)
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@
|
|||||||
| 迭代 11+ | **✅ 三批已落籍(2026-10-03,台账 323-325)**:①魔法道具同调实施批 bc17b66(冒烟 645/0→671/0 基线演进)→ ②GP 商店房重构批 395b2ab(共享池账本+抽 3 买 1 全重抽+A=1.8/b=1.1 provisional+MC off 对拍逐位 PASS+on 新锚 N=60)→ ④视野迷雾实施批 e6260a5(菱形灯光区 R8+区外全黑+暗淡记忆态+探针 case⑮;纯呈现 MC 零跑)——各批合并后主区全量冒烟复跑全绿;**迭代 11 门=待出口人闸关闭(人闸材料包=design/qa/m4-iter11-exit-package-2026-10-03.md:三批检查单+追认清单 18 项+迷雾目检指引+读数报告)**。原登记:**2026-10-03 用户裁迭代 11 范围(三批,推荐序)**:①魔法道具同调实施批 → ②GP 商店房重构批 → ④视野迷雾实施批(各批独立出口闸;同调批先行——商店批共享池账本与通关率复测建在 aux 卡退役后的终局池上,读数只锚一次;迷雾批纯呈现不扰读数,序位可穿插);**反制批移迭代 12**(前置=双层 BD 外部调研+仲裁后重新立项;2026-10-03 用户终裁=同调位反制道具层级错配失败设计废弃,「每变异≥1反制道具」契约作废——地形变异.md v0.6/魔法道具.md v0.8 同批落文(06 条目已收口移除));**Beta 方向立项撤出本窗口**(待 Alpha 内容填充+试玩轮次后再议);关卡内容扩展留讨论位(世界观设定待用户补正主——摩索不达城 repo 无载)。↓ 原登记:反制批 Alpha · **魔法道具同调实施批**(任务书 v1.1 全裁 P1-P8(任务书已退役,落籍=①bc17b66),2026-10-02 用户裁 P7 乙归本窗口,发令即开工——任务书含 T0-T10 可升 loop 计划书)· **GP 商店房重构批**(2026-10-02 用户裁三选一同构化:买一全重抽/重抽绑购买/价格=基价×b^(关序−1)×A^(进店已购次数)〔系数归 game-balancer 研究〕,取代 09-20 无刷新裁决——06「GP 商店房重构」条在册待立项)· 关卡内容扩展 · Beta 方向立项(原迭代 10+ 三主题顺延——迭代 10 位已由奖励结构重构批占用,2026-09-30 用户拍板 P-E;各批顺序按 Alpha 读数定;含营地 2D 画面议题——2026-09-29 裁缓至此再议) | M-3 出口闸(**已解**——2026-10-03 迭代 9 出口闸收官:M-3 关闭、Alpha 到手) | 立项时按「迭代粒度界定」拆任务卡 |
|
| 迭代 11+ | **✅ 三批已落籍(2026-10-03,台账 323-325)**:①魔法道具同调实施批 bc17b66(冒烟 645/0→671/0 基线演进)→ ②GP 商店房重构批 395b2ab(共享池账本+抽 3 买 1 全重抽+A=1.8/b=1.1 provisional+MC off 对拍逐位 PASS+on 新锚 N=60)→ ④视野迷雾实施批 e6260a5(菱形灯光区 R8+区外全黑+暗淡记忆态+探针 case⑮;纯呈现 MC 零跑)——各批合并后主区全量冒烟复跑全绿;**迭代 11 门=待出口人闸关闭(人闸材料包=design/qa/m4-iter11-exit-package-2026-10-03.md:三批检查单+追认清单 18 项+迷雾目检指引+读数报告)**。原登记:**2026-10-03 用户裁迭代 11 范围(三批,推荐序)**:①魔法道具同调实施批 → ②GP 商店房重构批 → ④视野迷雾实施批(各批独立出口闸;同调批先行——商店批共享池账本与通关率复测建在 aux 卡退役后的终局池上,读数只锚一次;迷雾批纯呈现不扰读数,序位可穿插);**反制批移迭代 12**(前置=双层 BD 外部调研+仲裁后重新立项;2026-10-03 用户终裁=同调位反制道具层级错配失败设计废弃,「每变异≥1反制道具」契约作废——地形变异.md v0.6/魔法道具.md v0.8 同批落文(06 条目已收口移除));**Beta 方向立项撤出本窗口**(待 Alpha 内容填充+试玩轮次后再议);关卡内容扩展留讨论位(世界观设定待用户补正主——摩索不达城 repo 无载)。↓ 原登记:反制批 Alpha · **魔法道具同调实施批**(任务书 v1.1 全裁 P1-P8(任务书已退役,落籍=①bc17b66),2026-10-02 用户裁 P7 乙归本窗口,发令即开工——任务书含 T0-T10 可升 loop 计划书)· **GP 商店房重构批**(2026-10-02 用户裁三选一同构化:买一全重抽/重抽绑购买/价格=基价×b^(关序−1)×A^(进店已购次数)〔系数归 game-balancer 研究〕,取代 09-20 无刷新裁决——06「GP 商店房重构」条在册待立项)· 关卡内容扩展 · Beta 方向立项(原迭代 10+ 三主题顺延——迭代 10 位已由奖励结构重构批占用,2026-09-30 用户拍板 P-E;各批顺序按 Alpha 读数定;含营地 2D 画面议题——2026-09-29 裁缓至此再议) | M-3 出口闸(**已解**——2026-10-03 迭代 9 出口闸收官:M-3 关闭、Alpha 到手) | 立项时按「迭代粒度界定」拆任务卡 |
|
||||||
| 迭代 12 | **双层 BD 实施批(反制批位移承接——变异应对局内化在本批落地)**:**2026-10-03 用户五裁全落**=R1 甲(树形态融合案:主干脊柱 row-gating+三脉+彩蛋 ≤3+A/B 集中同调脉)/R2 乙(**两层全入本迭代**:批次一 T0-T7=机制件基建+七流派全量铺〔R3 乙〕+地形转化件+商店保底+MC 锚;批次二 T8-T10=天赋树+存档 v4+营地 UI 重构;超软时间盒切 12/12b,切分点=批次一出口)/R3 乙(七流派批次一全量铺)/R4 甲(**信息型永不对冲**+复查闸=T10 呈报信息型真人读数仅呈报不提案;净化工兵仅限伤害型、清除工具件族不做、深挖钻头改非信息税设计)/R5 甲(喂雷流不做,06 留正式待办+kill-switch 判据)。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」。设计事实源=`design/research/双层BD体系-整合定稿-2026-10-03.md`(双模型并行调研仲裁版),任务书已退役(落籍=e780063)。**✅ 已全批落籍(2026-10-04,台账 328-333)**:TP0 令牌池先行(normal 重锚)→批次一 T0-T7(27 件七流派+MC 成型锚 L1 5%→75% 分岔+红线自检①过)→批次二 T8-T10(天赋树 33 节点+存档 v5+营地树 UI+A/B 面 0.0pp)一次合并 e780063;试玩反馈四连修复(钻头 AP 锁死/v2 收益重投/流派件呈现双界面/清图奖励 toast)至 c43276d;批末冒烟 718/0+run_all 15+探针绿+doc 三闸基线同款+熵增 PASS;**出口人闸待用户**(人工检查清单=台账 328-333+design/qa/m4iter12 两报告);前置=迭代 11 三批出口+M-4 数值批令牌池落地+商店批共享池 | 迭代 11 出口 | T0-T10 两段式(任务书 §四) |
|
| 迭代 12 | **双层 BD 实施批(反制批位移承接——变异应对局内化在本批落地)**:**2026-10-03 用户五裁全落**=R1 甲(树形态融合案:主干脊柱 row-gating+三脉+彩蛋 ≤3+A/B 集中同调脉)/R2 乙(**两层全入本迭代**:批次一 T0-T7=机制件基建+七流派全量铺〔R3 乙〕+地形转化件+商店保底+MC 锚;批次二 T8-T10=天赋树+存档 v4+营地 UI 重构;超软时间盒切 12/12b,切分点=批次一出口)/R3 乙(七流派批次一全量铺)/R4 甲(**信息型永不对冲**+复查闸=T10 呈报信息型真人读数仅呈报不提案;净化工兵仅限伤害型、清除工具件族不做、深挖钻头改非信息税设计)/R5 甲(喂雷流不做,06 留正式待办+kill-switch 判据)。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」。设计事实源=`design/research/双层BD体系-整合定稿-2026-10-03.md`(双模型并行调研仲裁版),任务书已退役(落籍=e780063)。**✅ 已全批落籍(2026-10-04,台账 328-333)**:TP0 令牌池先行(normal 重锚)→批次一 T0-T7(27 件七流派+MC 成型锚 L1 5%→75% 分岔+红线自检①过)→批次二 T8-T10(天赋树 33 节点+存档 v5+营地树 UI+A/B 面 0.0pp)一次合并 e780063;试玩反馈四连修复(钻头 AP 锁死/v2 收益重投/流派件呈现双界面/清图奖励 toast)至 c43276d;批末冒烟 718/0+run_all 15+探针绿+doc 三闸基线同款+熵增 PASS;**出口人闸待用户**(人工检查清单=台账 328-333+design/qa/m4iter12 两报告);前置=迭代 11 三批出口+M-4 数值批令牌池落地+商店批共享池 | 迭代 11 出口 | T0-T10 两段式(任务书 §四) |
|
||||||
| 迭代 13 | **工程债与测试基建批(含 D6 爆破工兵包实施)**:六条目=ui_click_probe 完整局适配(D1——分派链序修正+停点/锁期/重放三态断言)/探针只读出口(D2——六出口 26 直入清零)/ArmedTimer helper(D3——P4 乙三处计时收口缝零动)/main.gd 二期瘦身(D4——bonus_interact_controller+camp_shop_presenter 拆件 1370→1119,家族②契约3绑定面留置;~900±50 锚差=族级清单上限不自洽已归因)/aux 二期合并(T5 判不合收口)/杂项尾差四件(D5)/爆破工兵包中立移除雷格(D6——P1 甲邻接冻结/P2 甲退色降档,判定逻辑零改动,充能表驱动零新码)。**✅ 已落籍(2026-10-04,台账 342)**:worktree m4iter13-debt-20261004 八提交 cd7d3ea…2402877 合并 eff8cb8;闸=冒烟 718/0(断言数持平基线)+run_all 15+click 三种子绿+全探针绿+doc 三闸零新增+熵增 PASS+MC 零跑(静态零漂移证明);合并后主区全量复跑同绿 | 迭代 12 出口 | T0-T9 ≈4.8-5.3d(知情超限单批,实际单会话) |
|
| 迭代 13 | **工程债与测试基建批(含 D6 爆破工兵包实施)**:六条目=ui_click_probe 完整局适配(D1——分派链序修正+停点/锁期/重放三态断言)/探针只读出口(D2——六出口 26 直入清零)/ArmedTimer helper(D3——P4 乙三处计时收口缝零动)/main.gd 二期瘦身(D4——bonus_interact_controller+camp_shop_presenter 拆件 1370→1119,家族②契约3绑定面留置;~900±50 锚差=族级清单上限不自洽已归因)/aux 二期合并(T5 判不合收口)/杂项尾差四件(D5)/爆破工兵包中立移除雷格(D6——P1 甲邻接冻结/P2 甲退色降档,判定逻辑零改动,充能表驱动零新码)。**✅ 已落籍(2026-10-04,台账 342)**:worktree m4iter13-debt-20261004 八提交 cd7d3ea…2402877 合并 eff8cb8;闸=冒烟 718/0(断言数持平基线)+run_all 15+click 三种子绿+全探针绿+doc 三闸零新增+熵增 PASS+MC 零跑(静态零漂移证明);合并后主区全量复跑同绿 | 迭代 12 出口 | T0-T9 ≈4.8-5.3d(知情超限单批,实际单会话) |
|
||||||
| 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告 §九(已退役,git 1da9a41)),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**✅ 实施批落地(2026-10-05,worktree m4iter14-mineq-20261005 台账 354)**:T0-T5 全落——audit 工具常量刷新(改前静态锚与方案报告 §四 逐位吻合)+runsum 五字段(行侧判据考证=授予行专带 highlight,87行==87插旗1:1)+F1 条款3 重立三层口径(v0.8)+战斗结算 v0.25+难度联动表+6 行+registry clause3_inequality 重立条(改前锚+P7 修正注记)+06 破线条收口+**T4 标中兑付溢价机制**(settlement.flag_hit_premium=125 provisional,grant 单点只挂 flag_hit 正向·percent 幅度贯穿应用与呈现,标空/挖格不乘,DamageController 零改/同池冻结)+smoke 750/0(+3 断言;max 路径种子 42→43 重采);判读三件=β 带 u=1/2 带内 u=3 登记态/δ 敏感度行为无感(η 位移 <1.4pp<5pp,保留+登记)/条件二判式口径等号压线转绿(整数量级实现 u=1/2 绿·u=3 微欠 −1.1% 登记面);改后锚换代 runsum_m4iter14mineq_post_n200_20261005(perfect 冒险通关 65.3%→72.0% 增强向位移,四带判读归 M-4);出口报告=design/qa/m4iter14-mineq-exit-report-2026-10-05.md(provisional 追认单 8 项+07⑫ 人工项);damage_probe A1 红灯=改前既有非本批新增(在册)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书已退役(git 01bfc15 批;裁决全录另见调研报告 §7)(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分Line truncated
|
| 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**✅ 实施批落地(2026-10-05,worktree m4iter14-narrow-20261005 台账 357;S1 停机呈报已裁=用户方案A)**:T0-T4+T7+T8 全落(T5 结构读数随批出讫;T6 MC 四带复算读数批按切分预案后置,跑批待用户批准挂 07 现行义务)——甲=剃雷域收窄(shave_ring_radius 参数化,r=1→出生 5×5,全域 flood 剃雷退役,零 RNG 消费变化)+乙=R₀≤cap 重掷闸(合法性闸序列+同流重试+耗尽三分出口诚实降级+r0_cap_rejected 指标)+参数面两列(schema 域校验加载期致命+19 行投值)+断言面 +12(R₀≤cap/ring_removed 量级/cap 压线诚实降级/确定性逐位)+夹具复核 3 处(relic 候选身份按 TP0 v2.2=kind|tier|relic_id、商店购买笔数推导防 GP 流漂移、极性探针种子自愈);**S1 停机实录**=r=1 自然 R₀ 均值 39>cap30 锚结构性倒挂(94% 拒绝/inf 0.976→0.719/常态非法板)→用户裁方案A「10×10 cap 30→45」〔P1 上调预案字面〕,12×12/13×13 健康侧维持;改后结构读数=R₀ 均值 39.7/37.9/42.8/46.6(收窄自 68.6/83.2——10×10 −42%、12×12 −54%)/尾部闸精确截断/雷密度 19.2-21.6%<25% 相变线/inf 全行达标;玩法侧零改动(minesweeper_rules.gd 零 diff、「初始展开恰等」验收原样为真);闸=冒烟 767/0(+12);registry initial_expansion_narrowing 条+棋盘生成.md v0.5+07⑬ 四信号组;06 视野条目已于 745b92ea 清账批退役(收窄立项即正主)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告 §九(已退役,git 1da9a41)),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**✅ 实施批落地(2026-10-05,worktree m4iter14-mineq-20261005 台账 356)**:T0-T5 全落——audit 工具常量刷新(改前静态锚与方案报告 §四 逐位吻合)+runsum 五字段(行侧判据考证=授予行专带 highlight,87行==87插旗1:1)+F1 条款3 重立三层口径(v0.8)+战斗结算 v0.25+难度联动表+6 行+registry clause3_inequality 重立条(改前锚+P7 修正注记)+06 破线条收口+**T4 标中兑付溢价机制**(settlement.flag_hit_premium=125 provisional,grant 单点只挂 flag_hit 正向·percent 幅度贯穿应用与呈现,标空/挖格不乘,DamageController 零改/同池冻结)+smoke 750/0(+3 断言;max 路径种子 42→43 重采);判读三件=β 带 u=1/2 带内 u=3 登记态/δ 敏感度行为无感(η 位移 <1.4pp<5pp,保留+登记)/条件二判式口径等号压线转绿(整数量级实现 u=1/2 绿·u=3 微欠 −1.1% 登记面);改后锚换代 runsum_m4iter14mineq_post_n200_20261005(perfect 冒险通关 65.3%→72.0% 增强向位移,四带判读归 M-4);出口报告=design/qa/m4iter14-mineq-exit-report-2026-10-05.md(provisional 追认单 8 项+07⑫ 人工项);damage_probe A1 红灯=改前既有非本批新增(在册)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数Line truncated
|
||||||
| 迭代 15 | **①调试功能整合批(2026-10-05 用户令自「14.5」临时卡改编入册——原周期外 0.5 卡,落地事实与验证读数零变化,只改编号归属)**:主菜单三调试散件(随机种子输入框/角色数值调整板/两层调试入口)收一张调试浮窗 DebugOverlay——入口=开始覆盖层右下角「调试」角标(与主按钮组非平级,DS_DEBUG=1 环境变量门控沿用迭代 8 卡④口径);浮窗=悬浮菜单之上 Dialog(不隐藏开始层,同确认弹窗形态;旧 TunePanel「与开始层互斥」形态与类整体吸收退役含 .uid);可扩展滚动列表页四区块(随机种子/数值调整/批量模拟/两层调试入口——后续调试项往下追加滚轮下探)。四拍板全落(2026-10-04 用户裁)=P1 甲 DS_DEBUG 门控/P2 乙全摊平/P3 仅开始菜单可开·对局不可达(_show_debug_overlay 门禁护栏+对局发起随开随收)/P4 可扩展列表。**✅ 已全批落籍(2026-10-05,worktree iter145-debug-hub 两提交 48c0b34/46dadbb,主区 merge --no-ff d0a3c6b/10c301b,台账 352)**:闸=冒烟 747/0+探针 ui_tune/ui_click/ui 三绿(worktree+主区双跑,主区跑前 --import 重刷类名缓存在册坑);遗留=实机目检归用户(DS_DEBUG=1 启动→右下角角标→浮窗四区块→两层调试入口) | 卡①门:迭代 14 出口(注:本卡先于迭代 14 出口落籍——编入时点迭代 14 ③已闭/①②④⑤在飞/⑥挂起,门列仅记编入时点状态,不构成追溯闸) | 单批已落地(原估 0.5d,实际一次会话);后续扩调试项=debug_overlay.gd _build() 列表区追加区块(P4 扩展口径) |
|
| 迭代 15 | **①调试功能整合批(2026-10-05 用户令自「14.5」临时卡改编入册——原周期外 0.5 卡,落地事实与验证读数零变化,只改编号归属)**:主菜单三调试散件(随机种子输入框/角色数值调整板/两层调试入口)收一张调试浮窗 DebugOverlay——入口=开始覆盖层右下角「调试」角标(与主按钮组非平级,DS_DEBUG=1 环境变量门控沿用迭代 8 卡④口径);浮窗=悬浮菜单之上 Dialog(不隐藏开始层,同确认弹窗形态;旧 TunePanel「与开始层互斥」形态与类整体吸收退役含 .uid);可扩展滚动列表页四区块(随机种子/数值调整/批量模拟/两层调试入口——后续调试项往下追加滚轮下探)。四拍板全落(2026-10-04 用户裁)=P1 甲 DS_DEBUG 门控/P2 乙全摊平/P3 仅开始菜单可开·对局不可达(_show_debug_overlay 门禁护栏+对局发起随开随收)/P4 可扩展列表。**✅ 已全批落籍(2026-10-05,worktree iter145-debug-hub 两提交 48c0b34/46dadbb,主区 merge --no-ff d0a3c6b/10c301b,台账 352)**:闸=冒烟 747/0+探针 ui_tune/ui_click/ui 三绿(worktree+主区双跑,主区跑前 --import 重刷类名缓存在册坑);遗留=实机目检归用户(DS_DEBUG=1 启动→右下角角标→浮窗四区块→两层调试入口) | 卡①门:迭代 14 出口(注:本卡先于迭代 14 出口落籍——编入时点迭代 14 ③已闭/①②④⑤在飞/⑥挂起,门列仅记编入时点状态,不构成追溯闸) | 单批已落地(原估 0.5d,实际一次会话);后续扩调试项=debug_overlay.gd _build() 列表区追加区块(P4 扩展口径) |
|
||||||
| 迭代 15 | **②奇物概念收口与词族对齐批(2026-10-05 用户令编入本迭代)**:概念层已由用户逐轮裁定定稿(《奇物》v1.0→v2.7,7 轮),本批只做**落地对齐**、不做二次设计。三批内容:**①三套旧词族全面对齐**(顶层已改名「奇物」而代码仍叫旧名=用户最初抱怨的"文档与代码分开"):`feature_*`→`curio_*`(103 处/7 文件)、`relic_*`→`feat_*`(162 处/12 文件)、运行层 `bonus_*`→`curio_*`(160 处/8 文件)。**硬约束:`reward_*` 已被 `reward_pick`/`reward_node`/`reward_preview` 占用,统一词族不得使用**;`relic_table.gd` 与两个控制器类改名须同步 Godot `.uid`/`.tscn`(非文本层无法自证)。**②三条渠道按分类分离**(现行三渠道共用同一个 98 张池、三类混编):关底 Boss 击败=通过这一关→只出专长;奖励节点/商店→属性值提升+资源、专长在此**只以门票形式**出现。**兑付频率红线**:奇物不是打一场战斗给一份,关内普通战斗节点打完不给任何奇物,一关之内只兑付一次(用户 2026-10-05 纠错)。**③两个新种类入池**=刷新次数(须先与"商店独立刷新机制"划清边界)+ 专长获取门票(拿到即开不可囤积/罕见只在概率/一局限购一次/计步保底:连续 5 次三选一展示未出→第 6 次必出,刷新重展计入、奖励节点与商店共享计数);附带 `shop.tres` 补回复(默认原则要求分类内成员都在该出现的渠道池里)与 charge 标签补至 ≥4 件(现仅 3 件,档二永远达不到——数据缺陷)。设计事实源=`design/gdd/systems/冒险循环/奇物.md` v2.7,任务书=`design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md`(T0-T8≈4.5d,两段切分预案在册〔段一词族 T0-T3≈2d/段二渠道+入表 T4-T8≈2.5d〕,切分点=T3 出口;11 条设计契约含 6 条 🔴 停机级;12 条批末验收断言;代拍板白名单 5 项;待用户裁点 4 项〔玩家可见面违规/第四关档二复裁/门票四参数终值/存档键正式迁移〕)。**开工门**:与在途 M-4 各批(判式换代/全局变异/配比预设)撞同一批文件(`adventure_table.gd`/`level_runner.gd`/`adventure.tres`),须确认不并行或用户明示插队 | 卡②门:迭代 14 出口 | 卡①已落籍(原估 0.5d);卡②T0-T8≈4.5d(可两段切分:词族对齐段 + 渠道入表段) |
|
| 迭代 15 | **②奇物概念收口与词族对齐批(2026-10-05 用户令编入本迭代)**:概念层已由用户逐轮裁定定稿(《奇物》v1.0→v2.7,7 轮),本批只做**落地对齐**、不做二次设计。三批内容:**①三套旧词族全面对齐**(顶层已改名「奇物」而代码仍叫旧名=用户最初抱怨的"文档与代码分开"):`feature_*`→`curio_*`(103 处/7 文件)、`relic_*`→`feat_*`(162 处/12 文件)、运行层 `bonus_*`→`curio_*`(160 处/8 文件)。**硬约束:`reward_*` 已被 `reward_pick`/`reward_node`/`reward_preview` 占用,统一词族不得使用**;`relic_table.gd` 与两个控制器类改名须同步 Godot `.uid`/`.tscn`(非文本层无法自证)。**②三条渠道按分类分离**(现行三渠道共用同一个 98 张池、三类混编):关底 Boss 击败=通过这一关→只出专长;奖励节点/商店→属性值提升+资源、专长在此**只以门票形式**出现。**兑付频率红线**:奇物不是打一场战斗给一份,关内普通战斗节点打完不给任何奇物,一关之内只兑付一次(用户 2026-10-05 纠错)。**③两个新种类入池**=刷新次数(须先与"商店独立刷新机制"划清边界)+ 专长获取门票(拿到即开不可囤积/罕见只在概率/一局限购一次/计步保底:连续 5 次三选一展示未出→第 6 次必出,刷新重展计入、奖励节点与商店共享计数);附带 `shop.tres` 补回复(默认原则要求分类内成员都在该出现的渠道池里)与 charge 标签补至 ≥4 件(现仅 3 件,档二永远达不到——数据缺陷)。设计事实源=`design/gdd/systems/冒险循环/奇物.md` v2.7,任务书=`design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md`(T0-T8≈4.5d,两段切分预案在册〔段一词族 T0-T3≈2d/段二渠道+入表 T4-T8≈2.5d〕,切分点=T3 出口;11 条设计契约含 6 条 🔴 停机级;12 条批末验收断言;代拍板白名单 5 项;待用户裁点 4 项〔玩家可见面违规/第四关档二复裁/门票四参数终值/存档键正式迁移〕)。**开工门**:与在途 M-4 各批(判式换代/全局变异/配比预设)撞同一批文件(`adventure_table.gd`/`level_runner.gd`/`adventure.tres`),须确认不并行或用户明示插队 | 卡②门:迭代 14 出口 | 卡①已落籍(原估 0.5d);卡②T0-T8≈4.5d(可两段切分:词族对齐段 + 渠道入表段) |
|
||||||
| 迭代 15 | **③秘宝代码词族对齐批(2026-10-05 用户令编入本迭代)**:设计侧已完成(消歧更名批 `430419c`+`06e94b7`,26 个设计文档「魔法道具」→「**秘宝**」,同调位机制名保留不变),本批只做**代码侧对齐**、不做二次设计。内容:`aux_*`/`AuxItem*` 词族全族换词 **358 处 / 36 文件**(重灾 `adventure_runner.gd`79 / `level_runner.gd`27 / `bonus_interact_controller.gd`19 / `battle_orchestrator.gd`18 / `config_db.gd`14 / `main.gd`13),分五组落:**A 玩家可见文案(P0,5 处)**=`battle_narrator.gd:117-118` + `bonus_interact_controller.gd:76` + `hero_info_panel_view.gd:56`(槽位标题 `UiKit.label`)+ `:178`(tooltip)· B schema 与数据表(`aux_item_table.gd`/`aux_items.tres`/`aux_items.gd` 文件名+类名+`ConfigDB` 持有变量与访问器全链跟改,**须同步 Godot `.uid`/`.tscn` + `--import` 重刷类名缓存**——迭代 14.5 实证在册坑)· C 文档链接修复(含 `architecture.md` 两处既有断债顺带清偿)· D 中文注释层(**须分色**:`魔法矢`/`魔法反噬`/`魔法族`/`魔法护甲` 属敌方伤害护甲语汇🔴不动)· E 测试文件名+内部变量。**用户三项拍板**:全族彻底改(含数据表)· **断点存档键一律保留**(`bonus_aux_carry`/`aux_detail`/`aux_cleared`/`aux_cleared_last`/`aux_items` 断点数组/`attunement_charges` 共 34 处引用一字不改,破档即进度丢失)· registry 条目键 `aux_items` 不改(数据契约键)。设计事实源=`design/gdd/systems/排雷循环/秘宝.md` v0.9,任务书=`design/research/任务书-秘宝代码词族对齐批-2026-10-05.md`(T0-T9≈5.0d,**超软盒 3 日上限·知情预挂**:T7 段末闸后 L3 呈报切点不擅切;**三档降级面 G1/G2/G3 在册**〔G3 下限=仅组 A 完成〕;5 条设计契约含 5 条 🔴 停机级〔存档兼容零破坏/数值零漂移/schema 契约面零变更/零字段更名/核心层零 await〕;代拍板白名单 5 项;**C1/C2 已裁关闭·全改保一致·待裁点 0 项**)。**撞批已消解**:② 奇物批 2026-10-05 收口落库(合并 `c571af2`),并行风险解除,本批为迭代 15 唯一在途需求;**T0 须重取基线**(判式换代批 T5 读数 750/0、② 又动数据层,§1.2 的 747 为②前旧数禁沿用)并复核事实表。**✅ 裁决(用户 2026-10-05「全改保一致」)**:C1 `"aux_item"` 域串**照改**(实测连锁面收窄——`reward.tres` 已零 aux_item 数据行,池种随迭代 11 T7 退役;16 处字面量全在代码内闭合无存档依赖;唯一连锁项=`smoke_all.gd:3932` 断言须同步)· C2 `aux_items` 一名两义**拆分**(ConfigDB 持有变量+表注册键✅改 / 断点存档键+冒烟夹具🔴禁改——**「键名禁改」与「变量名禁改」是两回事**,禁改的只是落盘字面量)。新增**组 F**(分派语汇与域串 16 处),任务卡扩为 T0-T10≈5.5d。**开工门**:✅ 已无待裁点,可直接发 T0 | 卡③门:迭代 14 出口(**裁点已全决·可开工**) | 卡①已落籍(原估 0.5d);卡②已落籍(`c571af2`);**卡③可开工**(无待裁点;T0 取基线后回填估时) |
|
| 迭代 15 | **③秘宝代码词族对齐批(2026-10-05 用户令编入本迭代)**:设计侧已完成(消歧更名批 `430419c`+`06e94b7`,26 个设计文档「魔法道具」→「**秘宝**」,同调位机制名保留不变),本批只做**代码侧对齐**、不做二次设计。内容:`aux_*`/`AuxItem*` 词族全族换词 **358 处 / 36 文件**(重灾 `adventure_runner.gd`79 / `level_runner.gd`27 / `bonus_interact_controller.gd`19 / `battle_orchestrator.gd`18 / `config_db.gd`14 / `main.gd`13),分五组落:**A 玩家可见文案(P0,5 处)**=`battle_narrator.gd:117-118` + `bonus_interact_controller.gd:76` + `hero_info_panel_view.gd:56`(槽位标题 `UiKit.label`)+ `:178`(tooltip)· B schema 与数据表(`aux_item_table.gd`/`aux_items.tres`/`aux_items.gd` 文件名+类名+`ConfigDB` 持有变量与访问器全链跟改,**须同步 Godot `.uid`/`.tscn` + `--import` 重刷类名缓存**——迭代 14.5 实证在册坑)· C 文档链接修复(含 `architecture.md` 两处既有断债顺带清偿)· D 中文注释层(**须分色**:`魔法矢`/`魔法反噬`/`魔法族`/`魔法护甲` 属敌方伤害护甲语汇🔴不动)· E 测试文件名+内部变量。**用户三项拍板**:全族彻底改(含数据表)· **断点存档键一律保留**(`bonus_aux_carry`/`aux_detail`/`aux_cleared`/`aux_cleared_last`/`aux_items` 断点数组/`attunement_charges` 共 34 处引用一字不改,破档即进度丢失)· registry 条目键 `aux_items` 不改(数据契约键)。设计事实源=`design/gdd/systems/排雷循环/秘宝.md` v0.9,任务书=`design/research/任务书-秘宝代码词族对齐批-2026-10-05.md`(T0-T9≈5.0d,**超软盒 3 日上限·知情预挂**:T7 段末闸后 L3 呈报切点不擅切;**三档降级面 G1/G2/G3 在册**〔G3 下限=仅组 A 完成〕;5 条设计契约含 5 条 🔴 停机级〔存档兼容零破坏/数值零漂移/schema 契约面零变更/零字段更名/核心层零 await〕;代拍板白名单 5 项;**C1/C2 已裁关闭·全改保一致·待裁点 0 项**)。**撞批已消解**:② 奇物批 2026-10-05 收口落库(合并 `c571af2`),并行风险解除,本批为迭代 15 唯一在途需求;**T0 须重取基线**(判式换代批 T5 读数 750/0、② 又动数据层,§1.2 的 747 为②前旧数禁沿用)并复核事实表。**✅ 裁决(用户 2026-10-05「全改保一致」)**:C1 `"aux_item"` 域串**照改**(实测连锁面收窄——`reward.tres` 已零 aux_item 数据行,池种随迭代 11 T7 退役;16 处字面量全在代码内闭合无存档依赖;唯一连锁项=`smoke_all.gd:3932` 断言须同步)· C2 `aux_items` 一名两义**拆分**(ConfigDB 持有变量+表注册键✅改 / 断点存档键+冒烟夹具🔴禁改——**「键名禁改」与「变量名禁改」是两回事**,禁改的只是落盘字面量)。新增**组 F**(分派语汇与域串 16 处),任务卡扩为 T0-T10≈5.5d。**开工门**:✅ 已无待裁点,可直接发 T0 | 卡③门:迭代 14 出口(**裁点已全决·可开工**) | 卡①已落籍(原估 0.5d);卡②已落籍(`c571af2`);**卡③可开工**(无待裁点;T0 取基线后回填估时) |
|
||||||
|
|||||||
Reference in new issue
Block a user