text37.txt

一、接续说明

执行时间：2026-06-20 CST

本文件对应 `text36.txt` 的第一阶段执行结果：

```text
把 real_simulation_page_smoke.html 中剩余重复断言先扫出来，形成清单；
本轮不继续抽 helper，不改 runtime，不改 smoke 逻辑。
```

扫描范围：

```text
wasm-port/tests/browser/real_simulation_page_smoke.html
只看 blocked / saved ready / restored ready 三段 handoff 相关断言
```

二、扫描结论总览

当前 `summary / operator snapshot / action plan / compact status / preflight / history`
这一批兼容入口，已经基本完成从三态大 if 向 helper 的迁移。

剩余的重复断言主要集中在另一批主题：

```text
review/statusbar/external-shell
```

更具体地说，当前还残留在三态大 if 中、且具有明显重复结构的内容，主要是：

```text
1. handoff review note / review packet / review packet copy-export / review packet verification / review packet badge；
2. handoff statusbar snapshot / statusbar receipt / statusbar receipt verification / statusbar receipt badge；
3. handoff external shell badge snapshot / badge copy-export；
4. 上述对象对应的一批 document.body.dataset 兼容镜像检查。
```

三、按主题的剩余重复断言清单

1. review packet 组

当前仍重复出现在 blocked / saved ready / restored ready 三态中的对象字段检查：

```text
- ReviewNote:
  phase / action / preflight / latestHistory / noteText

- ReviewPacket:
  phase / action / preflight / latestHistory /
  packet.reviewNote / packet.preflight / packetJson parse 后关键字段 /
  digest 正则

- ReviewPacketCopyExport:
  phase / ready / action / preflight / digest /
  packetJson / reviewNote / copyText / exportText / summaryText

- ReviewPacketVerification:
  phase / ready / statusText /
  digestMatches / jsonParseReady / reviewNoteMatches / preflightMatches /
  digest / preflight / reviewNote / packetJson / rows.length / rows.every(ready) /
  summaryText

- ReviewPacketVerificationBadge:
  phase / statusText / ready / readyCount / totalCount /
  badgeState / badgeText / statusbarBadgeText / statusbarBadgeState / digest
```

判定：

```text
这组里有两类内容混在一起：
1. 对象契约：应保留一部分在大 if；
2. dataset / DOM 镜像：适合继续抽 helper。
```

建议下一轮优先处理：

```text
先抽 review packet 组的 dataset / DOM 镜像一致性；
对象自身字段契约暂时保留在大 if。
```

2. statusbar 组

当前仍重复出现在三态中的对象字段检查：

```text
- StatusbarSnapshot:
  phase / action / preflight / packetBadgeText / packetBadgeState /
  digest / baseline / ready / summaryText

- StatusbarReceipt:
  phase / action / preflight / badge / packetBadgeState /
  digest / baseline / ready / receiptText / copyText / summaryText

- StatusbarReceiptVerification:
  phase / ready / statusText /
  receiptMatches / digestMatches / badgeMatches /
  summaryText / receiptText / digest / badge / baseline

- StatusbarReceiptBadge:
  phase / statusText / ready / readyCount / totalCount /
  receiptBadgeState / receiptBadgeText /
  statusbarReceiptBadgeText / statusbarReceiptBadgeState / digest
```

同时仍残留的一批 dataset 兼容镜像检查：

```text
document.body.dataset.evidenceSessionHandoffStatusbarReceipt*
document.body.dataset.evidenceSessionHandoffStatusbarReceiptVerification*
document.body.dataset.evidenceSessionHandoffStatusbarReceiptBadge*
```

判定：

```text
这组重复程度很高，且 blocked / saved ready / restored ready 结构高度对称；
很适合继续抽成共享 helper。
```

建议下一轮优先级：

```text
高优先级
```

3. external shell badge 组

当前仍重复出现在三态中的对象字段检查：

```text
- ExternalShellBadgeSnapshot:
  phase / action / preflight / packetBadgeText / receiptBadgeText /
  baseline / digest / ready / shellBadgeState / shellBadgeText /
  statusbarShellBadgeText

- ExternalShellBadgeCopyExport:
  phase / action / preflight / ready /
  shellBadgeState / shellBadgeText / copyText / exportText / summaryText / digest
```

同时仍残留的一批 dataset 兼容镜像检查：

```text
document.body.dataset.evidenceSessionHandoffExternalShellBadgeSnapshot*
```

判定：

```text
这组与 statusbar 组一样，结构很规整，blocked / ready 两态几乎只变 phase / text；
适合继续抽 helper。
```

建议下一轮优先级：

```text
高优先级
```

4. external shell bundle / receipt audit bundle 组

当前状态：

```text
这组大部分 dataset / DOM 镜像检查已经由现有 assertExternalShell* helper 覆盖；
在三态大 if 中剩余的更多是对象字段契约检查，而不是重复的镜像检查。
```

判定：

```text
短期内不应优先再抽；
除非发现新的大块 dataset / DOM 镜像重复，否则这组先保持现状。
```

建议下一轮优先级：

```text
低优先级
```

四、按类型划分：哪些更像“对象契约”，哪些更像“兼容镜像”

建议继续保留在三态大 if 中的检查：

```text
1. apiName
2. phase / ready / statusText / baseline / digest
3. rows.length / rows.every(ready)
4. JSON.parse(packetJson) 后的关键字段
5. packet / snapshot / receipt / bundle 等对象内部结构是否成立
```

建议继续迁移到 helper 的检查：

```text
1. document.body.dataset.* 镜像值；
2. diagnostics panel 文本镜像；
3. statusbar 文本镜像；
4. 只读 DOM value 节点文本镜像；
5. phase/action/preflight/digest 派生出的短文本镜像。
```

五、第一阶段产出结论

本轮扫描后的结论是：

```text
1. summary / operator / preflight / history 这条线已经基本收平；
2. 剩余真正需要继续收尾的重点，是 review/statusbar/external-shell badge 这组；
3. 下一轮最值得继续抽 helper 的，是：
   - review packet 组的 dataset / DOM 镜像；
   - statusbar 组的 dataset / DOM 镜像；
   - external shell badge snapshot / copy-export 的 dataset / DOM 镜像；
4. receipt audit bundle 这组暂时不是主要尾项；
5. 下一轮不应重新扫描全文件，而应直接按上面三组进入第二阶段 helper 提取。
```

六、建议下一轮入口

推荐下一轮直接执行 `text36.txt` 第二阶段，但按下面优先级推进：

```text
优先级 1：statusbar 组
优先级 2：external shell badge 组
优先级 3：review packet 组
优先级 4：最后再看是否还需要补 external shell bundle / audit bundle
```

建议下一轮的最小目标：

```text
至少把 statusbar + external shell badge 这一批 dataset / DOM 重复断言继续抽走；
完成后重新运行 browser_real_simulation_page_smoke。
```

七、建议验证命令

```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh
```
