4.1 KiB
4.1 KiB
R5.10 P0 事故复盘
结论
本次事故不是生产 lane writer 修改开发环境,也不是数据库迁移依赖。真正根因是一个此前被 admission 阻塞的旧 AgentRun PaC PipelineRun,在较新 b258520 已成功发布后才开始执行,并以较新的 GitOps commit 为父提交,把 sourceCommit 逆序写回旧值 0ca2c73。Argo 正常同步了错误 desired,manager 因此重新加载旧 sub2api Artificer AipodSpec,新任务在 admission 阶段失败。
影响
- NC01/nc01-v02 manager desired 与源码
v0.2分叉。 - Artificer 从
gpt-pika/grok回退到已删除的sub2apiprovider。 - HWLAB 公网入口修复无法派单,主线被 CI/CD 运行面故障阻塞。
- 两个重复的生产 lane writer 被停止;后续证据确认它们不是
bc12e93的作者。
时间线
- 较新 PipelineRun
agentrun-nc01-v02-ci-b258520...成功,生成 GitOpsdba70ac。 - 旧
agentrun-nc01-v02-ci-0ca2...在 admission 解除后延迟启动,生成父提交为dba70ac的bc12e93,但把 sourceCommit 写回0ca2c73。 - PR UniDesk #2157 与 AgentRun #364 加入 stale/divergent/unverifiable revision 成功 no-op 逻辑。
- #364 的自动 PipelineRun 在
place-scriptsinit 阶段失败;共享 schema validator 与 Ajv 被明文嵌入,单步脚本约 172 KiB,init container 退出 255。 - PR UniDesk #2160 将内嵌载荷改为 renderer 侧 gzip/base64,脚本降至 79,395 bytes;AgentRun #365 更新 repo-owned source artifact。
- #365 merge 自动产生 PipelineRun
agentrun-nc01-v02-ci-5d7ede...,成功生成 GitOps56b5f3ed...并滚动 manager。
根因与促成因素
- promotion 缺少 incoming revision 相对 source branch 与当前 GitOps desired 的 ancestry/新旧判定,旧任务可以覆盖新 desired。
- admission 阻塞把旧任务延迟到新任务之后执行,暴露了 PipelineRun 完成顺序不等于 source revision 顺序。
- schema warning-only 实现把完整依赖明文嵌入 Tekton step,缺少对 place-scripts 载荷尺寸的运行面约束验证。
- PaC
status/history/debug-step间歇性空 stdout,增加了定位成本;该可见性缺口由 UniDesk #2165 独立跟踪,不改变交付 authority。
修复
- incoming revision 已过期、分叉或相对当前 desired 无法验证时,PipelineRun 保持成功终态、输出
blocking=falsewarning,并保留现有 GitOps commit。 - ancestry 判断只使用 source clone 已有 refs 与当前 GitOps
source.json,不增加第二 authority 或额外网络 fetch。 - validator/Ajv 由 renderer 预压缩,运行时解压到有界临时文件;schema 与 OTel 失败仍只产生 warning,业务发布继续。
- 全部恢复只由正常 PR merge 的 GitHub webhook -> Gitea -> PaC -> Tekton -> GitOps/Argo 自动链完成;未执行人工 PipelineRun、mirror sync、Argo sync、runtime patch 或数据库操作。
验证
- schema stage 定向 Bun 测试:5 pass,0 fail;未运行 Vitest。
- AgentRun source artifact:aligned=true、provenance=true;生成 YAML 可解析,
gitops-promote脚本sh -n通过。 - 自动 PipelineRun
agentrun-nc01-v02-ci-5d7ede...:Succeeded。 - GitOps commit:
56b5f3ed00f28b04e47f2e9baf3792d745d2a375。 - manager Deployment
AGENTRUN_SOURCE_COMMIT=5d7ede07543d6f8d9924ce9853420a4c6051eabd,新 Pod ready。 agentrun describe aipodspec/Artificer:lane=v0.2、profile=gpt-pika、provider=NC01、model=gpt-5.6-sol,provider SecretRefs 为gpt-pika与grok,旧sub2api已消失。
长期判定
- PipelineRun 的 source revision 决定新旧,排队与完成时间不能成为 desired authority。
- runtime patch 可按
$unidesk-daddevP2 用于调试或临时恢复,但不能冒充终态;本事故未使用 patch,终态已由正常自动链收敛。 - CI/CD 校验继续 warning-only,不得因 schema/OTel 漂移关闭功能或阻塞滚动。