ソースを参照

docs(simulator): 整合第三方系统模拟器分阶段执行任务书

将基础打通、正常异常测试、压力测试和交付收口统一到一份任务书,明确工具只模拟第三方系统。

Co-authored-by: Cursor <cursoragent@cursor.com>
YY968XX 2 日 前
親
コミット
0f18695447

+ 935 - 0
doc/plan/系统集成/Ai-DOP第三方系统模拟器分阶段完整执行任务书.md

@@ -0,0 +1,935 @@
+# Ai-DOP 第三方系统模拟器分阶段完整执行任务书
+
+> 上游依据:  
+> - [`Ai-DOP第三方对接模拟器建设方案.md`](./Ai-DOP第三方对接模拟器建设方案.md)  
+> - [`Ai-DOP第三方对接模拟器初步执行任务书.md`](./Ai-DOP第三方对接模拟器初步执行任务书.md)  
+> - [`Ai-DOP第三方系统集成指南.md`](./Ai-DOP第三方系统集成指南.md)  
+>
+> 文档定位:第三方系统模拟器从当前初版到最终可交付状态的统一执行任务书。  
+> 核查基线:`master` / `01ae6913d`,Web `2.4.416`,server `1.0.598`。  
+> 编制日期:2026-10-09。
+
+---
+
+## 0. 核心定位
+
+本工具的主要定位是:**模拟一个独立于 Ai-DOP 的第三方系统**,方便实施、开发和测试人员人工验证三种系统集成方式。
+
+| 集成方式 | 技术通道 | 模拟器扮演的角色 | Ai-DOP 扮演的角色 |
+|---|---|---|---|
+| 方式甲 | `DB_SYNC` | 第三方数据库服务器,提供表、数据、账号及异常环境 | 主动连接第三方数据库并同步 |
+| 方式乙 | `API_PULL` | 第三方查询 API 服务,接收并响应 Ai-DOP 请求 | 主动调用第三方 API 拉取 |
+| 方式丙 | `API_INBOUND` | 第三方接口客户端,签名后主动向 Ai-DOP 推数 | 接收、校验并处理第三方推送 |
+
+模拟器不是:
+
+- Ai-DOP 内部任务编排器;
+- 数据中台管理后台替代品;
+- 标准层、DWD、KPI、看板、S8 或 ChatBI 自动测试平台;
+- 契约治理、CI 或历史趋势平台;
+- 生产监控工具。
+
+---
+
+## 1. 建设目标
+
+### 1.1 基础连接与全链路人工测试
+
+测试人员通过模拟器准备第三方环境,然后在 Ai-DOP 中人工触发或查看结果,确认:
+
+```text
+第三方模拟端
+→ 网络/认证
+→ Ai-DOP 接口或执行器
+→ 同步/入站流水
+→ 贴源
+→ 标准层或目标业务结果
+```
+
+模拟器负责提供外部侧证据:
+
+- 方式甲的模拟源表、行数、增量值和连接状态;
+- 方式乙实际收到的请求、鉴权方式、cursor、响应和耗时;
+- 方式丙实际发出的请求、签名摘要、响应、回执和耗时;
+- 统一 `runId`、测试业务键和脱敏日志;
+- 对应的 Ai-DOP 人工操作步骤与核验 SQL/API。
+
+模拟器不直接读取或修改 Ai-DOP 内部业务表。全链路最终是否打通,由测试人员结合模拟器证据与 Ai-DOP 页面、日志或只读查询共同确认。
+
+### 1.2 正常与异常测试
+
+工具提供可选择的正常/异常预置条件,测试人员人工执行并观察 Ai-DOP 行为。工具不需要建设复杂自动编排。
+
+### 1.3 压力测试
+
+工具能够按安全上限生成负载或承受请求,测量三种方式在不同数据量、并发、QPS、批大小和持续时间下的表现。
+
+---
+
+## 2. 明确不做
+
+- 不自动修改 Ai-DOP 来源、实体、授权或租户配置;
+- 不自动抢占 T8、165、自建单或真实第三方权威来源;
+- 不直接写 Ai-DOP 贴源、标准、DWD、KPI 表;
+- 不自动调度 Ai-DOP 内部任务作为默认测试方式;
+- 不建设跨对象 DAG;
+- 不建设 PR/每日/发布前 CI;
+- 不建设契约漂移、配置漂移和趋势治理平台;
+- 不建设复杂角色权限体系;
+- 不自动验证全部 KPI、看板、S8 与 ChatBI;
+- 不为 Ai-DOP 尚不存在的 API_INBOUND 契约伪造接口;
+- 不在共享环境默认执行高压力测试;
+- 不保存真实 Secret、密码、JWT 或连接串。
+
+---
+
+## 3. 阶段划分
+
+| 阶段 | 名称 | 目标 |
+|---|---|---|
+| 第一阶段 | 初版完善与基础打通 | 三种方式均可由人工完成一次正常全链路测试 |
+| 第二阶段 | 正常/异常测试能力 | 页面提供三种方式的常用正常与异常测试条件 |
+| 第三阶段 | 压力测试能力 | 提供受控负载、基础指标、停止与环境保护 |
+| 第四阶段 | 交付收口 | 文档、配置模板、报告导出和验收清单完善 |
+
+每阶段通过后再进入下一阶段。第一阶段未打通时不得直接做压力测试。
+
+---
+
+## 4. 当前完成情况
+
+### 4.1 代码层
+
+已核查:
+
+- `tools/integration-simulator/` 初版已建立;
+- 目录登记 42 个对象;
+- 42 个对象支持方式甲和方式乙模拟;
+- 26 个对象登记现有方式丙代码契约;
+- 方式丙客户端已实现 schema、普通 POST、receipt、bulk、snapshot open、snapshot commit、digest;
+- 方式乙 Mock 已支持 NONE、Token、Basic、APIKey、cursor、延迟及 HTTP 错误;
+- 方式甲已支持 MySQL 建表、装载、重置、更新和统计;
+- 页面、脱敏、白名单和三组样例场景已建立。
+
+结论:**模拟端基础代码已具备,但三种方式的真实人工全链路验收尚未完成。**
+
+### 4.2 配置层
+
+模拟器可以生成 `SIM_MODE3_DB`、`SIM_MODE3_API`、`SIM_MODE3_INBOUND` 建议配置,但建议不代表运行环境已经登记。
+
+2026-10-09 核查时开发库连接超时,以下状态尚未取得:
+
+- 三个测试来源是否存在;
+- 方式甲/乙实体是否登记并启用;
+- 目标贴源表是否存在;
+- 26 个方式丙实体哪些已启用;
+- 测试 AccessKey 是否授权并绑定测试租户。
+
+结论:**配置未验收。**
+
+### 4.3 数据层
+
+当前仓库无第一阶段真实测试报告,无法证明:
+
+- Ai-DOP 已连接模拟数据库并完成同步;
+- Ai-DOP 已请求模拟 API 并写入目标;
+- 26 个方式丙契约完成真实 schema 预检;
+- 三种方式产生可对应的同步/入站流水和业务结果。
+
+结论:**数据未验收。**
+
+### 4.4 自动测试
+
+隔离环境实测:
+
+```text
+80 collected
+78 passed
+1 failed
+1 skipped
+```
+
+- 失败测试错误依赖“本机端口 1 必然拒绝连接”的假设,实际返回 503;
+- 真实 MySQL 用例因没有模拟库凭据而跳过。
+
+结论:**基础测试接近完成,真实依赖与人工全链路测试未完成。**
+
+---
+
+# 第一阶段:初版完善与基础打通
+
+## 5. 第一阶段完成标准
+
+每种方式至少选择一个金标对象,由测试人员完成:
+
+1. 在模拟器准备第三方环境;
+2. 在 Ai-DOP 页面或已有操作入口配置/触发;
+3. 回到模拟器查看第三方侧证据;
+4. 在 Ai-DOP 查看同步/入站流水;
+5. 人工核验贴源及一个目标业务结果;
+6. 保存脱敏测试报告。
+
+推荐金标对象:
+
+| 方式 | 对象 | 说明 |
+|---|---|---|
+| 甲 | `ITEM` | 适合首次、重复和增量同步 |
+| 乙 | `PURCHASE_ORDER` | 适合鉴权、路径、业务键和 cursor |
+| 丙 | `S5_INVENTORY_TXN` v2 | 适合签名、幂等、版本和回执 |
+
+---
+
+## 6. F1:修复基础测试
+
+### 任务
+
+1. 修复端口依赖测试:
+   - 使用 monkeypatch 模拟连接失败,或启动受控本地服务;
+   - 不再依赖固定端口的偶然状态。
+2. 分离:
+   - 无外部依赖单元测试;
+   - 真实 MySQL 测试;
+   - 真实 Ai-DOP 人工验收辅助检查。
+3. 有 MySQL 凭据时执行真实建表、装载、更新和统计测试。
+
+### 验收
+
+- 单元测试全绿;
+- 真实 MySQL 测试执行成功;
+- 测试日志不包含凭据。
+
+---
+
+## 7. F2:方式甲基础打通
+
+### 模拟器职责
+
+- 创建独立 MySQL 模拟 schema;
+- 建立第三方源表;
+- 装载 `SIM-{runId}` 数据;
+- 展示表名、行数、业务键和最大增量值;
+- 生成供人工录入 Ai-DOP 的连接与实体配置清单;
+- 提供新增、更新、重置功能;
+- 提供脱敏的模拟端状态。
+
+### 人工操作
+
+1. 在模拟器建立并装载 `ITEM`;
+2. 在 Ai-DOP 登记 `SIM_MODE3_DB`;
+3. 配置实体、源表、业务键、增量列和目标表;
+4. 在 Ai-DOP 测连;
+5. 在 Ai-DOP 人工执行同步;
+6. 查看同步日志、游标、贴源和目标结果;
+7. 将结果填回测试报告。
+
+### 必测正常用例
+
+- 测连成功;
+- 首次全量;
+- 原样重复;
+- 新增数据后增量同步;
+- 更新数据并推进增量列;
+- 多行数据;
+- 中文、null、日期和 decimal。
+
+### 验收
+
+- Ai-DOP 确实从模拟数据库读取;
+- 模拟端数据量与 Ai-DOP 拉取结果可核对;
+- 重复同步不产生重复业务行;
+- 增量游标符合预期;
+- 一个目标业务结果可查。
+
+---
+
+## 8. F3:方式乙基础打通
+
+### 模拟器职责
+
+- 启停第三方 Mock API;
+- 挂载 canonical 样例;
+- 提供 GET endpoint;
+- 支持 `data.list`;
+- 支持稳定 bizKey 和 cursor;
+- 记录 Ai-DOP 实际请求的时间、path、query、鉴权类型、响应状态和耗时;
+- 日志自动脱敏。
+
+### 人工操作
+
+1. 在模拟器启动 Mock 并挂载 `PURCHASE_ORDER`;
+2. 在 Ai-DOP 登记 `SIM_MODE3_API`;
+3. 配置 base URL、鉴权、API path、response path、dedup key 和 cursor;
+4. 在 Ai-DOP 测连;
+5. 在 Ai-DOP 人工执行拉取;
+6. 在模拟器查看实际请求;
+7. 在 Ai-DOP 查看同步日志、贴源和目标结果。
+
+### 必测正常用例
+
+- NONE;
+- Bearer/Token;
+- Basic;
+- APIKey;
+- 正常数据;
+- 空数组;
+- 首次与增量 cursor;
+- 重复 bizKey。
+
+### 验收
+
+- 模拟器收到来自 Ai-DOP 的真实请求;
+- 鉴权和 cursor 符合配置;
+- Mock 返回行数与 Ai-DOP 拉取结果可核对;
+- 重复业务键处理符合预期;
+- 一个目标业务结果可查。
+
+---
+
+## 9. F4:方式丙基础打通
+
+### 模拟器职责
+
+- 从环境变量读取 AccessKey 与 Secret;
+- 生成 timestamp、nonce、body SHA256、幂等键和 HMAC;
+- 支持契约版本头;
+- 调用 Ai-DOP schema、POST、receipt、bulk、snapshot 和 digest;
+- 展示脱敏请求摘要、响应、耗时和批次号;
+- 不向浏览器返回 Secret。
+
+### 人工操作
+
+1. 在 Ai-DOP 准备测试开放身份、租户、grant 和 entity;
+2. 在模拟器加载测试凭据;
+3. 对 26 个 entityCode 执行 schema 预检;
+4. 对 READY 的金标实体执行普通 POST;
+5. 查询 receipt;
+6. 在 Ai-DOP 查看入站流水、贴源和目标结果。
+
+### 必测正常用例
+
+- schema;
+- 普通 POST;
+- receipt;
+- bulk;
+- snapshot open;
+- snapshot commit;
+- digest。
+
+### 验收
+
+- 26 个契约均有真实预检结果;
+- 未开通与代码不支持分开显示;
+- READY 金标实体推送成功;
+- 入站响应、回执和 Ai-DOP 流水可核对;
+- 一个目标业务结果可查。
+
+---
+
+## 10. F5:人工全链路报告
+
+报告按方式生成,至少包含:
+
+- runId;
+- 环境与测试租户;
+- 对象;
+- 模拟端准备结果;
+- 人工执行步骤;
+- 模拟端证据;
+- Ai-DOP 测连结果;
+- 同步/入站流水编号;
+- 贴源核验结果;
+- 目标业务结果;
+- 结论;
+- 未完成项;
+- 清理提示。
+
+工具只保存测试人员填写的摘要,不保存数据库密码、Secret、JWT、连接串或完整敏感 payload。
+
+### 第一阶段验收表
+
+- [ ] 单元测试全绿
+- [ ] 真实 MySQL 测试通过
+- [ ] 方式甲正常全链路打通
+- [ ] 方式乙正常全链路打通
+- [ ] 方式丙正常全链路打通
+- [ ] 三种方式均有模拟端证据
+- [ ] 三种方式均有 Ai-DOP 流水证据
+- [ ] 三种方式均人工核验一个目标业务结果
+- [ ] 报告已脱敏
+- [ ] 未修改生产权威来源
+
+---
+
+# 第二阶段:正常与异常测试能力
+
+## 11. 第二阶段原则
+
+- 以人工操作方便为目标;
+- 页面提供预置测试条件和清晰说明;
+- 测试人员决定何时在 Ai-DOP 触发;
+- 模拟器只控制第三方一侧;
+- 每个异常场景提供恢复按钮或恢复步骤;
+- 不建设复杂自动编排。
+
+---
+
+## 12. N1:方式甲异常测试
+
+模拟器提供或指导:
+
+| 场景 | 模拟方法 | 预期观察 |
+|---|---|---|
+| 地址/端口错误 | 使用未监听端口 | Ai-DOP 测连或同步失败 |
+| 用户名/密码错误 | 使用错误测试凭据 | 认证失败 |
+| 无表权限 | 使用受限测试账号 | 查询被拒绝 |
+| 源表不存在 | 配置不存在表名 | 明确报表不存在 |
+| 字段不存在 | 配置错误增量列 | 明确报列不存在 |
+| 空业务键 | 装载空键数据 | 被拒绝或隔离,不静默覆盖 |
+| 重复业务键 | 装载重复键 | 行为可解释 |
+| 增量列不推进 | 更新数据不更新时间 | 不应误判为新增量 |
+| 慢查询 | 使用受控延迟视图或大数据量 | 超时行为可解释 |
+| 连接中断 | 测试期间停止模拟库 | 失败不记成功,可恢复 |
+
+不得为了制造异常修改 Ai-DOP 主库。
+
+---
+
+## 13. N2:方式乙异常测试
+
+页面提供:
+
+- 401;
+- 403;
+- 404;
+- 429;
+- 500;
+- 503;
+- 固定延迟;
+- 超时;
+- 空响应;
+- 非法 JSON;
+- 错误 Content-Type;
+- 错误 response path;
+- 缺 bizKey;
+- 重复 bizKey;
+- cursor 不推进;
+- cursor 乱序。
+
+模拟器展示:
+
+- 实际请求;
+- 选择的异常;
+- 返回状态;
+- 响应耗时;
+- 恢复默认按钮。
+
+---
+
+## 14. N3:方式丙异常测试
+
+页面提供:
+
+- 缺 AccessKey;
+- 错误 AccessKey;
+- 错误 Secret/签名;
+- body 摘要不一致;
+- 缺幂等键;
+- 过期 timestamp;
+- nonce replay;
+- 同幂等键同 body;
+- 同幂等键不同 body;
+- 缺必填字段;
+- 字段类型错误;
+- 部分行拒绝;
+- stale 数据;
+- 未授权 entityCode;
+- 未启用 entity;
+- bulk 部分失败;
+- snapshot commit 失败。
+
+每个场景显示预期 HTTP 状态或预期分类。被 Ai-DOP 正确拒绝属于测试通过,不属于工具失败。
+
+---
+
+## 15. N4:异常测试报告
+
+测试人员可选择场景、填写 Ai-DOP 观察结果并导出:
+
+```text
+场景
+模拟端行为
+预期结果
+实际响应
+Ai-DOP 流水状态
+目标数据是否变化
+是否符合预期
+备注
+```
+
+### 第二阶段验收表
+
+- [ ] 三种方式均有正常预置
+- [ ] 三种方式均有常见异常预置
+- [ ] 异常可一键或按说明恢复
+- [ ] 正确拒绝与工具失败区分
+- [ ] 模拟端证据可查看
+- [ ] 人工结果可填写并导出
+- [ ] 异常测试不污染生产数据
+
+---
+
+# 第三阶段:压力测试能力
+
+## 16. 压力测试边界
+
+压力测试必须由测试人员显式开启。默认不开启,不允许对生产运行。
+
+执行前必须填写:
+
+- 环境;
+- 测试租户;
+- 负责人;
+- 时间窗口;
+- 最大数据量;
+- 最大并发;
+- 最大 QPS;
+- 最大持续时间;
+- 停止阈值;
+- 清理方案。
+
+共享开发/UAT 环境须由负责人确认后执行。
+
+---
+
+## 17. 通用压力参数与指标
+
+### 参数
+
+- 数据量;
+- 并发数;
+- 目标 QPS;
+- 持续时间;
+- 预热时间;
+- 批大小;
+- 请求间隔;
+- 超时;
+- 最大重试;
+- 固定或随机样例;
+- runId。
+
+### 指标
+
+- 总请求/总批次;
+- 总数据行;
+- 成功数;
+- 失败数;
+- 成功率;
+- 实际 QPS;
+- 行吞吐;
+- 平均耗时;
+- P50;
+- P95;
+- P99;
+- 最大耗时;
+- HTTP/错误分类;
+- 超时数;
+- 限流数;
+- 首次失败时间;
+- 测试开始与结束时间。
+
+模拟器只保证采集第三方侧可观察指标。Ai-DOP CPU、内存、队列和数据库资源由测试人员在现有监控工具中观察。
+
+---
+
+## 18. P1:方式甲压力测试
+
+方式甲中,模拟器主要负责准备不同规模的第三方数据库数据,由测试人员在 Ai-DOP 发起同步。
+
+### 数据规模档位
+
+建议默认:
+
+- S:100 行;
+- M:10,000 行;
+- L:100,000 行;
+- XL:须审批后自定义。
+
+不得把档位写死为环境容量承诺。
+
+### 测试类型
+
+- 首次全量;
+- 大批量分页;
+- 小增量;
+- 大增量;
+- 更新已有行;
+- 多实体并行同步;
+- 慢查询;
+- 连接池压力;
+- 同步中断与恢复。
+
+### 模拟器功能
+
+- 批量生成数据;
+- 显示生成耗时和行数;
+- 控制增量比例;
+- 控制字段宽度;
+- 查看数据库侧当前连接和基础统计;
+- 一键停止后续数据生成;
+- 生成 Ai-DOP 人工执行和观察清单。
+
+### 验收
+
+- 各档位模拟数据可稳定生成;
+- Ai-DOP 拉取行数与源端可核对;
+- 分页无丢行、无重复;
+- 中断后状态可解释;
+- 压力报告记录源端规模和 Ai-DOP 人工观察结果。
+
+---
+
+## 19. P2:方式乙压力测试
+
+方式乙中,模拟器是被压测的第三方 API 服务,Ai-DOP 是请求发起方。
+
+### 测试类型
+
+- 单次大响应;
+- 多批 cursor 拉取;
+- 多实体并行请求;
+- 固定延迟;
+- 随机延迟;
+- 间歇 429;
+- 间歇 500/503;
+- 超时边界;
+- 长时间稳定性。
+
+### 模拟器功能
+
+- 配置每次返回行数;
+- 配置响应数据总量;
+- 配置固定/随机延迟;
+- 配置错误比例;
+- 配置限流阈值;
+- 统计收到的请求量、并发、QPS、耗时和错误;
+- 实时停止 Mock 压力模式;
+- 恢复正常模式。
+
+### 验收
+
+- 模拟器能承受预定 Ai-DOP 请求量;
+- 请求统计与 Ai-DOP 同步批次可对应;
+- cursor 无丢失和重复;
+- 429/5xx/超时行为符合预期;
+- 恢复正常模式后可再次拉取。
+
+---
+
+## 20. P3:方式丙压力测试
+
+方式丙中,模拟器是负载发起方。
+
+### 测试类型
+
+- 单条 POST;
+- 多并发单条 POST;
+- 多行普通 POST;
+- bulk;
+- 不同 entityCode 混合;
+- 固定 QPS;
+- 阶梯升压;
+- 固定并发;
+- 固定持续时间;
+- 幂等重复;
+- 部分错误数据;
+- 429 与恢复。
+
+### 模拟器功能
+
+- 并发 worker;
+- QPS 限制;
+- 批大小;
+- 持续时间;
+- 阶梯配置;
+- 错误数据比例;
+- 实时指标;
+- 立即停止;
+- 停止后等待在途请求;
+- 报告导出。
+
+### 安全限制
+
+- 默认最大并发和 QPS 使用保守值;
+- 提高上限需显式二次确认;
+- 达到连续错误、超时或 429 阈值自动停止;
+- 不自动无限重试;
+- 每轮使用唯一 runId;
+- 请求体不得携带任意 tenantId 改变目标租户。
+
+### 验收
+
+- 实际 QPS 接近目标且偏差可解释;
+- 成功、失败、限流和超时统计准确;
+- P50/P95/P99 可计算;
+- 达到停止阈值自动结束;
+- Ai-DOP 入站流水与发送数量可人工核对;
+- 测试结束后无持续后台请求。
+
+---
+
+## 21. 压力控制台
+
+页面只需提供:
+
+- 方式选择;
+- 对象选择;
+- 参数输入;
+- 环境与安全确认;
+- 开始;
+- 停止;
+- 实时基础指标;
+- 错误摘要;
+- 报告导出。
+
+不要求:
+
+- 复杂监控大屏;
+- 分布式压测集群;
+- 自动扩缩容;
+- 长期趋势平台;
+- 生产告警系统。
+
+### 第三阶段验收表
+
+- [ ] 压力测试默认关闭
+- [ ] 非测试环境被阻断
+- [ ] 三种方式均有压力测试方案
+- [ ] 参数有安全上限
+- [ ] 可立即停止
+- [ ] 达到阈值可自动停止
+- [ ] 指标计算正确
+- [ ] 三种方式均可导出报告
+- [ ] Ai-DOP 资源由人工监控并填写
+- [ ] 测试结束后无残留负载
+
+---
+
+# 第四阶段:交付收口
+
+## 22. 启动与配置
+
+交付:
+
+- Python 环境要求;
+- 安装命令;
+- `config.example.json`;
+- 环境变量说明;
+- MySQL 模拟库初始化;
+- Mock API 启停;
+- 方式丙凭据加载;
+- 端口说明;
+- host 白名单说明;
+- 常见故障排查。
+
+Docker 可作为可选交付,不作为完成本工具的硬前置。
+
+---
+
+## 23. 人工操作手册
+
+按方式分别说明:
+
+1. 模拟器准备;
+2. Ai-DOP 配置;
+3. Ai-DOP 人工触发;
+4. 模拟器证据查看;
+5. Ai-DOP 流水查看;
+6. 目标结果核验;
+7. 异常恢复;
+8. 测试数据清理。
+
+操作手册中的截图和字段必须与实际页面一致。
+
+---
+
+## 24. 报告与脱敏
+
+支持导出:
+
+- 基础打通报告;
+- 正常/异常报告;
+- 压力测试报告。
+
+报告不得包含:
+
+- AccessSecret;
+- 数据库密码;
+- JWT;
+- 完整 Authorization;
+- 完整连接串;
+- 真实客户敏感数据。
+
+AccessKey 仅保留后四位。
+
+---
+
+## 25. 最终交付验收
+
+### 方式甲
+
+- [ ] 可建立和装载模拟数据库
+- [ ] 可完成正常全链路人工测试
+- [ ] 可完成常见异常测试
+- [ ] 可生成多档数据用于压力测试
+- [ ] 可核对源端行数与增量值
+
+### 方式乙
+
+- [ ] 可启动第三方 Mock API
+- [ ] 可完成正常全链路人工测试
+- [ ] 可切换鉴权、延迟和错误
+- [ ] 可承受并统计 Ai-DOP 拉取压力
+- [ ] 请求日志已脱敏
+
+### 方式丙
+
+- [ ] 可完成 26 契约预检
+- [ ] 可完成七类操作
+- [ ] 可完成正常与异常推送测试
+- [ ] 可配置并发、QPS、批大小和持续时间
+- [ ] 可实时停止并导出压力报告
+
+### 通用
+
+- [ ] 工具只模拟第三方一侧
+- [ ] 不直接写 Ai-DOP 业务表
+- [ ] 不自动修改生产配置
+- [ ] 人工全链路步骤清晰
+- [ ] 测试数据有 runId
+- [ ] 凭据不落盘
+- [ ] 报告已脱敏
+- [ ] 无后台残留负载
+
+全部通过后,工具状态可标记为:
+
+```text
+第三方系统模拟器:三种集成方式基础、异常与压力测试能力交付完成
+```
+
+---
+
+## 26. 建议改动文件
+
+### 第一阶段
+
+```text
+tools/integration-simulator/app.py
+tools/integration-simulator/static/index.html
+tools/integration-simulator/static/app.js
+tools/integration-simulator/static/app.css
+tools/integration-simulator/tests/test_inbound_signature.py
+tools/integration-simulator/tests/test_mock_db.py
+tools/integration-simulator/README.md
+```
+
+### 第二阶段
+
+```text
+tools/integration-simulator/providers/mock_api.py
+tools/integration-simulator/clients/inbound_client.py
+tools/integration-simulator/providers/mock_db.py
+tools/integration-simulator/catalog/scenarios.json
+tools/integration-simulator/tests/test_abnormal_cases.py
+```
+
+### 第三阶段
+
+```text
+tools/integration-simulator/load/
+tools/integration-simulator/tests/test_load_controls.py
+tools/integration-simulator/tests/test_load_metrics.py
+```
+
+是否拆分模块以实际代码复杂度为准,不为目录整齐进行无必要重构。
+
+默认不修改 `Web/` 和 `server/`。若实证发现 Ai-DOP 阻断缺陷,应另立修复任务并确认,不能混入模拟器代码。
+
+---
+
+## 27. 跨模块影响
+
+### 数据中台
+
+人工测试会使用数据源、实体、同步任务、同步日志和入站流水页面。  
+结论:**需人工操作和观察,无需模拟器修改数据中台代码。**
+
+### S1~S7、S8、ChatBI
+
+全链路测试可能选择一个目标业务结果进行人工核验。  
+结论:**只读核验,无需模拟器自动测试或修改这些模块。**
+
+### 部署与共享环境
+
+压力测试会占用同步任务、接口、数据库和队列资源。  
+结论:**需负责人确认时间窗口和上限;默认禁止生产。**
+
+---
+
+## 28. 反向影响推演
+
+### 28.1 代码调用面
+
+已核查:
+
+- 方式甲由 Ai-DOP 主动连接模拟数据库;
+- 方式乙由 Ai-DOP 主动请求模拟 API;
+- 方式丙由模拟器主动请求 Ai-DOP 入站 API。
+
+结论:**模拟器只控制第三方一侧;无需建立 Ai-DOP 内部调用旁路。**
+
+### 28.2 数据契约面
+
+已核查:42 个对象目录和 26 个推数契约用于生成第三方样例。
+
+结论:**需维护样例与契约一致性;目标业务结果只人工核验。**
+
+### 28.3 多数据源面
+
+已核查:测试来源可能与 T8、165、自建单或真实第三方共存。
+
+结论:**需使用 `SIM_MODE3_*` 专用来源,不得成为生产权威来源。**
+
+### 28.4 多租户 / Domain 面
+
+已核查:方式丙租户由开放身份决定,方式甲/乙由 Ai-DOP 配置决定。
+
+结论:**只允许测试租户;模拟器 payload 不得任意切换 tenantId。**
+
+### 28.5 运行面
+
+已核查:压力测试可能影响共享环境。
+
+结论:**需安全上限、人工确认、立即停止、自动停止和无残留负载检查。**
+
+### 28.6 验证面
+
+已核查:工具的价值是方便人工测试,不是替代所有内部自动化。
+
+结论:**保留必要单元测试;业务链路采用模拟端证据 + Ai-DOP 人工证据。**
+
+---
+
+## 29. 版本与提交规则
+
+- 仅修改 `tools/` 与文档,且不进入 Web/server 构建:不升前后端版本;
+- 修改 Web:Web patch +1;
+- 修改 server:server 三处版本 patch +1;
+- 不提交 `config.json`、`.env`、运行日志、真实报告、凭据和 Word 锁文件;
+- 用户说“提交”时执行 commit + push。
+
+建议按阶段提交:
+
+1. `fix(simulator): 完成三种方式基础人工联调`
+2. `feat(simulator): 增加三种方式正常与异常测试`
+3. `feat(simulator): 增加受控压力测试能力`
+4. `docs(simulator): 完善第三方模拟器交付手册`