Skip to content

chore(docker): bump Devin bridge Claude Code pin to 2.1.258 - #12402

Closed
ggiak wants to merge 3 commits into
cheaper-inference:release/v3.8.51from
ggiak:fix/devin-bridge-claude-code-2-1-258
Closed

ggiak wants to merge 3 commits into
cheaper-inference:release/v3.8.51from
ggiak:fix/devin-bridge-claude-code-2-1-258

Conversation

@ggiak

@ggiak ggiak commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Stacked on #12344 (feat/claude-fable-5-1). This PR's own change is the single commit chore(docker): bump Devin bridge Claude Code pin to 2.1.258; the two commits below it belong to #12344 and drop out of the diff once that PR merges. Merge #12344 first.

Summary

The Devin Claude bridge installs a real Claude Code CLI inside its image. It was still pinned at 2.1.220 while the Claude identity OmniRoute impersonates moved to 2.1.258 in #12344 (for Fable 5.1). This raises the bridge pin to the same generation — the first CLI line that knows the Fable 5.1 tier natively — so the containerized CLI matches the fingerprint the executor emits.

Scope note. The pin only affects the containerized CLI. OmniRoute strips the client's x-anthropic-billing-header line and rewrites the User-Agent on the Claude OAuth path (open-sse/executors/base.ts), so Anthropic's 2.1.251 or newer gate never sees the bridge's own CLI version. This is alignment, not a fix for that 400.

What changed

  • docker/devin-bridge/Dockerfile — ARG CLAUDE_CODE_VERSION default 2.1.220 → 2.1.258.
  • docker/devin-bridge/compose.yml — the shared x-runtime build arg, same bump (covers omniroute, claude, contract and the live services).
  • docs/DEVIN_CLAUDE_BRIDGE.md — architecture line + status callout. The callout now states that the offline/live validation on record was performed on 2.1.220, and lists what was and was not re-run on the new pin.
  • CHANGELOG.md — [Unreleased] → 📝 Maintenance entry.

Validation

On the pinned base image (node:26.0.0-bookworm-slim, arm64):

  • The exact Dockerfile install command succeeds; claude --version → 2.1.258 (Claude Code); npm ls -g → claude-code@2.1.258. The same install layer also completed inside the full image build.
  • scripts/devin-bridge/test-unit — 39/39.
  • docker compose -f docker/devin-bridge/compose.yml --profile offline config — valid; CLAUDE_CODE_VERSION: 2.1.258 resolved in all three services.
  • scripts/devin-bridge/verify-anthropic-isolation --static — PASS.
  • npm run check:docs-all green; prettier clean.

Not re-run (needs a larger Docker VM): the offline mock e2e (scripts/devin-bridge/test-e2e-mock) and the three-scenario live suite. scripts/devin-bridge/build failed at the npm run build layer with ResourceExhausted on an 8 GB Docker Desktop VM — a layer this PR does not touch. Steps 3–5 of "Updating pinned tools" in the doc remain open, and the doc callout says so explicitly.

Devin CLI

Unchanged (3000.2.17, archive checksums untouched).

Wire claude-fable-5-1 across the full first-party model pipeline,
mirroring the Fable 5 rollout (cheaper-inference#3524): model spec (1M context, 128k
output, adaptive-only thinking, rejects thinking.type:"disabled" per
cheaper-inference#3554), pricing (native $15/$75, cc OAuth $10/$50), fallback chain
(fable-5-1 -> fable-5 -> opus-4-8 -> opus-4-7 -> sonnet-5), 1M-context
beta header, fast mode, cost data, and the cc/claude, claude-web,
anthropic, vertex, vertex-partner, ghe-copilot and github registries.

Fable 5.1 is listed first in each Claude catalog, so it becomes the
default resolved Fable tier (ANTHROPIC_DEFAULT_FABLE_MODEL). Kiro stays
excluded (its upstream serves no Fable tier, cheaper-inference#6170). Effort variants
(low/medium/high/xhigh) synthesize automatically from the spec.

Adds regression tests (catalog exposure + pricing, fable-5-1 -> fable-5
fallback, cheaper-inference#3554 adaptive-thinking guard, adaptive-sampling parity) and
updates the claude-web exact-set and "flagship first" assertions to the
new tier.
Anthropic gates claude-fable-5-1 behind Claude Code >= 2.1.251; with the
pinned 2.1.220 fingerprint every Fable 5.1 request over the native Claude
OAuth path failed upstream with "400 Claude Code 2.1.220 does not support
this model; version 2.1.251 or newer is required".

Bump the canonical wire identity (src/shared/constants/claudeCodeClient.ts)
to the values captured from the signed Claude Code 2.1.258 binary via a
loopback ANTHROPIC_BASE_URL listener: claude-cli/2.1.258, billing
cc_version=2.1.258.1e2, X-Stainless-Package-Version 0.112.1
(X-Stainless-Runtime-Version stays v26.3.0 under Bun 1.4.1). The dashboard
routing preset now imports CLAUDE_CODE_CLIENT_BUILD_REVISION instead of
hardcoding "1f2", and the docs / .env.example CLAUDE_USER_AGENT default are
refreshed to the new fingerprint (the example still advertised 2.1.219).

Drift-guard tests were flipped first (red against 2.1.220), then the
constant bumped (green); the translate-path golden snapshot was regenerated
and its diff is exactly the User-Agent and X-Stainless-Package-Version lines.
The Devin Claude bridge installs a real Claude Code CLI inside its image
(Dockerfile ARG + compose build arg), still pinned at 2.1.220 while the
Claude identity OmniRoute impersonates moved to 2.1.258 for Fable 5.1.
Raise the pin to the same generation: it is the first CLI line that knows
the Fable 5.1 tier natively, and it keeps the containerized CLI aligned
with the fingerprint the executor emits.

Scope note: the pin only affects the containerized CLI. OmniRoute rewrites
the User-Agent and the x-anthropic-billing-header line on the Claude OAuth
path (open-sse/executors/base.ts), so Anthropic's "2.1.251 or newer" gate
never sees the bridge's own CLI version.

Validation on the pinned base image (node:26.0.0-bookworm-slim, arm64):
the install layer builds and `claude --version` reports 2.1.258; the
bridge unit suite (39/39), `compose config` and the static isolation proof
pass. The offline mock e2e and the three-scenario live suite were NOT
re-run on the new pin: the full image build (`npm run build`) exhausted an
8 GB Docker VM. The doc's status callout records exactly that so nobody
mistakes the old 2.1.220 validation for the new pin.
@ggiak
ggiak requested a review from diegosouzapw as a code owner September 2, 2026 02:25
diegosouzapw added a commit that referenced this pull request Sep 3, 2026
…o 2.1.258 (#12604)

17 de 18 checks verdes, **zero falhas** — incluindo os quatro shards de unit, Vitest, CodeQL, semgrep, Docs Gates, Merge integrity e o **Fast Quality Gates**, que era exatamente o que o rebaseline do `RoutingTab.tsx` (1606→1607, a linha do seletor que acompanha a nova versão de identidade) veio consertar.

O único check restante, `No new ESLint warnings`, ficou enfileirado sem iniciar (duração 0) atrás da saturação de runners de hoje. Cobri os dois comandos que ele executa, localmente e sobre este HEAD:

- `npm run check:codeql-ratchet` → **0 alertas abertos** contra baseline 6 (sem regressão).
- `npx eslint --max-warnings 0` nos 9 arquivos de código que esta branch altera → **exit 0**, nenhum warning.

Conteúdo: os dois commits do #12402 que não estavam subsumidos, com autoria do @ggiak preservada pelo cherry-pick `-x`, mais o rebaseline e o fragmento de changelog que faltava. `typecheck:core` limpo e **138/138** nos testes focados. As três versões (`claudeCodeClient.ts`, `Dockerfile`, `compose.yml`) conferem em 2.1.258, e `npm view @anthropic-ai/claude-code@2.1.258` resolve — o Dockerfile instala esse pin exato.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…o 2.1.258 (cheaper-inference#12604)

17 de 18 checks verdes, **zero falhas** — incluindo os quatro shards de unit, Vitest, CodeQL, semgrep, Docs Gates, Merge integrity e o **Fast Quality Gates**, que era exatamente o que o rebaseline do `RoutingTab.tsx` (1606→1607, a linha do seletor que acompanha a nova versão de identidade) veio consertar.

O único check restante, `No new ESLint warnings`, ficou enfileirado sem iniciar (duração 0) atrás da saturação de runners de hoje. Cobri os dois comandos que ele executa, localmente e sobre este HEAD:

- `npm run check:codeql-ratchet` → **0 alertas abertos** contra baseline 6 (sem regressão).
- `npx eslint --max-warnings 0` nos 9 arquivos de código que esta branch altera → **exit 0**, nenhum warning.

Conteúdo: os dois commits do cheaper-inference#12402 que não estavam subsumidos, com autoria do @ggiak preservada pelo cherry-pick `-x`, mais o rebaseline e o fragmento de changelog que faltava. `typecheck:core` limpo e **138/138** nos testes focados. As três versões (`claudeCodeClient.ts`, `Dockerfile`, `compose.yml`) conferem em 2.1.258, e `npm view @anthropic-ai/claude-code@2.1.258` resolve — o Dockerfile instala esse pin exato.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant