Two root causes for the failing timeout test:
1. Test config used `workspace_root` instead of `workspaces_root`, causing
Zod validation to fail silently, so resolveTimeoutMs() fell back to the
default 120s — the mock's 200ms close event always beat it.
2. Schema enforced `.int()` on claude_timeout_seconds, rejecting the test's
0.05s fractional value. Removed the integer constraint since sub-second
timeouts are valid (and useful for testing).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add RunResult type in src/agent/types.ts (success|timeout|cli-error|parse-error).
Runner resolves instead of rejects for all error cases.
Router handles all four status variants explicitly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>