# Meeting Attendance 集成验证报告（2026-03-04）

## 1. 变更背景

- 目标：
  - 管理员首次进入 Outlook 同步页时，自动异步初始化候选快照（包含系列实例），并在初始化完成前在页面提示“数据初始化中”。
  - `includePast=false` 时候选列表严格仅展示未来会议（`startTime >= now`）。
  - 系列展开时优先读取本地快照子项，仅在本地无数据时回源 Outlook 获取实例。
  - 同步链路冗余收口：移除未使用候选缓存；首次初始化避免重复入队；系列展开陈旧游标触发入队增加邮箱级节流。

## 2. 测试范围与类型选择

- 类型：Integration + Smoke（后端候选筛选语义 + 初始化状态 + 系列展开读取策略）
- 原因：改动同时涉及候选筛选口径、页面状态联动与系列展开回源策略。

## 3. 自动化验证命令

```bash
cd backend
npx jest test/modules/meeting-attendance/unit/outlook-sync.service.spec.ts --runInBand --config '{"transform":{"^.+\\.ts$":"ts-jest"},"testRegex":".*\\.spec\\.ts$","moduleFileExtensions":["ts","js","json"],"moduleNameMapper":{"^@/(.*)$":"<rootDir>/src/$1","^@core/(.*)$":"<rootDir>/src/core/$1","^@engines/(.*)$":"<rootDir>/src/engines/$1","^@modules/(.*)$":"<rootDir>/src/modules/$1","^@common/(.*)$":"<rootDir>/src/common/$1"}}'
```

结果：通过（3/3）。

## 4. 手工最小复现步骤

1. 准备一个没有 `outlook_sync_cursors` 记录的邮箱。
2. 登录并进入 `http://localhost:3000/meetingattendance/integrations/outlook`。
3. 首次候选请求返回时，页面应显示“Outlook 数据初始化中，请稍候自动刷新...”。
4. 初始化期间页面每 5 秒自动刷新候选列表请求一次。
5. 初始化完成后（接口返回 `snapshotInitializing=false`），提示自动消失，候选数据按快照展示。
6. 保持“包含历史会议”未勾选，确认过去单次会议不展示；勾选后可展示历史记录。
7. 展开同一系列时，若本地快照已存在子项，应直接返回并展示；仅在本地无子项时才回源 Outlook 拉取并回写。
8. 首次进入且候选为空时，确认只触发一次有效初始化链路，无重复频繁入队。

## 5. 备注

- 本次未新增 E2E 自动化脚本；页面行为通过手工 smoke 验证。
