---
large_scale_test:
  config_path: tests/fixtures/auto_sync/auto_test_config.yaml
  output_dir: test_results/auto_test/large_scale
  fail_on_failed_cases: false
  default_runner: aggregate
  default_init_mode: fresh
  classification:
    project::round_3_investment_update: backend
    material_detail::round_2_update: flaky
  rounds:
  - id: round_01_full_baseline
    title: 全量隔离基线
    enabled: true
    runner: aggregate
    init_mode: fresh
    objective: 建立当前 19 个 domain 的隔离回归基线，并确认遗留失败的分类。
    focus:
    - 全量聚合仍使用每个 domain 独立初始化，避免跨 domain 状态污染。
    - 先确认 project 与 material_detail 的当前状态，不在本轮混入额外修复动作。
    next_goal: 在保持全量基线的前提下，单独复核 project 与 material_detail，区分后端遗留问题和聚合偶发问题。
  - id: round_02_project_recheck
    title: project 后端复核
    enabled: true
    runner: domains
    init_mode: fresh
    domains:
    - project
    objective: 单独复核 project，确认 round_2 已修复，round_3 仅剩后端读回字段缺失。
    focus:
    - 只跑 project，避免无关上下文。
    - 明确区分脚本问题与后端问题。
    classification:
      project::round_3_investment_update: backend
    next_goal: 保留脚本侧修复结论，把 project round_3 作为后端待修项持续跟踪。
  - id: round_03_material_detail_recheck
    title: material_detail 波动复核
    enabled: true
    runner: domains
    init_mode: fresh
    domains:
    - material_detail
    objective: 单独复核 material_detail，确认聚合中的 round_2 失败是否只是偶发。
    focus:
    - 只跑 material_detail。
    - 如果单跑通过，就把聚合中的失败归为 flaky，不扩大处理范围。
    classification:
      material_detail::round_2_update: flaky
    next_goal: 若后续聚合再次出现同类失败，再升级为可复现问题处理。
---
# 大规模测试控制文档

这个文档同时承担两件事：

1. **控制大规模测试怎么跑**
2. **记录每轮测试的目标、结果和改进过程**

## 使用方式

- 控制入口：调整本文档 frontmatter 中的 `rounds`
- 执行脚本：[scripts/run_large_scale_auto_test.py](../../scripts/run_large_scale_auto_test.py)
- 默认命令：`python scripts/run_large_scale_auto_test.py`

## 设计约束

- 默认使用 `fresh` 初始化，优先保证每轮从干净环境开始。
- `aggregate` runner 适合大规模基线回归；它内部会对每个 domain 独立初始化。
- `domains` runner 适合小范围复核；它会按 [scripts/run_auto_test.py](../../scripts/run_auto_test.py) 的语义执行。
- 失败不应靠 fallback 掩盖；应在轮次记录里明确分类。

## Runner 约定

### `aggregate`

- 调用 [scripts/run_auto_test_all_domains.py](../../scripts/run_auto_test_all_domains.py)
- 适合建立全量基线
- 最能避免跨 domain 污染

### `domains`

- 调用 [scripts/run_auto_test.py](../../scripts/run_auto_test.py)
- 适合复核单个或少量 domain
- 用于缩小上下文，验证某个问题是否稳定复现

## Init 策略约定

### `fresh`

- 默认策略
- 每轮都从新的初始化开始
- 优先用于正式大规模测试

### `reuse`

- 透传 `--skip-init`
- 只适合排查“连续执行是否污染状态”这一类问题
- 不建议作为大规模基线默认值

### `clear-only`

- 只清空环境，不执行业务轮次
- 用于单独校验清理逻辑

## 执行记录

下面这部分由脚本自动更新，不手工编辑。

<!-- LARGE_SCALE_RESULTS:START -->

## 最近一次执行 20260308-012707

- 控制文档: docs/auto_test_spec/large_scale_test_control.md
- 执行轮次数: 1
- 说明: 默认优先使用 fresh 初始化；若使用 aggregate runner，则每个 domain 仍会独立初始化。

### 轮次总览

| Round | 标题 | Runner | Init | Cases | Failed | 对比轮次 | 报告 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| round_01_full_baseline | 全量隔离基线 | aggregate | fresh | 42 | 1 | - | test_results/auto_test/reports/20260308-012707/report.md |

### round_01_full_baseline - 全量隔离基线

- 目标: 建立当前 19 个 domain 的隔离回归基线，并确认遗留失败的分类。
- 运行方式: aggregate
- 初始化策略: fresh
- 执行命令: /Users/zyl/my_projects/ecm_sync_system/.venv/bin/python /Users/zyl/my_projects/ecm_sync_system/scripts/run_auto_test_all_domains.py --config tests/fixtures/auto_sync/auto_test_config.yaml
- 单轮结果: 41 passed / 1 failed / 42 total cases
- Domain 结果: 18 passed / 1 failed / 19 total domains
- 原始报告: test_results/auto_test/reports/20260308-012707/report.md
- 原始汇总: test_results/auto_test/reports/20260308-012707/summary.json
- 本轮关注点:
  - 全量聚合仍使用每个 domain 独立初始化，避免跨 domain 状态污染。
  - 先确认 project 与 material_detail 的当前状态，不在本轮混入额外修复动作。
- 对比轮次: 无可比较轮次
- 可比较 case 数: 0
- 对比结果: 本轮没有可比改进项，或与此前轮次无重叠 case。
- 失败归因:
  - project::round_3_investment_update | backend | issues=1 | remote.project 字段校验失败: local=de4dc6d2-ea32-5c04-8430-83145d5d0765 target=f3e02e84-e81c-4aa6-88d4-f5aa108c8227; implementation_estimate: actual=None expected=1225000.0; static_total_investment: actual=None expected=1224300.0; completed_investment: actual=None expected=194500.0
- 下一轮目标: 在保持全量基线的前提下，单独复核 project 与 material_detail，区分后端遗留问题和聚合偶发问题。
- 脚本返回码: 1

<!-- LARGE_SCALE_RESULTS:END -->