fix(v2): 修掉预审面板不刷新与候选行同 id 连开多行的缺陷

真实 Chrome 端到端验证第二篇(/prescreen-workbench、/experience-center)发现两个
源码守卫与生产构建都看不见的缺陷:

- 发起 AI 预审、运行结束后 PrescreenPanel 不重载:新运行进不了"查看哪一次运行",
  面板继续显示上一次运行,而徽标写着"结果会自动刷新"。根因是 load() 只依赖
  project.id;补修时又发现 worker 先写 run.status、再另写 prescreen_run 视图
  (assistant_worker.process_next),两者不在同一事务,只读一次会读到视图还没
  落库的中间态,因此改为按运行集合重载并在最新运行进入视图前短时重试。
- 候选区 key={card.id} 撞 React key,且「自然语言修改适用范围」「补充独立测试」
  按 card.id 开合,点一行连开 4 行(同一 card.id 的草稿行与各版本行共享 id)。
  改为行级 rowKey(组件id@版本@状态)。

同时新增可选脚本 scripts/browser-e2e-modules.cjs(42/42 通过),并给
test_prescreen_ui.cjs / test_experience_center_ui.cjs 补上对应源码断言。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
2026-10-01 09:35:29 +08:00
co-authored by Claude Code
parent 8e2473cf3e
commit c880f40e4c
5 changed files with 498 additions and 6 deletions
+8
View File
@@ -74,4 +74,12 @@ for (const endpoint of ["case-timeline", "knowledge-extractions", "knowledge-can
}
assert.match(panel, /PRESCREEN/, "必须走既有 prescreen 命名空间");
// 7. 候选行的标识必须唯一:列表里同一个 card.id 会出现多行(草稿行与版本行共享 id)
// 只用 card.id 作 key 会撞 React key,作展开标记会一点连开多行——两者都在真实浏览器里量到过
// (见 17 四批交付记录「浏览器验证发现的问题(第二篇)」)。
assert.match(panel, /const rowKey = \(card: any\) =>/, "候选行必须有行级标识");
assert.match(panel, /key=\{rowKey\(card\)\}/, "候选行的 React key 不得只用 card.id");
assert.ok(!/setReviseFor\([^)]*card\.id\b/.test(panel), "修订面板标记不得只用 card.id(会同开多行)");
assert.ok(!/setCasesFor\([^)]*card\.id\b/.test(panel), "测试样本面板标记不得只用 card.id");
console.log("experience-center-ui: PASS");