# 收敛模式与不可消除差异

> 记录视觉还原过程中的收敛规律和不可消除差异白名单。
> 基于 A-C 批次（53 单元）的实际数据总结。

---

## 不可消除差异白名单

以下差异在所有页面中均存在，不计入差异率，审计报告中标注「不可消除，已忽略」：

| 差异类型 | 根因 | 估计贡献 |
|---|---|---|
| 字体渲染（字形、次像素、间距） | Chromium（Noto Sans SC）vs 微信 WebView（系统字体） | ~2% |
| 行内元素高度系统性偏小 ~7% | WebView 字体度量（ascent/descent/leading）差异 | ~1% |
| rpx 取偶数四舍五入 | 每个 px 值换算后取偶数，累积微小偏差 | ~0.5% |
| 抗锯齿差异 | 渲染引擎对边缘像素处理不同 | ~0.5% |
| 环比箭头（SVG vs 文字 ↑↓） | 已确认可接受 | — |
| CSS 渐变文字 → 纯色文字 | MP 不支持 `-webkit-text-fill-color` + clip | — |
| Banner 纹理差异 | 7 层叠加渐变 + SVG 纹理无法完全复现 | ~3% |

背景噪音基线：~3.87%（Benchmark v3 实测）。<5% 通过目标在基线之上仅有 ~1% 修正空间。

---

## 典型收敛曲线

### 单屏页面（board-coach/customer 维度）
- 初始差异率：4-11%
- 白名单扣除后：<3%
- 通常 0 轮修正直接通过

### 多屏长页面（board-finance）
- step-0：6% → 0 轮通过
- step-600~1200：9-11% → 含滚动偏移 + 字体渲染
- step-2400~3600：15-18% → 累积高度偏移，跳过
- step-4200+：3% → 页面底部，双端 clamp 到 maxScroll

### 任务详情系列（task-detail）
- step-0：20-24% → mock 数据差异 ~15% + Banner 纹理 ~3% + 字体 ~3%
- 全部跳过（白名单覆盖）

---

## 跳过原因分类

| 原因 | 出现频率 | 可修复性 |
|------|---------|---------|
| 累积高度偏移（rpx 取整导致 MP 页面更短） | 高 | 不可修复（系统性） |
| mock 数据差异 | 中 | 可修复（对齐数据） |
| Banner 纹理差异 | 中 | 部分可修复（简化纹理） |
| 话术设计变体（H5 vs MP 实现差异） | 低 | 需重构 |

---

## 高度偏移规律

MP 页面总高度因 rpx 取整累积比 H5 略短。偏移量随页面长度增大：

| 页面 | H5 scrollHeight | MP scrollHeight | 偏移 |
|------|----------------|----------------|------|
| board-finance/default | 5600px | ~5030px | ~570px（10%） |
| board-finance/compare | 5579px | ~5030px | ~549px |

偏移导致中间屏（step-2400~3600）的内容窗口错位严重，是跳过的主要原因。
页面首尾屏不受影响（首屏 scrollTop=0，尾屏双端 clamp 到 maxScroll）。
