Skip to content

fix(models): default Claude Sonnet 5.5 to its shipped medium effort - #14193

Open
zachweyland wants to merge 3 commits into
pingdotgg:mainfrom
zachweyland:fix/sonnet-5-5-default-effort
Open

zachweyland wants to merge 3 commits into
pingdotgg:mainfrom
zachweyland:fix/sonnet-5-5-default-effort

Conversation

@zachweyland

@zachweyland zachweyland commented Sep 29, 2026 •

Copy link
Copy Markdown

What Changed

Adds a dedicated sonnet-5-5 capability profile and points claude-sonnet-5-5 at it. The profile is a copy of sonnet-5, the only difference being the default effort, medium instead of high. Bumps updatedAt. No UI changes.

Why

#14152 pointed claude-sonnet-5-5 at the sonnet-5 profile, so the picker defaults Sonnet 5.5 to High effort. That high default matches Sonnet 5 and Sonnet 4.6, but Claude Code 2.1.284's bundled model table ships default_effort: "medium" for claude-sonnet-5-5, same as Opus 5.5:

Model default_effort in 2.1.284
claude-sonnet-4-6 high
claude-sonnet-5 high
claude-sonnet-5-5 medium
claude-opus-5-5 medium

T3 passes --effort explicitly for manifest models, so selecting Sonnet 5.5 runs at a higher effort than the model's own default. #14148 independently found the same default and added the equivalent profile, but closed as a duplicate of #14152 before that difference could land.

Tests: ModelManifest.test.ts, ClaudeModelCatalog.test.ts, and ClaudeAdapter.test.ts pass, and vp fmt --check is clean.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (none, JSON-only change)
  • I included a video for animation/interaction changes (n/a)

Changes made by Qwen3.8 Flash Next in OpenCode, running in T3 Code.

pingdotgg#14152 pointed claude-sonnet-5-5 at the sonnet-5 profile, which defaults
effort to high. Claude Code 2.1.284 ships default_effort "medium" for
claude-sonnet-5-5 (it stays "high" for claude-sonnet-5 and
claude-sonnet-4-6), so selecting Sonnet 5.5 runs hotter than the model's
own default. Add a dedicated sonnet-5-5 profile, identical to sonnet-5
except for the medium effort default, and bump updatedAt.

Changes made by Qwen3.8 Flash Next in OpenCode, running in T3 Code.
@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Sep 29, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This manifest change alters the shipped default Claude Sonnet 5.5 effort from high to medium, affecting how new selections are dispatched to Claude. The change is focused and otherwise low-scope, but product-default changes require human review.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 4b8606ce-413b-40b0-8f38-ceaabcaeebfb

📥 Commits

Reviewing files that changed from the base of the PR and between 4e1d872 and ebb5fea.

📒 Files selected for processing (1)
  • apps/server/src/provider/model-manifest.json

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

The provider model manifest adds a Sonnet 5.5 profile with effort and context-window options. The Claude Sonnet 5.5 model entry now uses this profile.

Changes

Sonnet 5.5 profile

Layer / File(s) Summary
Define and assign the Sonnet 5.5 profile
apps/server/src/provider/model-manifest.json
The manifest adds effort options and context-window choices for Sonnet 5.5. Its Claude Code adapter maps ultrathink to null, adds the [1m] suffix, and sets token counts. The model entry uses the new profile, and the manifest timestamp is updated.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Suggested reviewers: arturict, juliusmarminge

Merge Risk: ⚪ Minimal · up to ebb5f

The Sonnet 5.5 profile has the reported medium effort default and context-window choices. No actionable merge-blocking risk is identified; proceed with normal checks.

Architecture Summary

Architecture risk: 🔵 Low · up to ebb5f

The change affects 1 system.

Changed systems: apps/server

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — apps/server (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in apps/server/src/provider/model-manifest.json: The manifest’s updatedAt value changes from 2026-09-30T22:00:00Z to 2026-10-01T18:00:00Z.
  • observed — Modified behavior in apps/server/src/provider/model-manifest.json: Adds the sonnet-5-5 Claude profile. It offers low, medium (default), high, xhigh, max, and ultrathink effort options, with ultrathink prompt-injected; context windows are 200k (default) and 1M. The adapter maps ultrathink to null, adds the [1m] suffix for 1M, and maps the choices to 200,000 and 1,000,000 tokens.
  • observed — Modified behavior in apps/server/src/provider/model-manifest.json: The Claude Sonnet 5.5 model’s profile changes from sonnet-5 to sonnet-5-5.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the main change: setting Claude Sonnet 5.5 to its shipped medium effort default.
Description check ✅ Passed The description clearly explains the problem, change, rationale, affected behavior, and verification results. It does not use the template headings and does not provide explicit scope approval evidenc…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Comment @coderabbitai help to get the list of available commands.

…onnet-5-5-default-effort

# Conflicts:
#	apps/server/src/provider/model-manifest.json

Copy link
Copy Markdown
Member

Note

This comment is posted by Julius' dot

Please attach the Claude Code 2.1.284 catalog excerpt or probe that establishes medium as Sonnet 5.5's default, and show the resulting T3 selection. #14152 describes high as the upstream default, while this PR and #14148 report medium. Resolving that discrepancy will establish whether this is a correction under the problem and scope rule.

…t-effort

# Conflicts:
#	apps/server/src/provider/model-manifest.json
@zachweyland

Copy link
Copy Markdown
Author

You asked for three things: the catalog value, what T3 actually selects, and why #14152 said high. Here they are.

Reproduce the catalog excerpt

The value lives in the installed binary's model table. On the version T3 gates Sonnet 5.5 behind (minVersion: 2.1.284), which is also what claude currently resolves to here:

claude --version   # 2.1.284 (Claude Code)
sha256sum ~/.local/share/claude/versions/2.1.284
# 5cd90aabd83f8a15136c35aa37bb1d92b348993573316643dc3fe4e04afbf88f
rg -ao '\{id:"claude-sonnet-5-5".{0,900}?\},\{id' ~/.local/share/claude/versions/2.1.284

The entry (byte offset 198719101) ends with:

context:{window:1e6,native_1m:!0,...},max_output_tokens:{default:128000,upper:128000},
pricing:"tier_2_10",capabilities:["effort","max_effort","xhigh_effort",...],
default_effort:"medium",image_limits:{...},advisor_rank:3

Not a stale-build artifact. Current stable 2.1.287 (linux-x64 binary, sha256 3920489a5109cff5786a1a392c25277408ff22bc796d5edb9c16a60e5a1718f0) has the same values: claude-sonnet-5-5 = medium, claude-sonnet-5 = high, claude-opus-5-5 = medium.

Why #14152 said high, and why that is only true of Sonnet 5

Same binary, the resolver for a model's default effort:

function ge(e){return Xa(Ue(e))?.default_effort??"high"}

Models that predate the field fall through to the hard-coded "high"; models that carry the field use it. Per-entry values, verbatim from the binary (identical on 2.1.284 and current stable 2.1.287):

model entry effective default
claude-sonnet-4-6 field absent high (fallback)
claude-sonnet-5 default_effort:"high" high
claude-sonnet-5-5 default_effort:"medium" medium
claude-opus-5 default_effort:"high" high
claude-opus-5-5 default_effort:"medium" medium

So "Sonnet 5.5 defaults to high like Sonnet 5" was true of every Sonnet through 5, and 2.1.284 moved 5.5 down to medium to match Opus 5.5. The discrepancy is between the old model and the new one, not between sources.

Why this matters for T3 specifically

T3 passes the resolved picker value to the CLI. getProviderOptionCurrentValue (packages/shared/src/model.ts:81) takes the profile's isDefault, ClaudeAdapter.ts:4852 runs it through resolveClaudeCatalogEffort, and the spawn appends --effort. An explicit flag outranks the CLI's own default, so under the current sonnet-5 profile a T3 session runs 5.5 at high while every other 2.1.284 client runs it at medium. The diff adds a sonnet-5-5 profile so the flag matches the shipped default.

Resulting T3 selection (live)

Three throwaway threads on a running server, started without touching the effort picker, read from the startSession span attributes (claude.query.model, claude.query.effort). Each returned a completed assistant turn, so these are live selections, not aborted spawns.

started (UTC) claude.query.model claude.query.effort expected
2026-10-01T18:28:50Z claude-opus-5-5 medium correct (own opus-5-5 profile)
2026-10-01T18:29:01Z claude-sonnet-5-5 high the bug (reuses sonnet-5 profile)
2026-10-01T18:29:16Z claude-sonnet-5 high correct (sonnet-5 profile)

claude-sonnet-5-5 selecting high is the bug, on the exact model, through the real codepath. claude-opus-5-5 selecting medium shows the mechanism already does the right thing when a model has its own medium profile. This PR gives sonnet-5-5 the profile it was missing, the same one Opus 5.5 already has, so the flag resolves to medium through that identical chain.

@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 1, 2026 — with ChatGPT Codex Connector

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants