# ADR-0328:Runtime Core Workflow Administration 领域归属 - 状态:Accepted - 日期:2026-08-10 - 关联 RFC:QL-RFC-0001 D-08、D-09、D-12、D-70、D-85、D-87、D-207、D-212、D-213、D-250、D-251、D-257 - 关联 ADR:ADR-0270、ADR-0276、ADR-0277、ADR-0282、ADR-0283、ADR-0284、ADR-0285、ADR-0286、ADR-0327 ## 背景 ADR-0321 至 ADR-0327 已明确:workspace package 表达可部署、authority、依赖、adapter、multi-consumer 或供应链 边界,package-private 目录表达同一发布单元内的领域 ownership。继续审计 `@qinglong/runtime-core` 时发现,公开 subpath 背后的 `pluginPackageWorkflowAdministration.ts` 虽然不持有数据库或网络 authority,但 1,604 行单文件同时定义并校验: 1. Workflow admission 与 repository contract; 2. cancellation contract、result 和稳定错误; 3. Run inspection command/result; 4. Run history 的 page/cursor/item/result; 5. StepRun page/cursor/item/result; 6. RunEvent sequence page/item/result; 7. 共享 exact-shape、identity、Package、resource、fence、actor/audit binding codec。 这些 contract 都属于一个稳定的 `plugin-package-workflow-administration` public subpath,不应拆成新 workspace package 或多个 public subpath;但继续平铺会让五类读取协议、两类 mutation 和共享安全 codec 无法独立演进、审阅和测试。 编辑前对原文件全部 38 个 class、function 和 method(包括 7 个 repository method 与 4 个 constructor)执行 GitNexus upstream impact。三个稳定 error、`exactKeys` 以及 admission/inspection/list repository method 为 HIGH,其中两个冲突 错误与 admission method 影响 1 条执行流;共享 subject/fence/identifier helper 为 MEDIUM,其余为 LOW,无 CRITICAL。 本轮仅移动 ownership,不修改任何公开 contract 或 normalization 语义。 ## 决策 保持一个 `@qinglong/runtime-core` package、一个 public subpath 和 7 行 facade,在原 Workflow 目录内建立 package-private 领域目录: ```text pluginPackageWorkflowAdministration.ts # stable public facade plugin-package-workflow-administration/ ├── contracts.ts # all public types, schemas and budgets ├── errors.ts # four stable runtime error identities ├── support.ts # shared exact-shape/identity/fence codec ├── runInspection.ts # one Run inspection normalization ├── runList.ts # newest-first Run keyset page ├── stepRunList.ts # ordered StepRun keyset page ├── runEventList.ts # contiguous RunEvent sequence page └── mutation.ts # admission and cancellation normalization ``` `contracts.ts` 只使用 type-only domain imports,避免仅消费接口时加载实现。`support.ts` 是 package-private 共享 codec, 不从 facade 或 package manifest 导出。五个 operation owner 只能依赖 contracts、errors、support 和各自必要的 Run/Security/ Workflow plan contract;它们不取得 filesystem、process、timer、network、SQLite 或 PostgreSQL authority。 facade 只 re-export 原有公开集合。26 个 runtime export 与 owning module 保持同一个 object,包括四个 error constructor、 四个 schema、六个 page budget、cancellation status 和十一项 normalizer;没有新增 public subpath、workspace package、 production dependency、进程或部署单元。 本轮不修改 exact keys、identifier/Package/resource pattern、page limit、cursor order、Run/StepRun/Event 状态约束、连续 sequence、low-sensitive projection、strong User、allowed audit、authentication/fence binding、admission time binding、 cancellation reason/result、错误 code/message 或 repository method shape。 ## 小设备与集群影响 所有本机 Profile 都携带裁剪后的 Runtime Core 文件,因此目录拆分为每档增加固定 5,801 bytes 和 8 个物理 JavaScript 文件;loaded modules 完全不变:Edge/Standalone 49、Adopted 50、Application 116、AI 50、Application AI 115。 最小 Edge 产物为 3,650,344 bytes,仍低于 4 MiB hard cap;没有新增常驻连接、Pool、timer、watcher、listener、缓存 或后台进程。 Cluster 继续通过原 public subpath 共享同一纯 contract/normalizer,并使用独立 PostgreSQL repository、TLS、RBAC、quota 和多副本 transport。dependency/deployment audit 未出现新依赖或 authority。本轮没有 SQL、migration、PostgreSQL、 Kubernetes resource 或部署拓扑变化,因此虽已获准,仍不重复执行与本次纯 Runtime Core ownership 重构无关的 PostgreSQL HA Docker 门。 ## 被否决方案 1. **为 inspection/list/event/mutation 各建 workspace package**:没有独立部署、依赖或 authority 边界,会制造微包。 2. **为每个 normalizer 建文件**:共享协议会退化成一函数一文件,增加导航成本而不提升 ownership。 3. **新增五个 public subpath**:扩大长期兼容面,并允许消费者绕过统一 Workflow Administration contract。 4. **公开 `support.ts`**:会把内部 exact-shape helper 变成可依赖 API,阻碍未来实现替换。 5. **趁拆分改变 page budget、regex 或 error mapping**:会把结构重构与协议版本变更混在一起。 6. **继续保留 1,604 行单文件**:读取、mutation 和共享安全 codec 继续互相遮蔽,拒绝。 ## 验收证据 - facade 1,604→7 行;contracts 265、errors 41、support 86、Run inspection 228、Run list 282、StepRun list 339、 RunEvent list 254、mutation 206 行,总计 1,708 行;新增行主要是显式 import/export ownership。 - 26/26 runtime export identity 相同,无 missing、extra 或 identity drift;Runtime Core 445/445。 - 完整 16-package clean topology build/test 退出 0;Cluster PostgreSQL、Local SQLite、Local Admin、Owner CLI 和 Local Application 的 Workflow 调用链全部通过,外部 PostgreSQL/S3 与 Linux `/proc` 条件项保持显式 skip。 - package boundary 为 16 package、871 source、25 root、846 nested,`singleSourcePackages=[]`、 `shallowSourcePackages=[]`、findings 为空;Runtime Core 为 132 source、1 root public export/131 nested。Edge import 为 121 modules 且无 forbidden;Cluster dependency/deployment 全部 compatible/findings 为空。 - 串行十档 artifact 全部通过。Edge/Standalone 3,650,344/3,650,380 bytes、350 files、49 modules;Adopted 4,270,853/4,270,913 bytes、402 files、50 modules;Application 4,768,702/4,768,822 bytes、461 files、116 modules;AI 5,045,655/5,045,703 bytes、429 files、50 modules;Application AI 6,164,079/6,164,211 bytes、 540 files、115 modules。相对 ADR-0327 每档固定 +5,801 bytes/+8 files、loaded modules +0。 - 制品门不能并行共享构建目录:一次并行尝试因相互清理 `dist` 出现无效 `.d.ts` 编译结果,已废弃该批证据并按十档 串行重跑全部通过。 - 最终强制索引为 44,160 nodes/100,542 edges/1,727 clusters/274 flows。post-impact 中 invalid error 为 CRITICAL (32 direct/32 total/0 process),两个冲突 error 为 HIGH(10/29/1 与 22/31/1),`exactKeys` 为 HIGH (16/16/0);五个 operation 代表 normalizer 为 LOW。显式内部引用使共享错误的 blast radius 更完整,没有新增行为。 - `detect_changes` all/compare `develop` 仍只映射已跟踪 Legacy baseline 的 12/31 与 14/34、low/0 process;当前 QL3 孵化树尚未完整进入 Git baseline,因此它只作补充,不能替代逐 symbol impact、强制索引、完整测试与制品门。 ## 后续约束 Workflow Administration 的公开兼容面继续由单一 facade 管理。contracts/errors 不得取得运行 authority;support 不得 公开;各 operation owner 不得互相调用或修改其他 operation 的预算。新增 use case 只有在具备完整 command/result、独立 审计语义和明确分页/状态不变量时才建立领域 owner,不按函数数量或 LOC 机械拆分。