## 代码审查轮值每日提醒 {.case data-case-id="003"}

| 字段 | 值 |
| --- | --- |
| 案例编号 | `003` |
| 行业 / 部门 | 互联网 / 研发 |
| 角色 | 工程经理 |
| 难度 | `入门` |
| 调用来源 | `schedule`（定时由获授权 Agent 经 App/Extension 读取轮值表） |

<!-- slot: 目标 -->
团队按周轮值做代码审查，但常忘记今天轮到谁，导致待审 PR 积压。目标：每天定时让获授权 Agent 读取轮值表，查出当天审查人后在团队频道发提醒；查不到或轮值表不可达时给出可见回执并升级，不静默结束。指标：从本次启动到提醒发出的中位数 < 5 分钟；当天审查人名字与轮值表一致率 100%；审查漏做率较使用前下降 ≥ 70%。

<!-- slot: 边界 -->
- **覆盖**：定时读取轮值表、查到审查人后发提醒、查不到或数据源异常时出回执并升级。
- **不覆盖**：自动分配 PR、节假日跳过（由轮值表本身或调度策略控制）、强制审查人上岗。
- **假设**：有一个经授权能读取轮值表（共享表格或团队日历）的 Agent（通过 App/Extension）；团队频道固定。

<!-- slot: 提示词 -->
把下面这段发给 Loop，它会在后台帮你创建这个 Workflow：

```text
帮我创建一个 Workflow：每天定时让获授权的轮值 Agent 读取代码审查轮值表，查出今天的审查人，然后在团队频道发提醒。App/Extension 在读取侧即完成聚合，Agent 只接收日期与审查人受控令牌（权限受控且 Agent 无法反查原值）等白名单字段，不带出联系方式等个人字段；提醒里的称呼不进入 Agent，由平台 App 发送时按轮值令牌回填。
触发：定时（计划）发起调用，调用时带入团队频道、轮值 Agent 和轮值表位置（由 Agent 通过 App/Extension 读取）。
结果分三类处理：
  查到审查人：在频道发"今天负责代码审查的是 X，请处理待审 PR"，并留审计时间戳。
  查到但当天未设置轮值：明确告警"当天未设置审查人"并通知经理，留审计时间戳，不静默结束、也不靠重跑解决。
  查询失败（轮值表不可达或数据陈旧）：告警失败、留审计时间戳，按重试上限重试，仍失败则升级到值班频道。
审批：不涉及审批，提醒是低风险通知。
异常：轮值 Agent 回传不合结构就停在等待点等它重新提交，不自动重跑；提醒发送失败按重试上限重试，仍失败则升级到值班频道并保留待发内容供人工补发。
完成：三类结果各自出回执后结束。
```

<!-- slot: 流程 -->
![案例 003 代码审查轮值提醒：定时让获授权 Agent 读取轮值表；回传不合结构时停在原等待点。查到审查人则发提醒并成功，查到但当天无轮值则告警通知经理，查询失败则告警重试升级，均留审计时间戳](../../../media/cases/fig-case-003-01-flow.svg){#fig-case-003-01 width=92%}

如上图所示，正常路径与异常同时可见，三种结果都有可见回执：

1. **定时触发**：计划到点发起一次调用，带入团队频道、轮值 Agent 与轮值表位置。
2. **查询轮值表**：获授权 Agent 读取轮值表，回传当天审查人；回传结构不合要求时停在原等待点，等其重新提交，不自动重跑。
3. **三种结果分流**：
   - **查到审查人**：在频道发"今天负责代码审查的是 X，请处理待审 PR"，留审计时间戳，成功结束。
   - **当天未设置轮值**：数据存在但当天无对应记录，明确告警并通知经理、留审计时间戳，不静默、也不靠重跑修复。
   - **查询失败**：轮值表不可达或数据陈旧，告警失败、留审计时间戳，按重试上限重试，仍失败则升级到值班频道。

<!-- slot: 配置 -->
你不需要手写代码或配置。把上面的提示词发给 Loop，AI 会理解意图、在后台画出这个"定时查轮值表 + 三路分流"流程——它知道"查轮值表"需要一个发消息并等待回调的 Agent 环节、"分三种结果"需要一个条件路由、"发提醒与告警回执"各需要一个发消息环节。AI 还会在后台校验流程结构是否完整（每个环节的输入是否都连好），你不必关心这些技术细节。

<!-- slot: 异常 -->
- **轮值表查询失败或数据陈旧**：不落入"已发提醒"或静默结束，而是告警失败、留审计时间戳，按重试上限重试；仍失败则升级到值班频道由人工确认。重跑只是重新尝试读取，不会修复轮值表本身——数据源错误要人工修表。
- **当天未设置轮值（数据存在但无当天记录）**：明确告警并通知经理、留审计时间戳，而不是发一条空提醒或当成"今天没人"。这是数据缺失，需要经理补设轮值，重跑不会凭空补出审查人。
- **审查人名字有误**：若轮值表本身写错了人，工作流只会忠实转发表里的名字——这是数据源问题，由经理更正轮值表后再次发起调用，而不是依赖工作流自动猜对。
- **轮值 Agent 回传不合结构**：本次完成请求被拒绝，停在等待点等其修正后重新提交，不自动重跑。
- **提醒发送失败**：按重试上限重试投递；超过上限则升级，并保留待发内容供人工补发。

<!-- slot: 审批 -->
本案例不涉及审批。代码审查轮值提醒是低风险通知，确认/驳回在这里没有意义——工作流只如实转发轮值表里登记的审查人，不替团队做指派决定。因此不设 `request_approval` 环节，三种结果直接出回执。

<!-- slot: 外部系统 -->
本工作流的轮值表查询由获授权 Agent 通过 App/Extension 完成（读取一份共享表格或团队日历），工作流本身不直接读取外部系统。团队频道与轮值表位置作为调用输入提供。进入 Agent 消息、Run/Activation/Effect 记录与 App/Extension 工具日志的字段以白名单为准（仅令牌化/白名单字段，原值不进入以上任何一层），可回溯个人的字段（姓名/邮箱/证件/联系方式等）在源头即被令牌化/伪名化，并按 10% 抽查四层实际记录。轮值表不可达或数据陈旧属于查询失败，走上面的失败回执与升级，不当作"今天没人"。若要按节假日跳过，在轮值表里直接留空对应日期即可——当天未设置轮值会走"通知经理"回执，不会静默结束。

<!-- slot: 验收 -->
- **回放集与基准**：用最近 60 个工作日的轮值表快照回放，人工基准答案为当天应有审查人的既定名单；查到的审查人与基准一致率 100% 视为通过。
- **分母与口径**：一致率分母为回放工作日总数；每次回放记录触发与提醒时间戳。
- **抽样**：线上每日全量核对当天提醒是否发出、名字是否正确；每周抽 5 个工作日复核时间戳与回执。
- **结果可见**：查到审查人、当天未设置、查询失败三类结果 100% 各有可见回执，不出现静默成功。
- **时效**：从本次启动到提醒发出的中位数 < 5 分钟；审查漏做率较使用前下降 ≥ 70%。
- **源头脱敏**：进入 Agent 消息、Run/Activation/Effect 记录与 App/Extension 工具日志的字段 100% 在白名单内（仅令牌化/白名单字段，原值不进入以上任何一层），并按 10% 抽查四层实际记录。

### 复用与变体
- **同构迁移**：值班提醒、会议室预订提醒、证书到期提醒、轮班排班通知。
- **按角色路由**：查到的审查人同时抄送其备份审查人，避免单人请假时无人审查。

<!-- slot: 媒体槽位 -->
<!-- media: fig-case-003-01-flow.svg -->
