feat(core): add observer forced-tool evaluation - #1647
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cbfb6c4dad
ℹ️ 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".
cbfb6c4 to
2659d65
Compare
56f9ad9 to
6a456c4
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2659d65512
ℹ️ 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".
2659d65 to
20a4e39
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 20a4e397f8
ℹ️ 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".
20a4e39 to
f2bd19d
Compare
6a456c4 to
35ad867
Compare
f2bd19d to
841fe04
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 841fe04f1a
ℹ️ 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".
b99f0ee to
3c9c56c
Compare
841fe04 to
abb6f00
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: abb6f003d8
ℹ️ 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".
3c9c56c to
df638da
Compare
abb6f00 to
dfd177c
Compare
df638da to
c595ce1
Compare
dfd177c to
4f65a07
Compare
Merge activity
|
4f65a07 to
d70c5cb
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d70c5cbbc3
ℹ️ 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".
| robustnessNoOutput: attempts.filter( | ||
| (attempt) => | ||
| attempt.purpose === "replay_robustness" && | ||
| (attempt.status === "observer_no_output" || attempt.status === "output_failure"), |
There was a problem hiding this comment.
Distinguish malformed robustness responses from no output
When a replay_robustness attempt returns invalid JSON, a schema-invalid envelope, or another constrained-output failure where provider output was present, this predicate still increments robustnessNoOutput. The JSON summary and human-readable Observer no-output cases line therefore misclassify malformed responses as absent responses, corrupting the benchmark's robustness diagnostic; retain failure reasons in the attempt summary and count only genuinely missing/no-output failures, or report this metric as general robustness failures.
Useful? React with 👍 / 👎.

Description
Adds a provider-neutral forced-tool contract and fail-closed tool-call parser, without enabling unsupported provider cells. It also adds benchmark reporting for output mode, validation, retries, contract integrity, semantic quality, and per-run constrained-output failures, plus operator documentation for rollout and diagnostics.
Type of Change
Testing
pnpm run tsc,pnpm run lint,pnpm run test)Full suite: 251 files passed; 6,263 tests passed and 3 todo.
Checklist
pnpm run lintpasses for touched files)