# R1.2.8 任务报告

## 结论

NC01 的 Tekton 历史对象留存已从单一 `devops-infra` 策略收敛为 YAML-first 的五命名空间策略集，覆盖 `devops-infra`、`agentrun-ci`、`hwlab-ci`、`pikaoa-ci` 与 `selfmedia-ci`。策略仅删除已终态且超过窗口的 PipelineRun 根对象，并通过 `ownerReferences` 的 Background 级联回收从属 TaskRun、Pod、Secret 与 PVC；活跃对象、每组最新对象、未到龄对象、未知分组和时间戳解析失败对象均受保护。实现已由 PR #2340 合并，运行面配置与仓库同源且无漂移。

## 设计与实现

- `config/unidesk-cli.yaml` 以 `defaults + policies` 表达公共参数和五个独立策略；各策略使用长期稳定的 repository、node、lane 等 owner 标签分组，不使用含提交号的易变标签。
- `gc remote <provider> retention plan/run`、`policy install/status` 和 systemd timer 共用同一个解析器、筛选器与每策略删除上限。
- 自动任务每 15 分钟运行；`--limit` 仍受 owning YAML 上限约束，不引入隐藏默认值。
- 只删除 PipelineRun 根对象，不直接枚举删除从属对象；由 Kubernetes 所有权关系完成级联。
- 未触碰 Webterm、PK01，未运行 Vitest，未人工触发 PaC、Tekton 或 Argo 交付链。

## 验证实证

合并前真实 dry-run 扫描 459 个 PipelineRun，其中 451 个终态、372 个可删除；同时保护 8 个活跃对象、56 个未到龄对象和 23 个每组最新对象，未知分组与无效时间戳均为 0。

受控首轮运行任务 `nc01-kubernetes-retention-1784203383-4051025` 成功删除 373 个根对象，失败批次为 0；执行范围内 PipelineRun 从 465 降至 93。级联稳定后，全 Kubernetes 对象概览由约 450 个 PipelineRun、699 个 TaskRun、673 个 Pod、545 个 Secret，下降到 99、214、294、248。

14:15 的首个自然 systemd 周期再次按同一策略自动删除 9 个到龄 PipelineRun，`policyCount=5`、`failedCount=0`、服务结果为 success，下一轮已正常排期。随后全局 PipelineRun 为 90 个；五个目标命名空间分别为 `devops-infra=53`、`agentrun-ci=5`、`hwlab-ci=12`、`pikaoa-ci=14`、`selfmedia-ci=6`。

运行面 `policy status` 显示 desired/installed 配置与 runner 的 SHA-256 完全一致，`policySync.inSync=true`，无 drift。

## 内存结果

清理执行高峰期间 k3s 仍在处理级联和活跃 CI，对象下降没有立即转化为物理内存回收，因此未把瞬时结果误报为收益。自然定时轮完成且负载趋稳后：

- `/proc/meminfo` 的真实 `MemAvailable=4,674,322,432` 字节，约 4.35 GiB，swap 明确不计入，已超过 4 GiB WebProbe 门槛。
- k3s-server PSS 约 3.17 GB，较级联高峰约 3.99 GB 回落约 0.82 GB。
- 内存 PSI full avg60 为 0.08%，目标缺口为 0。
- swap 仍只是可靠磁盘上的安全垫，不作为物理可用内存或 WebProbe 启动资格。

## 遗留观察

当前仅观察到 4 个僵尸子进程，分别归属 `todo-note` 与 `hwlab-cloud-web`，与此前大规模 Decision Center 泄漏不同，不阻塞本任务。持续留存由 YAML-first 定时策略自动执行；后续若调整窗口、分组或上限，只修改 owning YAML 并走受控安装入口。
