Skip to content

fix(agent): Align model defaults and eval contracts#964

Merged
dcramer merged 5 commits into
mainfrom
test/align-model-defaults-evals
Jul 20, 2026
Merged

fix(agent): Align model defaults and eval contracts#964
dcramer merged 5 commits into
mainfrom
test/align-model-defaults-evals

Conversation

@dcramer

@dcramer dcramer commented Jul 20, 2026

Copy link
Copy Markdown
Member

Runtime and eval configuration now match the production model lineup: Grok 4.5
for standard turns, Claude Haiku 4.5 for auxiliary work, and GPT-5.6-sol for
handoffs. Config tests and public reference docs carry the same defaults.

Eval coverage now reserves rubric judges for nondeterministic visible replies.
Deterministic tool calls, attachments, delivery, and persistence use typed
selectors with assertions at each case, while duplicate fixture-only cases and
their unused reply injection hooks are removed.

Sandbox-backed suites prepare their dependency snapshots in beforeAll, which
matches production warmup and keeps cold snapshot construction outside the
60-second reply budget. Agent execution races that deadline directly so a
successful boundary completion is not discarded after returning. Invocation-scoped
Redis coordinates are installed before stateful worker modules load so local and
CI eval runs share the intended state.
Cloudflare Quick Tunnel allocation now uses five bounded attempts with capped
exponential backoff so transient API timeouts do not abort the suite immediately.

Use the production base, handoff, and auxiliary models across runtime configuration, evals, tests, and docs.

Keep deterministic behavior out of model judges, enforce the reply deadline, and warm sandbox snapshots before timed eval cases.
@vercel

vercel Bot commented Jul 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
junior-docs Ready Ready Preview Jul 20, 2026 9:08pm

Request Review

@dcramer
dcramer marked this pull request as ready for review July 20, 2026 17:42
@github-actions github-actions Bot added the risk: medium PR risk score: medium label Jul 20, 2026
Use five bounded attempts with capped exponential backoff so transient Cloudflare API timeouts do not abort the eval suite.
Comment thread packages/junior-evals/src/behavior-harness.ts Outdated
Resolve the reply promise or abort signal based on which settles first, preserving the hard deadline without discarding a successful boundary completion.
Give the production-aligned base model enough time for tool-backed turns while retaining a bounded per-reply deadline.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a012500. Configure here.

Comment thread packages/junior-evals/src/behavior-harness.ts
return await Promise.race([operation(), abortPromise]);
} finally {
removeAbortListener();
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Abort race drops losing rejection

Medium Severity

raceWithAbort returns whichever of the agent run or abort settles first, but does not settle or swallow the loser. When the deadline wins, a later rejection from executeAgentRun becomes an unhandled rejection after the timed-out eval has already failed.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a012500. Configure here.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I verified this is a false positive. Promise.race attaches fulfillment and rejection handlers to every input promise immediately; when the abort promise wins, a later rejection from executeAgentRun is consumed by the rejection handler already installed by Promise.race and does not become unhandled. I also reproduced the winner/late-reject case under an unhandledRejection listener with no event emitted, so no code change is needed here.

— Claude Code

Allow cleanup and rubric judging to complete after the 60-second reply budget expires.
@github-actions github-actions Bot added risk: high PR risk score: high and removed risk: medium PR risk score: medium labels Jul 20, 2026
@dcramer
dcramer merged commit 021a1c5 into main Jul 20, 2026
32 of 33 checks passed
@dcramer
dcramer deleted the test/align-model-defaults-evals branch July 20, 2026 21:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: high PR risk score: high

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant