# Full visual scan report — post 2026-08-05 merge wave

- **main tip measured:** `9161710` (includes #461 bookmark fix)
- **corpus:** v0.1.1 labeled review package (22 fixtures, **475 pages**)
- **site:** https://recto-review-efa17e43.pages.dev （左 Word · 中 Recto · 右 Diff）
- **method:** 19 parallel LLM vision batches; each page one triptych judgment
- **raw data:** `full-scan/all-verdicts.json`, `full-scan/summary-stats.json`

## 1. Headline numbers

| absolute | pages | % |
|---|---:|---:|
| **PASS** | 159 | **33.5%** |
| **PARTIAL** | 89 | 18.7% |
| **FAIL** | 227 | **47.8%** |
| total | 475 | 100% |

| severity | pages |
|---|---:|
| none / raster | 161 |
| local | 87 |
| structural | 60 |
| **catastrophic** | **167** |

**读法：** 约 1/3 页人眼可接受；近一半 FAIL；灾难级 167 页高度集中在少数「大文档 / 复杂表 / 图文」fixture，不是均匀差。

## 2. Per-fixture pass rate (worst → best)

| pass% | P / Pa / F | fixture | 类型 |
|---:|---|---|---|
| 3% | 4/26/103 | `dc-02353175-table-complex` | 巨型嵌套表 (133p) |
| 9% | 5/24/25 | `dc-0284245d-sections` | 长分节 (54p) |
| 10% | 1/0/9 | `dc-0982ea29-image` | 图文混排 |
| 0% | 0/0/7 | `dc-0d06bc20-image` | 图文/宣传页 |
| 0% | 0/0/4 | `dc-0139461c-notes-cols` | 多栏+notes |
| 0% | 0/0/2 | `dc-051f92d2-anchor` | 锚定图 |
| 39% | 20/7/24 | `dc-01487dbf-table-complex` | 复杂表 |
| 60% | 78/1/50 | `dc-1589a4a1-sections` | 长 sections（后半页常 catastrophically 空白/错页） |
| 100% | 23/0/0 | `dc-0011b198-plain` | 简单正文 |
| 100% | 10/0/0 | `dc-05428258-lists` | 列表（本扫全过；与早期抽查有方差，见 §5） |
| 100% | 6+ 个小 plain/lists | 短文 | 正文路径基本可用 |

## 3. Mechanism histogram (top)

| mechanism (normalized) | hits | 含义 |
|---|---:|---|
| missing-content / blank-page / sparse-page | ~250 | 页上大块或整页缺失 |
| pagination-drift / page-desync | ~150 | 与 Word 页面对不齐（内容错页） |
| nested-table-* / table-border / cell-* | ~250 | 嵌套表、框线、单元格几何 |
| multi-column-loss | 60 | 多栏丢失/摊平 |
| font / glyph-aa / cjk-glyph | ~240 | 字形/栅格（多数 raster，非结构） |
| missing-image | 15 | 图未画上 |
| list / tab-leaders | 较少 | 列表/前导符 |

## 4. Code-linked repair priorities

### P0 — 锚定/浮动图与 wrap（图文页「整页空白」）

**证据：** `dc-0d06bc20-image` 7/7 FAIL catastrophic；`dc-0982ea29-image` 9/10 FAIL；`dc-051f92d2-anchor` 全 FAIL。人眼：Word 满版图文，Recto 几乎只有一条线。

**代码落点：**
- `crates/recto-layout/src/engine.rs` — drawing/anchor 布局、paragraph-associated pages
- 浮动/环绕：wrap square/tight/through 仍大量 loss（trace `RECTO-LOSS-2008/2010`）
- PDF 绘制：`crates/recto-pdf/src/render.rs` 对 drawing 的 paint 路径

**建议切片：**
1. 盘点 corpus 图文页的 anchor 类型（inline vs anchor，wrap 模式）
2. 先做 **inline drawing 占位高度** 已有基础，补 **anchor + wrap 把正文挤开** 的最小闭环
3. 用 `dc-0d06bc20-image` / `dc-0982ea29-image` p1 作 RED 视觉 fixture

### P0 — 巨型/嵌套表

**证据：** `dc-02353175-table-complex` 103 FAIL / 133 页；机制 nested-table-loss、border、cell-padding 占主导。

**代码落点：**
- `crates/recto-layout/src/table.rs` — 嵌套 `TableContent::Table`、列宽、tblGrid
- `table_pagination.rs` — 跨页拆行、header 重复、vMerge
- 样式级联刚合 #444，框线/条件边框仍弱

**建议切片：**
1. 嵌套表「丢整表 / 塌成空壳」——先保证 nested table 进入 block 树且有非零几何
2. 复杂 tblBorders / 条件边框与 cell margin（#498 已保真 oxml，layout 消费仍可能不完整）
3. 分页：长表后半 blank/wrong-page 与 pagination-drift 同源

### P1 — 分节 / 多栏 / 节属性

**证据：** `dc-0284245d-sections`、`dc-1589a4a1-sections` 大量 structural/catastrophic；`dc-0139461c-notes-cols` 4/4 FAIL。

**代码落点：**
- `engine.rs` section ranges、`equal_width_columns`、continuous sectPr
- 注释已写明：**in-flow tables do not yet participate in column flow**
- notes/脚注栏：footnote 布局与 body 栏交互

**建议切片：**
1. continuous section + mid-page column change 的分页一致性
2. 多栏正文真正按栏流（非摊平成单栏）
3. notes-cols：脚注/尾注与栏宽

### P1 — 分页漂移（长文档后半）

**证据：** pagination-drift / page-desync ~150 hits；长 fixture 后半页 catastrophic「空白或错内容」。

**代码落点：**
- `paginator.rs`、`engine.rs` keepNext/widow、HF 带高（#508/#450 已动一部分）
- 前文少排一点 → 后文整页错位（error cascade）

**建议：** 不要单独「修空白页」；用 **前 3 个结构根因** 降漂移。对 `dc-1589a4a1-sections` 做前后半页对照验收。

### P2 — 列表 / 表框线细节 / 字体栅格

- 列表：本扫 `dc-05428258-lists` 全 PASS（与早期抽查不一致 → 见 §5）
- 表框线 local：`table-border`、`border-width` — `table.rs` 边框绘制 + pdf 线宽
- font/cjk-glyph/raster：多数 none/raster，**不优先**除非 CJK 缺字

### P3 — 已明显变好（维持回归）

- 简单 plain：`dc-0011b198`、`dc-001b7d31`、`dc-00610bfc` 等 **100% PASS**
- 说明段落/HF/基础分页路径在合并波次后可用；**不要在 plain 上继续堆资源**

## 5. 方法局限

1. **LLM 视觉方差：** 同页不同 batch 可能 PARTIAL↔FAIL；以 fixture 级聚合为准，单页 note 仅线索。
2. **JPEG 压缩：** CF 包为 ~1800px JPEG，细线/字重判断偏粗。
3. **v0.3.0 未扫：** fixture 字节与 meta 不一致，0 页。
4. **8 页 fixture 未进 22 包**（测量侧过滤/失败）；全 corpus 仍大于本包。

## 6. 建议的下一季度 slice 顺序

| 序 | slice | 主 fixture | 代码入口 |
|---:|---|---|---|
| 1 | anchor/wrap 图文占位与环绕 | `dc-0d06bc20-image`, `dc-0982ea29-image` | `engine.rs` drawing |
| 2 | 嵌套表几何不丢失 | `dc-02353175-table-complex` p1–10 | `table.rs` |
| 3 | 多栏真实分流 | `dc-0139461c-notes-cols` | `engine.rs` columns |
| 4 | 长节分页稳定 | `dc-1589a4a1-sections` 后 30% 页 | paginator + section |
| 5 | 表框线/单元格 padding 视觉 | `dc-00f7889f-table` | table borders paint |

每 slice：RED 页 triptych + 机器 page_match/SSIM 辅证 + 本扫 verdict 子集回归。

## 7. 文件

- Verdicts: `~/.cache/recto/review-2026-08-05-tip/full-scan/all-verdicts.json`
- Stats: `.../summary-stats.json`
- Labeled site: https://recto-review-efa17e43.pages.dev
