# R1.2.2 任务报告

## 根因与修复

NC01 约 1 万个 zombie 中，Decision Center 长期 Bun 父进程拥有 99% 以上；周期健康刷新通过 Bun 的 Node 兼容 `spawnSync` 执行多条 Git 命令并遗留未回收子进程。修复改用 Bun 原生子进程路径，把远程 Git 同步移到启动/写入阶段，健康刷新只解析本地 `.git/HEAD`、ref 与 `packed-refs`。

`gc remote <node> memory-distribution` 已泛化为一次披露物理内存、PSS、进程 swap、Docker/Pod owner、zombie 分类、cgroup 和 Kubernetes 对象压力。NC01 的 cgroup 文件页回收与 Kubernetes 历史对象 retention 均由 `config/unidesk-cli.yaml` 管理，不终止 workload、不重启 k3s、不把 swap 计入可用内存。

## 自动交付验收

Decision Center 通过正常 source PR、Gitea snapshot、PaC、BuildKit、GitOps 与 Argo 自动链滚动到 source `17dbd5aec5da13d050eed48bf27db5dd04c35bdb`，新 Pod 零重启且健康接口 ready。新 Pod 启动超过 300 秒后，Decision Center zombie owner 未再出现；全机进程从 11,598 降到约 780，zombie 从 10,817 降到 4-7，剩余少量归属 Todo Note 与 HWLAB Web，不属于本任务 owner。

## GC 结果

- 将 NC01 Tekton 根 PipelineRun 留存窗口从 24h 调整为 12h，仍保护 active、每组最新 3 个、未知分组和无效时间对象；自动 timer 每 15 分钟最多回收 100 个。
- 手动 retention job `nc01-kubernetes-retention-1784180778-1363045` 成功删除 292 个根 PipelineRun；devops-infra Pods 由 433 降到 150、TaskRuns 438 降到 149、Secrets 443 降到 154。
- 两次精确 cgroup `swappiness=0` reclaim 均成功，但主机收益会被活跃负载快速再占用，不能作为长期 4 GiB 保证。
- 稳定窗口内 `MemAvailable` 从泄露修复前约 2.4 GiB 提升到约 3.5 GiB；曾短时达到约 3.74 GiB，但未持续超过 4 GiB。后续 WebProbe 仍必须按真实 `/proc/meminfo` 门禁跳过，不得计入 swap 或继续盲目 reclaim。
