Files
qinglong/docs/adr/ADR-0460-one-shot-cancellation-status-product-entry.md
T

6.9 KiB
Raw Blame History

ADR-0460:一次性 Cancellation 可用性状态卡与告警退出码

  • 状态:Accepted
  • 日期:2026-08-19
  • 关联 RFCQL-RFC-0001 D-367、PR-5、PR-7
  • 关联 ADRADR-0005、ADR-0458、ADR-0459
  • AmendsADR-0459 的产品入口与告警路由边界

上下文

ADR-0459 已让 Run management plane 返回数据库事实驱动的 Project 级 cancellation summary,但现有 ql3 run 仍要求 operator 手工准备完整 command JSON,再自行解释三态 assessment。该协议可以被脚本调用,却还不是可直接使用的产品入口,也没有稳定的告警退出语义。

QingLong 的部署跨度很大。Cluster operator 需要可读状态卡和可供 systemd、CronJob、CI 或外部告警器路由的机器结果;路由器级 Edge/Standalone 则不能为 Cluster 可观测性引入 daemon、轮询、PostgreSQL 客户端或新的制品闭包。Copilot Console 又只有普通 Project API Bearer authority,直接把 Run management mTLS/OIDC 凭据并入该常驻本机 BFF 会混合两种权限边界。

决策

  1. 在现有 ql3 run/ql3-run-client 增加一次性 status 模式:ql3 run status --config=... --assertion=... --project=... [--format=text|json]。它继续由统一产品 CLI 无 shell 委派同一 binary,不新增 workspace package、binary、服务或端口。
  2. status 只在一次调用内生成 request/audit UUID,并构造固定 run.cancellation.summary 命令。Project、配置文件和短生命周期 assertion 仍显式提供;operator context 只可补充稳定的 Run management config,不保存 assertion。调用方不能提供 Run/Attempt identity、状态过滤、时间窗口、计数或服务端时间。
  3. 通用认证管理客户端允许包内调用方传入内存命令,但仍执行同一 exact-shape normalizer、TLS 1.3、Run 专用 mTLS、OIDC Bearer、固定 management path、128 KiB 响应上限、单连接和响应校验。既有 --command 私有文件模式保持字节读取、权限检查、错误语义和输出格式不变。
  4. 默认 text 输出是无 ANSI 控制字符、确定性、适合终端与日志的状态卡;json 输出使用固定 qinglong/run-cancellation-status@v1 schema。两者只包含 request/Project、数据库观察时间、assessment/action、固定 dispatch/signal/blocking 计数和可选最早 blocked 时间,不增加 Run/Attempt/Worker、lease、PID、命令、环境、Secret、日志或错误原文。
  5. 产品告警映射固定为 clear → ok/0converging → warning/10attention_required → critical/20。配置/网络/协议失败仍为 1CLI 用法错误仍为 64;因此外部 supervisor 可区分“等待 caller-driven 收敛”“需要 inspect”与“查询本身失败”,而无需解析自然语言。
  6. 命令严格 one-shot:一次 summary、一次 allowed/denied audit,然后退出;不重试、不轮询、不缓存、不保持 socket,也不改变 /readyz。blocked 仍不撤回整个 Cluster readiness。
  7. 该入口只进入 Cluster Admin 制品。Edge/Standalone 依赖图和制品不得包含 cluster-admincluster-postgrespg、状态 CLI 或 TLS/OIDC 管理凭据。
  8. D-367 不返回 blocked Run 列表。用户从已知 Run 继续使用既有 inspect/rearm;从聚合发现未知 blocked Run 的能力必须以后用独立、有界、稳定 cursor、低敏 identity 和索引证明的 drill-down 契约完成,不能让 status 偷偷退化为无界扫描。

被拒绝的替代方案

在 Copilot Console 直接复用普通 Project API 凭据

拒绝。summary 位于独立 Run management authority,普通 Bearer 不应绕过 mTLS、OIDC purpose 和专用 Policy/audit。把第二组高权限凭据强制塞进 Console 也会扩大常驻 BFF 的秘密与故障面;Console 接入应在未来以显式可选 authority 单独设计。

新建 exporter、告警 daemon 或后台轮询器

拒绝。它会增加常驻进程、连接和 cadence,并让小规模 Cluster 为无人查看的状态持续付费。一次性命令可由现有部署侧调度器按自身策略调用。

客户端从列表或本地缓存推导 assessment

拒绝。列表可能分页且跨页漂移,本地缓存也会在 failover 后失真。状态卡只投影经过服务器和客户端双重交叉不变量校验的单事务 summary。

所有非 clear 状态返回同一个退出码

拒绝。converging 需要等待,attention_required 需要 inspect;合并后外部告警器只能解析 JSON 或把正常收敛当成阻塞故障。

资源、安全与部署影响

  • Cluster 每次调用只建立一个短生命周期 mTLS 连接,使用既有 Run manager pool 完成一个最长 5 秒的 SERIALIZABLE summary/audit 事务;客户端不创建 Agent keep-alive、缓存、timer 或临时 command 文件。
  • 文本卡和 JSON 使用同一已校验 projectionProject/时间/计数均有既有协议上限,不存在动态指标 label 或任意服务端路径。
  • 旧命令文件模式继续支持 retry、stop、summary、inspect 和 rearm,升级不要求重写现有自动化。
  • 新源码保留在已有 cluster-admin/run-management 内;通用内存命令入口位于已有 management-support,没有单文件 package 或 src 根平铺。

验证

  • runCancellationStatus 与 management-client 聚焦门 12/12CLI/product 真实进程门 15/15;覆盖内存 summary 命令、三态 severity/退出码、低敏文本卡、错误 operation 拒绝和原 command-file/mTLS route 兼容。
  • 真实本机 TLS 1.3/mTLS CLI 集成测试验证只向 /api/v3/runs/management POST 一次 run.cancellation.summary,不带 Run ID,并以 attention_required 返回 JSON 与退出码 20help 与非法 Project 在 I/O 前失败关闭。
  • Cluster Admin 全量 407 total / 404 pass / 3 conditional skip / 0 failbackend 全量 1,489 total / 1,487 pass / 2 conditional skip / 0 fail18-package clean build/test 退出 0。
  • package boundary、Cluster dependency、Edge import、Cluster deployment 四项审计均 compatibleworkspace 保持 18 packages、无 single/shallow packageCluster Admin 为 123 个 source、122 个 nested source、仅 1 个受审 binary root entry。
  • 14/14 Local artifact audit 均 compatible;基础 Edge/Standalone 为 2,589,998 / 2,590,076 bytesApplication+AI 为 4,493,151 / 4,493,283 bytesMCP 为 7,315,930 / 7,316,038 bytes,证明 Cluster-only 入口未进入低配设备闭包。
  • PostgreSQL 18.6 arm64 HA 145/145timeline 1→2,报告 SHA-256 59a568d0511cde671946ebf6df09f88868a3d591c5021c90bc27d4715411091e;独立 evidence audit 为 compatible=true、零 finding。

后续

ADR-0461/D-368 已完成 Project-scoped blocked drill-down:固定 16 项、数据库快照键集、最低 Run identity、Project partial index、Policy/audit 与一次性 ql3 run blocked。Copilot Console 状态卡和 drill-down 应复用这些 projection 与显式 Run management authority,但不得默认持有该 authority、建立轮询或自动翻页。