---
date: 2026-05-14
type: learning
source: doc-review 跑 #342 备份与异地容灾 PRD 时漏抓 4 个真缺陷
related: issue #342, PR #367, .agents/skills/doc-review/SKILL.md
tags: [doc-review, ops, backup, disaster-recovery, skill-improvement]
---

# doc-review 4-lens 对运维/容灾 PRD 有盲区

## 背景

为 issue #342 备份与异地容灾 PRD 跑 doc-review 4-lens（A 实施者走查 / B 外部依赖 / C 失败模式 / D 跨文档承诺）。首轮抓到 3🔴 + 7🟡 全部修复。

**但人工二轮 review 又发现 4 个真缺陷**，全部是首轮该抓到却漏了的：

| # | 缺陷 | 该被哪 lens 抓 | 实际为何漏 |
|---|---|---|---|
| 1 | PITR RPO 二义性（本地 repo ≤ 5min vs 异地副本 ≤ 24h）| Lens D 跨文档承诺 | 4-lens 把 RPO 当单一数值检查，没意识到同一字段在两种数据源下含义不同 |
| 2 | DB ↔ 附件备份偏移导致 restore 后 orphan refs | Lens C 失败模式 | C lens 当时考虑"单 source 失败"，没意识到**跨维度同时备份**会引入 happens-before 偏移 |
| 3 | 附件 inventory 前置缺失（漏一个模块 = 永久静默丢）| Lens A 实施者走查 | A lens 跟着已写出来的范围走，**没追问"范围本身有没有漏列"** |
| 4 | 多 source 同时受灾时无恢复优先级（4h 预算下无法并行）| Lens C 失败模式 | C lens 只看了"单 source 挂"场景，没看"多 source 同时挂"|

## 根因

4-lens 是为**业务模块 PRD**（API / data-model / UI / 状态机）设计的——重点抓"字段对不对、状态枚举对不对、错误码对不对"。

**运维/容灾 PRD 的 lens 维度不同**：
- 没有 API / DTO / 字段一致性
- 关键是"数据完整性 + 时序 + 多源协同 + 恢复优先级"
- 4-lens 的 prompt 没引导审查者去看这些

## 改进：DR/Ops PRD 第 5 个 lens

对**运维 / 容灾 / 备份 / 灾备**类 PRD，4-lens 跑完后**必须**再过下面这套 checklist（命名为 **Lens E — 灾难协同**）：

### Lens E prompt

> "灾难不是单点的。**多个 source 同时挂**、**多个维度同时备份但时间错开**、**同一指标在不同数据源下含义不同**——这些跨维度交互文档是否声明清楚？"

### Lens E 检查清单

1. **RPO/RTO 的数据源前提**：每个 RPO/RTO 数字明确写"哪个 repo / 哪个副本"。本地 + 异地两层副本时**必须拆列**
2. **多维度备份的时序偏移**：DB / 附件 / Configs 等是否在同一时刻备份？如果错开（典型如 04:30 / 05:00 / 05:30）→ 一致性模型如何处理？(a) 接受最终一致 + 启动清扫 (b) FS 快照同时点 (c) 应用层 quiesce — 选哪个、为什么？
3. **inventory 完整性**：所有要备份的对象（模块/表/路径/字段）是否**穷举**？不能依赖"调研中"占位 — 漏一项 = 永久静默丢
4. **多 source 同时受灾的恢复优先级**：列 T0/T1/T2/T3 分级 + 4h 预算分配。**T0 通常是元基础设施**（备份枢纽自身、密钥、监控告警系统）
5. **元基础设施的循环依赖**：备份枢纽自己的备份、监控系统自己的监控、告警系统自己的告警 — 走到哪？不能 self-referential
6. **加密策略的端到端覆盖**：传输 + 静态 + 跨地域复制 + 备份介质本身是否全程加密？不能停在"备份是加密的"就 OK
7. **演练频率 vs 真实事故概率**：演练越密成本越高、越稀越接近"备份不算完成"——明确写演练频率 + 失败处理

## 何时跑 Lens E

触发条件：

- 文档主题包含 backup / disaster / recovery / DR / failover / replication / restore
- 涉及 RPO / RTO 指标
- 涉及多源、多副本、多区域
- 涉及"机房挂 / 区域故障 / 灾难"等关键词

任一命中 → 4-lens 跑完后必跑 Lens E。

## 元教训

不只是缺一个 lens 的问题，根本是：**4-lens 框架的 prompt 词写得偏业务模块**。审查者跟着 prompt 思考时，思路自然被"DTO / 字段 / 状态机 / 错误码"牵着走，看不到"数据源前提 / 时序协同 / 优先级"这类**运维语义**的缺陷。

对应的 skill 改进方向（**待提炼**）：

- `.agents/skills/doc-review/SKILL.md` 加 "Lens E — 灾难协同" 段
- 4-lens 标题前置一句"如果是运维/DR 类文档，先看 Lens E"

## 引用

- 漏抓案例：[PR #367](http://43.130.59.228/FFAIWorkspace/workspace/pulls/367) 二轮发现的 4 个缺陷
- 关联沙箱学习：[`2026-05-14-pgbackrest-sandbox.md`](./2026-05-14-pgbackrest-sandbox.md)（也是这次任务产出）
