Repository navigation
3.17.0
版本概述:完成 GF Framework 全量 API Surface 严格规范迁移,把 addons/gf 的公开 API、protected 扩展点、框架内部 API、层内部 API 与私有实现边界整理为可查阅、可测试、可维护的发布契约;同步补齐 Godot 文档渲染换行、结构化 schema、版本标记与发布元数据。
🚀 新增特性 (Added)
- 新增
API_SURFACE.md,正式定义@api public、@api protected、@api framework_internal、@api layer_internal、@category、@schema、canonical section 顺序、私有成员静默规则与迁移标记规则。 - 新增 API Surface 契约维护测试与正例夹具,覆盖公开类文档、公开成员文档、protected hook section、结构化类型 schema、Godot
[br]文档换行、占位@since 1.0.0禁止项以及迁移标记归零检查。 - 新增或稳定化多个公开诊断入口与 debug snapshot,让测试和项目诊断可以读取公开契约,而不是直接依赖
_queue、_rng、_pending_timers、对象池内部字典、四叉树_root等私有状态。 GFSlotInventoryModel新增slot_state_changed、slot_filled、slot_emptied信号,新增sort_slots()公开排序入口与 protected_should_sort_slot_before()扩展点,便于项目以稳定契约实现槽位整理规则。
🔄 机制更改 (Changed)
addons/gf已完成全量 API Surface 迁移:所有公开类补齐@api public、@category与@since 3.17.0,公开成员补齐##文档与@api public,结构化Dictionary、Array、Variant与嵌套数据补齐@schema。- 所有可覆写但不适合作为普通调用入口的
_方法集中到# --- 可重写钩子 / 虚方法 ---,并标记为@api protected;真正私有的变量和方法收敛为无##、无@api private的实现细节。 - Godot 文档注释中的机器标签统一使用
## [br]分隔,使编辑器悬浮文档中的@api、@param、@return、@schema等标签逐行显示,避免挤在同一段里。 - 公开签名不再暴露 preload 别名,改用真实
class_name类型;内部 helper 类型和 preload 常量不再被误当作公开 API。 CODING_STYLE.md、AI_MAINTENANCE.md与维护文档补充 API Surface Contract、section 布局、@onready适用范围、私有成员文档约束、迁移标记策略、changelog 同步规则与发布版本同步规则。GFSlotInventoryModel现在会批量收集一次库存变更中的槽位、物品与整体变化通知,在派发期间拒绝同步重入修改,避免监听器回调中的排序或移动污染后续通知上下文。GFSlotInventoryModel.get_index_debug_snapshot()的索引字段由旧items调整为stack_count_by_item与slot_indices_by_item,避免把物品计数与槽位索引混淆。- 对象池异步预热文档补充 Godot
ready一次性信号的时序说明,提醒调用方先等待宿主就绪或检查is_node_ready()再执行跨帧预热。
⚠️ 废弃与移除 (Deprecated/Removed)
- 移除
addons/gf内全部# @api_surface_migration partial标记;当前迁移债务基线归零。 - 移除 GF 源码和 API 示例中的占位
@since 1.0.0,本轮发布后的严格 API Surface 起点统一记录为3.17.0。 - 移除公开 API 对 preload 类型别名的依赖,后续项目代码应以
class_name类型作为公开签名参照。
🔌 API 变动说明 (API Changes)
GFTurnPhase.enter()、GFTurnPhase.execute()、GFTurnPhase.exit()规范化为 protected 扩展点_enter()、_execute()、_exit(),由GFTurnFlowSystem调用。GFTurnAction.resolve()规范化为 protected 扩展点_resolve(),由GFTurnFlowSystem.resolve_actions()调用。GFSceneUtility的公开签名改用GFSceneTransitionConfig与GFScenePreloadMap;GFRenderWarmupUtility的公开签名改用GFRenderWarmupManifest;GFSteeringBehaviorStack.add_behavior()改用GFSteeringBehaviorResource。GFProgressionMath.evaluate_curve()、apply_milestone_multipliers()、apply_soft_cap()与GFBigNumber.to_big_number()的返回类型收窄为GFBigNumber。GFGridOccupancy.get_cell_occupants()、GFSpatialHash3D.query_aabb()与GFSpatialHash3D.query_radius()的返回类型补为Array[Variant]。GFSlotInventoryModel.get_index_debug_snapshot()不再返回items字段,改为返回stack_count_by_item与slot_indices_by_item。
📘 升级指南 (Migration Guide)
- 继承
GFTurnPhase的项目阶段类需要把enter(context)、execute(context)、exit(context)重命名为_enter(context)、_execute(context)、_exit(context)。 - 继承
GFTurnAction的项目行动类需要把resolve(context)重命名为_resolve(context)。 - 对
GFSceneUtility、GFRenderWarmupUtility、GFSteeringBehaviorStack等类型做静态类型标注时,应改用公开class_name类型,不要依赖内部 preload 常量名。 - 依赖
GFProgressionMath或GFBigNumber.to_big_number()返回Object的项目代码,应改按GFBigNumber处理。 - 项目测试不要再读取 GF 私有状态;优先改用公开 getter、debug snapshot、protected hook 或稳定行为断言。
- 监听
GFSlotInventoryModel的槽位、物品或库存变化信号时,不要在同步回调里继续调用sort_slots()、swap_slots()、move_between_slots()、add_item()、remove_item()等修改接口;需要由信号触发整理时,使用call_deferred("sort_slots")或等待当前通知结束后再修改。 - 读取槽位库存索引调试信息的代码应把旧
index.items[item_id]改为index.stack_count_by_item[item_id];需要槽位编号时读取index.slot_indices_by_item[item_id]。 - 新增公开 API 文档时,应在
@api、@category、@since、@param、@return、@schema等机器标签前使用## [br],保证 Godot 编辑器渲染结果可读。
📁 核心受影响文件 (Affected Files)
- API Surface 规范与维护测试:
API_SURFACE.md、CODING_STYLE.md、AI_MAINTENANCE.md、docs/zh/maintenance/index.md、tests/gf_core/fixtures/api_surface/**、tests/gf_core/maintenance/test_api_surface_contract_validation.gd、tests/gf_core/maintenance/test_gdscript_layout_validation.gd。 - 全量严格迁移源码:
addons/gf/kernel/**、addons/gf/standard/**、addons/gf/extensions/**、addons/gf/plugin.gd。 - 公开契约测试调整:
tests/gf_core/extensions/**、tests/gf_core/standard/**中依赖公开状态、公开 snapshot 或稳定诊断入口的测试。 - 发布元数据:
addons/gf/plugin.cfg、addons/gf/extensions/*/gf_extension.json、ASSET_LIBRARY.md。