Files
gplan-2/design/registry/architecture.yaml
T

54 lines
5.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Architecture Registry — Dungeon Sweeper
# 生成:2026-09-12(solo 授权代决批)
# 规则:只增不改;立场变更 = 旧条目标 status: superseded_by + 新增条目(永改既有条目)
# 命名注记(2026-09-15):A1–D6 系统代号已清偿为中文规范名(对照表见 design/gdd/02-系统清单.md);interfaces 两条目键名同批改领域命名(a2_event_surface→minesweeper_event_surface、b1_settlement_trigger→settlement_trigger)。
# 设计层立场(状态归属/接口契约/锚验收)登记在 design/registry/entities.yaml——本文件只登记实现级架构立场
interfaces:
- name: minesweeper_event_surface
signals: [cell_revealed, flag_judged, round_end_board]
note: GDD 概念名 round_end 的 排雷玩法 实现实名 = round_end_board;行动经济 直发 = round_end_stopped(payload 同构)
- name: settlement_trigger
contract: 战斗结算 订阅 行动经济 相位→Waiting 触发结算;只读 last_round_end + 相位观测量;不依赖事件到达序
- name: presentation_subscription_rule
contract: 呈现层永不直接订阅 排雷玩法/行动经济——只订 战斗结算 步骤流 / level_runner(切片缺陷②教训固化)
api_decisions:
- name: renderer
decision: gl_compatibility(Forward+ 否决——D3D12 新驱动线降险;战斗表现 出现 HDR 2D 需求时复议)
- name: window_base
decision: 1280×800 基座 + stretch canvas_items + aspect expand(全部键显式落盘,防引擎默认漂移)
- name: autoload_set
decision: {ConfigDB, RngService, SaveManager, MetaProgression}(定名锁定);战斗编排器等核心类由组合根按局实例化,非 autoload
- name: board_rendering
decision: 棋盘渲染已 Node2D 化(2026-09-23 迁移批:BoardView = Control 壳 + SubViewport + Node2D 世界,类名/信号/公共方法契约不变);B 区战斗舞台同批 Node2D 化(2026-09-26)
- name: cjk_font
decision: CJK 字体随包发行并设 theme 默认字体(运行时默认字体无 CJK 字形)——HUD框架 正式化硬性前置 + 导出 checklist 项
- name: test_carrier
decision: 双载体(--headless --script 逻辑冒烟 + headless 场景探针)+ 静态扫描域 S1–S8 + CI 外部 wall-clock 超时;gdUnit4 deferred(数据配置 OQ1 关闭形态)
- name: save_contract
decision: SCHEMA_VERSION 比较逻辑归 存档序列化(存档版本 > 当前 = 拒读);RNG 快照 = master_seed + 各流 scope 计数器 + 意图/窗口选择序列,切出须在 scope 事件边界外(无正在执行中的 open_stream 实例——战斗结算 编排保证)
core_decisions:
- name: effect_engine_interpreter
decision: 内容效果行为=发布订阅解释器(EffectEngine)——结算管线同步 emit 事件(无队列无异步),内容行以「订阅哪个事件 on / 什么条件 when / 什么效果 do」声明订阅,解释器遍历持有订阅集返回按声明序排列的命中,发射点按组合规则施加;旧 23 挂点枚举与按件 id 特判消亡
note: 事件/效果类型/条件事实/算子四词表封闭于 EffectEngine 常量(单一事实源,schema 校验引用);遍历序=数据表声明序写死保种子复放;订阅重建=每战 begin_battle(中途获得下一战生效);不做通用拦截器链,改写窗口=判定点就地按声明序施加(R2 裁决)
forbidden_patterns:
- pattern: autoload_global_event_bus
detail: 否决中心事件总线——组合根直连 signal 接线
- pattern: lambda_capture_self_cross_lifetime
detail: core↔core 信号连接只许方法 Callable;发射者禁持有订阅者反向引用(防循环引用/生命周期延长)
- pattern: bare_autoload_global_identifier_in_core
detail: core/ 禁裸引用 ConfigDB/RngService 全局标识符(--script 模式不注册——parse error;构造注入 only)
- pattern: global_rand_functions_in_gameplay
detail: randi()/randf()/randf_range() 与 randomize() 同禁(全局 RNG 绕开 RngService——数据配置 Rule 5 补全)
- pattern: core_extends_control_or_tscn_preload
detail: core/ 禁 extends Control/Node2D、禁 .tscn preload(数据配置 Rule 7)
- pattern: second_caller_of_battle_domain_apis
detail: 敌人系统/增益状态/地图战斗资源 战斗域 API 唯一调用方 = 战斗结算;排雷玩法/增益状态/地图战斗资源 零相互直调(静态扫描 S7——战斗结算 AC-43)
- name: hero_override_parameter_passing
decision: 主角加成值经 encounter 显式参数传入(begin_battle 增 hero_atk/hero_max_hp 字段;敌人系统.spawn 增 atk_override/max_hp_override 参数,-1 = 表值兜底)——db.hero 表值运行期只读(切片原表写通道 _apply_hero_override/runner 写表废除)
note: 2026-09-13 E4 完成;接口漂移 = 敌人系统.spawn 签名 +2 参数、战斗结算 encounter +2 字段(正式侧 战斗结算/敌人系统 GDD 修订随正式化批);ui_tune_probe ⑦⑧ 为表不可变 + 单次加成的回归断言载体