# UI 原型源文件与导出图一致性检查
## 诊断流程样例
### 场景
用户指出 `点击此处` 仍有下划线,但 HTML 源码里 `.inline-link` 已经是 `text-decoration: none`。目录里同时存在 `文案态`、`半浮层表单态`、`底部半浮层表单态` 三张 PNG。
### 输入
```bash
python tools/mockup_artifact_check.py \
--source inbox/flower_category_open_mockups.html \
--artifacts 'inbox/鲜花绿植类目开通_*_2026-05-20.png' \
--manifest inbox/mockup_artifacts.manifest.json
```
### 检查
| 步骤 | 检查内容 | 失败例 |
|---|---|---|
| source 定位 | 文案是否只来自 mockup HTML,而不是历史数据样本 | 全仓 `rg 点击此处` 命中数据文件,无法确认真实渲染源 |
| browser 渲染 | 用本地 HTTP server 渲染 HTML 并截临时 PNG | `file://` 被拒绝,只有代码确认没有视觉确认 |
| state 完整性 | manifest 中声明的 3 个 state 是否都重新导出 | 只更新了文案态,半浮层态仍带旧背景 |
| 产物一致性 | 临时截图与目标 PNG 的 hash/像素 diff 是否一致 | 目标 PNG 仍有旧卡片或旧下划线 |
| 文案规则 | 必含词/禁含词是否满足 | `点击此处` 未替换为 `点击下方`,或 `开通辅营类目` 仍残留 |
### 输出
```text
SOURCE_ARTIFACT_SYNC_FAIL
source: inbox/flower_category_open_mockups.html
stale_artifacts:
- inbox/鲜花绿植类目开通_半浮层表单态_2026-05-20.png
reason: PNG contains forbidden text/card not present in current source
next: regenerate all states from source, then overwrite target PNGs after backup
```
### 通过信号
```text
SOURCE_ARTIFACT_SYNC_OK
source: inbox/flower_category_open_mockups.html
states: 3/3
forbidden_text: 0
pixel_diff: all below threshold
artifacts:
- 鲜花绿植类目开通_文案态_2026-05-20.png
- 鲜花绿植类目开通_半浮层表单态_2026-05-20.png
- 鲜花绿植类目开通_底部半浮层表单态_2026-05-20.png
```