# P7 OCR soak 验收: 故障池下 99.73%,13 不变量全 PASS

- **日期**: 2026-07-22;**验收 run**: `soak_20260722_002849`(redis 双后端 × 2 worker);**分支**: feature/m3-ocr
- **结论**: M3 计划 T8 验收达成——1500 调用成功 1496(**99.73%**,阈值 98%),13 项裁决全 PASS(含跨进程记账归零与探针不悬挂两项 Redis 活检查)。

## 1. 场景与池(测试环境不放水)

| 项 | 配置 |
|---|---|
| 源池 | 源1=7866(真)、源2=7867(真,各 conc=4/rpm=120)、源3=黑洞 10.255.255.1(20s 连接超时)、源4=坏端口 7899(连接拒绝) |
| 负载 | `data/soak/chs_images/` 469 张真实图像循环;text/layout 实际 1222/308(≈8:2) |
| 装配 | `OcrClient.from_env(scope="SOAK_OCR")`,PGW_LIMITER/BREAKER_BACKEND=redis(db3),2 worker × 并发 8 |

## 2. 两轮结果

| 轮 | 后端 | 成功率 | 裁决 | 备注 |
|---|---|---|---|---|
| 首轮 `soak_20260721_232243` | memory × 1 worker × 并发 16 | 1496/1500(99.73%) | 10 PASS + 1 SKIP(记账归零活检查 memory 不可查) | 报告 tests/outputs/soak/ |
| **验收轮 `soak_20260722_002849`** | **redis × 2 worker × 并发 8** | **1496/1500(99.73%)** | **13/13 PASS** | 跨进程共享闸,贴 CHS 生产形态 |

关键分布(验收轮遥测 1530 行): 逐源尝试 monkey_1=765 / monkey_2=731 / monkey_3=14 / monkey_4=20——**坏源吸流仅 2.2%**(阈值 15%),且真源两处 1496 行**零错误**;全部 34 个错误行都在坏源上(TransientError,分类干净)。延迟 p50/p95 ≈ 17.3/29.4s(两端点几乎一致——排队主导,服务侧单请求 3-15s)。

## 3. 冷启动穿透现象(两轮各 4 例失败的唯一来源)

现象: 起跑首几秒,并发(16)超过健康源容量(2×4 许可),溢出调用在真源"忙碌无许可"时把 `_pick_runnable` 的"第一个可运行源"落到黑洞/坏端口上,3 次尝试全烧在坏源 → `AllSourcesExhausted(retry_exhausted)`。约 30-60s 内熔断对坏源开路(源4 连接拒绝快失败先开,源3 20s 超时后开)+ 冷却备忘接管,此后 1400+ 调用零失败,坏源仅剩半开探针级流量(14/20 次)。

定性: 与 M2.5 R4"可信替代被闸跳过后穿透垫底垃圾源"同族,但量级(0.27%)远低于门槛且自愈窗口有界;chat 侧因有 AIMD 起步并发 8 天然缓解。**本轮裁决: 不加机制**(YAGNI——两轮数据均达标;若未来下游对冷启动窗口敏感,候选方案是选源侧"健康低于门槛且存在更健康的忙源时等待优于穿透",届时按 M2.5 流程走设计补遗)。

## 4. 独立 verifier 三条 Important 的处置(2026-07-22)

| # | 发现 | 处置 |
|---|---|---|
| I1 | 计划承诺的"RSS <500MB 绝对值"未实现,且验收轮起跑 RSS 达 666-695MB(SoakCorpus 全量装载 P1/P2 的 base64 语料所致,非泄漏——随后回落 ~200MB) | 根因修复: SoakCorpus 增 modalities 按需装载(P7 只装 images)+ 新增 `inv_rss_absolute` 检查与单测 |
| I2 | "真源零误熔"无机械化 gate 核对 | 新增 `inv_healthy_gates_closed` 活检查(跑后真源门态必须 CLOSED 可准入;配合遥测"真源零错误行"覆盖全程) |
| I3 | 探针取消归还分支(ocr.py CancelledError→release_probe)无测试 | 补两用例: 半开探针挂起中取消→归还且可再探;退避 sleep 中取消→穿透且 permit 归零 |

**确认轮 `soak_20260722_022232`**(修复后代码,300 调用,redis × 2 worker): 成功 296(98.67%,冷启动 4 例占比随规模缩小而放大,仍达标),**16/16 不变量全 PASS**(含两个新不变量);轻语料化后 RSS 峰值 92MB(修复前 695MB)。

## 5. 备注

- 首轮与验收轮失败数完全相同(各 4)纯属巧合,机理一致。
- OCR 无 token/成本(usage 恒 0),报告 token/cost 列为 0 属预期;TTFT 列恒 0(非流式,不适用)。
- `tables/para_blocks` 一致性抽查两轮各 20 张全 PASS(设计 §1.2 取证的持续护栏,累计 35+40 样本零不一致)。
