feat(迭代27 T6+T7): 波五b 卫生件包+文档同步闸——对拍全同

T6 卫生件(P2 组收口):
- 死代码 13 函数删除(审计 16 处复核=ui_kit:486 实读现役不删,追认单#14)+FeatsEngine
  整文件退役(class_name 注销)
- 字符串 Callable×10 位→方法引用形态(编译期方法存在性校验;语法实证 METHOD_REF=true)
- 状态机 enum 化: adventure State(外部 String 契约 getter 词表逐位一致+外部纯读实证)/
  standee HeroState(register/set String 形参零变化+probe 面恒等)
- ConfigDB _fatal 退出归根(核心层去 quit/crash→_fatal_flag,决策归组合根 fail-fast 通道)
  +resolver 诊断/数据通道全面 Callable 化(ConfigDb↔Resolver 类型环断根)

T7 文档同步闸:
- 实现报告 design/qa/iter27-实现报告-2026-10-14.md(五波+闸表+追认单十五项+反哺点两条+目检五件)
- 06 迭代 27 条销号+GDD 反哺点两条新条;07 ㉖ 目检节+v1.0 版本行;roadmap ✅ 换代
- 审计报告本体按退役规则 git rm(吸收即死;修正计数由卡片承载);卡片来源行改指路

闸: 对拍三变体全同(第五跑)+冒烟 1081/0+run_all 27 套+probe click+render golden+static_scan 全绿
This commit is contained in:
DKChan committed 2026-10-15 01:41:37 +08:00
1 parent b605022001
commit eea345882b
24 files changed
+200 -309

No files matched your search

@@ -52,10 +52,6 @@ func _init(ctx: CurioFlowContext) -> void:
# 停点在途判据(组合根 _on_battle_end_continue 分派面——战斗总结确认后开三选一)
func has_pending() -> bool:
return not _pending_curio.is_empty()
# 续玩停点恢复入口(true=已接手呈现,调用方中止后续分派)。空候选降级(2026-10-06 用户令):
# 候选 0 件不开选择面(空面无卡无钮=死面)——消化停点后按上下文直落后续推进(战斗总结面已
# 给过玩家确认拍,三选一环节整体跳过)
+15 -7
View File
@@ -42,6 +42,14 @@
# autoload 占净名),存档读盘挂 autoload _ready(时序与旧 main._ready 读盘等价)。
extends Control
# autoload 节点路径单点(迭代 27 T6 P2-2 降格实现:审计处方「编译期全局名」与本仓 --script
# 模式编译器不解析裸 autoload 标识符冲突〔run_all.gd 头注+pacing 实证〕——字符串拼写风险
# 收敛到四常量,类型面由读视图属性承载)
const AUTOLOAD_PATH_CFG := "/root/ConfigDB"
const AUTOLOAD_PATH_RNG := "/root/RngService"
const AUTOLOAD_PATH_SAVE := "/root/SaveManager"
const AUTOLOAD_PATH_META := "/root/MetaProgression"
const UiAssembler := preload("res://presentation/ui_assembler.gd")
const Narrator := preload("res://presentation/battle_narrator.gd")
const ModalStack := preload("res://presentation/modal_stack.gd")
@@ -62,10 +70,10 @@ var run_scope = null # 会话状态承载(run_scope.gd——迭
# 节点路径双模式通用;组合根调用点/探针挂载面 main.save_manager 语义零迁移)。
var save_manager: SaveManagerCore:
get:
return get_node("/root/SaveManager")
return get_node(AUTOLOAD_PATH_SAVE)
var meta: MetaProgressionCore:
get:
return get_node("/root/MetaProgression")
return get_node(AUTOLOAD_PATH_META)
var logger = null # 试玩日志器(JSONL 持久化 + 卡死诊断转储——呈现层组件)
var _debug_entry := false # 调试会话门控(迭代 18 卡⑦——DS_DEBUG=1:启动即开浮窗+两屏角标点亮;_ready 赋值)
var _seed_edit: LineEdit
@@ -175,7 +183,7 @@ func _begin_session(adventure_session: bool) -> void:
func _ready() -> void:
db = get_node("/root/ConfigDB")
db = get_node(AUTOLOAD_PATH_CFG)
if not db.is_ready:
var ok: bool = db.load_tables("res://data/tables", false)
if not ok:
@@ -187,8 +195,8 @@ func _ready() -> void:
settings_store = SettingsStore.new()
settings_store.load_settings()
settings_store.apply()
_debug = DebugSessionScript.new(db, get_node("/root/RngService"),
Callable(self, "_debug_hero_override"), Callable(self, "_seed_value"))
_debug = DebugSessionScript.new(db, get_node(AUTOLOAD_PATH_RNG),
_debug_hero_override, _seed_value)
_debug.battle_created.connect(_on_debug_battle_created)
_debug.battle_ready.connect(_on_debug_battle_ready)
_build_ui()
@@ -482,7 +490,7 @@ func _resume_from_menu() -> void:
# 冒险编排构建+接线(开新局/续玩共用——信号连接只在组合根,ADR-0001;断点注入同口)
func _wire_adventure() -> void:
run_scope.adventure = AdventureRunner.new(db, get_node("/root/RngService"))
run_scope.adventure = AdventureRunner.new(db, get_node(AUTOLOAD_PATH_RNG))
run_scope.adventure.step_row.connect(_on_step_row)
run_scope.adventure.round_started.connect(_on_round_started)
run_scope.adventure.board_changed.connect(_on_board_changed)
@@ -1343,7 +1351,7 @@ func _debug_run_data() -> Dictionary:
func _current_master_seed() -> int:
if run_scope.adventure != null:
return int(run_scope.adventure.master_seed)
return int(get_node("/root/RngService").master_seed)
return int(get_node(AUTOLOAD_PATH_RNG).master_seed)
func _close_debug_overlay() -> void:
@@ -167,10 +167,6 @@ func press_refresh() -> void:
_refresh_btn.pressed.emit()
func selected_id() -> String:
return _selected
# 兑付反馈态(curio_resolved 到达——结果行追加在头部之后;唯一出口 = 继续)
func show_result(text: String) -> void:
_label.text = _header + "\n" + text
+1 -6
View File
@@ -13,9 +13,4 @@ extends Node2D
var world_font: Font = null # 字体注入槽位(null = ThemeDB.fallback_font——BattleStageView.set_world_font 注入)
# C6 headless 可验判据(ADR-0003 Decision 4):注入字体非空 + 中文字形 has_char + 采样文本宽度 > 0。
# 实际光栅观感归批末目检清单。
func font_probe() -> Dictionary:
var f: Font = world_font if world_font != null else ThemeDB.fallback_font
var has_char: bool = f.has_char("人".unicode_at(0))
var width: float = f.get_string_size("兑现演出区", HORIZONTAL_ALIGNMENT_LEFT, -1, 14).x
return {"font": f, "has_char": has_char, "width": width}
# 实际光栅观感归批末目检清单。
+10 -6
View File
@@ -37,7 +37,10 @@ var _portrait_flip := false
# 主角三态切换(迭代 6 T3):state 名 → 纹理(battle_stage_view 组合点注册);缺态=保持现纹理
# (缺位回退链延伸——三态素材缺任一不炸不空)。敌站桩不注册不消费。
var _hero_tex := {}
var _hero_state := "idle"
enum HeroState { IDLE, RESET, ATTACK, HIT } # 主角三态+复位哨兵(迭代 27 T6——裸字符串 enum 化;外部 String 契约=register/set 形参零变化)
const _HS_NAME := {HeroState.IDLE: "idle", HeroState.RESET: "reset", HeroState.ATTACK: "attack", HeroState.HIT: "hit"}
const _HS_VALUE := {"idle": HeroState.IDLE, "reset": HeroState.RESET, "attack": HeroState.ATTACK, "hit": HeroState.HIT}
var _hero_state: int = HeroState.IDLE
var _state_revert_tw: Tween
var _order := 1
var _intent_glyph := ""
@@ -330,7 +333,7 @@ func _revive() -> void:
modulate = Color(1, 1, 1)
rotation_degrees = 0.0
if _kind == "hero":
_hero_state = "reset" # 强制回 idle 态(绕过同态早退)
_hero_state = HeroState.RESET # 强制回 idle 态(绕过同态早退)
set_hero_state("idle")
_refresh_portrait_glyph()
if slot_row != null:
@@ -368,11 +371,12 @@ func register_hero_state(state: String, tex: Texture2D) -> void:
# 状态切换:现纹理换注册态(attack/hit);未注册态名或缺位 = 保持现纹理不炸。
# 非 idle 态自动短驻回归 idle(0.35s——演出一拍即回,结算收尾另有显式 idle 兜底)。
func set_hero_state(state: String) -> void:
if _kind != "hero" or state == _hero_state:
var target: int = _HS_VALUE.get(state, -1)
if _kind != "hero" or target == _hero_state:
return
if not _hero_tex.has(state) and state != "idle":
return
_hero_state = state
_hero_state = target
if _portrait_sprite != null and _hero_tex.has(state):
_portrait_sprite.texture = _hero_tex[state]
if _state_revert_tw != null and _state_revert_tw.is_valid():
@@ -384,14 +388,14 @@ func set_hero_state(state: String) -> void:
func _settle_hero_idle() -> void:
_hero_state = "idle"
_hero_state = HeroState.IDLE
if _portrait_sprite != null and _hero_tex.has("idle"):
_portrait_sprite.texture = _hero_tex["idle"]
# 三态探针出口(fx_probe——当前态名+注册态集合)
func hero_state_probe() -> Dictionary:
return {"state": _hero_state, "registered": _hero_tex.keys()}
return {"state": _HS_NAME.get(_hero_state, "idle"), "registered": _hero_tex.keys()}
func _portrait_color() -> Color: