# R4.3 CaseRun CLI 双模式任务报告

## 交付

- GitHub issue：[HWLAB #2617](https://github.com/pikasTech/HWLAB/issues/2617)。
- Pull request：[HWLAB #2624](https://github.com/pikasTech/HWLAB/pull/2624)。
- 最终 head：`de2d1f0d0c225b30c87487fcb05d6d22e4f40afa`。
- merge commit：`477fd743716b9b5092f7b4954e3015a4486a1689`。
- CaseRun CLI 提供 `start/status/events/aggregate/cancel`，默认 local adapter 直连 native HarnessRL application service；显式 `--over-api --base-url <origin>` 仅访问 `/v1/caserun/*`，两种 transport 均不相互回退。
- 共享 command、DTO 与 typed error contract；API key 不进入输出。over-api 使用覆盖 fetch 与响应体读取的 AbortSignal，默认 30 秒，可由 `--timeout-ms` 配置；超时返回有界 `caserun_api_timeout` 元数据。

## 分级验证

### L0 focused

- `bun test tools/hwlab-cli/caserun-transport.test.ts internal/harnessrl/harnessrl.test.ts internal/cloud/server-caserun-http.test.ts`：16 pass，0 fail。
- 相关回归：46 pass，0 fail。
- `git diff --check` 通过。

### L1 native

- 使用 NC01 host native PostgreSQL、Temporal `unidesk` namespace、独立 HarnessRL API 与 worker。
- local 与 over-api 使用四个独立 stable runId，分别覆盖完成与取消，不共享 workflow execution。
- 两种 transport 的 start/status/events/aggregate/cancel 核心 DTO keys 等价；not-found 均为 `caserun_run_not_found`。
- 完成路径均收敛到 `completed`，各有 6 条事件和 1 个 aggregate artifact；取消路径均由 `cancel_requested` 收敛到 `canceled`。
- 验证结束后 API/worker 停止，临时数据库与目录已清理。

## Review 与收口

- 初审发现请求无界等待和 local/API 等价性验证共享 runId；返工后以 AbortSignal 和四个独立 runId 消除这两个问题。
- 主代理复审未发现剩余 merge blocker。
- 两个 Artificer writer 均完成 post-task；新增 transport contract 泛化反馈已写入 #2617，明确不作为当前 PR 门禁。
- PR preflight：`MERGEABLE/CLEAN`，0 failed，0 pending；仅通过受控 GitHub CLI 合并，未人工触发 CI/CD。
