Files
qinglong/docs/adr/ADR-0278-profile-separated-linux-workflow-cancellation-resource-gate.md
T

6.1 KiB
Raw Blame History

ADR-0278Profile 分层的 Linux Workflow 取消资源发布门

  • 状态:Accepted
  • 日期:2026-08-07
  • 关联:D-05、D-07、D-87、D-213、D-251、D-257、ADR-0088、ADR-0228、ADR-0270、ADR-0277

上下文

ADR-0277 已让本机用户能够通过受认证的 workflow.cancel 产品命令提交取消意图,既有 Local Application Linux 条件测试也能启动真实进程并观察 /proc/<pid>。但是测试仍用 SQL 直接注入 cancel_requested_at_ms,因此没有证明产品命令、Policy、durable audit、application control、进程停止与 Workflow parent terminalization 是同一条可工作的链路。

把这条链路加入 128 MiB 路由压力门时还暴露出另一个问题:该门同时运行可选 AI Prompt、AI Model Invocation crash matrix 与核心调度/执行 workload,虽然没有 OOMcgroup memory.events.max 已出现非零 命中。把可选 AI 的瞬时峰值解释成所有路由用户的核心最低配置,或通过忽略 max 事件来让门变绿,都会 破坏 D-07 的 Profile 隔离。

决策

  1. Linux Application 条件测试必须通过真实 ql3-workflow schema v1 workflow.cancel command file 请求取消,不再用 SQL 注入 cancel intent。测试凭据、pepper、User、API credential 与 Owner RoleBinding 只作为私有测试 fixture 创建;生产 package closure 不增加 Owner CLI/Console。
  2. Workflow、Run、StepRun、Attempt、mutation、event 与 audit fixture 使用产品可接受的 UUID v4。命令 首次返回 accepted,同一命令重放返回 existing;持久层必须只有一个 run.cancel_requested 与一个 allowed workflow.cancel audit。
  3. 测试必须先观察 /proc/<pid> 存在,再验证进程退出、Attempt cancelled、两个 StepRun cancelled、 parent Workflow cancelled。该证据只证明受控 Linux 容器里的进程停止链,不宣称固定路由器断电、闪存 持久性或不受控 side effect 已被证明。
  4. 资源发布门按产品 Profile 分层:128 MiB router-stress-cisupportedMinimum=false 的核心压力档, 只运行 Edge executor、Node SQLite、Workflow success、SQLite lock、admission crash 与 control crash 256 MiB edge-release-ci 运行完整核心链、受认证 Workflow cancel,以及可选 AI Prompt/Model Invocation crash matrix。
  5. Workflow success 与 cancellation 在同一个 Node test process 中执行,避免重复装载完整 Application graph。报告解析所有 QL3_RESOURCE_EVIDENCE,逐条检查 RSS,并对 success/cancel 两组 durable fact fail closed;缺一条、计数漂移、进程未退出或超过预算都拒绝发布。
  6. @qinglong/local-owner-cli@qinglong/local-owner-console 只能是 @qinglong/local-applicationdevDependencies。cluster dependency audit 同时精确约束 manifest workspace:* 与 lockfile link:local image 与十档 artifact 必须继续证明二者不进入生产制品。

被拒绝的方案

  • 继续用 SQL 触发取消:只能证明底层 convergence,不能证明认证、Policy、命令幂等与审计产品链。
  • 给 128 MiB 档加内存或忽略 memory.events.max:隐藏了可选 AI 与核心路由运行时的资源边界。
  • 让 128 MiB 路由档承担全部 AI crash matrix:把 optional feature 变成基础 Profile 的隐性依赖。
  • 为成功与取消各启动一个 Application test process:重复模块装载会放大监督进程峰值,不代表真实单 Application cadence。
  • 把容器 /proc 证据称为物理设备发布证据:容器不能代替固定型号路由器的断电、闪存与热环境门。
  • 为测试适配再拆 workspace package:没有独立部署或生产依赖价值,并会违反既有 package 硬上限。

接受证据

  • Linux arm64、non-root、read-only root/workspace、no-new-privileges 的真实 Application cancellation 测试返回 accepted/exact existing,观察到 PID 存在后退出;parent/Attempt 均 cancelled,两个 StepRun cancelledcancel event/audit 各一条,cancel workload peak RSS 94,715,904 bytes。
  • 128 MiB/0.5 CPU/64 PIDs 路由核心档 6 个 workload 全通过:memory.peak=119,615,488 memory.events max/oom/oom_kill=0/0/0;该档明确不是受支持最低配置声明。
  • 256 MiB Edge 完整档 10 个 workload 全通过:memory.peak=137,867,264memory event 全零;Workflow success/cancel peak RSS 为 88,555,520/94,715,904AI Prompt edge/standalone 为 120,373,248/117,379,072 bytes。
  • Local Application 39 pass/3 Linux 条件 skip;完整 19-package 门退出 0;后端 1,101 tests、1,099 pass/2 skip/0 fail。Edge import、cluster dependency、package boundary、cluster deployment、worker deployment 与 local image 六项审计全部 compatible。
  • 十档 artifact 全 compatibleEdge/Standalone 3,547,572/3,547,620 bytesAdopted 4,146,274/4,146,358Application 4,633,747/4,633,891AI 4,882,494/4,882,554Application AI 5,968,741/5,968,897;最大档距 6 MiB 仍有 322,559 bytes。Application production closure 不含 Owner CLI/Console。
  • PostgreSQL 18.4 arm64 physical-streaming HA passed=trueremote_apply、timeline 1→2、旧主 fencing、pg_rewind 只读同步重入、两个 fresh control activation 与 remote Workflow cancellation promotion gate 全绿;ql3-ha-* container/network/volume 零残留。
  • 刷新后 GitNexus 为 42,509 nodes/96,471 edges/1,672 clusters/261 flows;五个修改符号全部 LOW,最多 1 direct/0 affected process。detect-changes all/compare develop 分别为 12 files/31 symbols 与 14/34,均 low/0 affected process。

剩余边界

  • 仍需在明确型号、内存、存储与文件系统的物理路由设备上执行断电、闪存持久性、热重启和长时间 soak;
  • 仍需 x64 CI/发布 runner 的同构资源门证据;
  • Cluster Workflow-specific 产品入口、远程 Worker stop acknowledgement 与物理基础设施 fencing 继续由 各自的独立发布门负责,不能由本 ADR 的本机 /proc 证据替代;
  • 联网 production dependency vulnerability audit 因依赖元数据外发权限未获批准,本轮不重跑。