版本与 API 稳定性策略
本页定义 Aiao 各包的版本约定、公开 API 范围、废弃周期与破坏性变更审查流程。它同时是仓库内 requirements/versioning-policy.md 的对外呈现。
semver 约定
Aiao 遵循 semver 2.0:主版本.次版本.补丁。
- 补丁(
0.0.x):向后兼容的缺陷修复。 - 次版本(
0.x.0):向后兼容的新功能。 - 主版本(
x.0.0):破坏性变更。
0.x 阶段(当前)
项目当前处于 0.x(发布版本 0.0.25)。按 semver,0.x 期间次版本即可包含破坏性变更,公开 API 尚未冻结。1.0 发布即代表进入稳定维护,破坏性变更此后只能随主版本发布。
统一版本
所有 @aiao/* 发布包采用 fixed release group,同步同一版本号。升级时应整体升级,不混用不同版本。
公开 API 的范围
「公开 API」= 各包 src/index.ts(及其声明的子路径入口)导出的、未标注 @internal 的符号。
不属于公开 API、可随时变更且不视为破坏性变更:
- 未从包入口导出的内部实现
- 标注
@internal/@alpha/@experimental的符号 dist内部文件结构、打包产物布局- 测试夹具包(如
@aiao/rxdb-test)
框架相关的公开 API 要求 Angular / React / Vue 三端对称:单端缺失视为未完成,而非「该端不提供」。
废弃周期
- 计划移除的符号先标注
@deprecated,并在 TSDoc 中给出替代方案。 - 废弃符号至少保留 一个次版本(1.0 后为一个主版本周期)再移除。
- 移除在破坏性版本中进行,并在迁移指南记录。
示例:
/**
* @deprecated 使用 {@link SQLiteChangeType} 替代。将在下一个主版本移除。
*/
export { SQLiteChangeType as SQliteChangeType } from './sqlite-backend.interface.js';
破坏性变更审查流程
公开 API 表面由 API 基线快照守护,主入口与子路径入口同等对待:
- 每个公开包在
requirements/api-baseline/<pkg>.json记录导出符号表面,主入口 (@aiao/rxdb-plugin-graph)与每个子路径入口(@aiao/rxdb-plugin-graph/sqlite)各占一条。 - CI 在每次变更时用
scripts/audit/api-surface.mjs --check对比基线。 - 出现未声明的表面变化 → 检查失败。子路径上少一个导出、或整个子路径入口消失, 都按破坏性处理,与主入口用同一套分级。
- 确属预期的变更需:更新基线快照、在 PR 标注是否 breaking、必要时补迁移说明。
:::note exports 里的每个子路径入口都在基线里
目前没有例外:@aiao/rxdb-adapter-miniprogram 原先随包分发的 wa-sqlite glue 与 wasm
(./assets/*)已改为直接依赖 @subframe7536/sqlite-wasm,不再经本仓库的 exports 暴露。
api-surface.mjs 仍保留一份资产入口白名单(ASSET_SUBPATHS),留给将来真需要发二进制子路径的包:
这类入口没有导出表面可扫,只能显式跳过、内容交由供应链审计守护。白名单当前为空,且双向核对——
登记了包里已不存在的入口,或登记的包已退出扫描范围,同样门禁红。
:::
此外,公开类型另有编译期契约测试(如 @aiao/rxdb 的 public-type-compatibility 测试与各包 public-contract 消费者),从类型与运行时两个维度防止意外破坏。
版本级别如何决定
- 提交遵循 Conventional Commits:
fix:→ 补丁,feat:→ 次版本,feat!:/BREAKING CHANGE:→ 主版本。 - 发布由 Nx Release 驱动;版本级别依据提交类型与 API 基线 diff 共同决定。
- API 基线出现破坏性 diff 但提交未标注 breaking 时,以基线检查为准阻止发布。
涉及系统 schema 或 change codec 的版本还要通过迁移发布清单和门禁:
pnpm nx run @aiao/source:migration-release-gate。没有已发布桥接 tag 或旧 bundle 隔离策略时,发布直接失败。
实验性层级
下列能力不在 1.0 的兼容承诺内,破坏性变更只需在 changelog 与迁移指南注明:
@aiao/rxdb-adapter-miniprogram整包(仅微信逻辑层,不保证崩溃恢复)@aiao/rxdb-adapter-http的changeFeedSSE 变更通知(缺省关闭)@aiao/rxdb-plugin-search在wa-sqlite与小程序上的全文搜索(unverified,当前直接抛SearchUnsupportedAdapterError)@aiao/rxdb-plugin-querycache的QueryCacheEngine直接实例化(@experimental)
其余公开入口进入 1.0 冻结范围。维护者视角的完整清单见仓库 requirements/versioning-policy.md。