工程+文档(判据出处行锚挂钩+存量清偿第一批·test oracle 项): test-conventions §8.3 立「判据出处行锚」(需求点格须带现行文档:行锚——断言预期值从规格句抄出禁反推实现)+退役对账义务+真实入口判定收窄(信号直发=接线验证不充真实入口)+§8.7 审计加判据出处核对问; capability_audit 增链式锚反向覆盖机检(80套件须被能力行承接——13链断套件补挂 9 能力行归零); pipeline_gate 增 C5 行锚格式机检(生效日 2026-11-05 按卡文件名日期分流——红证「判据出处行锚缺失」+旧卡零误伤双验); 清偿第一批=大门两分支/进档链/设置入口真输入化(emit→push_click 经 push_input 管线,open_camp_via_savesel coroutine 化补排版帧——开层同帧 rect 未排真点击落空实证修复,7 调用点 await)+README 能力行 :158 七物件接线验证降级残险登记/:159 大门行真入口换承载; 待办清单登记分期条目(28); 同区并入闸门耗时基线表(README 耗时基线节+无远端旧口径换代,--docs 已验)。验证: capability_audit --strict 绿(链断0)/pipeline_gate PASS/probe_gate --click --full 全段 PASS(ui_click_probe 问题=0)/--docs 验收通过零新增红

This commit is contained in:
DKChan committed 2026-11-05 02:48:07 +08:00
1 parent 9011efc3b5
commit aeff033e9b
11 files changed
+124 -34

No files matched your search

+25 -1
View File
@@ -118,6 +118,29 @@ static func isolate_save(main, tag: String, mark_first_done: bool = false, with_
main.settings_store = SettingsStoreScript.new("user://%s_settings.cfg" % tag)
return iso
# ---- 真输入点击承载(test-conventions §8.3「真实入口」判定口径)----
# 合成鼠标事件经 Viewport.push_input 进引擎输入管线(hitbox/命中测试参与),press+release 成对
#(BaseButton pressed 信号走 release 沿——ui_input_probe :717-733 / screen_flow_probe :484-499 同式)。
# 信号直发(pressed.emit())只许标「接线验证」,不得充当真实入口断言的驱动。
static func push_click(main, ctrl: Control) -> void:
push_click_at(main, ctrl.get_global_rect().get_center())
static func push_click_at(main, pos: Vector2) -> void:
var down := InputEventMouseButton.new()
down.position = pos
down.global_position = pos
down.button_index = MOUSE_BUTTON_LEFT
down.pressed = true
main.get_viewport().push_input(down, true)
var up := InputEventMouseButton.new()
up.position = pos
up.global_position = pos
up.button_index = MOUSE_BUTTON_LEFT
up.pressed = false
main.get_viewport().push_input(up, true)
# 营地经进档开层(卡② mn9 新路径——campbtn 已撤;槽模板注入隔离命名空间,防碰真实槽
# user://save_slot_N.json——真实档红线)。创建=激活=暂行开营地(卡③ Q3 乙落点);
# 驱动后写盘目标=隔离槽文件(持久化断言读 user://<tag>_slot_1.json)。返回 false=新档钮缺失(驱动中断)。
@@ -130,8 +153,9 @@ static func open_camp_via_savesel(main, tag: String) -> bool:
if FileAccess.file_exists(sp):
DirAccess.remove_absolute(sp)
main._open_save_select()
await main.get_tree().process_frame # 排版帧——真点击命中的是控件 rect,开层同帧容器未排(emit 无此依赖)
var new_btn: Button = main.ui.modals.menu.save_select_overlay._new_btns.get(1)
if new_btn == null:
return false
new_btn.pressed.emit() # 真实按钮信号路径 → _on_save_select_new → create_slot+open_camp
push_click(main, new_btn) # 真输入 → _on_save_select_new → create_slot+open_camp
return true