API 稳定性与 SemVer 政策
本文档是 Litefs 公共 API 稳定性承诺的权威说明,对应硬性标准 H1(API 稳定性与 SemVer 政策成文)与 H2(公共 API 分级冻结)。
分级体系
Litefs 将全部公共 API 划分为三个稳定性层级,权威登记表为 litefs/_stable.py:
层级 |
名称 |
稳定性承诺 |
破坏性变更允许窗口 |
|---|---|---|---|
Tier 1 |
|
严格保证,仅随 major 版本引入不兼容变更 |
仅 v1.0.0 及之后的 major 版本 |
Tier 2 |
|
基本保证,语义保持但允许扩展性调整 |
minor 版本,且必须走弃用流程 |
Tier 3 |
|
无任何保证,随时可能变更 |
任意版本 |
分级查询接口:
litefs._stable.api_tier(module_name, symbol):查询单个符号的层级,未登记符号返回internallitefs._stable.public_symbols(module):列出模块公共符号(__all__+ 自定义非下划线符号)litefs._stable.stable_symbols():返回全量stable符号扁平清单
冻结基线(v0.10.0)
v0.10.0 完成首次全量符号分级冻结,基线规模:
stable:70 个模块,410 个符号provisional:32 个模块,138 个符号合计:548 个公共符号
冻结规则:
test_api_contract.py::test_every_module_is_classified强制包内每个模块必须登记分级或进入豁免清单,新增模块不登记则 CI 失败test_api_contract.py::test_public_symbols_classified强制登记模块的每个公共符号逐项核对登记模块的公共符号面(
__all__与dir()非下划线名)不得缩小——缩减符号视为破坏性变更
内部模块豁免
以下两类模块不纳入契约检查(EXEMPT_MODULES):
入口与非库接口模块:
litefs.__main__、litefs._stable、litefs._json大文件拆分产生的内部实现模块:
litefs.config.core/litefs.config.crypto/litefs.config.loaders、litefs.error_pages.renderer/litefs.error_pages.templates_4xx/litefs.error_pages.templates_5xx、litefs.handlers.socket_request/litefs.handlers.socket_response
这些模块由所属公共模块再导出,不构成公共 API,不受稳定性承诺保护。
SemVer 语义
Litefs 版本号遵循语义化版本 MAJOR.MINOR.PATCH:
PATCH:缺陷修复、文档修订、内部实现调整,零接口变更
MINOR:新增功能、新增符号、功能废弃(启动弃用期);0.x 阶段允许在 MINOR 内对
provisional面做破坏性调整,但必须提前至少一个版本发出弃用告警MAJOR:
stable面的不兼容变更;v1.0.0 之前不发布任何 major 版本
stable 面的不兼容变更在 v1.0.0 之前一律禁止。当前 0.x 各版本的不兼容调整仅允许出现在 internal 与豁免模块中。
破坏性变更流程
对任何已登记符号的移除或语义变更,必须:
启动弃用期:通过
litefs.deprecation.deprecated装饰器接入运行时告警,并在litefs._stable.DEPRECATED登记表登记(详见 :doc:deprecation-timeline)至少保留 2 个 feature release(对齐 Django 的弃用周期惯例),移除版本由登记表
removal字段固化在 CHANGELOG 中记录弃用与替代符号
移除时同步更新
_stable.py分级登记、契约测试与本文档基线