The /autoplan dual-voice eval is back on the board, catching real regressions.
- The dual-voice eval proves both halves of /autoplan's Phase 1, with the Claude review subagent and Codex outside voice registering skills at project level like real installs
- Eval harness now guarantees that when a spawned session hits its timeout, the runner returns everything it collected instead of waiting on orphaned child processes
- Eval timeouts now return evidence instead of hanging the suite
Eval timeouts now return evidence instead of hanging the suite.
The dual-voice eval proves both halves of /autoplan's Phase 1, the Claude review subagent and the Codex outside voice, actually fire. It now registers its skills the way real installs do (project-level .claude/skills/), so it exercises the same slash-command path users hit.
Claude Code 2.x resolves slash commands strictly from registered skills, and the eval's old sandbox layout predates that.
The eval harness also gained a hard guarantee: when a spawned session hits its timeout, the runner returns everything it collected instead of waiting on orphaned child processes.
Fixed: test/skill-e2e-autoplan-dual-voice.test.ts - sandbox installs /autoplan and its review skills at project level, matching real slash-command resolution on Claude Code 2.x; the transcript filter reads raw stream-json shapes; hang protection accepts the Phase 1 review dispatch as progress evidence; budget raised to 10 min / 40 turns.
Fixed: test/helpers/session-runner.ts - on spawn timeout, cancel the stdout reader and race the stderr drain against child exit plus a 5s grace window, so orphaned grandchildren cannot hold runSkillTest past bun's per-test timeout.