工程(判据出处注记3/7·battle+contracts+integration): 20套件80函数逐函数挂# oracle注记——战斗四文档验收句(战斗结算:360-366/敌人系统:295-311/增益状态:250-262/地图战斗资源:235-241)+排雷玩法:231/237+行动经济+地形变异:156-158+奇物+存档序列化断点域/迁移链+关卡节点图生成:132+architecture:89/90/107/144+code-conventions:40/41/54; 本步凭据: 六目录代表套件直跑全绿(seal/contracts×2/integration×3),其余随WP4全量档兜

This commit is contained in:
DKChan committed 2026-11-06 07:23:25 +08:00
1 parent ddc352a985
commit 9e26df16be
18 files changed
+99

No files matched your search

@@ -21,6 +21,7 @@ func _init() -> void:
# ---- 类型闸断言(V7——project.godot warning 配置在位〔源码断言〕+审计器脚本在位;
# 审计器归零判定走 static_scan S9 闸机,此处兜配置面)----
func _smoke_type_gate() -> void:
# oracle: design/engineering/code-conventions.md:41(封装边界——类型闸源码扫描组)
var pj: String = FileAccess.get_file_as_string("res://project.godot")
Kit.check("V7 类型闸 warning 配置在位(untyped_declaration=1 显形)〔迭代27 T5〕",
pj.contains("gdscript/warnings/untyped_declaration=1"))
@@ -31,6 +32,7 @@ func _smoke_type_gate() -> void:
# ---- 卫生件 grep 闸(V8——死代码/字符串 Callable/影子账残留零命中;源码扫描面)----
func _smoke_hygiene_gates() -> void:
# oracle: design/engineering/code-conventions.md:54(模态覆盖层层级与登记纪律——卫生闸组)
var callables := 0
for d in ["res://core", "res://presentation", "res://data"]:
var dir := DirAccess.open(d)
@@ -40,6 +40,8 @@ func _init() -> void:
# ---- B1 兑付配方词表:五配方/三目标规则/双结账政策——常量非空且互异(封闭枚举负空间) ----
func _test_damage_controller_vocabularies() -> void:
# oracle: design/engineering/architecture/architecture.md:89(事件/事实/效果类型/算子四词表封闭——契约词表组)
# oracle: design/engineering/architecture/architecture.md:89(事件/事实/效果类型/算子四词表封闭——契约词表组)
var kinds: Array = [
DamageControllerScript.KIND_HERO_ATTACK, DamageControllerScript.KIND_ENEMY_SKILL,
DamageControllerScript.KIND_BOARD_TYPED, DamageControllerScript.KIND_BOARD_BLAST,
@@ -69,6 +71,8 @@ func _test_damage_controller_vocabularies() -> void:
# ---- D2↔B1:掷点用途标签 ∈ RngService 封闭词表(EC12——跨系统字面量契约的成员性断言) ----
func _test_rng_tag_closure(db) -> void:
# oracle: design/engineering/architecture/architecture.md:90(流 scope 封闭词表组)
# oracle: design/engineering/architecture/architecture.md:90(流 scope 封闭词表组)
var stream_label: String = String(db.combat.settlement.damage_roll.armor_roll_stream)
Kit.check("settlement.armor_roll_stream ∈ RngService 封闭标签词表(EC12)",
RngServiceScript.PURPOSE_TAGS.has(stream_label))
@@ -82,6 +86,8 @@ func _test_rng_tag_closure(db) -> void:
# ---- B1→D1 行协议:单据九栏缺省齐备 + 协议公共键形态 ----
func _test_ticket_nine_columns() -> void:
# oracle: design/gdd/systems/战斗循环/战斗结算.md:362(单据九列协议组)
# oracle: design/gdd/systems/战斗循环/战斗结算.md:362(单据九列协议组)
var ctrl = _bare_controller()
var t: Dictionary = ctrl.open_ticket(DamageControllerScript.KIND_BOARD_FLAT_HERO, "mine_hit", "契约探针",
{"channel": "棋盘兑付", "base_value": 1, "target_rule": DamageControllerScript.TARGET_HERO, "ri": 0})
@@ -111,6 +117,8 @@ func _bare_controller():
# ---- B4→B3:增益授予布尔受理口径(受理/拒绝二元面 + 投影一致性) ----
func _test_status_boolean_acceptance(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:250(受理布尔面组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:250(受理布尔面组)
var effects = StatusContainerScript.new(db)
# EC1 域闭:notify_battle_start 前授予 = false(受理面封闭)
var any_row: Dictionary = {}
@@ -137,6 +145,8 @@ func _test_status_boolean_acceptance(db) -> void:
# 个体键直传字面量("e1"/"e2"/"e3"——拼写约定单点在 StatusContainer.owner_key_for,测试面模拟授予路径逐只授)
func _test_status_individual_isolation(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:251(按个体归属组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:251(按个体归属组)
var effects = StatusContainerScript.new(db)
effects.notify_battle_start()
var src := {"source_class": "seal_hit", "origin_cell": Vector2i(-1, -1), "round_index": 0}
@@ -158,6 +168,8 @@ func _test_status_individual_isolation(db) -> void:
func _test_status_grant_all_per_unit(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:252(授予即生效组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:252(授予即生效组)
var effects = StatusContainerScript.new(db)
effects.notify_battle_start()
var src := {"source_class": "mine_hit", "origin_cell": Vector2i(-1, -1), "round_index": 0}
@@ -184,6 +196,8 @@ func _test_status_grant_all_per_unit(db) -> void:
func _test_status_death_clears(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:250(战斗结束清空组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:250(战斗结束清空组)
var effects = StatusContainerScript.new(db)
effects.notify_battle_start()
var src := {"source_class": "seal_hit", "origin_cell": Vector2i(-1, -1), "round_index": 0}
@@ -197,6 +211,8 @@ func _test_status_death_clears(db) -> void:
func _test_status_merge_per_unit(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:253(只登记不去重组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:253(只登记不去重组)
var effects = StatusContainerScript.new(db)
effects.notify_battle_start()
var src := {"source_class": "enemy_action", "origin_cell": Vector2i(-1, -1), "round_index": 0}
@@ -219,6 +235,8 @@ func _test_status_merge_per_unit(db) -> void:
# ---- B4 结算链契约(断言补齐批——①增益状态结算链):衰减逐值/战斗结束全清/满层拒绝/独立并存/首授快照 ----
func _test_status_decay_and_clear(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:21(先兑付后衰减组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:21(先兑付后衰减组)
var effects = StatusContainerScript.new(db)
effects.notify_battle_start()
var src := {"source_class": "seal_hit", "origin_cell": Vector2i(-1, -1), "round_index": 0}
@@ -239,6 +257,8 @@ func _test_status_decay_and_clear(db) -> void:
func _test_status_stack_full_reject(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:255(满层拒绝原子且留痕组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:255(满层拒绝原子且留痕组)
var effects = StatusContainerScript.new(db)
effects.notify_battle_start()
var src := {"source_class": "seal_hit", "origin_cell": Vector2i(-1, -1), "round_index": 0}
@@ -256,6 +276,8 @@ func _test_status_stack_full_reject(db) -> void:
func _test_status_independent_branch(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:257(合成不设上下限组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:257(合成不设上下限组)
var effects = StatusContainerScript.new(db)
effects.notify_battle_start()
var probe := {
@@ -280,6 +302,8 @@ func _test_status_independent_branch(db) -> void:
func _test_status_snapshot_first_grant(db) -> void:
# oracle: design/gdd/systems/战斗循环/增益状态.md:258(快照抗重载组)
# oracle: design/gdd/systems/战斗循环/增益状态.md:258(快照抗重载组)
var effects = StatusContainerScript.new(db)
effects.notify_battle_start()
var src_first := {"source_class": "seal_hit", "origin_cell": Vector2i(3, 4), "round_index": 1}