一键导入
agent-harness-testing
在任意项目中执行开发任务时的测试方法论——包括测试能力探测、RED→GREEN 纪律、探针管理、环境模拟、测试策略选择。当面对 bugfix、功能开发、重构等需要验证的代码改动时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
在任意项目中执行开发任务时的测试方法论——包括测试能力探测、RED→GREEN 纪律、探针管理、环境模拟、测试策略选择。当面对 bugfix、功能开发、重构等需要验证的代码改动时使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Frontend UI prototype workflow — clarify intent, explore directions, preview across viewports, diff against references, deliver with screenshot evidence
Excel 电子表格读写与编辑最佳实践 — 用 xlsx_read/xlsx_write/xlsx_edit 处理 .xlsx 时遵守的公式、数字格式与可维护性纪律
生成与读取 PDF 文档(报告、合同、交付文档)——原生 pdfkit 渲染,自动解析系统 CJK 字体支持中文,支持 heading/paragraph/table/code/list 内容块与页码页脚
PowerPoint 演示文稿生成纪律 — 用 pptx_create/pptx_read 产出有设计感、零 AI 味的 .pptx(PPT、幻灯片、deck、演讲稿、汇报)
创建计划文档——Plan Mode 下写设计文档;独立使用时写可执行实现计划(含 TDD/验证命令)
认知对齐前置闸门:复杂任务前强制完成意图保存、问题层级标注、证据时间线标注和关键词扩展搜索。 防止 AI 过早把用户的复杂意图压缩成局部工程任务。 触发词:「认知对齐」「cognitive alignment」「先对齐」「别急着写代码」「我们在解决什么问题」。 也可由 deep-brainstorm / brainstorming 在复杂任务前自动前置调用。
| name | agent-harness-testing |
| description | 在任意项目中执行开发任务时的测试方法论——包括测试能力探测、RED→GREEN 纪律、探针管理、环境模拟、测试策略选择。当面对 bugfix、功能开发、重构等需要验证的代码改动时使用。 |
你在别人的项目中工作。你不知道他们的测试框架、不知道他们的构建系统、不知道他们的 CI。但你必须验证你的改动是正确且安全的——不能跳过测试、不能编造结果、不能假设一切正常。
总则(先复现再修复、先红灯再绿灯、结果必须来自真实执行、探针必须清理)已由运行时强制: 证据义务状态机跟踪 RED→GREEN、编辑门拦截无复现的源码修改、探针追踪扫描残留、 交付门禁核验验证证据。本 Skill 是操作手册——怎么探测测试能力、怎么构造红灯、 怎么模拟环境,不再复述总则。
进入陌生项目的第一件事——不是改代码,是了解怎么验证。
这会返回项目摘要:语言、包管理器、scripts、入口文件、测试框架提示。先用它建立全局认知。
根据语言读对应配置:
| 语言 | 读什么 | 找什么 |
|---|---|---|
| Node/TS | package.json | scripts.test, scripts.typecheck, scripts.lint, devDependencies 中的 vitest/jest/mocha |
| Python | pyproject.toml / setup.cfg | [tool.pytest], [tool.mypy], [tool.ruff] |
| Go | go.mod + 项目根 *_test.go | 测试文件存在即表示 go test ./... 可用 |
| Rust | Cargo.toml | [dev-dependencies] 中的 test 相关 crate |
# Node
ls **/*.test.ts **/*.spec.ts **/__tests__/*.ts 2>/dev/null
# Python
ls **/test_*.py **/*_test.py 2>/dev/null
# Go
ls **/*_test.go 2>/dev/null
# Rust
ls tests/ 2>/dev/null
# Node 常见
npx vitest --run 2>&1 | head -5
npx jest --passWithNoTests 2>&1 | head -5
# Python
python -m pytest --co 2>&1 | head -5
# Go
go test ./... 2>&1 | head -5
# Rust
cargo test 2>&1 | head -5
如果试跑失败,看错误信息——可能缺依赖(npm install)、环境变量(.env)、或服务(Docker)。
不要跳过——记录障碍并告知用户,问是否需要帮助配置。
探测完成后,心里形成一张表:
typecheck: 可用 (npx tsc --noEmit) / 不可用
lint: 可用 (npx eslint) / 不可用
unit test: 可用 (npx vitest --run) / 不可用
e2e: 可用 (npx playwright test) / 不可用
build: 可用 (npm run build) / 不可用
env sim: 可用 (docker compose up) / 不可用
必须: RED 红灯测试 → 修复 → GREEN 绿灯测试 → 回归测试
如果无法写红灯测试: 说明原因 + 给替代验证方式
红灯测试构造方法:
如果无法构造(问题仅在生产环境/第三方回调/并发竞态复现):
必须: 新功能测试(覆盖 happy path + 边界)→ typecheck → lint
推荐: 集成测试(如果涉及多模块)
必须: 相关回归测试 + typecheck
如果是缓存/不变量/前缀结构: 全量模块测试
必须: benchmark 对比(改动前后)
推荐: 压力测试、profile 数据
必须: 安全测试(越权、过期令牌、注入)
推荐: staging smoke test
探针是临时诊断工具,不是永久代码。
| 类型 | 写法 | 生命周期 | 示例 |
|---|---|---|---|
| 临时日志 | console.log("[probe:name]", data) | 修复后必须删除 | console.log("[probe:filter]", candidates) |
| 结构化日志 | logger.info({ event: "name", ... }) | 可保留(用于线上诊断) | logger.info({ event: "draw.select", id, stock }) |
| 断言探针 | assert(cond, "msg") | 修复确认后转为测试断言或删除 | assert(stock >= 0, "stock must not be negative") |
console.log / debugger / 临时 assert 是否残留优先使用真实依赖而不是全 mock。
ls docker-compose.yml docker-compose.yaml Dockerfile Makefile 2>/dev/null
如果有 docker-compose.yml:
# 启动依赖
docker compose up -d db redis
# 跑集成测试
npm run test:integration
# 关闭
docker compose down
# 找 service/test 相关目标
grep -E '^(test|db|redis|service|up|down):' Makefile
node --experimental-test-runner 做最轻量测试.env 和密钥.env 内容任务完成时必须输出结构化验证报告,而非"已完成"。
## 验证报告
### 改动
- 文件1: 改了什么
- 文件2: 改了什么
### 测试结果
- [PASS] 目标测试 (command)
- [PASS] typecheck (command)
- [SKIP] e2e (原因: 项目未配置)
### 未验证项
- 项目无 e2e 配置,手动验收路径: ...
### 风险
- 并发场景下的行为未验证
诚实报告(未跑=未验证、0 passed ≠ 通过、失败附错误信息)与反模式清单由 运行时诚实门禁 + 交付契约强制,不在此复述。
任务完成前自问:
□ 我读了相关代码和测试吗?
□ Bugfix: 我构造了红灯测试(或说明了无法复现的原因)吗?
□ 我实际运行了测试并看了输出吗?
□ 测试结果能支撑"已验证"的结论吗?
□ typecheck/lint/build 通过了吗?
□ 临时探针清理了吗?
□ 我是否修改了无关文件?
□ 如果是高风险改动,我做了额外验证吗?
□ 我的验证报告是否诚实(不夸大、不推测)?
这 9 个问题全部能答"是",任务才算完成。