# R1.4 Workbench 隔离 Kafka 重放报告

## 结论

原 `/workbench` 页面已增加管理员可见、YAML-first 的独立调试开关。打开开关不会消费 Kafka；只有显式点击“重放”才会：

1. 关闭旧 EventSource 并清空隔离面板。
2. 按当前 traceId 请求 `stream=hwlab-debug&fromBeginning=true`。
3. 使用每次唯一的 debug consumer group 消费 `hwlab.event.debug.v1`。
4. 复用生产 reducer、apply plan 和 `WorkbenchMessageCard` 渲染。

该状态与 canonical Workbench store 完全隔离，不调用 sync/snapshot/gap-fill/projector，也不会清空产品消息。

## 交付

- HWLAB 页面、SSE 与 reducer: pikasTech/HWLAB#2471。
- 页面重载后的 session trace fallback: pikasTech/HWLAB#2472。
- 可复用 typed probe command: pikasTech/unidesk#1703。
- owning YAML:
  - `HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED=true`
  - `HWLAB_KAFKA_HWLAB_DEBUG_EVENT_TOPIC=hwlab.event.debug.v1`
  - `HWLAB_KAFKA_HWLAB_DEBUG_GROUP_PREFIX=hwlab-v03-workbench-isolated-debug`
  - replay limit 200，timeout 15000ms。

web-probe 使用语义化入口：

```bash
bun scripts/cli.ts web-probe observe command <observer> \
  --type validateWorkbenchKafkaDebugReplay
```

命令继承 observer 的 YAML `internal|public` origin，不接受 URL/IP 选择内外网；固定输出 report/screenshot SHA 和 topic/group/trace/count。

## 单步验收

旧 session 页面重载后没有历史 trace，typed command 正确 fail-fast；未通过 snapshot 或 sync 补洞。随后按正式单步计划在同一原页面创建新 session、完成一个纯实时 turn，再生成两级 debug Kafka 流并重放当前 trace。

- observer: `webobs-mrew0iwd-2953f1`
- command: `cmd-mrew61bl-2c468b`
- sessionId: `ses_63ac7b49-a693-4e1b-80c0-f45ca96c773a`
- traceId: `trc_mrew3yvpvv2ep6`
- topic: `hwlab.event.debug.v1`
- groupId: `hwlab-v03-workbench-isolated-debug-1783685292280-124e132b`
- clear 前置状态: `idle`、received/applied=`0/0`
- replay 结果: received/applied=`11/11`、terminal=`completed`
- report SHA-256: `sha256:64a71b768e86586c2d2a888fbe221f03d81597752693b28b7ae1c340fc94af2d`
- screenshot SHA-256: `sha256:3dfd53d3641f2b4fd7a1eb641fcdf14206bc749bcb87ad9708617946e33d6957`
- origin: YAML `internal` / `k8s-service-cluster-ip`

最终 UI 命令状态为 `passed`，未修改产品 topic、产品 consumer group 或 canonical store。
