Files
qinglong/docs/adr/ADR-0357-thin-package-root-and-stable-export-map.md
T

45 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 加载验证。