收口修复(迭代39): 收口闸红修复——round_flow V1 桶宿主字典引用重挂(duplicate(true)深拷贝值字典,单源化后跨战共享靠同引用)+led属性访问改get;skill_unlock零扰动与确定性载体换巨蜘蛛首遇带(池三行全无trigger——地精池现含孤注守势trigger行,快照键策略载体换代);临时patch脚本清根(熵增闸红清除);反哺点补第11行(生涯.md:55行号越界——本批收薄引致,design/禁写面呈报)
This commit is contained in:
1 parent
4868e11b9d
commit
50f9caa7bf
8 files changed
+854610
-7
No files matched your search
@@ -990,14 +990,15 @@ func _smoke_counter_buckets() -> void:
|
||||
o1.begin_battle(enc1)
|
||||
var dig1: bool = o1.action_economy.request_dig(0, false)
|
||||
Kit.check("V1 第1战真实 request_dig 受理(begin_battle 后 ACTIVE 相位)〔无状态化 V1〕", dig1)
|
||||
Kit.check("V1 第1战付费挖格经 ctx 就地写 adventure 桶=1(无 export 搬运时点)〔无状态化 V1〕", int(led.adventure_counters.get("adv_twin_digs", 0)) == 1)
|
||||
Kit.check("V1 第1战付费挖格经 ctx 就地写 adventure 桶=1(无 export 搬运时点)〔无状态化 V1〕", int(led.get("adv_twin_digs", 0)) == 1)
|
||||
var enc2 = enc1.duplicate(true)
|
||||
enc2["battle_index"] = 2
|
||||
enc2["adv_bucket"] = led # 冒险桶宿主字典引用重挂(duplicate(true) 深拷贝值字典——单源化后跨战共享靠同引用)
|
||||
var o2 = RigS.new(_db, _fresh_rng(779302))
|
||||
o2.begin_battle(enc2)
|
||||
Kit.check("V1 第2战 begin_battle 经 ctx 读到上一战持久值=1(读路径走宿主字典引用,非副本种子回灌)〔无状态化 V1〕", EffectEngine.counter(o2.counters_ctx, "adv_twin_digs") == 1)
|
||||
o2.action_economy.request_dig(0, false)
|
||||
Kit.check("V1 第2战挖后 adventure 桶跨战累积=2(共享账判空早退缺陷消解的回归钉面——旧副本态恒 1)〔无状态化 V1〕", int(led.adventure_counters.get("adv_twin_digs", 0)) == 2)
|
||||
Kit.check("V1 第2战挖后 adventure 桶跨战累积=2(共享账判空早退缺陷消解的回归钉面——旧副本态恒 1)〔无状态化 V1〕", int(led.get("adv_twin_digs", 0)) == 2)
|
||||
# V6——battle 桶随宿主销毁:第1战标错落 insurance_used(battle 桶无前缀),次战新编排器读 0。
|
||||
var encA = {"level_index": 1, "node_depth": 0, "hero_hp": 40, "hero_atk": 8, "hero_max_hp": 40,
|
||||
"hero_armor_class": 10, "hero_ap_bonus": 0, "attunement": [], "attune_charges": {},
|
||||
|
||||
@@ -82,8 +82,9 @@ func _test_latch_irreversible(db) -> void:
|
||||
|
||||
# 普通行无字段逐位零扰动:地精 (1,0) 池快照零 unlock 键、过滤恒空转、可摇=全池
|
||||
func _test_plain_rows_zero_drift(db) -> void:
|
||||
var ec = _boss(db, 1, 0, "battle")
|
||||
var u: Dictionary = _boss_u(ec)
|
||||
var ec = load("res://core/unit_container.gd").new(db)
|
||||
Kit.check("零扰动前置:巨蜘蛛首遇带 spawn(池三行全无 trigger——快照键策略钉死载体)", ec.spawn(2, 1, int(db.hero.max_hp), [], -1, -1, [], "", "", "battle"))
|
||||
var u: Dictionary = ec.all_enemies()[0]
|
||||
var any_unlock_key := false
|
||||
for e in u.pool:
|
||||
if e.has("trigger") or e.has("trigger_latched"):
|
||||
@@ -93,9 +94,10 @@ func _test_plain_rows_zero_drift(db) -> void:
|
||||
var rollable: Array = ec.rollable_skills(u)
|
||||
var pool_count: int = (u.pool as Array).size()
|
||||
Kit.check("零扰动:可摇集合 = 全池(普攻冷却恒 0,过滤恒空转)", rollable.size() == pool_count)
|
||||
# 同种子确定性:容器零随机——两实例同输入查询逐位同
|
||||
var ec2 = _boss(db, 1, 0, "battle")
|
||||
var u2: Dictionary = _boss_u(ec2)
|
||||
# 同种子确定性:容器零随机——两实例同输入查询逐位同(同款零扰动载体)
|
||||
var ec2 = load("res://core/unit_container.gd").new(db)
|
||||
Kit.check("确定性前置:第二实例蜘蛛 spawn", ec2.spawn(2, 1, int(db.hero.max_hp), [], -1, -1, [], "", "", "battle"))
|
||||
var u2: Dictionary = ec2.all_enemies()[0]
|
||||
ec.apply_damage(u, 3)
|
||||
ec2.apply_damage(u2, 3)
|
||||
var a := JSON.stringify(ec.rollable_skills(u))
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
# 迭代 39 代拍板追认单(2026-10-27)
|
||||
|
||||
接收方:用户会话追认(备案确认——授权发生在卡片审问阶段白名单,本单为批后备案)。
|
||||
|
||||
| # | 卡 | 白名单条目 | 裁量内容 |
|
||||
|---|---|---|---|
|
||||
| 1 | 主卡 | 提交切分与 worktree 命名 | 分支 iter39 单工作区;T0/T1/T2/T3/T4/T5 各一笔提交 |
|
||||
| 2 | 主卡 | 测试改址等价写法 | 直读写已迁字段 30+ 处→stop()/hero() 件测试构造面;bind 句柄每回调新建故以关卡号守卫判重(Callable 相等不可靠) |
|
||||
| 3 | 主卡 | 迁入注释随迁措辞 | 公式/兑付/断点段注释随迁 |
|
||||
| 4 | 主卡 | 单关私有 HeroLedger 内部组织 | rebase_override 重注面+reset_for_single_level 值重置(实例不重建) |
|
||||
| 5 | 主卡(超白名单,呈追认) | ctx 增 adv_bucket 键 | 卡片 ctx 键清单漏列桶传递面——按「构造注入一次给齐」意图补全 |
|
||||
| 6 | 副卡 | 种行/补行内部组织 | treasure_inventory 提冒险级共享(卡片文件结构图 treasure_items.gd 零触碰保持;关卡末清空调用点改选择性保留——「同调行始终留在 treasure_inventory」的行承载前提,玩家可见 C 区投影零变化) |
|
||||
| 7 | 副卡(超白名单,呈追认) | 跨版续玩键值兜底补行 | 契约 3「行集为源」的跨版例外——改前档关卡完成停点行已被关末清空(键在行缺),按键值差额补行=与字典轨续玩逐位等价;新档行集为源差额零操作 |
|
||||
| 8 | 触发器卡 | 新技/状态行定名 | desperate_guard/孤注守势、sneak_ambush/趁隙偷袭、defensive_stance/护身(推荐案采纳) |
|
||||
| 9 | 触发器卡 | provisional 数值 | w1/w2、lte 35、−25、×1.5、CD4、duration 2(同数量级内) |
|
||||
| 10 | 触发器卡 | 断言组织与夹具 | trigger_cond_test 内部组织;V5 对拍以 skill_unlock/round_flow 编排集成承载(迁移断言+事件摘要) |
|
||||
@@ -0,0 +1,20 @@
|
||||
# 迭代 39 反哺点清单(2026-10-27)
|
||||
|
||||
接收方:各 owner 文档(文档批落文依据,用户裁决后执行)。
|
||||
|
||||
| # | 文档 | 关联点 | 改成什么 | 依据 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | design/engineering/architecture/architecture.md | 模块归属表 HeroLedger/CurioStop/AttuneLoadout 三行「设计定稿——实现批建件」标注 | 改「已实装(2026-10-27)」;RunLedger 相关行整段退役注记;模块表 level_runner/battle 行消费依赖列 ledger 引用句删除;CurioDeck 行删 bind_handlers 句;level_runner 行补构造注入句;「冒险域拆分定稿」节转现状登记 | 主卡+副卡落地实况 |
|
||||
| 2 | design/gdd/systems/表现与支撑/存档序列化.md | 断点域段机制句(写侧 _bp_parts 拼装/读侧 _bp_read 派生) | 改「各件自交片段(主角账/停点件/关卡件)+冒险应用层唯一拼盘落盘口+获得日记键扩列(gain_journal,28 键——旧档缺键汇总直载)」;同调行「始终留在 treasure_inventory」句随单源化核对 | 主卡 T4/副卡 k4 |
|
||||
| 3 | design/gdd/systems/冒险循环/冒险结构.md | 断点域字段口径 owner——获得日记键字段口径登记 | 键名 gain_journal、缺省策略 plain、旧档回退(缺键=汇总直载跳过比对;在档=明细推导比对不符拒载) | 主卡契约 2 |
|
||||
| 4 | design/gdd/systems/跨局循环/秘宝.md | 充能账机制句若有双轨描述 | 改单源化(物化行唯一事实源、剩余=未用行派生;同调未用行跨关存活——关卡末清空选择性保留) | 副卡落地实况(T0 核该文档若无双轨描述记「无需改」) |
|
||||
| 5 | design/gdd/systems/战斗循环/敌人系统.md v1.2 | §P1 表「情境条件触发器」行「待写卡实装」 | 改「已实装(2026-10-27)」;§半血解锁收编段「字段换代与行值迁移归实装批」句摘除 | 触发器卡落地 |
|
||||
| 6 | design/gdd/systems/战斗循环/战斗结算.md v1.0 | 开轮摇号排除句触发条件指针 | 查实装后无陈述漂移则记「无需改」 | 反哺核对行 |
|
||||
| 7 | design/gdd/systems/冒险循环/难度曲线与Boss.md v1.0 | 技能池投值面 | 查无漂移记「无」;两示范 provisional 投值(w1/w2/lte35/−25/×1.5)登记读表口径 | 触发器卡 §二 |
|
||||
| 8 | design/engineering/architecture/architecture.md | UnitContainer 新公开面(check_trigger_unlocks/事实组包口径)API Boundaries 登记面核查 | 若属登记面补行 | 触发器卡 §六 |
|
||||
| 9 | 体验验证清单.md | 实机目检观测项两条入册 | ①上轮停手→下轮明细出「趁隙偷袭」②地精低血后摇出「孤注守势」 | 触发器卡(登记不阻塞) |
|
||||
| 10 | 待办清单.md | 两源条目状态推进 | 「AdventureRunner 职责真拆分」「技能池情境条件触发器」→完成(batch-closure 承接) | 实现报告 |
|
||||
|
||||
| 11 | design/gdd/systems/跨局循环/生涯.md:55 | 代码行号指路句指 adventure_runner.gd:814(本批收薄后 627 行——行号越界,08d 引用可核新增红) | 行号指路改语义指认(结算受理段已随拆件迁 CurioStop/主角账——按 doc-conventions「引用不转述/代码↔设计追溯由 GDD 承担」改写该句;行号指路本属脆弱面,建议连同 :50/:60 两处留档句一并换代) | 本批 diff 直接后果(commit 被文档域闸拦——反哺落文后本批合回) |
|
||||
|
||||
**边界漏判呈报(副卡契约 3 内在矛盾,已按行留存实现)**:副卡 K4「aux_items 键载库存全量快照(含同调行)」在选路/三选一停点成立、在关卡完成停点不成立(改前行已被关末 reset 清空)——「同调行始终留在 treasure_inventory」与「aux_items 键值形态逐位不变」在该停点形态互斥。实现采「行留存」(关卡末清空改选择性保留+treasure_inventory 提冒险级共享),断点档关卡完成停点 aux_items 含同调未用行(24 停点形态变化,充能读数 attunement_charges 全部逐位一致)。建议 §2 反哺时把该边界写明。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 迭代 39 实现报告(2026-10-27)
|
||||
|
||||
接收方:待办清单「AdventureRunner 职责真拆分」「技能池情境条件触发器」两条目(batch-closure 收尾依据)+本报告 §四呈报项待用户裁决。
|
||||
|
||||
## 一、各卡状态
|
||||
|
||||
| 卡 | 状态 | 收口提交 |
|
||||
|---|---|---|
|
||||
| 主卡·冒险域拆件与账本实体化批 | 完成(T0-T5,wr1-wr8 落地) | 0229d5fb/8d7b12e0/4a9e4300/4da7f3e2/fa1409f4/659d59ed |
|
||||
| 副卡·同调配装充能域封装批 | 完成(RunLedger 整类退役) | 80fe4b8f+收尾笔 |
|
||||
| 触发器卡·技能池情境条件触发器批 | 完成(机制+三 Boss 迁移+两示范) | 4868e11b |
|
||||
|
||||
## 二、实际改动—验收对照表(结果格随附)
|
||||
|
||||
| 需求点 | 验收测试 | 真实入口 | 撤销证明 | 结果 |
|
||||
|---|---|---|---|---|
|
||||
| wr1 账本实体化 | hero_ledger_test hr1/hr1-s/hr2 | start_adventure 真链+商店购买真链 | 回退 shop_session gain_bonus hunk→hr1-s 红→还原复绿(本批执行,undo1) | 绿 |
|
||||
| wr2/wr3 停点件+纯池化 | adventure_feats〔拆件批 V2〕/level_shop_economy〔V3〕现役断言承继 | 三选一真链/pool 购买真链 | (同族 wr1 承载——停点迁移 bp 对拍五时点零漂移主证) | 绿 |
|
||||
| wr4/wr5 信号直连+构造注入 | hero_ledger_test sc3 源码断言(_bind_shop 单点/_forward_ 零命中)+adventure_feats 信号序 | 两关全流程驱动 | (bp 对拍承载) | 绿 |
|
||||
| wr6 断点片段化+日记键 | bp1 对拍 292dumps×27 键六时点逐位零漂移+gain_journal 单列在档+breakpoint_resume P8 28 键 | 同种子双跑 | (bp 对拍主证) | 绿 |
|
||||
| wr7 转发属性撤除 | 改址后现役断言全绿+S13 读数(§三) | 五单测套+ui_input_probe | —— | 绿 |
|
||||
| wr8 产出物 | 本报告三件套 | —— | 缺项红 | 在案 |
|
||||
| 副卡 wr1-wr3 充能单源化 | feat_vouchers 账本保留〔卡② R1〕+al2 单源对拍(attunement_charges 24 停点逐位一致) | 种行真链 | 回退 loadout 种行 hunk→feat_vouchers 红→还原复绿(undo2) | 绿 |
|
||||
| 触发器 wr1-wr9 | trigger_cond_test V1/V2/V4/V6/V7/V8/V9/V10(manifest 登记) | db.load_tables/spawn 真实表/编排器真链 | 回退 rollable_skills 过滤 hunk→V2 红→还原复绿(undo3) | 绿 |
|
||||
|
||||
测试削弱申报履行:主卡契约 9 零削弱;触发器卡申报①②③④已履行(skill_unlock_test 读值源换代语义保持/round_flow expect_pools 期望值随投放改写仍精确比对/:654 直调单参保留/V4 扩行只增不删)。
|
||||
|
||||
## 三、S13 读数与呈报(需用户裁决——见 §四)
|
||||
|
||||
三宿主改善达成:adventure_runner 类变量 42→23(-19)公开方法 23→14(≤20 零警告);level_runner 38→28(卡目标约 30);board_view 45→32(精确达标)。基线文件 `tools/gdstyle_baseline.txt` 零改动。
|
||||
|
||||
**存量红面(收口须用户特批,同 iter38 先例)**:
|
||||
- NEW 5 条:curio_stop max-class-variables=16/max-public-methods=31/max-branches|_apply_curio_pick=10/max-returns=9、hero_ledger max-public-methods=29——新件公开面为卡片接口块定义的迁移语义面(原基线 adventure_runner 对 _apply_curio_pick 同函数登记同值 branches=10/returns=9,超标形态随迁移显现)。
|
||||
- WORSENED 4 条:battle_orchestrator 类变量 50→51(+_hero 拆件必要成员)/文件长 1302→1315/begin_battle 函数长 141→142;level_map_screen 类变量 21→22(iter38 存量漏登记——本批零触碰该文件)。
|
||||
- 建议案:经批准将上列 9 键按实测值 refresh 进基线(含 level_map_screen iter38 存量补登)。
|
||||
|
||||
**EV 锚预期红(触发器卡 T4-4 预设停机呈报)**:round_flow EV 抽样对锚 goblin 实测 0.9148 ∉ [1.00,1.20]——两示范投放=池权重数值改动(孤注守势 buff 技稀释伤害期望,方向合理);钩爪恐魔同批投放。**重锚归用户档位发起,实现批不自行重锚**。
|
||||
|
||||
## 四、遗留读数义务与实机目检总清单
|
||||
|
||||
- 实机目检两项(登记不阻塞):①上轮停手→下轮结算明细出现「趁隙偷袭」;②地精低血后摇出「孤注守势」。
|
||||
- MC 对拍:本批触发器卡含池权重投放=数值改动——MC 锚重锚归用户发起(见 §三)。
|
||||
- 主卡 MC 口径:行为零变化重构(bp1 六时点 292 停点逐位零漂移为凭),MC 未发起。
|
||||
|
||||
## 五、中间产物退役清单(批末执行)
|
||||
|
||||
game/tests/bp_baseline_dump.gd(bp1 载体)+reports/iter39-素材/ 六份 JSON(对拍凭据,审计后随本报告退役)。
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user