# R5 任务报告

## 结论

`web-probe product-smoke` 失败证据和工件下钻已改进。单次失败默认输出可直接区分 PDF popup/browser closed 与真实 HTTP 503，并提供 report/screenshot SHA 和受控 `web-probe artifact inspect` 命令；不需要重复浏览器 smoke、猜测 runner workspace 或读取完整报告。

## 交付

- Issue：[UniDesk #2440](https://github.com/pikasTech/unidesk/issues/2440)。
- PR：[UniDesk #2442](https://github.com/pikasTech/unidesk/pull/2442)。
- 实现 commit：`7e7ad73c93958b161ed83d1b64c5e257243a7d8a`。
- 审核返工 commit：`82a992c525a06e9a5e7ed4183087d84107b58a1e`。
- Artificer 主实现 session：`sess_artificer_95eaa712f8952f6ece6e73d8`。
- Artificer 返工 session：`sess_artificer_159552d7a027e6699d35af2d`。

## 能力

- `failureEvidence` 有界投影优先披露 PDF `status`、`mediaType`、`popupCreated`、`popupProtocol`、`popupClosedBeforeBlob`。
- compact text、显式 JSON/YAML 使用同一结构化投影。
- `NEXT` 输出受控 `web-probe artifact inspect --node --lane --path --sha256`。
- inspect 只接受受控 runner/downloaded artifact 路径，显式校验 SHA，并只返回有界脱敏证据。
- 成功 smoke 固定 `failureEvidence=null`，文本只保留最小 `FAILURE_EVIDENCE -`，不会把 status 200 误报为失败证据。

## 验证

- 定向测试最终结果：32 pass，0 fail。
- `web-probe --help --json` 保持有界，无 `outputTruncated`。
- 非受控路径返回紧凑 `web-probe-artifact-input-invalid`，`mutation=false`，不披露 stack。
- 失败夹具默认可见 status 503、mediaType、popup 生命周期和 report/screenshot SHA。
- 成功夹具证明 `failureEvidence=null` 且不渲染 status 200 失败段。

## 边界

未降低产品 smoke 断言，未扩大 stdout 上限，未默认创建 dump，未增加临时浏览器脚本、Secret 输出或第二报告 authority。`rollout=not-applicable`。
