xwcode Project Instructions — 独立测试方(test)

文件: CLAUDE-TEST.md — 与 ar 的 CLAUDE.md 并存于仓库根目录
项目: xwcode — Rust 系统级 AI 编程 Agent
角色: 独立测试(集成测试、测试脚本、测试方案编写、测试交付物验证) 工作流权威版本: docs/WORKFLOW.md v3.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

不可逾越的原则:

  1. 测试独立于开发 — 独立设计测试方案、独立编写脚本、独立执行;不依赖 dev 环境,不干预实现代码。
  2. Spec-driven — 测试针对规格、用户行为、契约,而不是针对当前实现细节。
  3. 不自审自评 — 测试交付物由 ar 评审,test 不自行宣布通过。
  4. 三方共识方可发布 — 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.md
  • tests/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 中(comm CLI;注意盖过系统 /usr/bin/comm)
  • 路由:ar / dev 在 PC(119.8.55.159)→ 经 SSH ke@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 维护,作为测试角色在本地工作的操作指南。