# 商品标签迁移口径校验器:诊断流程样例
## 场景
用户刚要求把 v31 中 `定邀/报白/白名单准入` 移到 `商品创建 > 商品类目`,并把 `商品信息` 改成 `信息填写` 后同步刷新 HTML 和 Excel。
## 输入
- 明细:`clean/商品域最终体系_用户版层级_session复核_2026-05-13_v31.csv`
- HTML:`output/review_pages/商品域最终体系_用户版层级_session复核_2026-05-13_v31.html`
- Excel:`output/excel/商品域最终体系_用户版层级汇总_2026-05-13_v31.xlsx`
- 审计表:`analysis/migration_audits/*v31*.csv`
- 分母源:`data/最终结果/一二级标签总表.xlsx`
- 规则:`config/taxonomy_migration_invariants.v31.yaml`
## 运行
```bash
python scripts/check_taxonomy_migration_invariants.py --project . --version v31 --spec config/taxonomy_migration_invariants.v31.yaml
```
## 核心检查
| 检查项 | PASS 信号 | FAIL 信号 |
|---|---|---|
| 明细完整性 | `rows == unique_sessid == 9335` | 行数变化、sessid 重复或缺失 |
| HTML 同步 | HTML 内嵌 records 数等于 CSV 行数 | HTML 仍是旧版本或 records 不一致 |
| Excel 同步 | Excel 汇总等于 CSV groupby 结果 | 汇总量级、解决数、未解决数不一致 |
| 迁移口径 | 旧顶层 `商品信息` 零残留,`商品修改` 合并完成 | 旧标签仍出现在任一产物 |
| 类目层级 | `定邀/报白/白名单准入` 只在 `商品创建 > 商品类目` 下出现 | 仍挂在 `商品类型` 或其他旧路径 |
| 大盘分母 | 大盘来自 `一二级标签总表.xlsx` 去重 sessid `77328` | 使用 `45341` 人工原声有效会话当大盘 |
## 输出样例
```text
PASS taxonomy_migration_v31
csv_rows=9335 unique_sessid=9335
html_records=9335 excel_total=9335
forbidden_labels=0 denominator=77328 source=一二级标签总表.xlsx
report=analysis/invariant_reports/taxonomy_migration_v31_PASS.json
```
如果失败,输出应指向最小可修复对象,例如:`FAIL html_records=9281 but csv_rows=9335; rerun build_review_html for v31`。