docs(web): record Workbench replay regression workflow

This commit is contained in:
pikastech
2026-07-21 13:38:09 +02:00
parent d16505c1de
commit 54908caea8
2 changed files with 42 additions and 0 deletions
+34
View File
@@ -265,6 +265,40 @@ Workbench 浏览器回归需求以 UniDesk OA [PJ2026-010401 Web工作台](../..
- `kafkaRefreshReplay=true` 时要求 `deliverySemantics=kafka-retention-then-live``replay=true``liveOnly=false`
- capability 已启用但仍返回 `live-only` 时,优先定位 L1 native API 是否仍保留独立 live-only SSE adapter
- 此时 retention 查询尚未开始,不得先归因 Kafka 扫描超时或历史事件缺失;
- 已有 session 出现 rail、turn card、Final Response 或回放提示不一致时,最短分层固定为:
- 先用 `hwlab-cli workbench events inspect --over-api` 检查同一 session/trace 的 connected contract、核心事件族和 terminal
- 服务端完整时,只执行一次 `web-probe observe command <observer> --type validateExistingSessionRefresh --profile <yaml-profile> --session-id <session>`,核对刷新前后 DOM identity、业务帧数、live handoff 和 forbidden request 数;
- 禁止先扫描大型 artifact、重复重启 L1、增加 snapshot/polling,或用 session rail 的相对时间推测运行耗时;
- Kafka retention 回放队列必须在后台标签页继续推进:
- 禁止用 `requestAnimationFrame` 作为 SSE ingress/reducer 分批处理的唯一调度源,因为后台标签页降频会把有限回放放大成分钟级状态分裂;
- 零延迟合作式调度使用不依赖绘制帧的任务队列,并保留有界 chunk、事件顺序、稳定 event identity 去重和同一 reducer
- L0 必须模拟 rAF 不回调,批量送入 retention 业务帧和最后的 `workbench.connected`,并在有界时间内证明全部帧按序排空;
- 该规则只修正客户端调度,不允许引入第二投影、REST 补洞、sealed guard 或终态仲裁;
- Conversation 与 Trace 等流式容器的贴底状态必须区分内容增长和用户滚动:
- 退出 following
- 只有 `scrollTop` 实际向上移动才能退出;
- 内容先增长、贴底帧尚未执行时出现的临时 bottom distance 不得关闭 following
- 程序性贴底:
- 释放后若内容继续增长,仍处于 following 时补一次合并对齐;
- 恢复 session 历史位置后必须按恢复位置显式同步 following;
- 观察器:
- `MutationObserver` 可以响应字符与子树变化来调度贴底;
- 只在滚动容器直属子节点集合变化时重建 `ResizeObserver` 目标;
- 禁止每个流式字符都 disconnect、遍历并重新 observe
- L0 至少覆盖:
- 高度先增长但 `scrollTop` 未下降时仍保持 following
- 用户真实上滚后暂停,回到底部后恢复;
- L1 使用真实长回复或 retention 回放:
- 检查最终内容、终态和 Composer 同时可见;
- 外层 Conversation 与内层 Trace 必须复用同一贴底状态机,禁止分别维护阈值、竞态修复或轮询补偿;
- API readiness 连续超时而进程仍存活时,先读取受控 API 日志:
- 若周期性 Kafka session index 全量重建与超时窗口重合:
- 归类为后端事件循环或索引维护问题;
- 不得继续重试 WebProbe、GC、前端贴底修复或浏览器刷新;
- 若涉及索引维护策略、增量更新或执行隔离:
- 必须进入独立架构 issue
- 前端任务只保留已完成的 L0 和浏览器证据;
- 明确最新 patch 后尚未覆盖的 L1 边界;
- 通过条件是 `connected=true``missingSemantics=[]``terminalStatuses` 出现明确终态;
- `eventCount``--min-events` 不能证明 assistant、terminal 或 final,不得通过反复猜事件数量重开 inspect;
- 业务交互优先使用项目正式 CLI 的 `--over-api` 完成 session/turn 与产品 SSE 终态对账,并保留精确 sessionId、traceId