# Web Observe 运行时可靠性

- 范围：Web observe runner、浏览器进程树、终态回收、资源压力可见性与 YAML 控制的生命周期上限。
- 配置真相：沿用 Web probe owning scenario/YAML 与 `config/unidesk-cli.yaml#gc`，不建立旁路回收 authority。
- 领域分流：R1.2.1-R1.2.8 保留为历史实施记录；后续主机、Kubernetes、Kafka、swap 和通用 GC 治理统一进入[平台资源治理](./platform-resource-governance.md)，本文件只继续承载 Web observe/浏览器生命周期。


## R1 [in_progress]

解决 Web observe 终态未回收造成 observer/Chrome 长驻与 swap 压力：沿用受控 observe/GC authority，先完成有界临时缓解，再实现 YAML 控制的生命周期、自停和压力可见性，最终通过自动发布链验收。上下文：https://github.com/pikasTech/unidesk/issues/1842，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1_Task_Report.md)。

### R1.1 [completed]

调查并临时缓解：https://github.com/pikasTech/unidesk/issues/1842；用 manifest、heartbeat、PID、open fd/cwd 和调用方终态判定 stale，先 plan，再走正式 observe stop/force-stop 或 GC run，记录回收前后内存、swap、进程树与健康证据，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.1_Task_Report.md)。

### R1.2 [in_progress]

实现长期修复：https://github.com/pikasTech/unidesk/issues/1842；补齐所有调用方终态 stop，runner 从 owning YAML 获取最大运行时长/max samples/artifact cap 并自停，GC snapshot/plan/status 披露 active/stale、Chrome RSS、last cleanup 与 stop failure，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2_Task_Report.md)。

#### R1.2.1 [completed]

为 UniDesk #1710 增加 `devops-infra` Kubernetes 历史对象留存：手动 `gc remote <node> retention plan|run|status` 与 YAML 定时滚动回收必须复用同一 fail-closed 筛选器；只处理终态 PipelineRun，通过 ownerRef 后台级联，保留活跃、过新、未知分组和每组最新对象；完成 dry-run、受控执行、timer 安装和 `MemAvailable` 实证后收口，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2.1_Task_Report.md)。
#### R1.2.2 [completed]

完成 [UniDesk #1710](https://github.com/pikasTech/unidesk/issues/1710) 的 Decision Center 子进程泄露与 GC 诊断收敛：修复周期性 Git 子进程未回收并把远程同步移出健康轮询；增强 `gc remote <node> memory-distribution`，一次披露物理内存、PSS、swap、僵尸 Pod 归属、Kubernetes 对象压力和处置分类；经自动交付后验证僵尸不再增长并记录内存变化，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2.2_Task_Report.md)。
#### R1.2.3 [completed]

补齐 [UniDesk #1710](https://github.com/pikasTech/unidesk/issues/1710) 的 Decision Center YAML-first 自动交付：把 `config/unidesk-host-k8s.yaml#delivery` 从 todoNote 单服务模型泛化为显式多服务清单，使各服务独立声明 source paths、镜像、manifest 和 release state；复用同一 PaC 事件完成受影响服务的并行/顺序构建与 GitOps 发布，不修改共享 controller、不人工补链，最终滚动 Decision Center 并跨 300 秒验证 zombie 不再增长，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2.3_Task_Report.md)。
#### R1.2.4 [completed]

完成 [UniDesk #1710](https://github.com/pikasTech/unidesk/issues/1710) 的 Kafka 周边内存调优：保持纯 Kafka 实时/回放 SSE 架构不变，把 broker、Strimzi Cluster Operator、Topic/User Entity Operator 的 JVM 与 Kubernetes 资源预算，以及临时 consumer group 生命周期收敛到 `config/platform-infra/kafka.yaml`；经受控渲染、正常 PR 自动交付后验证 Kafka topic/client/producer/consumer 正常并对比物理内存，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2.4_Task_Report.md)。
#### R1.2.5 [completed]

完成 [UniDesk #1710](https://github.com/pikasTech/unidesk/issues/1710) 的 NC01 CI 历史对象自动留存对齐与 k3s 内存降载：修复 YAML 期望与 host timer 安装态不可见、不同步问题，使 `gc remote <node> policy status` 一次披露配置/runner 指纹、关键留存字段和漂移结论；通过 YAML-first 自动留存回收终态 PipelineRun owner 树，验证对象数量、k3s 内存与真实 `MemAvailable`，明确不触碰 Webterm，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2.5_Task_Report.md)。
#### R1.2.6 [completed]

回滚错误的 [UniDesk PR #2302](https://github.com/pikasTech/unidesk/pull/2302)：恢复 WebProbe 只以真实 `/proc/meminfo` `MemAvailable` 超过 4 GiB 作为人工启动资格、sentinel 在低于 4 GiB 时跳过本轮的 YAML-first 门禁；不得在 2 GiB 错误基线上继续修补，不启动 WebProbe且不触碰 Webterm，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2.6_Task_Report.md)。
#### R1.2.7 [completed]

完成 [UniDesk #1710](https://github.com/pikasTech/unidesk/issues/1710) 的 NC01 64 GiB swap 安全垫与受控扩容能力：以 `config/platform-db/postgres-nc01.yaml` 为唯一真相，补齐已启用 swapfile 的安全扩容 plan/status/apply 与可见错误；运行面扩容不得触碰 Webterm，不得把 swap 计入 WebProbe 4 GiB 物理内存门槛，最终经 Git、PR 与自动链收敛，并继续评估业务侧真实内存释放，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2.7_Task_Report.md)。
#### R1.2.8 [completed]

继续完成 [UniDesk #1710](https://github.com/pikasTech/unidesk/issues/1710) 的 NC01 Kubernetes 控制面对象收敛：把单一 `devops-infra` PipelineRun 留存泛化为 YAML-first 多 namespace 策略，覆盖 devops-infra、agentrun-ci、hwlab-ci、pikaoa-ci 与 selfmedia-ci；每个策略按稳定 owner 标签分组，只删除终态且超过窗口的 PipelineRun，保护活跃、最新、未知与解析失败对象，并通过 ownerRef 后台级联回收 TaskRun、Pod、Secret/PVC；手动 overview 与自动 timer 共用筛选器，最终记录对象数、k3s 内存和真实 MemAvailable，禁止触碰 Webterm、PK01、Vitest和人工 CI/CD补链，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.2.8_Task_Report.md)。
### R1.3

测试与验收：https://github.com/pikasTech/unidesk/issues/1842；覆盖生命周期、stale/protected 分类和失败路径，提交独立 PR；合并后只等待自动 CI/CD 发布链，使用正式入口验证 observer/Chrome 退出、内存压力缓解且健康运行面不受扰动，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R1.3_Task_Report.md)。

## R2 [completed]

完成 [UniDesk #2248](https://github.com/pikasTech/unidesk/issues/2248)：新增 YAML-first `web-probe console-verify` typed command，按 node/lane/origin/profile 复用现有认证、远程浏览器、4 GiB `MemAvailable` 门禁、报告恢复和截图合同，一条命令完成 Cloud Console 路由×视口矩阵及可选 Projects/HWPOD/MDTODO/AgentRun 交互验证；配置拥有路由、视口、DOM 合同和等待，禁止写死节点、lane、origin、Issue 或 artifact，不作为 CI/CD gate且禁止 Vitest，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R2_Task_Report.md)。

### R2.1 [completed]

解决 [UniDesk #2526](https://github.com/pikasTech/unidesk/issues/2526)：修复 `console-verify` production internal origin 错选开发 namespace、失败摘要缺失首个 page/console/request/response 错误、命令给出的 artifact inspect 路径被自身拒绝，以及 TaskTree workflow 固定等待首次点击后的 dialog；保持 owning YAML、认证、脱敏和浏览器门禁，支持 group 到 task 后的 dialog/docked 详情，不修改产品代码或降低错误门禁，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R2.1_Task_Report.md)。
## R3 [completed]

修复 [UniDesk #2370](https://github.com/pikasTech/unidesk/issues/2370)：WebProbe 已解析凭据但 Chromium 在首次导航前关闭且无 API 响应时，分类为浏览器运行时 blocker，并在单次有界输出披露 credential/request/API 分层事实，避免重复检查 Secret 与远端 artifact；不降低既有门禁、不阻塞业务交付，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R3_Task_Report.md)。

## R4 [completed]

改进 [UniDesk #2425](https://github.com/pikasTech/unidesk/issues/2425) 的 `web-probe screenshot` custom/local 可见性：scoped help 明确 `--url` 与 `--path` 互斥，校验失败返回 typed reason、`mutation=false` 和可直接执行的修正示例，同步 webdev skill；只改帮助/错误与文档，不改浏览器能力、资源门禁、CI/CD 或运行面，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R4_Task_Report.md)。

## R5 [completed]

改进 [UniDesk #2440](https://github.com/pikasTech/unidesk/issues/2440) 的 product-smoke typed 失败证据与工件下钻：一次失败运行直接披露有界 PDF status、mediaType、popup 生命周期、report/screenshot SHA 和受控下钻入口，保持 Secret 脱敏、输出上限与全部业务门禁，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R5_Task_Report.md)。

## R6 [completed]

完成 [UniDesk #2501](https://github.com/pikasTech/unidesk/issues/2501)：新增 YAML/文件驱动的受控外部表单工作流，复用 WebProbe node/lane、浏览器资源门禁和 Secret sourceRef，支持 start/status/continue/stop、验证码暂停续填、PII 脱敏、草稿保存和默认禁止不可逆提交；以无真实 PII fixture 完成最小 smoke，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R6_Task_Report.md)。

## R7 [completed]

修复 [UniDesk #2440](https://github.com/pikasTech/unidesk/issues/2440) 的 remote artifact 下钻路径回归：保留目标节点受控 path 与下载 local path 两种身份，确保 `native-readiness` 输出的 `web-probe artifact inspect` 命令可直接执行并通过 SHA 与路径门禁，完成任务后将详细报告写入[任务报告](./details/web-observe-runtime-reliability/R7_Task_Report.md)。
