# 微型基准(真实网关)
用真实网关(systechn,局域网 `192.168.11.104`,Qwen3.6-35B)在独立 worktree 上跑编码任务,人工判定。
与 `scripts/smoke-real.sh`(冒烟:验证"能跑通")互补——基准验证"能干活"。
## 运行
```bash
cargo build --release
./scripts/bench-real.sh # 全量 T1-T5
./scripts/bench-real.sh --only 3 # 单个
```
每个任务从基准快照(detached worktree + git 重置)开始,结果在 `target/bench/<序号>_<任务名>/`:
`output.log`(模型会话)、`diff.txt` / `patch.diff.gz`(改动存档)、`verify.log`(worktree 现场 cargo test + clippy)。
判定 = 人工:改动是否达成任务语义 + verify 是否全绿。
## 任务集(T1-T5)
| 1 | repl_history | REPL 命令历史持久化(sessions_dir/history,0600,load/append) | test 全绿 + clippy 零警告 |
| 2 | budget_boundaries | compact_messages 边界分支补测(5 种) | test 全绿 + clippy 零警告 |
| 3 | error_log_escalate | 会话 append 首错 error 后续 warn(不刷屏) | test 全绿 + clippy 零警告 |
| 4 | task_md_checkpoint | 系统提示增加 .hey/task.md 长任务检查点指导 | test 全绿 + clippy 零警告 |
| 5 | args_debug_log | parse_args 调用点 debug 日志 + 失败路径测试 | test 全绿 + clippy 零警告 |
历史:T6(git 工具)为 dogfooding 任务,产出已删(见 DESIGN §11.5 工具生态设计原则)。
### 泄漏事件记录(2026-08-19)
T3 第一次运行时(timeout 终止)产物泄漏到主工作区(`src/sessions.rs`,含 ERROR_LOGGED + 测试)。
机制未完全复盘(首次日志已删):timeout 终止后模型进程可能成孤儿继续写入。处置:
- 泄漏产物即 T3 任务合法成果(功能正确、verify 全绿),已落地提交为 feat
- bench-real.sh 加三层防护:trap 杀残留模型进程 / 跑前主工作区必须干净 / 每任务后污染检查
## 结果
### 2026-08 回归轮(输出过滤重构后,commit a287cda)
重构(删去重/错误块/落盘回溯)后重跑,验证过滤重构是否影响任务表现。
| 1 | **失败** | 编译错 `cannot find hey in hey` ×18 | 模型把 `hey::` 全局错误替换为 `hey::hey::`(18 处)——35B 过度自信的全局替换失误,与过滤重构无关(重构前本任务通过) |
| 2 | 通过 | cargo test 168 全绿 | — |
| 3 | 通过 | cargo test 全绿 + clippy 干净 | 实现:`ERROR_LOGGED` 静态 + 首错 error 后 warn |
| 4 | 通过 | cargo test 全绿 + clippy 干净 | 系统提示含 task.md 指导(Goal/Completed/Decisions/Remaining) |
| 5 | 通过 | cargo test 全绿 + clippy 干净 | parse_args 调用点 debug!(tool, args_len) + 测试 |
**回归结论:4/5 通过;T1 失败为模型随机失误(非重构回归)。**
输出过滤重构(删全局去重 / 错误块 / 落盘回溯)对任务表现无负面影响——重构前同样 5/5 通过(T1-T5 @ d436f97 前),本轮失败点(hey:: 全局替换)属 35B 的已知失误模式。
### 已知失败模式(35B)
- **过度自信的全局替换**:`hey::` → `hey::hey::`(T1 本次失败)——prompt 里"直接动手"纪律对替换类操作约束不足;后续可在任务 prompt 中加"禁止全局文本替换,改动前先读上下文确认路径语义"。
- **调研消耗 turns**:早期任务在探索阶段耗尽 max_turns(prompt 已加"只读必要文件、禁止反复探索"约束缓解)。