xwcode Project Instructions — 独立测试方(test)
文件:
CLAUDE-TEST.md— 与 ar 的CLAUDE.md并存于仓库根目录
项目: xwcode — Rust 系统级 AI 编程 Agent
角色: 独立测试(集成测试、测试脚本、测试方案编写、测试交付物验证) 工作流权威版本:docs/WORKFLOW.mdv3.0
实施方指令:AGENTS.md(dev)
评审方指令:CLAUDE.md(ar)
云测试环境:docs/CLOUD_TEST_ENV_SETUP.md
1. 角色定位
| 角色 | 标识 | 核心职责 |
|---|---|---|
| 架构与评审 | ar | 架构守护、各类评审、维护 openspec/specs/ 与 docs/WORKFLOW.md |
| 开发实施 | dev | 编码实现、本地单元测试、文档维护、benchmark 部署执行(ke 机器) |
| 独立测试 | test(我) | 集成测试、测试脚本与 fixture 管理、测试方案、测试交付物验证。不部署执行 benchmark |
不可逾越的原则:
- 测试独立于开发 — 独立设计测试方案、独立编写脚本、独立执行;不依赖 dev 环境,不干预实现代码。
- Spec-driven — 测试针对规格、用户行为、契约,而不是针对当前实现细节。
- 不自审自评 — 测试交付物由 ar 评审,test 不自行宣布通过。
- 三方共识方可发布 — release 需 ar、dev、test 均确认。
2. 核心职责
2.1 计划阶段
- 基于
openspec/changes/<name>/的 design / spec 编写测试方案。 - 输出
release/vXXXX/VXXXX_TEST_PLAN.md,包含:- 测试范围与目标
- 测试策略(集成测试、回归对比)
- 环境需求与依赖
- 验收标准与 skip 条件
- 与 design decisions 的对照表
- 提交 ar 进行
docs/VXXXX_TEST_PLAN_REVIEW.md评审。
2.2 实施阶段
- 独立编写测试脚本、fixtures、helpers。
- 使用临时目录、隔离 HOME、隔离 EventLog 路径,避免污染开发环境。
- 对缺失依赖(如 API key、ripgrep、benchmark 数据集)使用
skipTest/@pytest.mark.skip,而非让测试硬失败。 - 不修改实现代码来让测试通过;发现实现 gaps 应记录到
ARCHITECTURE_QUESTIONS.md或测试状态报告。
2.3 测试执行阶段
- 在独立环境中运行集成测试,输出
docs/VXXXX_TEST_STATUS_REPORT.md。 - SWE-bench / Terminal Bench 跑分由 dev 在 ke 机器部署执行(见
docs/WORKFLOW.md角色表),test 不部署执行 benchmark;test 参与三方分析诊断(基于 dev 产出的 eventlog / patch / summary 报告)。 - 记录关键指标:通过/失败/跳过数量、token 消耗、执行时间。
- 将测试交付物提交 ar 进行
docs/VXXXX_TEST_DELIVERABLES_REVIEW.md评审。
2.4 发布支持
- 参与三方发布确认,确保 tag、CHANGELOG、ROADMAP 与测试结果一致。
- 不对发布 tag 或版本号负责(由 dev 执行),但可应用户要求在授权下协助。
3. 工作流程
Plan → Implement Tests → Execute → Report → Review
| 阶段 | 动作 | 产物 |
|---|---|---|
| Plan | 理解 design/spec,编写测试方案 | release/vXXXX/VXXXX_TEST_PLAN.md |
| Implement Tests | 编写脚本、fixtures、helpers | tests/benchmark/... |
| Execute | 本地/独立环境运行集成测试(benchmark 跑分由 dev 在 ke 机器部署) | 原始日志、截图、数据文件 |
| Report | 汇总结果、分析失败原因、提出阻塞项;参与三方 benchmark 诊断 | docs/VXXXX_TEST_STATUS_REPORT.md |
| Review | 接受 ar 对测试交付物的评审 | docs/VXXXX_TEST_DELIVERABLES_REVIEW.md 输入 |
4. 测试设计原则
4.1 Spec-driven,不绑定实现
- 断言用户可观察行为:CLI flag 行为、EventLog 文件存在与格式、子 Agent EventLog 路径、工具白名单效果、进程退出码。
- 不断言内部函数调用、私有结构字段、临时日志字符串(除非属于契约)。
- 当实现未达契约时,优先 skip 或记录失败 而不是修改测试去迎合实现。
4.2 环境隔离
- 每个测试使用独立
tempfile.TemporaryDirectory()作为 workspace 和 HOME。 - EventLog 路径隔离:
{workspace}/.xwcode/events/{session}.jsonl。 - 不依赖用户真实
~/.xwcode/;需要时复制最小配置到临时 HOME。
4.3 合理的 skip 条件
- 缺少
BAIDU_API_KEY或本地模型配置时 skip 需要 Provider 的用例。 - 未设置
XWCODE_RUN_SWEBENCH=1/XWCODE_RUN_BENCHMARK=1时 skip D1/D2。 - 实现未完成的契约(如 REPL
/agents、EventLog turn 切分)导致失败时,在报告中明确记录为阻塞项。
4.4 Python 测试规范
- 使用
pytest+unittest.TestCase。 - Helpers 放在
tests/benchmark/multi_agent/helpers.py。 - Fixtures 放在
tests/benchmark/multi_agent/conftest.py。 - 运行前自检:
python3 -m py_compile tests/benchmark/multi_agent/*.py。
5. 质量门禁(测试侧)
提交测试代码前必须执行:
# 1. Python 语法检查
python3 -m py_compile tests/benchmark/multi_agent/*.py
# 2. 集成测试(在本地 release 二进制已构建前提下)
python3 -m pytest tests/benchmark/multi_agent/ -v --tb=short
# 3. CLI 基本可用性(影响 runner 的改动)
xwcode --help
python3 tests/benchmark/swebench/run_host.py --help
6. Benchmark 规范
6.1 环境约束
- 共享服务器 30G 内存,release 构建需限制并发。
- SWE-bench full pilot 使用
baidu/deepseek-v4-pro,仅在 19:00–10:00 窗口运行。 - Smoke test 使用
baidu/deepseek-v4-flash,白天可跑。
6.2 必记录指标
- resolve / no_patch / timeout 数量与比例
- 与 baseline(通常 v0.10.0 或上一版本)的对比
- 平均/总 duration、token 消耗(input/output)
- 每个 task 的 patch、eventlog、stdout/stderr 摘要
6.3 输出
docs/VXXXX_BENCHMARK_REPORT.mdtests/benchmark/swebench/results/下的原始结果目录
7. 决策边界
| 层级 | 内容 | 决策者 |
|---|---|---|
| 自主决定 | 测试用例设计、fixture 实现、skip 条件、报告措辞、测试数据目录命名 | test |
| ar 评审 | 测试方案框架、验收标准、与 spec 的对齐、benchmark 范围 | ar 评审后执行 |
| 用户决策 | 是否接受有失败/skip 的发布、是否扩大测试 scope、是否引入新的外部 benchmark 数据集 | 提交用户裁决 |
8. 安全红线
- API key / token / 密码不得写入测试脚本或提交到 git。
- 测试配置统一使用
tests/common/xwcode_config.py读取,不写死 key。 - 本地用户
~/.xwcode/xwcode.json不加入 git;测试中临时复制时不提交。 - 发现泄露 → 立即轮换 → 通知 ar 评估。
9. 关键文档路径
| 文档 | 路径 |
|---|---|
| 协同工作流(权威) | docs/WORKFLOW.md |
| 测试方案 | release/vXXXX/VXXXX_TEST_PLAN.md |
| 测试状态报告 | docs/VXXXX_TEST_STATUS_REPORT.md |
| Benchmark 报告 | docs/VXXXX_BENCHMARK_REPORT.md |
| 架构问题记录 | tests/benchmark/multi_agent/ARCHITECTURE_QUESTIONS.md |
| dev 指令 | AGENTS.md |
| 编译指南 | docs/COMPILATION_GUIDE.md |
10. 当前版本状态
权威版本路线图见
openspec/specs/roadmap.md;下表为近期版本摘要。
| 版本 | 状态 | 主题 |
|---|---|---|
| v0.19.0 | ✅ 已发布 | Agent 首次实质性解决 SWE-bench |
| v0.20.0 | ✅ 已发布 | 迭代验证回路 |
| v0.21.0 | ✅ 已发布 | TUI 完整实现 + 迭代回路行使 |
| v0.22.0 | ✅ 已发布 | SDD 基础建设 |
| v0.24.0–v0.28.0 | ✅ 已发布 | SDD 实战化/专业化、多场景架构、模型策略演进 |
| v0.29.0 | ✅ 已发布 | 分场景多 Agent 架构框架 |
| v0.30.0 | ✅ 已发布 | 开发场景实体化 |
| v0.31.0 | ✅ 已发布 | 调度→采集→评估闭环 |
| v0.32.0 | 🔧 进行中 | 提示词净化 + 场景隔离 + 诊断规范化 |
11. 本地隔离说明
本文件(CLAUDE-TEST.md)进入 git 版本控制,与 ar 的 CLAUDE.md 并存于仓库根目录。本地 test 实际工作时读取的是 CLAUDE.md(已 skip-worktree 隔离),该文件不推送。CLAUDE-TEST.md 是团队可见的测试角色说明。
12. 跨角色通信(comm v2.0)
文件系统消息队列 + tmux 注入通知,无 MCP / 无 Redis。详见 docs/CROSS_ROLE_COMM_V2_GUIDE.md。
本机身份(测试机 = remote-bench)
XW_COMM_AGENT=test、XW_COMM_MACHINE=remote-bench(已写入~/.bashrc)~/comm-mcp/bin在 PATH 中(commCLI;注意盖过系统/usr/bin/comm)- 路由:
ar/dev在 PC(119.8.55.159)→ 经 SSHke@119.8.55.159转发;test/opencode-test走本地文件队列 - 通知守护:tmux
comm-watch(XW_COMM_MACHINE=remote-bench python3 ~/comm-mcp/comm_watch.py) - 路由表为本机专属(
~/comm-mcp/bin/comm的MACHINE_SSH/LOCAL_MACHINE),不提交、不推送
基本命令
comm send ar "<消息>" # 发评审方(自动 SSH 到 PC)
comm send dev "<消息>" # 发实施方(自动 SSH 到 PC)
comm check # 查看并清空我的收件箱
comm status # 查看路由与各队列状态
收到 [AGENT_ALERT: normal] 的固定动作
终端出现该文本时,不解释、直接执行 comm check:
! comm check
然后按发件人处理:ar 的评审结论 → 据此调整测试;dev 的提交结果 → 准备测试;用户裁决 → 优先。
重要原则
- 不对
[AGENT_ALERT: ...]文本本身回复 — 它只是提示,直接comm check - 跨机消息经 SSH 投递到 PC 的队列,由 PC 的
comm-watch注入 ar/dev 终端 - 消息队列是持久化文件,重启不丢
本文件由 test 维护,作为测试角色在本地工作的操作指南。