Preserve eval failure origins - #51
Conversation
|
PASS+NOTES — independently verified exact PR head
Note: local optional |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3c112728ae
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| XDG_CONFIG_HOME: join(childHome, ".config"), | ||
| XDG_DATA_HOME: childData, | ||
| XDG_STATE_HOME: join(childHome, ".local", "state"), | ||
| return evaluationPhase("host", "host-start-failed", true, async () => { |
There was a problem hiding this comment.
Classify the entire host bootstrap as host work
When fixture setup fails before the server starts—for example, mkdtemp, fixture writes, Git initialization, or package-cache copying—the new host boundary has not yet been entered. The raw exception therefore reaches each runner's evaluatorFailure fallback, is recorded as a non-retryable evaluator failure, and stops remaining paid work instead of being treated as a retryable host gap. Move the boundary around the complete bootstrap sequence, not only the port/server startup.
Useful? React with 👍 / 👎.
| } catch (error) { | ||
| if (!failed) failure = error; | ||
| stopped = true; | ||
| failed = true; |
There was a problem hiding this comment.
Preserve a later persistence failure
When concurrent workers both throw, only the first exception is retained. In particular, if one attempt first throws during host cleanup and an already in-flight attempt subsequently throws EvaluationPersistenceError while publishing its ledger record, the persistence failure is silently discarded and the campaign reports only the host error. Draining the workers is insufficient here; retain the strongest failure or aggregate all thrown failures so a failed attempt write cannot be hidden.
Useful? React with 👍 / 👎.
Summary
NOT VERIFIEDreasonsVerification
bun run check: 589 pass, 1 intentional live skipbun run replay: 13/13 matchedReview guide
The large line count is mostly the three runner bodies moving under the same cleanup-preserving boundary. Review
evals/failure-origin.tsfirst, then the schema and qualifier changes, then each runner adapter. Persistence failures remain campaign-level only and are schema-invalid as attempt outcomes.