# R8 任务报告

## 结论

HWLAB [#2657](https://github.com/pikasTech/HWLAB/issues/2657) 已通过 [PR #2658](https://github.com/pikasTech/HWLAB/pull/2658) 修复并合并到 `v0.3`，merge commit 为 `818e8dcbb168156301728bf4976c0694cc1fa146`。

`hwlab-cli workbench events inspect` 新增通用 `--wait-for user,backend,assistant,terminal,final` 条件。CLI 继续只消费 `/v1/workbench/events` 的 `hwlab.event.v1` Kafka SSE，不读取 AgentRun `/events`、`/result`、snapshot 或 read-model。成功与超时均披露 `observedSemantics`、`missingSemantics`、`semanticCounts`、原始 `eventTypes` 和 `terminalStatuses`。

## L0

- `bun test internal/workbench/workbench.test.ts`：9 pass / 0 fail。
- 新增一次窗口满足 user/backend/assistant/terminal/final 的成功测试。
- 新增 timeout 时明确披露 assistant 已见、terminal 缺失的失败测试。
- `bun run workbench:native:smoke` 通过 local 与 `--over-api` 双模式。
- native smoke 改用 disposable loopback 空闲端口，并显式注入 API idle timeout fixture，不再与现有 L1 固定端口冲突。

## L1

NC01/v03 Workbench API 通过 owning YAML 入口重启，公网 `/health/live` 和 `/health/ready` 均通过，runtime source commit 为 `818e8dcbb168156301728bf4976c0694cc1fa146`。

第一次新 session 的 SSE-before-submit 窗口在 180 秒内只观察到 user/backend。CLI 返回 `missingSemantics=[assistant,terminal,final]`；AgentRun v0.2 durable run 证明该冷启动 turn 约 6 分钟后才完成，后半段存在 assistant_message 与 terminal_status，因此归类为上游冷启动超过验收窗口，不是 SSE 语义映射丢失。

同一已预热 session 的新 turn 使用一个 SSE-before-submit 窗口直接通过：

- session：`ses_a782e099-0b17-41a4-88f0-6e62e86b05b7`
- trace：`trc_2657bbccddeeff001122334455667788`
- `connected=true`
- `eventCount=53`
- `observedSemantics=[user,backend,assistant,terminal,final]`
- `missingSemantics=[]`
- `terminalStatuses=[completed]`
- assistant=2、terminal=1、final=1

## 泛化收口

长期参考已固定 Workbench L1 正确 health 路由、语义等待命令、通过判定、冷启动 timeout 分类和 L0 disposable smoke 边界。后续同类验收不再猜测 `--min-events` 阈值，也不需要第二次 inspect 或 Kafka replay 才知道当前 live 窗口缺少什么语义。
