结构搬移批(用户裁 2026-11-07): design/gdd/ux 上提为 design/ux——三目录同级(gdd/系统概念·ux/呈现实现规格·art/美术), git mv 八件 ux spec; 出向链接改写 23 链(../systems/→../gdd/systems/ ×17、../../art/→../art/ ×5、体验验证清单 ×1), 入向改写 systems 六件 15 链+art 两件 4 链+08-Alpha 九链, game 侧 20 件 71 行 oracle 注引与头注改路径(纯注释,diff 非注释行=0), reports 两件 14 处锚路径同步(需求卡片-营地交互修复批 13 处+评估-美术资产清单 1 处); 声明面: 02-系统清单 ux 节头注同级化+AGENTS.md 导航行两支改三支+doc-conventions 数值纪律句+test-conventions 先例句+待办清单两处; 熵增闸白名单: RETIRED 摘 design/ux+DESIGN_SUBDIRS 增 ux。凭据: 全仓 gdd/ux 零残留+熵增闸直跑 PASS(design 子目录五支含 ux)+--docs 域闸【验收通过】exit=0 无新增红+触碰八单元套件单跑 all green(8 suites, filtered, exit=0)

This commit is contained in:
DKChan committed 2026-11-07 04:12:49 +08:00
1 parent 5b5e629706
commit 77c1d360f6
49 files changed
+162 -161

No files matched your search

@@ -92,7 +92,7 @@ func _test_boss_name_uses_boss_rowset() -> void:
# 关卡完成停点文案族措辞钉子(口径换代批):回血行/满血合法态/渠道句/摘要关数行——
# 旧措辞退役后玩家可见面由本组断言钉在新措辞上(撤销证明:回退 battle_narrator 对应行→断言红→复原复绿)
func _test_level_clear_wording() -> void:
# oracle: design/gdd/ux/level-clear.md:11 (关卡结算屏文案组)
# oracle: design/ux/level-clear.md:11 (关卡结算屏文案组)
var healed: String = NarratorScript.curio_pick_header({"level_index": 1, "heal_gained": 5, "hp_before": 10, "hp_after": 15})
Kit.check("关卡完成回血行带入回血量与生命区间(实际「%s」)〔口径换代 V1〕" % healed,
healed.contains("关卡完成回血 +5(生命 10 → 15)"))
@@ -10,19 +10,19 @@ const _EXPECTED_KEYS: Array[StringName] = [&"gate", &"forge", &"dummy", &"chest"
func _initialize() -> void:
# oracle: design/gdd/ux/camp.md:29 (营地场景布局数据件——纵深与地平线组)
# oracle: design/ux/camp.md:29 (营地场景布局数据件——纵深与地平线组)
call_deferred("_run_all")
func _run_all() -> void:
# oracle: design/gdd/ux/camp.md:29 (套件统一收尾——双测试函数单进程单 quit)
# oracle: design/ux/camp.md:29 (套件统一收尾——双测试函数单进程单 quit)
await _test_layout_hotspot_geometry()
await _test_hud_band_contrast_over_bg()
quit(Kit.finish("camp_scene_layout_test", "PASS — 布局几何+顶栏栏体对比 全过"))
func _test_layout_hotspot_geometry() -> void:
# oracle: design/gdd/ux/camp.md:16 (七物件命中区几何红线组)
# oracle: design/ux/camp.md:16 (七物件命中区几何红线组)
var table: CampSceneLayoutTable = load("res://data/tables/camp_scene_layout.tres")
Kit.check("V14 布局表加载且 schema 类在位〔营地图批 V14〕", table is CampSceneLayoutTable and table != null)
if table == null:
@@ -100,7 +100,7 @@ func _test_layout_hotspot_geometry() -> void:
# 按规格句在测试内写死 #6E4526 与 α0.80,与背景贴图顶带实测均色做 α 合成后算 WCAG 对比 ≥3.0。
# 禁把视图件的 color 直接当预期值喂进算式(oracle 镜像——test-conventions §8.7 判红)。
func _test_hud_band_contrast_over_bg() -> void:
# oracle: design/gdd/ux/camp.md:41 (顶栏栏体定值——对落位带底色对比 ≥3:1 组)
# oracle: design/ux/camp.md:41 (顶栏栏体定值——对落位带底色对比 ≥3:1 组)
var table: CampSceneLayoutTable = load("res://data/tables/camp_scene_layout.tres")
var band_h := 48
if table != null:
@@ -10,7 +10,7 @@ const ProbeUiUtil := preload("res://probe/probe_ui_util.gd") # 真输入合成
# 断言 + 失败即停(原直写 print FAIL + quit(1) + return 样板单点化——早退语义逐位保持)
func _req(desc: String, ok: bool) -> bool:
# oracle: design/gdd/ux/node-reward.md:9 (奖励覆盖层直验——需求包装组)
# oracle: design/ux/node-reward.md:9 (奖励覆盖层直验——需求包装组)
Kit.check(desc, ok)
if not ok:
quit(1)
@@ -18,11 +18,11 @@ func _req(desc: String, ok: bool) -> bool:
return true
func _initialize() -> void:
# oracle: design/gdd/ux/node-reward.md:9 (奖励节点装载组)
# oracle: design/ux/node-reward.md:9 (奖励节点装载组)
call_deferred("_run")
func _run() -> void:
# oracle: design/gdd/ux/node-reward.md:9 (奖励三选一呈现组)
# oracle: design/ux/node-reward.md:9 (奖励三选一呈现组)
var ov = load("res://presentation/views/curio_pick_overlay.gd").new()
root.add_child(ov)
var picked := []
@@ -10,7 +10,7 @@ const CELL_UNIT := preload("res://presentation/views/board_cell_unit.gd")
func _init() -> void:
# oracle: design/gdd/ux/battle.md:128 (封印印记参数宿主——装载组)
# oracle: design/ux/battle.md:128 (封印印记参数宿主——装载组)
_test_param_values()
_test_shader_uniforms()
_test_fog_gate()
@@ -19,7 +19,7 @@ func _init() -> void:
# R1–R3/R7 前置:五常量取值逐项相等(art-bible §8.2 定值)
func _test_param_values() -> void:
# oracle: design/gdd/ux/battle.md:128 (环径与法阵定值组)
# oracle: design/ux/battle.md:128 (环径与法阵定值组)
Kit.check("SEAL_RING_FRAC = 0.82〔seal批 V1〕", UiKit.SEAL_RING_FRAC == 0.82)
Kit.check("SEAL_WALL_FRAC = 0.11〔seal批 V2〕", UiKit.SEAL_WALL_FRAC == 0.11)
Kit.check("SEAL_ARM_FRAC = 0.156〔seal批 V2〕", UiKit.SEAL_ARM_FRAC == 0.156)
@@ -29,7 +29,7 @@ func _test_param_values() -> void:
# R1–R3/R7:着色器存在+七个 uniform 名在文(参数注入面契约)
func _test_shader_uniforms() -> void:
# oracle: design/gdd/ux/battle.md:128 (着色器参数化绘制组)
# oracle: design/ux/battle.md:128 (着色器参数化绘制组)
var src := FileAccess.get_file_as_string(SEAL_SHADER)
Kit.check("着色器文件存在且非空:%s〔seal批 V1〕" % SEAL_SHADER, src.length() > 0)
if src.length() == 0:
@@ -43,7 +43,7 @@ func _test_shader_uniforms() -> void:
# R4 迷雾门控:seal_on × fog_state → 封印子件可见性(内部字段直查=受控例外——子件可见性无公开可观测面,
# 卡面 R4 断言即 prescribe 子件 visible 直查;对照表该行注记理由)
func _test_fog_gate() -> void:
# oracle: design/gdd/ux/battle.md:128 (迷雾联动门控组)
# oracle: design/ux/battle.md:128 (迷雾联动门控组)
var u: Node2D = CELL_UNIT.new()
u.seal_on = true
Kit.check("seal_on 即挂封印子件〔seal批 V4〕", u._seal_layer != null)
@@ -26,12 +26,12 @@ class AllMissingStage extends BattleStageView:
func _initialize() -> void:
# oracle: design/gdd/ux/battle.md:122 (舞台背景宿主——装载组)
# oracle: design/ux/battle.md:122 (舞台背景宿主——装载组)
call_deferred("_run")
func _run() -> void:
# oracle: design/gdd/ux/battle.md:122 (B 区背景宿主组)
# oracle: design/ux/battle.md:122 (B 区背景宿主组)
_test_layout_ground_field()
await _test_background_selection()
await _test_background_fallback()
@@ -42,7 +42,7 @@ func _run() -> void:
# ---- V1 ground_h 字段与校验(表值/默认表 validate 空/三态拒绝族) ----
func _test_layout_ground_field() -> void:
# oracle: design/gdd/ux/battle.md:122 (连续地面层组)
# oracle: design/ux/battle.md:122 (连续地面层组)
var layout = load("res://data/tables/battle_layout.tres")
Kit.check("布局表 ground_h = 100 且默认表 validate 为空〔舞台背景 V1〕",
int(layout.ground_h) == 100 and layout.validate().is_empty())
@@ -75,7 +75,7 @@ func _make_stage() -> Node:
# ---- V2 背景按 board_type 选图(直建默认 dungeon + 三值路径逐值对应 + 层序在世界之下) ----
func _test_background_selection() -> void:
# oracle: design/gdd/ux/battle.md:122 (三关变体选图组)
# oracle: design/ux/battle.md:122 (三关变体选图组)
var layout = load("res://data/tables/battle_layout.tres")
var stage: Node = _make_stage()
await process_frame
@@ -104,7 +104,7 @@ func _test_background_selection() -> void:
# ---- V3 缺图回退(目标缺→dungeon;全缺→平色兜底不崩不刷产品日志) ----
func _test_background_fallback() -> void:
# oracle: design/gdd/ux/battle.md:122 (缺位回退组)
# oracle: design/ux/battle.md:122 (缺位回退组)
var s1: Node = MissingUnderdarkStage.new(null, load("res://data/tables/battle_layout.tres"))
root.add_child(s1)
await process_frame
@@ -69,7 +69,7 @@ class FakeDB:
func _init() -> void:
# oracle: design/gdd/ux/battle.md:154 (站桩呈现域缺陷扫掠组)
# oracle: design/ux/battle.md:154 (站桩呈现域缺陷扫掠组)
UiKit.motion_scale = 1.0
# ---- ⑤ 站桩按 id 解析(两口共用同名字敌载体)----
@@ -31,7 +31,7 @@ func _read_source(rel_path: String) -> String:
func _init() -> void:
# oracle: design/gdd/ux/battle.md:154 (站桩呈现定值与素材绑定组)
# oracle: design/ux/battle.md:154 (站桩呈现定值与素材绑定组)
# ---- V5 血条填充 = 危险红 #A8321F(§4.2 语义物件显式落法) ----
Kit.check("血条填充常量 = 危险红 #A8321F〔样张批 V5〕",
UiKit.HP_BAR_FILL.to_html(false) == "a8321f")
@@ -137,7 +137,7 @@ func _enemy_tex_path(key: String) -> String:
func _check_display_tier() -> void:
# oracle: design/gdd/ux/battle.md:154 (显示档与分辨率绑定组)
# oracle: design/ux/battle.md:154 (显示档与分辨率绑定组)
# V13/V15 九键逐一:真实入口 StandeeBody → set_data(enemy_id) → set_portrait_texture(真纹理) → portrait_probe
for key: String in _DISPLAY_SPEC:
var spec: Array = _DISPLAY_SPEC[key]
@@ -805,7 +805,7 @@ func _all_labels(root: Node) -> Array:
# 只读性连接巡检与零动效断言归 ui_struct_probe 呈现侧,本段只管数据面+旧档载入显示
# (v5 样档升 v6——完成定义 6「计数域缺省补零、页正常显示」))----
func _career_overlay_projection() -> void:
# oracle: design/gdd/ux/camp.md:45 (生涯页只读投影组)
# oracle: design/ux/camp.md:45 (生涯页只读投影组)
print("--- 生涯页·只读投影一致性(隔离档 smoke_meta_career/career_v5)---")
var sv = _meta_new_save(_META_SMOKE_PATHS[9])
var mp = load("res://core/meta_progression.gd").new(_db, sv)