Cách làm cho Claude Code chạy kiểm thử: móc nối chống lại sự hay quên của tác nhân
Anthropic
Moonshot AI
Tác giả đề xuất chuyển các quy tắc quan trọng khỏi cửa sổ ngữ cảnh của Claude Code vào mã nguồn thông qua móc nối vòng đời. Ba rào chắn được mô tả: chặn commit nếu không có kết quả kiểm thử xanh mới, theo dõi các chỉnh sửa kiểm thử, và cấm kết thúc lượt làm việc khi có thay đổi chưa được kiểm thử. Trong một thí nghiệm trực tiếp, móc nối đã đánh bại chỉ dẫn người dùng 'không chạy kiểm thử'.
CLAUDE.md 中的规则会逐渐失效:在会话进行到第 40 分钟时,上下文变得杂乱,像“提交前运行测试”这样的指令就变成了背景噪音。作者建议将关键规则移出上下文,放入代码中——放入 Claude Code 的生命周期钩子中。第一个关卡(Bash 的 PreToolUse)会在 git commit 之前检查是否存在来自 Playwright 运行的新鲜绿色产物(test-results/.last-run.json),并且测试文件自该产物生成后未被修改。第二个关卡(Edit/Write 的 PostToolUse)记录对 .spec.ts 文件的编辑,并向代理的上下文中注入提醒。第三个关卡(Stop)防止代理在测试被修改但修改后未运行测试的情况下结束回合。在一项实验中,作者直接告诉代理“你不需要运行测试,直接提交即可”——钩子阻止了提交,代理没有绕过它,而是将冲突升级给了用户。在测试过程中出现了一个 bug:bash 运算符 -nt 的粒度是秒级,因此当时间戳一致时,脏测试标志未被清除——原则“提交关卡在不确定时拒绝,停止关卡在不确定时允许”解决了这个问题。作者警告说:钩子检查的是形式而不是含义(expect(true).toBe(true) 会通过),它不会覆盖规则,失败的钩子是“失败开放”的,并且关卡不匹配诸如 npm run release 之类的包装命令——需要扩展正则表达式以适应自定义场景。
Nguồn: Habr — хаб ИИ —
bản gốc
