观察到的问题
v0.10.64 中 verification gate 仍然误杀代码完全正确的任务。R4 评测中 8 个高复杂度任务有 2 个因此 exit=1,但代码测试 98-100% 通过。
复现
使用 blade --headless --permission-mode=yolo --output-format=jsonl <prompt> 运行多文件 TypeScript 项目(≥3 个源文件 + 测试)。
具体案例
Case 1: task3-crdt(G-Counter + OR-Set + Vector Clock)
- 代码测试通过率:28/28 (100%)
- Agent exit code:1
- 错误消息:
Independent verification did not produce a fresh PASS before the retry limit.
- 代码架构:
g-counter.ts、or-set.ts、vector-clock.ts、index.ts,4 个测试文件全通过
- Verifier 子代理运行了但未输出宿主 gate 期望的精确
## Verification Result: PASS 标题
Case 2: task2-regex-nfa(Thompson NFA 正则引擎)
- 代码测试通过率:51/52 (98%)(唯一失败是测试自身的
{n} vs {n,} 语义歧义)
- Agent exit code:1
- 错误消息:
Stopped after 16 repeated Task calls without observable progress.
- 代码架构:
ast.ts、lexer.ts、parser.ts、nfa.ts、simulator.ts、matcher.ts、token.ts、index.ts,8 个源文件
- Agent 反复调用 verification Task(16 次),每次 verifier 可能返回了不同格式的结果但不被 gate 识别
对比成功案例(exit=0)
| 任务 |
测试通过率 |
exit |
说明 |
| task1-binary-codec |
32/32 (100%) |
0 |
verifier 正确输出 PASS |
| task4-dag-scheduler |
20/20 (100%) |
0 |
verifier 正确输出 PASS |
| task5-streaming-json |
35/36 (97%) |
0 |
verifier 接受了(有 1 个测试失败但 exit=0) |
| task6-pratt-evaluator |
64/64 (100%) |
0 |
verifier 正确输出 PASS |
| task7-radix-router |
21/21 (100%) |
0 |
verifier 正确输出 PASS |
根因分析
- Verifier 的 12-turn 预算内,有时在 Bash 测试全通过后没有输出结构化 PASS 标题(turns 全部用于 Read/Bash/Glob,没有剩余 turn 写最终 verdict)
- v0.10.64 新增的 "16 repeated Task calls without observable progress" 保护机制成功防止了无限循环,但仍然把代码正确的任务判为 exit=1
- Gate 的判断逻辑过于依赖 verifier 输出的精确文本格式,而非 verifier 实际执行的测试结果
建议修复
- 当 verifier 的 Bash tool_result 明确显示
npm test exit=0 且所有测试通过时,gate 应自动推断 PASS,不要求精确文本标题
- Verifier 的 12-turn 预算应保留至少 1 turn 用于输出 verdict(在第 11 turn 时强制要求输出结论)
- 当 verifier 重试次数耗尽但项目测试命令全通过时,应降级为 PARTIAL 而非 fail(exit code 0 但附带 warning)
影响
CI/评测场景中,代码完全正确的任务有约 25%(2/8)的概率因 verifier 输出格式问题被误判为失败。这使得 headless exit code 不能可靠反映代码质量。
环境
- blade-code v0.10.64(npm 全局安装)
- macOS arm64, Node v22.23.1
- 命令:
blade --headless --permission-mode=yolo --output-format=jsonl
- verification-agent 使用默认(enabled=true)
观察到的问题
v0.10.64 中 verification gate 仍然误杀代码完全正确的任务。R4 评测中 8 个高复杂度任务有 2 个因此 exit=1,但代码测试 98-100% 通过。
复现
使用
blade --headless --permission-mode=yolo --output-format=jsonl <prompt>运行多文件 TypeScript 项目(≥3 个源文件 + 测试)。具体案例
Case 1: task3-crdt(G-Counter + OR-Set + Vector Clock)
Independent verification did not produce a fresh PASS before the retry limit.g-counter.ts、or-set.ts、vector-clock.ts、index.ts,4 个测试文件全通过## Verification Result: PASS标题Case 2: task2-regex-nfa(Thompson NFA 正则引擎)
{n}vs{n,}语义歧义)Stopped after 16 repeated Task calls without observable progress.ast.ts、lexer.ts、parser.ts、nfa.ts、simulator.ts、matcher.ts、token.ts、index.ts,8 个源文件对比成功案例(exit=0)
根因分析
建议修复
npm testexit=0 且所有测试通过时,gate 应自动推断 PASS,不要求精确文本标题影响
CI/评测场景中,代码完全正确的任务有约 25%(2/8)的概率因 verifier 输出格式问题被误判为失败。这使得 headless exit code 不能可靠反映代码质量。
环境
blade --headless --permission-mode=yolo --output-format=jsonl