收口(迭代39审计闭合): 独立验收审计通过(附例外)——三件合并前事项处理:V3保底不逼断言落码(special_skills双态+SkillLottery 30摇零逼出,夹具内存改行白盒先例)/level_shop_economy RunLedger注释残留清+al4零引用源码断言落hero_ledger_test/审计备案两行入反哺点12-13(check_quiet提取器局限+V5基线载体改道);审计报告落位(对照表8行抽查/undo1复现红绿/削弱检查72删全改址/S13基线零改动/292×27键零漂移)

This commit is contained in:
DKChan committed 2026-10-27 05:31:12 +08:00
1 parent 50f9caa7bf
commit 88bd4de09a
6 files changed
+1288 -1230

No files matched your search

@@ -64,6 +64,31 @@ func _init() -> void:
Kit.check_quiet(_has(ec.rollable_skills(u), "venom_curb") and _has(ec.special_skills(u), "venom_curb"),
"V2 条件真(半血过闩):venom_curb 双面入集合〔触发器批 V2〕")
# ---- V3 保底不逼条件不满足技(保底集合取 special_skills 已含排除——编排级:
# 无条件特殊技 A w1+条件假技 B w9999+普攻;保底命中摇出的是 A,撤销过滤态同种子必中 B)----
var ec_v3 = load("res://core/unit_container.gd").new(db)
Kit.check_quiet(ec_v3.spawn(1, 0, 8, [], 6, 8, [], "", "", "battle"), "V3 前置:地精 spawn")
var g3 = ec_v3.all_enemies()[0]
g3["pool"] = [
{"skill_id": "attack", "weight": 9, "cooldown_left": 0},
{"skill_id": "heavy", "weight": 1, "cooldown_left": 0}, # A=无条件特殊技
{"skill_id": "desperate_guard", "weight": 9999, "cooldown_left": 0,
"trigger": {"fact": "self_hp_pct", "op": "lte", "value": 35, "latch": false}}, # B=条件假技 w9999
]
g3["basic_streak"] = int(db.skill.pity_threshold) # 保底已触发位(夹具内存改行——round_flow 白盒先例)
var specials_v3: Array = ec_v3.special_skills(g3)
Kit.check_quiet(_has(specials_v3, "heavy") and not _has(specials_v3, "desperate_guard"),
"V3 保底集合含 A 排除 B(special_skills 真实入口——条件假技不逼出)〔触发器批 V3〕")
var drawn: String = ""
for i in range(30):
var stream_v3 = _rng(700123).open_stream("behavior_roll")
var pick = load("res://core/skill_lottery.gd").draw(specials_v3, stream_v3)
if String(pick) == "desperate_guard":
drawn = "desperate_guard"
break
Kit.check_quiet(drawn == "",
"V3 保底摇号 30 次零逼出 B(SkillLottery 真实摇号——撤销过滤态 w9999 同种子必中,红/绿两态由撤销证明承载)〔触发器批 V3〕")
# ---- V4 闩型语义(过门恰一次/治疗抬血不回锁/阈值式判别 max_hp=8 value=35:hp=3 触发 hp=4 不触发)----
Kit.check_quiet(int(u.hp) == 15 and ec.check_trigger_unlocks(u).is_empty(),
"V4 闩已置:二次复查零新解锁(过门恰一次)〔触发器批 V4〕")
+7
View File
@@ -138,5 +138,12 @@ func _init() -> void:
"sc3 _bind_shop 调用全仓仅构造一处(bind_calls=%d)〔拆件批 V5〕" % bind_calls)
Kit.check_quiet(not adv_src.contains("_forward_") and not adv_src.contains("signal node_entered"),
"sc3 六转发信号族与 _forward_ 转发方法全仓零命中(信号直连收口)〔拆件批 V5〕")
# al4 源码断言(配装批——RunLedger 整类退役全仓零引用)
var runledger_hits := 0
for f in ["res://core/adventure_runner.gd", "res://core/level_runner.gd", "res://core/battle_orchestrator.gd",
"res://core/shop_session.gd", "res://core/effect_engine.gd", "res://core/effect_context.gd"]:
runledger_hits += FileAccess.get_file_as_string(f).count("RunLedger") + FileAccess.get_file_as_string(f).count("run_ledger")
Kit.check_quiet(runledger_hits == 0 and not FileAccess.file_exists("res://core/run_ledger.gd"),
"al4 RunLedger 全仓零引用+类文件已删(充能单源化退役收口)〔配装批 V4〕")
quit(Kit.finish("hero_ledger_test", "PASS — 主角账公式/三通道日记/断点片段往返与旧档回退/源码断言 全绿"))
@@ -1032,7 +1032,7 @@ func _smoke_shop_room() -> void:
var gp0: int = runner.gp
Kit.check("购买 atk_up 受理(现价 6)", runner.buy_product("atk_up"))
Kit.check("钱包扣现价 6(%d → %d)" % [gp0, runner.gp], runner.gp == gp0 - 6)
# 加算区住 RunLedger
# 加算区住主角账
Kit.check("统一冒险加算区 atk +1(加算区住主角账)", runner.hero().bonus_total("atk") == 1 and runner.hero().bonus_total("max_hp") == 0 and runner.hero().bonus_total("armor_class") == 0)
by_id = _shop_products_by_id(runner.shop_products())
Kit.check("atk_up 二购现价 = 4+2+2=8(步长 2 × 已购 1 档,现价现算)", int(by_id["atk_up"]["price"]) == 8 and int(by_id["atk_up"]["purchased"]) == 1)
+1231 -1229
View File
File diff suppressed because it is too large. Load diff
+3
View File
@@ -17,4 +17,7 @@
| 11 | design/gdd/systems/跨局循环/生涯.md:55 | 代码行号指路句指 adventure_runner.gd:814(本批收薄后 627 行——行号越界,08d 引用可核新增红) | 行号指路改语义指认(结算受理段已随拆件迁 CurioStop/主角账——按 doc-conventions「引用不转述/代码↔设计追溯由 GDD 承担」改写该句;行号指路本属脆弱面,建议连同 :50/:60 两处留档句一并换代) | 本批 diff 直接后果(commit 被文档域闸拦——反哺落文后本批合回) |
| 12 | design/engineering/test-conventions.md | 验收尾缀形态:check_quiet 静默收集断言不入 extract_checks.py 扫描面(审计备案);失败消息尾缀对静默通道的字面形态 | 备案级——工具面局限登记(如需覆盖 check_quiet 属提取器改版,工程批) | 独立验收审计备案 |
| 13 | 触发器卡 V5 改前基线载体 | 卡定 game/tests/evidence/trigger_baseline.md 未落盘(代拍板 #10 改道 skill_unlock/round_flow 编排集成承载) | 备案——三 Boss 迁移零变化验证强度=语义断言级;后续同类迁移批建议保留事件序列基线落盘义务 | 独立验收审计备案 |
**边界漏判呈报(副卡契约 3 内在矛盾,已按行留存实现)**:副卡 K4「aux_items 键载库存全量快照(含同调行)」在选路/三选一停点成立、在关卡完成停点不成立(改前行已被关末 reset 清空)——「同调行始终留在 treasure_inventory」与「aux_items 键值形态逐位不变」在该停点形态互斥。实现采「行留存」(关卡末清空改选择性保留+treasure_inventory 提冒险级共享),断点档关卡完成停点 aux_items 含同调未用行(24 停点形态变化,充能读数 attunement_charges 全部逐位一致)。建议 §2 反哺时把该边界写明。
+21
View File
@@ -0,0 +1,21 @@
# 迭代 39 独立验收审计报告(2026-10-27)
审计入口:独立子代理(未参与实现);基线=merge-base 5699192af 三点 diff。依据 test-conventions §8。
## 一、对照表逐行核对——通过(附 1 缺漏已补+2 例外)
抽查 8 行全数在案且真实入口无绕过:hr1(直构逐值+start_adventure 真链 :20-52)/hr1-s(商店购买真链 :54-69,正钉 wr1 改动点)/hr2(三通道+片段往返 :71-122)/sc3(_bind_shop 单点+_forward_ 零命中 :124-140)/〔拆件批 V2〕/〔V3〕承继断言/触发器 V1 七反例+V2 双面+V8 阈值式/P8 28 键断言。缺漏 1(V3 保底不逼断言未落码)已补(trigger_cond_test V3 段:special_skills 双态+SkillLottery 30 摇零逼出+撤销态红证)。例外:hr 系尾缀落 manifest 注记行(备案,反哺点 12)。
## 二、撤销证明抽查复现——通过
undo1 复现:基线绿→gain_bonus 行改 pass→hr1-s 恰红(断言钉在被撤改动上)→还原复绿,工作树 clean。undo2/undo3 记录面与码面对得上(抽查一条合规)。
## 三、测试削弱检查——通过
删 72 行 Kit 断言全部属改址(旧路径引用已删字段),逐条同判据替换;净增 1 行=round_flow V7 扩行(申报④兑现);EV 锚区间零触碰(预期红非削绿);申报③兑现;表迁移与申报逐字一致。残留 1(level_shop_economy:1035 RunLedger 注释)已清+al4 零引用源码断言补落。申报外等价改写 1 处(skill_unlock 零扰动/确定性载体换蜘蛛首遇带——投放致地精池含 trigger 行,50f9caa7 已申报,判例外)。
## 四、S13 基线核查——通过
tools/ 全目录零改动(基线禁改契约兑现);存量红 9 键走用户特批呈报(实现报告 §三)。
## 五、bp 基线对拍抽验——通过
before vs after_T5:292×27 键=7884 次逐值比对 mismatch 0;gain_journal 0/292→292/292 在档(契约 2 兑现)。before vs after_attune:attunement_charges 292/292 全等(单源对拍达成);aux_items 24 处=申报例外(关卡完成停点留存同调行,代拍板 #6/反哺点呈报吻合)。
## 结论
**通过(附例外)**——合并前三件已全部处理(V3 断言补落/RunLedger 残留清+al4 补/备案两行入反哺点 12-13)。收口待用户裁决三项:S13 特批(9 键 refresh)、EV 锚重锚(goblin/hook_horror 池权重投放)、08d 反哺落文(生涯.md:55 行号句)。