feat(ql3): establish 3.0 incubation baseline

This commit is contained in:
whyour
2026-08-12 00:25:26 +08:00
parent 4bf92dcfeb
commit c699c32461
2817 changed files with 779642 additions and 653 deletions
@@ -0,0 +1,44 @@
# ADR-0357:薄 Package 根目录与稳定 Export Map
- 状态:Accepted
- 日期:2026-08-10
- 关联:QL-RFC-0001 D-269、ADR-0296、ADR-0304
## 上下文
QingLong 3.0 的 17 个 workspace package 已按部署边界与 authority 拆分,但物理目录仍可能退化为另一种“平铺”:多个角色化公开门面堆在 `src/` 根目录。`@qinglong/cluster-postgres` 曾有 10 个根文件,其中 9 个只是为 `/runtime``/admin``/package-manager` 等公开 subpath 聚合既有领域实现。它们不是新的领域或 authority,却让根目录看起来像实现目录,也提高了继续堆放横切逻辑的概率。
目录整洁不能以破坏调用方契约为代价。外部消费者依赖的是 package export specifier,而不是仓库内的 TypeScript 物理路径;测试和运维脚本若直接引用 `dist` 物理文件,则属于仓库内部耦合,必须随实现布局迁移。
## 决策
1. 有嵌套领域实现的 package`src/` 根目录只允许受审的主导出入口或二进制入口;普通实现不得回到根目录。
2. `@qinglong/cluster-postgres` 的 9 个角色化门面迁入 `src/entrypoints/``src/` 根目录只保留 `index.ts`
3. 对外的 `@qinglong/cluster-postgres/runtime``/admin``/package-manager` 等公开 specifier 保持不变;`package.json#exports` 映射到新的 `dist/entrypoints/*` 物理目标。
4. 不保留旧 `dist/runtime.js` 等物理兼容壳。仓库内测试和脚本改用新物理目标或公开 specifier,防止双入口长期漂移。
5. `docs/ql3-package-boundaries.json` 将该 package 的根文件硬上限从 10 收紧为 1、根行数上限收紧为 125;CI 必须验证精确根文件角色、导出目标存在、旧根门面不存在。
6. 本次调整不创建新 workspace package、不改变 authority、不增加运行依赖,也不扩大 Edge/Standalone 闭包。
## 放弃的方案
- 保持 10 个根门面:公开 API 可用,但根目录继续成为无领域归属代码的默认落点。
- 为每个门面创建 package:把目录问题放大成部署与依赖问题,尤其伤害低配设备闭包。
- 保留旧 `dist` 兼容壳:形成两套可加载物理入口,测试可能绕过 export map,长期更难收敛。
- 直接修改公开 subpath:没有产品收益,却给 Cluster Control、Cluster Admin 和外部扩展制造迁移成本。
## 影响
- package 根目录更接近“接口面”,领域目录继续承载实现。
- 公开 import specifier 和类型契约不变;只依赖未承诺物理 `dist` 路径的仓库内部代码需要同步更新。
- package 数仍为 17;994 个源码文件中根文件由 26 降为 17,嵌套文件由 968 增为 97798.3%)。
- 后续若确需增加根入口,必须先修改边界账本并给出角色与行数证据,不能静默增长。
## 验证
- 17 个 QL3 package 干净顺序构建通过。
- Package boundary audit compatible8/8 边界回归通过。
- Cluster dependency audit compatible。
- PostgreSQL package292 pass、1 条件 skip、0 fail。
- Cluster Control186 pass、2 条件 skip、0 fail。
- Cluster Admin269 pass、2 条件 skip、0 fail。
- 9 个既有 PostgreSQL 公开 subpath 均通过 Node 加载验证。