Files
Agentswarm/docs/TESTING.md
T
Songhaoz666andClaude Opus 4.8 a289495823 复审整改(PR #24):沙箱 fail-closed 隔离门控 + 可回放 DecisionTrace
回应 Fasthei 的 Request changes 两个阻塞项:

1) 安全 / fail-closed 沙箱隔离(原仅靠 ENABLE_QUALITY_EVAL + 运维约定):
   - 新增第二道显式确认 HEICODE_SANDBOX_ISOLATED(断言运行在隔离 Pod 内)。
   - sandbox.run_tests() 与 quality.evaluate_run_quality() 执行任何代码前调用
     assert_isolated(),未确认即抛 SandboxIsolationError——不写文件、不起子进程。
   - 启动期 assert_quality_eval_safe():ENABLE_QUALITY_EVAL 开但隔离未确认 → 拒绝启动
     (平台级硬失败,非运维口头约定)。
   - 文档(security-boundary §8.1/§9、CLAUDE.md)与测试同步:test-sandbox/test-quality
     先断言未确认时硬失败,再显式确认后继续。

2) #10 DecisionTrace 可回放(原仅存被选中任务的标量):
   - Decision 现记录完整重放上下文:整个候选集(每候选 tau/eta/weight/p_norm/dependents)、
     alpha/beta/epsilon、seed、free_slots、total_weight、explore_draw、select_pick、
     select_index、explored 分支。
   - 新增 DecisionEngine.replay_decision(trace):仅凭一条 trace(无 RNG/活体状态)复现被选任务;
     test-decision-engine 断言「重放==实选」跨 50 次决策(探索+利用)成立。
   - decision-engine.md §3.3 更新为可回放 DecisionTrace。

附:新增 docs/TESTING.md(reviewer 速查:依赖安装 + 每套测试命令,复审者此前因缺 fakeredis
未能跑到断言)。本地 11 项 gate 全绿。

影响范围:Swarm(orchestrator + 测试 + 文档)。不改 Manager↔Swarm 契约;新增开关
HEICODE_SANDBOX_ISOLATED(默认未设=拒绝执行)。仍非验收:gain/Benchmark_Agent 仍 NaN。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 13:22:54 +08:00

47 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 如何运行测试(reviewer 速查)
所有命令从仓库根(`agent_swarm_v6/`)执行。**先装依赖**(`fakeredis` 等都在 requirements 里——
缺它会导致 `REDIS_FAKE` 用例跑不到断言):
```bash
pip install -r orchestrator/requirements.txt -r agent/requirements.txt
```
测试是 hermetic 的:内存存储(`REDIS_FAKE=1`),planner 离线,**不需要模型 key**。
## 全套(与 CI `tests` job 完全一致)
```bash
# 契约 / 工作流
REDIS_FAKE=1 python scripts/test-runtime-contract.py
REDIS_FAKE=1 python scripts/test-merge-smoke.py
REDIS_FAKE=1 python scripts/test-workflow-e2e.py
REDIS_FAKE=1 python scripts/test-contract-events.py
# benchmark 公式 / 采集 / 基线
REDIS_FAKE=1 python scripts/test-benchmark-metrics.py
REDIS_FAKE=1 python scripts/test-benchmark-collector.py
REDIS_FAKE=1 python scripts/test-baseline-comparison.py
# 代码沙箱(fail-closed 隔离 + 真实执行);脚本自行设置 HEICODE_SANDBOX_ISOLATED
python scripts/test-sandbox.py
# 质量插桩 Group B(脚本自行设置 REDIS_FAKE/ENABLE_QUALITY_EVAL/HEICODE_SANDBOX_ISOLATED)
python scripts/test-quality.py
# ACO 决策引擎 Group A(含可回放 DecisionTrace)
REDIS_FAKE=1 python scripts/test-decision-engine.py
# 同一 e2e,但走概率 ACO 派发(seed 固定,确定性)
REDIS_FAKE=1 ENABLE_ACO_DISPATCH=1 ACO_SEED=42 python scripts/test-workflow-e2e.py
```
## 安全说明:代码执行门控
`test-sandbox.py` / `test-quality.py` 会**执行生成代码**,因此需要 fail-closed 的隔离确认
`HEICODE_SANDBOX_ISOLATED=1`。这两个脚本**自行设置**该变量(并先断言未设置时硬失败),所以你直接
`python scripts/test-*.py` 即可;**不要**在非隔离环境对真实 orchestrator 设置该变量。详见
`docs/integration/security-boundary.md §8.1`。
> 约定:本仓任何新增/修改测试,都应在此文件与 PR 描述里给出可直接复制运行的命令(含依赖安装)。