mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-20 16:07:11 +08:00
6.1 KiB
6.1 KiB
ADR-0278:Profile 分层的 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,虽然没有 OOM,cgroup memory.events.max 已出现非零
命中。把可选 AI 的瞬时峰值解释成所有路由用户的核心最低配置,或通过忽略 max 事件来让门变绿,都会
破坏 D-07 的 Profile 隔离。
决策
- Linux Application 条件测试必须通过真实
ql3-workflowschema v1workflow.cancelcommand file 请求取消,不再用 SQL 注入 cancel intent。测试凭据、pepper、User、API credential 与 Owner RoleBinding 只作为私有测试 fixture 创建;生产 package closure 不增加 Owner CLI/Console。 - Workflow、Run、StepRun、Attempt、mutation、event 与 audit fixture 使用产品可接受的 UUID v4。命令
首次返回
accepted,同一命令重放返回existing;持久层必须只有一个run.cancel_requested与一个 allowedworkflow.cancelaudit。 - 测试必须先观察
/proc/<pid>存在,再验证进程退出、Attempt cancelled、两个 StepRun cancelled、 parent Workflow cancelled。该证据只证明受控 Linux 容器里的进程停止链,不宣称固定路由器断电、闪存 持久性或不受控 side effect 已被证明。 - 资源发布门按产品 Profile 分层:128 MiB
router-stress-ci是supportedMinimum=false的核心压力档, 只运行 Edge executor、Node SQLite、Workflow success、SQLite lock、admission crash 与 control crash; 256 MiBedge-release-ci运行完整核心链、受认证 Workflow cancel,以及可选 AI Prompt/Model Invocation crash matrix。 - Workflow success 与 cancellation 在同一个 Node test process 中执行,避免重复装载完整 Application
graph。报告解析所有
QL3_RESOURCE_EVIDENCE,逐条检查 RSS,并对 success/cancel 两组 durable fact fail closed;缺一条、计数漂移、进程未退出或超过预算都拒绝发布。 @qinglong/local-owner-cli与@qinglong/local-owner-console只能是@qinglong/local-application的devDependencies。cluster dependency audit 同时精确约束 manifestworkspace:*与 lockfilelink:;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/exactexisting,观察到 PID 存在后退出;parent/Attempt 均 cancelled,两个 StepRun cancelled,cancel 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,264,memory event 全零;Workflow success/cancel peak RSS 为 88,555,520/94,715,904,AI 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 全 compatible:Edge/Standalone 3,547,572/3,547,620 bytes,Adopted 4,146,274/4,146,358,Application 4,633,747/4,633,891,AI 4,882,494/4,882,554,Application 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=true:remote_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-changesall/comparedevelop分别为 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 因依赖元数据外发权限未获批准,本轮不重跑。