回应 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>
2.0 KiB
2.0 KiB
如何运行测试(reviewer 速查)
所有命令从仓库根(agent_swarm_v6/)执行。先装依赖(fakeredis 等都在 requirements 里——
缺它会导致 REDIS_FAKE 用例跑不到断言):
pip install -r orchestrator/requirements.txt -r agent/requirements.txt
测试是 hermetic 的:内存存储(REDIS_FAKE=1),planner 离线,不需要模型 key。
全套(与 CI tests job 完全一致)
# 契约 / 工作流
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 描述里给出可直接复制运行的命令(含依赖安装)。