26 KiB
AgentRun 运行可靠性
来源:AgentRun #294。
范围:长期跟踪 AgentRun admission、dispatch、runner、resource bundle、provider 建立、终态失败可见性与自动交付可靠性。单次故障作为 MDTODO ITEM 纳入,不为每个 issue 新建文件。
R1 [completed]
依据 AgentRun #294 恢复 Artificer resource-bundle Git 获取与失败可见性,完成任务后将详细报告写入任务报告。
R1.1 [completed]
用固定四个 run 单步披露 bundle source、fetch 阶段、脱敏 remote/credential sourceRef 与首个失败分类,完成任务后将详细报告写入任务报告。
R1.2 [completed]
在 YAML/sourceRef 或 AgentRun runner/resource-bundle 权威路径修复 code 128,并统一 task terminal failure 摘要,完成任务后将详细报告写入任务报告。
R1.3 [completed]
通过 PR 合并自动 CI/CD 后重派同类 Artificer 任务,验收 bundle materialized、provider established 和业务执行开始,完成任务后将详细报告写入任务报告。
R2 [completed]
在不改变产品事件、持久化、trace authority 或跨服务职责的前提下,清理 AgentRun/HWLAB 观测诊断 CLI 支线;来源 UniDesk #1619 与 UniDesk #1796,任何架构变更均跳过,完成任务后将详细报告写入任务报告。
R2.1 [completed]
落实 UniDesk #1619:仅在 CLI 输出层增加有界 plan 默认视图和 observability scoped help,显式 full/raw 保持完整;禁止提高 stdout 阈值、修改 YAML 或运行面,完成任务后将详细报告写入任务报告。
R2.2 [completed]
落实 UniDesk #1796:仅修既有诊断层的 lane 选择、commandId 过滤和 missing-command-terminal-span 的 unknown/instrumentation-gap 分类;禁止新增第二事实源或改变 trace authority,完成任务后将详细报告写入任务报告。
R2.3 [completed]
由主代理完成架构 diff review、定向 CLI 验收、PR 合并与 issue 收口;只接受局部诊断/可见性修改,rollout 不适用,完成任务后将详细报告写入任务报告。
R2.4 [completed]
登记 UniDesk #1801:diagnose 的 command/result 读取会向同一业务 trace 补记 command_result span,使重复读取改变 instrumentation completeness;该问题涉及 trace context 与诊断证据隔离,本轮按架构变更边界跳过,完成任务后将详细报告写入任务报告。
R3 [completed]
依据 AgentRun #307 实现 Queue Q5 的同 task 不可变 attempt 历史与显式终态失败 retry,禁止通过重置 task 或复制 task 合同绕过资源语义,完成任务后将详细报告写入任务报告。
R3.1 [completed]
在 AgentRun 增加正式 agentrun_queue_attempts 存储、现有 latestAttempt 回填和不可变历史查询;task.latestAttempt 只保留为摘要指针,完成任务后将详细报告写入任务报告。
R3.2 [completed]
实现服务端 POST /api/v1/queue/tasks/:id/retry:同 task 新 attempt、retry key 幂等、failed/blocked 白名单、completed/cancelled fail closed,并让 dry-run 全校验且零写入,完成任务后将详细报告写入任务报告。
R3.3 [completed]
在 UniDesk 受控 CLI 增加 task retry 资源入口,完成内存/PostgreSQL 并发测试、PR 自动交付和固定任务 qt_5b65a086385a49bdb874cf8f9d191169 的 bundle/provider/业务启动验收,完成任务后将详细报告写入任务报告。
R4 [in_progress]
完善 AgentRun runner 生命周期、claim 释放、容量门禁与 manager 权威回收,使终态一致性、并发安全和有界诊断形成单一可靠合同,完成任务后将详细报告写入任务报告。
R4.1 [in_progress]
解决 AgentRun #309:终态 run/command 与终态 Pod 不得因陈旧 runClaimedBy 被判假活并占满 maxRunners;对齐 AgentRun #280 的 retention 边界,由 manager 原子释放 claim、终态化和 CAS 回收,完成并发测试、自动交付及 NC01 受控 CLI 验收,完成任务后将详细报告写入任务报告。
R4.1.1 [in_progress]
解决 UniDesk #1820:对齐 cleanup-runners 只读 observer 与 AgentRun manager retention 的终态 claim 分类,默认有界披露 terminal-run-stale-claim、repairKind 和一致的 candidate/protected 计数;manager 保持唯一回收 authority,禁止增加删除入口或第二事实源,完成任务后将详细报告写入任务报告。
R4.2
支线登记 AgentRun #284:Provider Secret activation fence 属于额外合同、租约与围栏架构,未经用户再次明确授权不得实现、合并、部署或作为 Artificer/.pika 主线门禁;保留 issue 仅供历史上下文,不依赖 #324,也不调度子代理执行,完成任务后将详细报告写入任务报告。
R4.3
解决 AgentRun #330:修复 manager 已选定 inactive runner 后删除其关联 Secret 失败导致 dispatch 无法释放容量;只处理对象归属、NotFound 幂等和 typed failure,禁止扩展合同、租约、安全机制、围栏或容量架构,自动上线后以原 task qt_fd1c18a8bb04490d8bbb838885d1f436 成功 dispatch 验收,完成任务后将详细报告写入任务报告。
R4.4 [completed]
解决 AgentRun #332:修正终态 runner 与 manager 基础设施事件的假活分类,让既有周期 reconciler 自动回收所有 inactive runner;不新增合同、租约、安全机制、围栏、CAS 或容量架构,以 NC01 空闲容量收敛到 0/20 验收,完成任务后将详细报告写入任务报告。
R5 [in_progress]
完善 Artificer AipodSpec、primary workspace、resource bundle 物化与业务 turn admission,使声明式源码快照、能力 bundle 和失败可见性形成单一合同,完成任务后将详细报告写入任务报告。
R5.1 [in_progress]
解决 AgentRun #310:Artificer 已报告 resource-bundle-materialized 却未物化 primary UniDesk workspace;禁止 agent 自行 clone、借用宿主 worktree 或 trans 源码旁路。旧 task 已错误进入不可变 completed,修复自动交付后须以相同 cadence 与哨兵报告业务目标创建新的 Artificer task,并以 Artificer 自身完成作为验收,完成任务后将详细报告写入任务报告。
R5.1.1 [in_progress]
审核并修复 AgentRun PR #312 后续暴露的 session workspace 连续性与源码清洁性:真实 Artificer run run_d2cd5c7b9c4149a28dd6e8403c77fa01 已在 seq=8 精确物化 UniDesk master d3f6d1cd335b 到 primary workspace .,但 seq=35 因受管 capability bundle 覆盖产生 .agents/skills/* 与 tools/ untracked 而错误判定源码已脏并 fail closed;修复必须让受管覆盖不污染 Git source view、不得隐藏真实源码改动,并保持同 session 后续 run/runner 的 source/workspace identity 与安全恢复。PR merge 后只允许自动交付,再用两项固定 Artificer 业务目标验收;禁止主代理代做、agent clone、宿主 worktree、trans 源码旁路或人工 CI/CD,完成任务后将详细报告写入任务报告。
R5.2 [completed]
解决 AgentRun #313:真实 Artificer task qt_5cbeb5c338974d14b4d55336a412fc00 的 AipodSpec 摘要声明 github-ssh SecretRef,但 task input 的 executionPolicy.toolCredentials 仅保留 github-pr 与 unidesk-ssh,证明 volume credential 在 create/render/admission 阶段已丢失,既有 runner 子进程继承修复无法生效;补齐声明到 task、runner mount、backend commandExecution 的完整投影,使真实 git SSH push 可用。缺 key、known_hosts 或环境继承时必须脱敏 typed fail closed;禁止 /root/.ssh、ssh-keyscan、token URL、匿名 transport、人工 CI/CD 或主代理代做业务任务,完成任务后将详细报告写入任务报告。
R5.3 [in_progress]
解决 AgentRun #219 的 Final Response 重复与历史 assistant_message 整段重放:PR #314 自动上线后的真实 Artificer run run_d2cd5c7b9c4149a28dd6e8403c77fa01 已由有界单事件 CLI 确认 seq=22/27/36 是三个 completed-agent-message(itemId A/B/C),seq=38/39/40 却又以相同 A/B/C 发出 agent-message-delta-progress 的 terminal progressFlush,seq=42 才是指向 C 的无正文 final seal;根因是 completed item 未从 delta progress state 精确封口,finalize() 再次 flush,并非 Kafka/SSE 或文本重复。按 itemId 修复 AgentRun/Codex backend progress/completion 生命周期,保留不同 itemId 同文消息语义并确保无正文 seal 只作 authority control;禁止 HWLAB/Workbench 文本去重、tail 合并或 Kafka/SSE 补洞,完成任务后将详细报告写入任务报告。
R5.3.1 [in_progress]
继续解决 AgentRun #219:真实验收 run_3bd02d10ee534b8ca29176f15a893555 的 seq 136/137 是同一 itemId、完成前的累计 agent-message-delta-progress,seq 138 才是 durable completed body;三者都编码为 assistant_message,导致 timeline 显示三条近似 final response。将 live delta/progress、durable completed body、bodyless final seal 与 terminal status 在权威 event contract 中明确区分,同时保留实时可见性和 #316 的 late-replay/itemId/seal 修复;禁止 HWLAB/Workbench 文本去重、tail merge 或 Kafka/SSE 补洞,完成任务后将详细报告写入任务报告。
R5.4 [completed]
解决 AgentRun #319:Artificer 既有 session send 在 new-turn runner admission 的 kubectl get jobs 失败后,已写入 run_22008379b6ac48e188032c1091c0741b 与 pending command,却没有 runner-job-created/typed terminal,session 永久显示 waiting-runner。将 session new-turn 改为 durable、幂等、可恢复的 runner dispatch 合同;admission/Job 失败必须写前 fail closed 或原子终态化并释放 session identity,覆盖 Memory/PostgreSQL、K8s failure、并发与 restart;禁止复制 task/session、数据库修补、第二清理 authority 或人工 CI/CD,完成任务后将详细报告写入任务报告。
R5.5 [in_progress]
解决 AgentRun #322:PR #321 自动发布并原位恢复旧 run/command 后,durable dispatcher 在正式 NC01/nc01-v02 manager 内以类型化 runner-kubernetes-observation-failed 重试并终态化,精确失败为 kubectl get jobs exit=1,Artificer backend 未建立。调查并修复 manager 的 Kubernetes identity/namespace/RBAC/kubectl transport 与 bounded redacted 诊断,保持 durable intent、typed terminal、session release 和 Kafka event 合同;禁止回退同步 HTTP kubectl、扩大容量、删 Runner、数据库修补、复制 task/session 或人工 CI/CD。自动发布后必须在同一 Artificer session 继续原只读哨兵报告并进入 backend turn,完成任务后将详细报告写入任务报告。
R5.5.1 [in_progress]
解决 AgentRun #324:同一 session 首次 run 已将 UniDesk bundle 物化到 session workspace,但新 Runner 续跑 cwd 回退为镜像内 AgentRun 源码;恢复 durable session workspace/resource binding、PVC mount 与 workdir,并让 session describe 有界披露绑定和 mismatch,禁止 clone、prompt cd、宿主路径 fallback、新 task/session 或人工 CI/CD,完成任务后将详细报告写入任务报告。
R5.6 [completed]
解决 UniDesk #1883 与 AgentRun #342:让 Artificer runner 的受控 trans 复用 UniDesk Windows route 解析与 frontend transport,支持 D518:win 及 win// 原入口;区分 primary source workspace 与用户授权的远端 tool target,删除 unsupported-operation 和 host path 误判,不新增节点特例、旁路 SSH 或隐藏 fallback。两个 PR 自动上线后用最短 Artificer canary 验收 pwd、ls、cat 和 apply-patch,完成任务后将详细报告写入任务报告。
R5.7 [in_progress]
解决 UniDesk #1957 与 AgentRun #375:修复 Artificer resource bundle 缺失 $post-task skill;只沿 agent_skills 权威源、AgentRun AipodSpec、resource bundle 和 runner 投影物化,禁止 prompt 复制、手工补文件、第二 authority 或人工 CI/CD,以真实 Artificer follow-up 直接加载 $post-task 验收,完成任务后将详细报告写入任务报告。
R5.8 [in_progress]
解决 UniDesk #2014:把 config/unidesk-cli.yaml#github.auth.repositoryOverrides 的既有私有仓凭据通过 YAML-first tool credential/resource bundle 投影给 Artificer,使受控 unidesk-gh 可读取、创建和评论任务私有仓 PR;Secret 只披露 SecretRef presence/fingerprint/valuesPrinted=false,不新增第二 GitHub 客户端、权限契约、租约或围栏,并与 PikaOA MVP 主线并行且不作为业务门禁,完成任务后将详细报告写入任务报告。
R5.9 [in_progress]
解决 AgentRun #356:修复 runner Job 已不存在且 lease 过期后,非终态 active turn admission 仍以 session-turn-admission-active 阻塞同 session send;按既有 SPEC 在 memory/PostgreSQL authority 内原子终结或隔离陈旧 admission 并创建新 run/turn/runner,保留 fresh active steer/并发拒绝,不新增第二 session authority、租约、围栏或客户端 retry,并与 PikaOA MVP 并行且不作为业务门禁,完成任务后将详细报告写入任务报告。
R5.10 [completed]
解决 AgentRun #363:旧 PipelineRun 在新 revision 已发布后才解除 admission 排队并把 nc01-v0.2-gitops 回退到旧 sourceCommit,导致 Artificer 重新加载已删除的 sub2api AipodSpec;PaC promote 必须以 source branch 最新 revision 为 authority,把过期运行处理为 warning=true、blocking=false、成功 no-op,禁止覆盖更新 GitOps,并通过自动 PaC 恢复 pika/grok AipodSpec。禁止人工 PipelineRun、Argo sync、数据库修改、第二 authority或 fallback;调试 patch 只允许按 $unidesk-daddev P2 最小可逆执行,终态必须由 owning YAML/源码和自动 CI/CD 收敛,完成任务后将详细报告写入任务报告。
R6 [completed]
将“先恢复运行面再工程化”固化为 unidesk-subagent 的泛化主线规则:运行面恢复关键路径由主代理控制,低耦合工程化任务及时并行,恢复后继续完成工程化交付;将单 PR 收口、复用 guarded merge 内建 preflight、避免仅补 merge SHA 的重复 PR 和减少碎片化 GitHub 查询固化到 unidesk-gh 及相关 reference,并让 merge 默认摘要直接披露 merge commit 与 mergedAt,完成任务后将详细报告写入任务报告。
R7 [completed]
将 Artificer 固化为所有执行型子代理任务的强制默认执行面:用户只说“子代理”时必须使用 Artificer;只有用户明确指定原生子代理,或 Artificer 经有界 readiness/真实派单证据确认故障不可用时,才允许原生子代理执行;禁止主代理因方便、速度、空闲槽或历史习惯自行降级,并要求 Artificer 恢复后立即停止原生扩展并交接,完成任务后将详细报告写入任务报告。
R8 [in_progress]
解决 UniDesk #2103:将 agentrun events 的主工作流改为保留 --after-seq 分片游标并使用 --expect <N>、--timeout <duration> 的 manager/API 长轮询;达到期望新增事件数立即返回,超时返回已观察事件及明确 timeout/next cursor,禁止 CLI 本地高频忙轮询或无输出,并同步 CLI、manager、测试与 unidesk-agentrun skill 文档,完成任务后将详细报告写入任务报告。
R8.1
解决 AgentRun #377:定位并修复 events --expect/--timeout 并发长轮询期间 manager 健康探针超时、KafkaJS 负 timeout 与 durable dispatch 无 runner 的因果链;保持既有 PostgreSQL/Kafka event authority、dispatcher/reconciler 与只读长轮询合同,不新增第二 authority、scheduler、租约或客户端 retry,通过正常 PR/自动 CI/CD 和并发 long-poll、health latency、dispatch/restart recovery 验收,且不得由 Artificer 递归修复自身,完成任务后将详细报告写入任务报告。
R9 [completed]
解决 UniDesk #2176:调查 post-task dispatch 将 R8、R7.1、R7.2 三个不同 Artificer task 误判为 Issue #1888 重复任务并统一取消的 P0 事故;追溯引入提交,错误 PR 先语义回滚,再以完整 logical-operation fingerprint 约束去重范围。不同 payload/workspace/MDTODO 必须互不影响,identity 不完整或观察陈旧时只 warning 且禁止 destructive cancellation;同一操作重放返回原 task。补 OTel typed evidence 与四任务回归,禁止锁、租约、第二状态库、PK01、Vitest和人工 CI/CD,正常 PR merge 后从原入口验收,完成任务后将详细报告写入任务报告。
R10 [in_progress]
解决 UniDesk #2202:从最新 master 重建跨仓 Artificer MDTODO 终态核对,派单时显式记录 MDTODO 独立 route、workspace 与 file authority,禁止从产品 targetWorkspace 扫描猜测;结果侧只读核对,缺失、歧义或不可读仅 typed warning、mutation=false 且保持真实 final response 可见,不新增锁、租约、第二状态库、证明链或围栏,不修改 PK01、不运行 Vitest或人工 CI/CD,完成任务后将详细报告写入任务报告。
R10.1 [in_progress]
重做 UniDesk #2202 的跨仓 MDTODO 终态权威:从最新 master 建立全新 worktree/session,显式 route/workspace/file 必须由受控 route 读取而非当前进程本地 readFile;run/task 元数据或文件缺失、歧义、不可读均附加 mutation=false typed warning 且绝不抑制真实 final response;补真实跨 route 测试,禁止复用或修补已关闭 PR #2210,完成任务后将详细报告写入任务报告。
R11 [completed]
依据 UniDesk #2273 修复 Artificer skill 更名后的 requiredSkills 装配漂移:让 YAML-owned AipodSpec 从旧 unidesk-code-queue 切换到唯一正式 unidesk-agentrun,不恢复旧目录或 fallback;通过独立 worktree、定向渲染测试、正常 PR 自动交付和全新 Artificer canary 证明 required skills 可 materialize,不修改 PK01、SelfMedia、D518、凭据或 live AipodSpec,完成任务后将详细报告写入任务报告。
R11.1 [completed]
依据 UniDesk #2275 泛化改进 AipodSpec 装配漂移调查入口:让默认 agentrun describe aipodspec/<name> 的人类、JSON、YAML 有界投影同时披露 required skill 名称、总数与省略数,使同类 source-of-truth 对照无需 --full 或临时 dump;保持 SecretRef-only、运行面零变更,并以一次定向 smoke 验证,完成任务后将详细报告写入任务报告。
R11.2 [completed]
解决 AgentRun #378:将辅助 skill 物化缺失从 runner 启动 blocker 降级为结构化 warning 并继续模型执行,保留 prompt、provider 凭据、primary workspace 与 runner 可执行环境等核心资源 fail-closed;同时把 Artificer 旧 skill 名更正为唯一正式 unidesk-agentrun,补 warning 可见性、可用 skill 注入和核心资源失败回归,走正常 PR 与自动交付后由主代理以全新 Artificer canary 验收,不修改 live 对象或 CI/CD 基础设施,完成任务后将详细报告写入任务报告。
R12 [completed]
解决 AgentRun #372:修复 release runner 以 Bun 直接作为容器 PID 1、无法回收 Codex/Git 孤儿后代而持续累积 timeout/git zombie;在 runtime image 使用轻量 init 作为唯一 PID 1 并 exec 现有 boot 链,不改变 task/session、Kafka 实时/回放、持久化、lease、timeout、provider、SecretRef 或 workspace authority;经 release 自动交付后验证新 runner zombie 不再增长,不运行 Vitest、不人工补 CI/CD且不触碰 Webterm,完成任务后将详细报告写入任务报告。
R13 [in_progress]
解决 UniDesk #2331:PR #2313 已移除 AgentRun task worktree Git 状态门禁,但 NC01 正式 create task 仍返回旧 dirty worktree 拒绝;由原生子代理定位源码、PaC/GitOps 与运行面 revision 漂移,完成最小修复、正常 PR/自动交付和带 dirty task worktree 的全新 Artificer canary,禁止递归修复、人工 PipelineRun、live patch、恢复门禁或修改 PK01/Sub2API/ApiState,完成任务后将详细报告写入任务报告。
R14 [completed]
解决 agent_skills #16:让 resource bundle 中声明的 skill 在全新 checkout 后可直接读取,收敛 humanizer-zh 的唯一源码 authority,并增加轻量 gitlink/.gitmodules/SKILL.md 预检;未声明、不可解析或物化后缺少可读 SKILL.md 时输出具体路径与原因,合法 submodule 和普通 skill 目录继续通过,不修改 AgentRun、SelfMedia、release、生产或 CI/CD 公共服务,完成任务后将详细报告写入任务报告。
R15 [completed]
解决 lab-dev.hwpod.com Workbench 在 trace f04d1fa8a6eecf03a5a306840d502454 返回 admission_promotion_unavailable:精准纠正提交 1a070a9d 将 development 错接 nc01-release 的 YAML 路由,使 NC01/v03 使用 AgentRun dev lane;保留统一管理员密码迁移,API key 继续作为独立凭据并通过受控 Secret 分发适配,完成自动交付和公网 Workbench 新 hi turn 验收,完成任务后将详细报告写入任务报告。
R16
继续解决 UniDesk #2154 的 HWLAB 双环境 AgentRun 工具凭据投影:development 已通过显式 codeAgentRuntime.toolSecretNames、native runtime GitOps postprocess/verify 和公网 Workbench fresh hi turn 完成 L0/L2 回归;待用户对本次 L3 明确授权后,通过 release PR 自动滚动 production,确认 lab.hwpod.com 使用 production AgentRun lane 的显式工具 SecretRef 并得到 terminal Final Response。禁止恢复旧 Secret、fallback、人工 PipelineRun、mirror sync 或 Argo sync,完成任务后将详细报告写入任务报告。