# R4.11 任务报告

## 结论

CaseRun Web 已可从共享 HarnessRL PostgreSQL registry 发现并加载 CLI `--over-api` 已运行通过的结果。真实 run `software-smoke-1784346141262` 已进入正式公网运行历史；L1 fixture run `cli-software-smoke-passed` 已通过桌面、紧凑和移动三视口原生浏览器验收。

R4.11 已满足完成条件。

## 规格与边界

- Web、CLI `--over-api` 和 web-probe 读取同一共享 registry。
- 运行历史合同为纯读、游标分页，默认按 `createdAt DESC, runId DESC` 排序。
- 历史摘要不暴露 `caseRepo`、`runDir` 和 `runtimeApiUrl`。
- CLI local 继续使用显式 local adapter，不静默上传，Web 不扫描 CLI 本地文件。
- Web 选择历史项、粘贴 runId 和访问深链均读取既有 status、events 和 aggregate，不在客户端合成终态。
- CaseRun 页面禁止 document、body 和主内容区全局滚动；桌面与紧凑视口由运行列表、事件流和证据区内部滚动，移动视口额外由 CaseRun 工作区内部滚动。

## 实现

- HWLAB PR：[pikasTech/HWLAB#2656](https://github.com/pikasTech/HWLAB/pull/2656)。
- 功能提交：`6fff5d75e40f51685172a650b9261f942d7b84ba`。
- 合并提交：`12e115d430f1e08dbd27b789e591c86d4e967955`。
- 后端新增 `GET /v1/caserun/runs?status=&limit=&cursor=`。
- 前端新增“最近运行 / 可执行用例”分段视图、runId 直达、历史项状态和证据摘要。
- native fixture 预置一个 CLI 形态的已完成 software-smoke。
- 三个 YAML readiness profile 点击首条历史运行。
- 修正 readiness 布局断言：默认“最近运行”页签只要求当前可见的 `.caserun-run-list`，不再同时强制互斥的 `.caserun-case-list` 存在。

## 功能验证

- `bun run harnessrl:native:smoke`：12 项通过。
- native fixture focused test：3 项通过。
- CaseRun store focused test：3 项通过。
- `bun run web:build`：通过。
- readiness 配置与生成脚本测试：6 项通过。
- L1 公网 API `http://152.53.229.148:4316`：历史列表、详情、6 条事件和 aggregate 均可读取同一 fixture run。
- 正式公网 API `https://lab-dev.hwpod.com/v1/caserun/runs?limit=5`：HTTP 200；第一项为 `software-smoke-1784346141262`，`status=completed`、`artifactCount=1`、`evidenceStatus=recorded`。
- Temporal workflowId：`harnessrl-caserun-software-smoke-1784346141262`。
- Temporal workflowRunId：`019f7351-667b-7466-976e-c9c6d9d865a3`。
- 产物 `software-smoke.json`：335 bytes，SHA256 `d69871dd289aea216298727c8014c76a88d52c8abb864232cc18b20e7a8642ab`。
- 正式 Web chunk `/assets/CaseRunView.js` 已包含“最近运行”“输入 CLI 输出的 runId”“共享 registry 中暂无运行”。

## 三视口 L1 浏览器验收

共同入口：`http://152.53.229.148:5173/caserun`。三个 profile 均加载并点击 `cli-software-smoke-passed`，最终深链为 `http://152.53.229.148:5173/caserun/runs/cli-software-smoke-passed`。

- `caserun`，1920×1080：通过。document、body、`.platform-content` 横纵 overflow 均为 false；内部滚动容器通过；console error 0、page error 0、关键失败响应 0。截图 `/root/.unidesk/.state/web-probe-script-artifacts/web-probe-script-nc01-v03-1784370639426-f133fffa-native-caserun-ready.png`，SHA256 `06f573a8c9c39de5c9657141a2903d4f61ee0d81d0a75b1d9448c100cf92bd9f`。
- `caserun-compact`，1180×800：通过。document、body、`.platform-content` 横纵 overflow 均为 false；内部滚动容器通过；console error 0、page error 0、关键失败响应 0。截图 `/root/.unidesk/.state/web-probe-script-artifacts/web-probe-script-nc01-v03-1784370664042-89304829-native-caserun-compact-ready.png`，SHA256 `f738bf1bc8dbad8f9a439b5c26a5c24f646662c78240141c6eb15653862bba26`。
- `caserun-mobile`，390×844：通过。document、body、`.platform-content` 横纵 overflow 均为 false；`.caserun-workspace` 等内部滚动容器通过；console error 0、page error 0、关键失败响应 0。截图 `/root/.unidesk/.state/web-probe-script-artifacts/web-probe-script-nc01-v03-1784370685185-2b974746-native-caserun-mobile-ready.png`，SHA256 `9434af96430f9e1712f8d54adae382ee28e4f51d6b616cc93538b7ed412b2f2a`。

## 门禁纠正与运行面说明

- WebProbe 启动门槛唯一真相为 `config/hwlab-node-lanes.yaml#templates.hwlabV03.webProbeWorkbench.resourcePolicy.memoryStartGuard`。
- 当前 `thresholdBytes=2147483648`，即 2 GiB；人工比较语义为 `MemAvailable <= threshold` 时阻断。
- 先前报告把 GC 的 4 GiB 回收目标误写成 WebProbe 启动门槛，本次已纠正。
- 本轮误判后执行了一次受控 cgroup 文件页回收，job `nc01-memory-pressure-1784370277-1806079` 成功；未终止 workload、未重启 k3s、未修改 CI/CD 基础设施。
- 实际启动前 `MemAvailable=3115896832` bytes，满足 2 GiB 门槛。
- PR merge 后自动链已完成实际前后端交付；PaC status/history 曾在 25 秒预算返回 `pac-read-timeout` partial，但真实公网 API 与 Web bundle 均已更新。
