Problem
ResearchRunner executes capability fetches with four concurrent workers. When a worker encounters a fatal error outside the normal capability outcome path, the runner records workerError and stops scheduling new work, but already-running sibling workers continue executing because they only receive the caller's external signal.
This can leave provider calls running after the research run has already failed. Concurrent completion order can also make checkpoint outcomes depend on timing rather than the declared research plan.
Expected behavior
- A fatal worker error should abort in-flight sibling capability executions.
- The first fatal error should remain the root error.
- Persisted capability outcomes should follow the planned capability order.
Proposed scope
- Add an internal fail-stop AbortController combined with the external signal.
- Abort sibling workers when the first fatal worker error occurs.
- Keep checkpoint and outcome ordering deterministic.
- Add a regression test with one fatal worker and one hanging sibling.
Problem
ResearchRunnerexecutes capability fetches with four concurrent workers. When a worker encounters a fatal error outside the normal capability outcome path, the runner recordsworkerErrorand stops scheduling new work, but already-running sibling workers continue executing because they only receive the caller's external signal.This can leave provider calls running after the research run has already failed. Concurrent completion order can also make checkpoint outcomes depend on timing rather than the declared research plan.
Expected behavior
Proposed scope