== PpDigest 回归 ==  dir=E:\KuGou\2026-09-15-18-17-47\android_mcp\evidence\synth_pp

1) 结构化摘要（照真实格式造的夹具）
   行数=20 识别=16 未识别=2 符号=9 业务包=hgdj 业务包符号=4
   类型分布: {Stub=2, String=1, OneByteString=1, Field=1, Closure=2, AnonymousClosure=2, Code=7}
  [PASS] 识别为 pp.txt
  [PASS] 读出文件头
  [PASS] 行数 = 20
  [PASS] 识别条目 = 16
  [PASS] 未识别 = 2（纯空白行不计）
  [PASS] Stub 计数 = 2
  [PASS] Code 计数 = 7
  [PASS] Closure 计数 = 2
  [PASS] AnonymousClosure 计数 = 2
  [PASS] String 计数 = 1
  [PASS] OneByteString 计数 = 1
  [PASS] Field 计数 = 1
  [PASS] 符号条目 = 9（带 package: 的）
  [PASS] Field/String 等无 package 的不计入符号
  [PASS] 业务包 = hgdj（4 条，多于 flutter 的 3 条）
  [PASS] 业务包符号 = 4
  [PASS] 包统计含 flutter/get/collection
  [PASS] 首条符号地址 = 0x980560
  [PASS] 首条符号路径正确
  [PASS] 首条符号名 = PlayletDetailPage::build
  [PASS] 符号槽位偏移 = 0x549f8
  [PASS] 报告含摘要标题
  [PASS] 报告含对象类型段
  [PASS] 报告含符号条目段
  [PASS] 报告含按包统计
  [PASS] 报告标出业务包
  [PASS] 报告含业务包符号列表
  [PASS] 报告里出现真实地址
  [PASS] 报告里出现业务源码位置
  [PASS] oneLine 含业务包

2) 降级：内容不是 pp.txt
  [PASS] looksLikePp = false
  [PASS] 降级报告给出原因
  [PASS] 降级报告不编造符号

3) 空文件 / 不存在
  [PASS] 空文件给出明确说明
  [PASS] 不存在的文件不抛异常

4) 交付产物命名与导出
  [PASS] 符号索引用语义化名 dart_symbols.tsv
  [PASS] 摘要用语义化名 dart_symbols.txt
  [PASS] TSV 写入条数 = 9
  [PASS] TSV 头部是 # 注释
  [PASS] TSV 行数 = 5 行头部 + 9 条数据
  [PASS] TSV 数据行 = 地址\t源位置\t方法\t槽位
  [PASS] TSV 里没有未识别的杂行
  [PASS] TSV 覆盖全部 4 个业务包符号
  [PASS] TSV 也含 flutter 包符号（完整符号表，不只业务包）
  [PASS] 摘要文件可写出
  [PASS] 非 pp.txt 内容导出 0 条（不编造符号）

5) 框架包条目多于 App 包（真机 bug 回归）
  [PASS] 业务包 = mdiary2（跳过 flutter/dart 框架包）
  [PASS] 业务包符号 = 1（只含 App 自己的）
  [PASS] 业务包符号内容是 main.dart
  [PASS] flutter 条目确实更多（前提成立）
  [PASS] 报告把 flutter 标成框架
  [PASS] 报告含 App 业务包符号

PASS: 52   FAIL: 0
