review: make per-inspector timeout detection race-free; clarify matcher/defer
main·
Commit

Timeout detection (run.go + run_multi.go) sampled both the agent context and the parent context (ac.Err()==DeadlineExceeded && ctx.Err()==nil), which races: a parent cancel landing just after a real timeout would misclassify it as a cancellation. context.Err() is immutable once set, so the agent context alone is authoritative — DeadlineExceeded means this inspector's deadline fired first; a parent cancel propagates as Canceled. Drop the parent-ctx read entirely.
Also address two review notes that were false positives, with comments + tests rather than behavior changes:
- modelComponentsMatch's len(short) >= len(long) guard is correct: identical ids match via reviewRunModelMatches's want==got short-circuit before this helper runs, and distinct equal-length ids are different models. Documented; added identical/equal-length/thinking-suffix tests.
- run.go's defer cancelAgent() runs at function return (after Wait), and deferring at WithTimeout (not after Start) avoids leaking the timer on the Start-error path. Documented.
Added TestRun_ParentCancelIsNotTimeout (parent cancel -> Cancelled, not timed out).
Entire-Checkpoint: 0b9319108cb5
Checkpoints
Checkpoint 1