# wb-ins-font-verify.py 误报场景与处理

## 场景：混合内容段落的参考run匹配偏差

### 触发条件
当段落同时包含数字/英文前缀和中文正文时，脚本的"首个非trivial原文run"匹配策略可能选错参考run。

### 实例（2026-06-26 朱家角可降解环保袋服务合同）

P79 段落结构：
```
原文run: "7.2"        → hint=None   (数字前缀)
原文run: "因火灾..."   → hint=eastAsia
原文run: "10"         → hint=eastAsia
原文run: "内"         → hint=eastAsia
原文run: "提交政府..." → hint=eastAsia
WB INS:  "日"         → hint=eastAsia  ← 插入在中文文本中间
```

脚本匹配到第一个非trivial原文run "7.2"（hint=None），判定WB INS "日"（hint=eastAsia）为HINT MISMATCH。

**实际**："日"插入在中文文本中间，相邻run均为hint=eastAsia，格式完全正确。

### 判断方法

当`wb-ins-font-verify.py`报告HINT MISMATCH时，做以下三件事：

1. **检查段落结构**：该段落是否同时包含数字/英文前缀和中文正文？
2. **检查相邻run**：WB INS的相邻原文run（前后各一个）的hint值是什么？
3. **判断**：如果相邻原文run的hint与WB INS一致，则为脚本误报——WB INS的hint与周围中文文本一致是正确的。

### 不适用场景

以下情况NOT误报，需作为真实格式问题处理：
- 所有原文run的hint一致（如全部为eastAsia），但WB INS的hint不同
- 新增段落（无原文run可比），WB INS缺hint
- 同一段落内所有原文run字体一致，WB INS字体不同

## 场景二：段落内原文run属性混合（ea=None vs ea=仿宋）

### 触发条件（2026-06-29 卫生信息平台运维合同）

当段落由多个来源的文本拼接（如合同模板+填充内容），原文run的`eastAsia`/`ascii`/`sz`属性可能不一致：
```
原文run[ea=None sz=None]:  "为了保障上海市青浦区..."  (模板标题部分)
原文run[ea=None sz=None]:  "维管理"
原文run[ea=仿宋 sz=21]:    "服务外包的形式组织各"    (正文部分)
原文run[ea=仿宋 sz=21]:    "运维服务方"
del[WB]: 针
ins[WB][ea=仿宋 sz=21]:   面                        ← 插入在仿宋文本中间
原文run[ea=仿宋 sz=21]:    "，对上海市..."
```

脚本匹配到第一个非trivial原文run（ea=None sz=None），判定WB INS（ea=仿宋 sz=21）为EASTASIA/SZ MISMATCH。

**实际**：WB INS与相邻的仿宋run完全一致，格式正确。段落前半部分ea=None是因为那些run继承默认样式，不代表段落整体字体是None。

### 判断方法

当脚本报告EASTASIA/ASCII/SZ MISMATCH时：
1. **检查段落全部原文run的属性**：是否部分run有显式属性、部分没有？
2. **定位WB INS的相邻run**：前后各一个原文run的属性是什么？
3. **判断**：如果WB INS与相邻run一致，则为误报——脚本选了错误的参考run。

### 结论

脚本的"首个非trivial原文run"匹配策略在属性混合段落中可能产生误报。reviewer复核时需结合段落结构和相邻run上下文判断，不可盲信脚本输出。