## 诊断流程样例
目标:检查 `output/review_pages/商品域复核页.html` 是否真的可用,而不是只验证文件存在。
```bash
python /Users/bytedance/Documents/product-bu/tools/night-gym/tools/review_html_smoke.py \
/Users/bytedance/Documents/job-bu/data-analysis-workspace/projects/xxx/output/review_pages/商品域复核页.html \
--out /tmp/review-html-smoke \
--data-var DATA \
--expect knowledge_cards=123 \
--expect progress_bars=123 \
--expect min_chat_messages=1
```
| 阶段 | 检查 | 成功信号 | 失败信号 |
|---|---|---|---|
| 数据解析 | 从 HTML 中提取 `const DATA = ...` | records / knowledge groups 可解析且非空 | 找不到 DATA、JSON 截断、字段名漂移 |
| 浏览器渲染 | 用临时 localhost 打开 HTML,避免 `file://` 策略 | 关键 selector 出现,截图非空 | file blocked、JS error、首屏空白 |
| DOM 断言 | 统计知识卡、session 列表、对话气泡、进度条 | 计数匹配期望或超过最小阈值 | selector missing、count mismatch |
| fallback | 浏览器失败时用 jsdom/minimal DOM 执行页面脚本 | 能生成列表 HTML 和进度条比例 | 脚本依赖真实浏览器 API,无法降级 |
期望输出:`report.json` 写明 `browser_rendered`、`dom_fallback_rendered`、关键计数、失败原因;`screenshot.png` 用于人工快速复核。失败时不要继续交付 HTML,而是把具体失败阶段带回给生成脚本修。