docs(v2): 记录浏览器验证第二篇与 F11 剩余部分的收口
17 新增「浏览器验证(第二篇):AI 预审 / 历史经验加工」:覆盖的交互、 点通过程中发现并修掉的 2 个缺陷(预审面板不刷新、候选行同 id 连开多行)、 写演示库的副作用清单,以及本数据集下仍点不到的 3 处(沙盘勾选联动、 来源事件勾选、reviewer 视角的审核发布)与 2 处口径待确认项。 15 第 7 节改为本轮交接:F11 三个表面均已由真实 Chrome 走过;F27/F29/F30 与新证据路径;下一任务只剩需要用户或外部输入的部分。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -254,8 +254,9 @@ XINGBANG_LOCAL_MODEL_KEY=<你的 DeepSeek API Key>
|
||||
|
||||
### 剩余缺口
|
||||
|
||||
- **界面仍未经浏览器验证(F11 未变)**:深色导航与三个模块都只有"源码守卫 + 生产构建 + 代码走查"
|
||||
三层证据,**没有浏览器点击或截图**;原型本身也没有视觉门禁(04-ui-spec §7 已声明不以原型替代验收)。
|
||||
- **界面仍未经浏览器验证(F11 未变;后由文末「浏览器验证(第二篇)」补齐)**:深色导航与三个模块都
|
||||
只有"源码守卫 + 生产构建 + 代码走查"三层证据,**没有浏览器点击或截图**;
|
||||
原型本身也没有视觉门禁(04-ui-spec §7 已声明不以原型替代验收)。
|
||||
深色导航的文字对比度已改为**机械断言**(守卫内按 WCAG 公式实算,阈值 AA 4.5:1):
|
||||
未选中 12.03:1、选中 9.49:1、muted 8.37:1、品牌 13.91:1,全部达标——但这证明的是配色可用,
|
||||
不等于版面在实机上的观感已验收。
|
||||
@@ -369,7 +370,8 @@ AC-53 又要求恰好三个模块入口。`AgentNav.tsx` 未改动。
|
||||
|
||||
- **F11 对本批两个表面已关闭,但未全面关闭**:`/trajectory-center` 已由 `scripts/browser-e2e.cjs`
|
||||
在真实 Chrome 里走过(19/19),有截图;`/experience-center` 与 `/prescreen-workbench`
|
||||
只验证到"能被本次路由改动修好、能渲染",其自身交互没有逐项点过,**仍记 F11 未闭合**。
|
||||
当时只验证到"能被本次路由改动修好、能渲染",其自身交互没有逐项点过,**当时仍记 F11 未闭合**
|
||||
(这两个表面已在文末「浏览器验证(第二篇)」里逐项点过,并因此修掉 2 个缺陷)。
|
||||
另外该脚本**不在 `verify.py` 里**,也就是说这条证据不会随强制门禁自动重跑——
|
||||
它需要本机 Chrome 与一次性 `npm i --no-save puppeteer-core`。
|
||||
- **浏览器验证只覆盖到"能走通"这一层**:没有做视觉回归(无基线截图比对)、没有多分辨率、
|
||||
@@ -386,3 +388,68 @@ AC-53 又要求恰好三个模块入口。`AgentNav.tsx` 未改动。
|
||||
- **题库/编排无真实发布入口**:已按 409 诚实拒绝,非假接通;需要时另行设计。
|
||||
- **浏览器 E2E 尚未固化为项目门禁**:是否把它接进 `verify.py`、是否把 `puppeteer-core`
|
||||
写进 `package.json`,是产品/工程决策,本批**没有替用户决定**,只提供可选脚本。
|
||||
|
||||
---
|
||||
|
||||
## 浏览器验证(第二篇):AI 预审 / 历史经验加工
|
||||
|
||||
状态:**F11 剩下的两个表面已在真实 Chrome 里逐项点过**(第四批只走过 `/trajectory-center`)。
|
||||
脚本 `scripts/browser-e2e-modules.cjs`,**42 项检查全通过、0 失败**,截图与 `result.json` 在
|
||||
`test-evidence/browser-e2e-modules/`。断言全部来自**真实点击与真实执行链**,没有接口 mock。
|
||||
|
||||
### 覆盖的交互
|
||||
|
||||
| 表面 | 真实动作 | 断言 |
|
||||
|---|---|---|
|
||||
| `/prescreen-workbench` | 打开 `?project=DEMO-B` | 标题、项目下拉真的有项目、方案下拉有方案 |
|
||||
| 同上 | 点「开始 AI 预审」 | 入队提示 → 运行跑到终态 → **不刷新页面**面板自己出现本次运行 → 刷新后仍可读到、输入快照已换 |
|
||||
| 同上 | 点核查结果的「查看依据」→「关闭依据」 | 抽屉打开且含"依据与版本";关闭后抽屉消失、**焦点回到触发按钮**(键盘可达) |
|
||||
| 同上 | 概率区与降级记录 | 概率数字必须紧邻"演示值/人工设定";未完成项带错误码;"证据阶段 ≠ 审批概率"在页面上 |
|
||||
| 同上 | 推进沙盘 | 没有可用动作时给诚实空态,不给"点了必然失败"的选项 |
|
||||
| `/experience-center` | 点「从项目材料重建时间线」 | 徽标给出状态与事件数;无结构化记录时明确标"过程材料不完整 · 0 个事件" |
|
||||
| 同上 | 空来源、空要求点「请求提炼」 | 服务端 422,界面如实显示拒绝理由(不假装成功、不静默无反应) |
|
||||
| 同上 | 填提炼要求后点「请求提炼」 | 记录渲染为"提炼未完成"+E-28;**候选行数 30→30 不变**(BR-48:不产生草稿) |
|
||||
| 同上 | 点候选卡的「自然语言修改适用范围」 | **只展开被点的那一行**;未填要求时「形成草稿修订」保持禁用 |
|
||||
| 同上 | 换 admin 身份重载 | 出现「隔离评测」(30 个),仍不出现「审核发布」(发布限 reviewer) |
|
||||
|
||||
两处修复的全量验证:`test-evidence/20261001-093541-c880f40/`(`scripts/verify.py` **14/14 PASS**,
|
||||
`backend-unit` 全量 **572 项**;证据绑定提交 `c880f40`,`summary.json` 的 `status=passed`)。
|
||||
|
||||
### 浏览器验证发现的问题(第二篇)
|
||||
|
||||
两个都属于"源码守卫 + 生产构建都看不出"的那一类:构建通过、守卫全绿,只有真渲染会暴露。
|
||||
|
||||
| # | 问题 | 归属 | 处理 |
|
||||
|---|---|---|---|
|
||||
| 1 | `/prescreen-workbench` 点「开始 AI 预审」、运行结束后**结果面板不重载**:新运行进不了"查看哪一次运行",面板继续显示上一次运行,而徽标写着"结果会自动刷新"——AC-46 的**界面路径**因此不成立(此前只有接口驱动能证明)。根因:`PrescreenPanel` 的 `load()` 只依赖 `project.id`。补修时又发现 worker 是**先更新 `run.status`、再另写 `prescreen_run` 视图**(`assistant_worker.process_next` 的 `put(run)` 与 `save_prescreen_view`),两者不在同一事务,只在状态变化时读一次会读到"视图还没落库"的中间态 | 第一批(面板重载时机) | 改为依赖项目里的运行集合,并在最新运行进入视图列表前短时重试(上限 5 次,不做无限轮询);`test_prescreen_ui.cjs` 补 5 条源码断言 |
|
||||
| 2 | `/experience-center` 候选区:`key={card.id}` 撞 React key,且「自然语言修改适用范围」「补充独立测试样本」按 `card.id` 开合——点一行**连开 4 行**面板(同一 card.id 的草稿行与各版本行共享 id)。浏览器控制台同时报 React 重复 key 错误 | 第二批 | 引入行级 `rowKey`(`组件id@版本@状态`),key 与两个展开标记都用它;`test_experience_center_ui.cjs` 补 4 条源码断言 |
|
||||
|
||||
### 副作用(真的写演示库,如实列出)
|
||||
|
||||
本脚本每次运行会**新建一次预审运行**(点「开始 AI 预审」)、**重建一次 DEMO-B 时间线**(同 id 递增
|
||||
revision)、并在未配置模型时留下**一条 `status=failed`、`candidate_id=null` 的提炼记录**。
|
||||
本轮验证(含中途重跑与核对环境)在 `backend/xingbang_data/project_assistant.sqlite3` 里新增了
|
||||
**6 条 DEMO-B 预审运行**、**3 条失败提炼记录**,并为 DEMO-A/B/C 各重建过一次时间线。
|
||||
与 F28 同类,重复运行会累积;这些是演示库里的可见数据,需要时可删。
|
||||
|
||||
### 剩余缺口(本轮未闭合)
|
||||
|
||||
- **推进沙盘的勾选联动没点到**:演示方案的维度里没有假设动作的目标维度(`DC-CASH`/`DC-TITLE`),
|
||||
服务端 `available_assumptions` 因此返回 0 个动作,界面按设计给"当前方案没有可推演的假设动作"空态。
|
||||
基线的演示值(42%,带"演示值"标注)已实际渲染并断言,但"勾选 → 重算 → 返回基线"这条链
|
||||
在本数据集下无法用浏览器走通。
|
||||
- **来源事件勾选没点到**:演示项目没有结构化的问询/决定记录,`case-timeline` 恢复出 0 个事件,
|
||||
勾选框不存在;本轮因此用"提炼要求"满足服务端的前置条件走通提炼链路。
|
||||
- **reviewer 视角的「审核发布」没点到**:演示身份里 reviewer 的 `/projects` 只授权到 DEMO-C,
|
||||
而 DEMO-C 没有知识候选,浏览器里点不到该按钮。已用 admin 作对照(有「隔离评测」、无「审核发布」)。
|
||||
- **「请求提炼」在"没有来源也没有要求"时按钮仍可点**:服务端按契约 422 并给出理由、界面如实显示;
|
||||
但同文件里「形成草稿修订」「保存样本到草稿」都会按必填项禁用,口径不一致。按最小改动只验证、未改。
|
||||
- **候选列表把同一卡片的多个版本行都按"已发布"列出**:`knowledge_cards.list_cards` 同时返回
|
||||
`component_draft` 与 `component_version` 行,同一 `card.id` 出现 3–4 行(v1.0.0 与 v1.0.1 都标"已发布"),
|
||||
界面不显示 `release` 指针当前指向哪一版。"一行 = 一个存储记录"还是"一行 = 一张卡片的当前状态"
|
||||
需产品确认后再改,本轮未动。
|
||||
- **视觉回归(无基线截图比对)、多分辨率、键盘可达性与屏幕阅读器仍未做**;
|
||||
深色导航对比度仍是守卫内按 WCAG 实算,不是实测。
|
||||
- **脚本仍不在 `verify.py` 里**(F27 未决):需本机 Chrome 与一次性 `npm i --no-save puppeteer-core`,
|
||||
手动 `node scripts/browser-e2e-modules.cjs`。现在共有**两个**可选脚本
|
||||
(`browser-e2e.cjs` 走轨迹复盘,`browser-e2e-modules.cjs` 走这两个表面)。
|
||||
|
||||
Reference in New Issue
Block a user