返回 Bug 清单
BUG-0463project-02中待处理test-flaky

治理套件随机触发进程级 access violation(0xC0000005),崩溃点漂移在 PyYAML 解析处;已用“每文件独立进程 + 崩溃重试”隔离缓解,根因未定位

发现:2026-10-04验证:2026-10-27置信度:85%

症状

根治理套件(40 文件 / 518 tests)随机整轮崩溃,退出码 `0xC0000005`(Python 侧 `rc=3221225477`);`Windows fatal exception: access violation` 出现在主线程;`pytest -n 4` 表现为 `worker 'gw0' crashed while running 'tests/test_smart_router_integration.py'`;崩溃点漂移,同一命令连跑 10 次约 3–4 次崩(三文件组合实测 4/10);崩溃后残留 CPU=0、工作集≈0.4MB 的僵死进程。

根因

**未定位**。已用实证排除三类假设:(1) MCP 软超时遗留线程(加 abandoned 标记 + 孤儿回收后崩溃率 4/10 → 3/10,属统计噪声,且崩溃时 faulthandler 显示只有主线程在场);(2) 解析量 churn(独立跑 10000 次解析循环不崩);(3) pymalloc 域堆破坏(`PYTHONMALLOC=debug` 无任何诊断)。当前定性:**进程内累积型原生层故障**,概率随单进程内执行的测试量增长(单文件长跑也会命中);纯 Python 代码出现 AV 通常指向 C 扩展越界或解释器/栈状态受损。

修复方案

根因未定位,采用**工程隔离**(非修复):`scripts/test_ci.py` 把根套件改为**每个测试文件一个独立进程**(一次崩溃只废掉一个文件而不是整轮)、每个进程加超时(默认 300s,超时按失败处理并 kill)、对原生崩溃码 `0xC0000005` 自动重试并在汇总里**显式打印 FLAKY**(不静默吞掉)。 ```bash # 修复前:串行 ~55-60% 处整轮崩溃(约 40% 概率) python -m pytest tests -q # 修复后:每文件独立进程 + 超时 + 崩溃重试 + FLAKY 显式报告 python scripts/test_ci.py --suite root ```

修复命令

根因未定位,采用**工程隔离**(非修复):`scripts/test_ci.py` 把根套件改为**每个测试文件一个独立进程**(一次崩溃只废掉一个文件而不是整轮)、每个进程加超时(默认 300s,超时按失败处理并 kill)、对原生崩溃码 `0xC0000005` 自动重试并在汇总里**显式打印 FLAKY**(不静默吞掉)。

```bash
# 修复前:串行 ~55-60% 处整轮崩溃(约 40% 概率)
python -m pytest tests -q
# 修复后:每文件独立进程 + 超时 + 崩溃重试 + FLAKY 显式报告
python scripts/test_ci.py --suite root
```

错误签名

根治理套件(40 文件 / 518 tests)随机整轮崩溃,退出码 `0xC0000005`(Python 侧 `rc=3221225477`);`Windows fatal exception: access violation` 出现在主线程;`pytest -n 4` 表现为 `worker 'gw0' crashed while running 'tests/test_smart_router_integration.py'`;崩溃点漂移,同一命令连跑 10 次约 3–4 次崩(三文件组合实测 4/10);崩溃后残留 CPU=0、工作集≈0.4MB 的僵死进程。

技术信息

来源项目

project-02

涉及文件

scripts/test_ci.py, tests/test_mcp_enhancement.py, scripts/router_engine/smart_router.py +1

标签

project-02, test-flaky