# R4.1 阶段报告

## 状态

- 任务仍在进行中，来源为 [AgentRun #309](https://github.com/pikasTech/agentrun/issues/309)。
- manager 根因修复已通过 [PR #311](https://github.com/pikasTech/agentrun/pull/311) 合并到 `v0.2`，merge commit 为 `b7a15b77e0040f2c602f09629835f2a438132d61`。
- UniDesk 只读分类对齐由 [UniDesk #1820](https://github.com/pikasTech/unidesk/issues/1820) 和 R4.1.1 接续；完成前不关闭 R4.1。

## 根因与修复

- 终态 run/cancel 事务未释放 `claimed_by`、`lease_expires_at` 和 PostgreSQL lease。
- retention 将终态 Pod 的 terminated container 错当成当前 active。
- 修复让终态事务原子释放 claim/lease，并以 DB fence 与 Kubernetes CAS 修复历史漂移；fresh claim、Running/Ready Pod 和事实不完整继续 fail closed。

## 临时缓解

- 历史容量一度为 `20/20`；受控观察恢复到 `4/20` 后，两个未配置 `dsflash-go` 的 `FailedMount` 探针通过正式 `agentrun cancel run/...` 终态化，未裸删 Job/Pod。
- 缓解期间容量保持 available，最低观测到 `3/20`、`availableSlots=17`；临时缓解不等于根因修复。

## 自动交付

- PR merge 自动产生唯一外层 PaC 事件，PipelineRun 成功，source 为 `b7a15b7`。
- 新镜像已构建，Argo `Synced/Healthy`，runtime `1/1` 且 digest 对齐。
- 未人工触发、sync、flush、创建 PipelineRun 或 patch 运行面。

## NC01 验收

- 正式 task `qt_385e04018ef04783a74d0ee86fbb8819` 经 Queue create/dispatch 完成，result 为 `RUNNER_RETENTION_ACCEPTANCE_OK`。
- 新 manager 的 `runner-job-created` 事件将两个历史对象分类为 `terminal-run-stale-claim`，并给出 `repairKind=release-terminal-run-claim`；fresh active runner 继续 protected。
- Artificer command 完成时保留 warm runner fresh claim；随后正式 cancel 使 run 进入 `cancelled`，`claimedBy=null`、`leaseExpiresAt=null`，验证终态事务立即释放 claim。

## 验证与剩余项

- 子代理已通过 runner retention/terminal lifecycle 定向合同 40 项、durable dispatch 10 项、变更模块 build 和 `git diff --check`。
- 隔离 PostgreSQL URL 未声明，因此未反解运行面 Secret，也未执行真实 PostgreSQL 集成入口。
- UniDesk `cleanup-runners` observer 仍沿用旧分类，未把 manager 已确认的两个终态 claim 显示为 candidate；由 #1820 修复并完成默认 compact CLI 验收。
