跳转至

公开 API 稳定性

WorldForge 仍处于 1.0 之前的阶段,但已有若干表面足够公开,需要明确的变更策略。本策略设定了代码审查预期;这并非 1.0 的兼容性承诺。

API 层级

层级 示例 变更策略
稳定 WorldForgeWorldworldforge.models 中的领域模型、能力协议、WorldForgeErrorWorldStateErrorProviderError、生成的提供方文档、已记录的 CLI 命令 在可行时保持源码兼容性。破坏性变更需要变更日志条目、迁移说明,以及至少一个发布周期的弃用通知,除非安全或正确性问题需要立即中断。
临时 评估报告模式、基准测试输入和预算模式、运行工作区清单、证据包、提供方工作台报告、可选宿主脚本 模式变更需要版本号递增或明确的迁移说明。在不保留无效状态的前提下,尽量保持旧字段可读。
实验性 jepa-wms 直接构造候选、脚手架提供方预留、可选机器人封装器、已准备宿主实时冒烟测试、Rerun 可视化工件 变更可能更频繁,但文档必须如实说明能力和运行时所有权。实验性状态不允许密钥泄露或静默强制转换。
内部 私有辅助函数、生成的实现细节、仅供测试的夹具、未导出的解析器辅助函数、机器人案例展示 TUI 内部实现 可在不弃用的情况下变更。请勿在下游代码中导入这些符号。

稳定表面快照

当前稳定 Python 符号的权威列表位于 tests/fixtures/public_api/exports.json。 它记录了 worldforgeworldforge.testingworldforge.observabilityworldforge.providersworldforge.capabilities__all__(或非下划线 dir())的并集。 tests/test_public_api_snapshot.py 测试在上述任何模块偏离快照时——包括静默重命名或删除——会立即失败报警。

在同一提交中重新生成快照(与有意的表面变更同步):

uv run python scripts/update_public_api_snapshot.py
# 或
WORLDFORGE_UPDATE_PUBLIC_API_SNAPSHOT=1 uv run pytest tests/test_public_api_snapshot.py

然后更新变更日志条目,并在添加、重命名或删除稳定符号时修订本页,确保稳定层描述保持准确。

弃用规则

当变更影响以下内容时,必须进行弃用处理:稳定的公开导入、构造函数参数、模型字段、异常族、CLI 命令或标志、提供方能力、提供方配置字段、工件模式或已记录的文件布局。在审查备注中,请将其明确标注为工件模式迁移。

每个弃用计划应包含:

  • 旧表面和替换表面;
  • 警告或文档通知首次出现的发布版本;
  • 可能发生移除的最早发布版本;
  • 在过渡期间证明新旧路径均可用的验证命令;
  • 描述用户操作的变更日志条目。

仅在以下情况下允许立即移除:安全漏洞、持久化状态不一致、虚假的提供方能力声明,或无法在不损坏用户工件的情况下维护的行为。在此情况下,PR 必须说明原因、失败模式以及迁移命令或手动恢复步骤。

提供方与工件迁移

提供方变更必须保持如实的能力公告。移除或重命名能力、更改提供方配置状态或更改运行时所有权,需要在提供方页面和变更日志中添加迁移说明。脚手架适配器不得仅凭措辞晋级;晋级需要解析器测试、契约测试、运行时证据和文档更新。

工件模式在离开单个进程时必须保持 JSON 原生且带版本号。工件模式 所有权映射列出了当前公开和半公开的工件族、版本字段、所有者、验证表面及迁移规则。读取方应以明确错误拒绝格式异常或不支持的模式版本,而非静默强制转换无效状态。

变更日志预期

以下情况需要在变更日志中记录:

  • 破坏性 API、CLI、提供方或工件模式变更;
  • 新弃用及移除日期;
  • 迁移命令或手动恢复步骤;
  • 变更的验证门控;
  • 变更的可选运行时要求。

细微的拼写修正和仅涉及内部的重构无需变更日志条目,除非它们影响公开文档、生成的工件或用户可见的命令。

贡献者检查清单

在合并公开 API 变更之前,请在 PR 中回答以下问题:

  • 被触及的表面是稳定、临时、实验性还是内部的?
  • 该变更是否需要弃用通知或模式版本号递增?
  • 文档和变更日志是否解释了迁移方式?
  • 在适用时,测试是否同时覆盖了旧的兼容路径和新行为?
  • 提供方能力公告是否仍然如实?
  • 格式异常的持久化/提供方状态是否被明确拒绝?