Saturday — the long version · 1,917 words · 7 minnofeed.dev
Saturday · 29 August 2026All long reads

Stable is not safer

All week the desk printed Claude Code's channel lag as policy. The money and credential fixes landed on latest first — and stable only moved after the billable bugs had already shipped past it.

The argument

Claude Code's stable channel is a delayed path, not a safer one: the money and credential fixes that mattered this week shipped on latest days before stable moved, so teams that treat stable as the careful pin keep the broken bill.

01Five mornings, one lag

Monday's lede was a version pair. npm stable sat on 2.1.231; latest and next on 2.1.241 — ten releases and a week of calendar time after the stable tag had been cut on 13 August.123 The desk said install past 2.1.239 if you run Bedrock or a gateway, and otherwise wait for stable.1

Wednesday the same pair was 2.1.231 against 2.1.246: fifteen patches on latest, still nothing on stable.45 Thursday: 2.1.247, stable unchanged.6 Friday morning stable finally moved — to 2.1.236 — while latest sat on 2.1.250.78 As of this Saturday, npm still shows stable at 2.1.236 and latest/next at 2.1.251.9

Each issue treated the lag as channel policy. That is what the docs describe. It is not what the release notes describe when you put the money bugs next to the stable pin.

02What the docs actually promise

The setup page is explicit. autoUpdatesChannel is either "latest" (the default: new features as soon as they ship) or "stable": a build that is typically about one week old, skipping releases with major regressions.10 Homebrew's claude-code cask tracks stable; claude-code@latest tracks latest. Linux apt/dnf/apk repos mirror the same split. Native installs auto-update in the background; Homebrew, WinGet and the package managers do not — you upgrade by hand.10

A second knob, minimumVersion, sets a floor. Background auto-updates and claude update refuse anything below it, so moving onto the stable channel does not downgrade you if you are already on a newer latest build.10 That is the escape hatch for the week we just covered, and it is easy to miss if you only read the channel name as a quality label.

Nothing in that page says stable is the build that has already absorbed the billing fixes. It says stable is older and has skipped some regressions. Those are different claims.

Stable means about a week old. It does not mean the billable bugs are already in.

03The two money bugs

v2.1.237, published 20 August, fixed prompt caching for sessions that use an LLM gateway or a custom base URL.11 A broken cache path is a rate problem: more uncached tokens than the model call required, on every turn that hit the path.

v2.1.239, published 21 August, fixed Bedrock streaming behind proxies that strip the response Content-Type header. The failure mode in the release note is specific: every turn silently re-ran non-streaming and doubled billed API calls.12 The same cut also fixed a hang at startup behind an HTTPS proxy when Bedrock used an SSO profile and awsAuthRefresh — the credential pre-check now honors HTTPS_PROXY.12

Monday morning, both cuts were already on latest. Stable was still 2.1.231, cut 13 August, whose only printed change was an MCP OAuth redirect fix.31 Anyone on Homebrew claude-code, on the stable apt/dnf/apk repo, or on autoUpdatesChannel: "stable" without a minimumVersion floor was running a build that predated both money fixes by more than a week of release history.

Whenstablelateststable age vs pin
Mon 24 Aug (issue 015)2.1.231 (13 Aug)2.1.24110 releases behind
Wed 26 Aug (issue 017)2.1.2312.1.24615 releases behind
Thu 27 Aug (issue 018)2.1.2312.1.247still 231
Fri 28 Aug (issue 019)2.1.236 (19 Aug)2.1.250moved; still behind
Sat 29 Aug (this morning)2.1.2362.1.251still behind 237–251
Claude Code channel pins this week, from npm dist-tags and GitHub release timestamps read 24–29 Aug 2026.14679358

04What stable absorbed when it finally moved

Friday's stable bump landed on 2.1.236, published 19 August — the day before the gateway cache fix and two days before the Bedrock double-bill fix.131112 The 2.1.236 notes add ANTHROPIC_DEFAULT_MODEL, cross-session idle notify, sandbox read-deny precedence on macOS, and a pile of renderer and resume fixes. They do not contain the Content-Type double-bill line. They do not contain the gateway cache line.13

So the stable pin moved, and the money bugs still sit above it. As of Saturday morning the gap is every release from 2.1.237 through 2.1.251: the cache fix, the double-bill fix, the 2.1.246 reliability dump, --restricted, the hourly OAuth cache miss, and whatever 2.1.251 added on Friday afternoon.9111258

Calling Friday's bump a safety catch-up would be a claim about which bugs stable was waiting out. The tag it chose is the release immediately before the two billable ones.

05The reliability dump that never reached stable

v2.1.246, 25 August, is the cut the Wednesday issue called a reliability dump rather than a feature drop.5 The notes that matter for production harnesses are not the cosmetic ones.

MCP tools interrupted in headless or remote sessions had been reported to the model as "completed with no output" instead of an interrupted error.5 Empty {} parameter schemas sent tool arguments as JSON strings instead of their real types.5 Background sessions failed to open after sleep, a deleted starting directory, or an EACCES during a concurrent npm reinstall; the retention sweep could delete git worktrees under .claude/worktrees/ that you had created yourself.5

Gateways took three more hits in the same cut. Resumed sessions failed every turn with a 400 when saved history contained tool blocks a third-party proxy had written and the Anthropic API would not accept.5 A third-party Anthropic-compatible endpoint that streamed a tool_use block without an id stopped the UI with a render error on the first tool call.5 Telemetry and metrics requests to Anthropic had been carrying the API key configured for ANTHROPIC_BASE_URL; a credential is now only sent to its own host.5

Write on a very large overwrite could report out-of-memory or freeze after the file had already been written.5 Non-interactive sessions (-p, SDK, cloud) now auto-continue a response cut off mid-stream by a server error, connection loss or stall.5

None of that is on 2.1.236. A team that stayed on stable through Wednesday did not "wait out" 2.1.246. They skipped it.

Interrupted MCP calls looked finished. Gateway keys rode to Anthropic. Neither failure is on stable.

06The quiet fix and the new control, both on latest

v2.1.248, 27 August, is Friday's lede for a reason. --restricted / CLAUDE_CODE_RESTRICTED=1 removes the built-in tools that run commands or code and WebFetch unless named in --tools, keeps file tools inside the working directory, refuses bypassPermissions, and ignores user, project and local settings files.8 That is a CI and sandbox control. It does not exist on stable.

The same cut fixed a prompt-cache miss roughly once an hour in long sessions: tool definitions were re-rendered after an OAuth token refresh, and extended-thinking context dropped with the cache.8 A second cache miss on --resume appeared when usage overage had changed the ScheduleWakeup tool shape between the original session and the resume.8

Cross-session SendMessage / ListAgents also reached Bedrock, Vertex, Foundry, and telemetry-off setups in 2.1.248.8 Useful if you run those providers. Invisible if your pin is stable.

Two Saturdays ago this desk argued that the residual click is not the control once sessions leave the laptop.14 --restricted is the kind of pre-declared boundary that argument asked for. It shipped on latest, in a week when the careful channel still could not see it.

07Why "stable" keeps winning the wrong argument

Package culture taught a generation of engineers that the stable tag is where you go when you are done being a beta tester. Distro stable means fewer breaks. npm latest means whoever published this afternoon. Claude Code reuses the word for a delayed train on the same track: same binary family, roughly a week later, with some regressions skipped by hand.10

The failure mode is naming. A platform team writes autoUpdatesChannel: "stable" into managed settings and believes it has chosen the build that already absorbed production pain. What it has chosen is the build that has not yet been allowed to carry this week's pain. When the pain is a doubled Bedrock bill or a dead prompt cache through a gateway, the careful pin is the expensive pin.

The desk's own Monday verdict half-admitted this and then softened it: Bedrock and gateway users should take ≥2.1.239; everyone else can wait for stable.1 "Everyone else" is doing a lot of work. Anyone who might later point ANTHROPIC_BASE_URL at a proxy, run a long OAuth session, or background a worktree is "everyone else" until the morning the bug is theirs.

We did not measure how many installs sit on each channel. npm dist-tags and the docs are enough to state the mechanism. The adoption split is a field report we do not have.

08What the week did not settle

Stable did move on Friday. The channel is not frozen. The claim is narrower: when it moved, it moved to a tag that still omits the billable fixes, the 2.1.246 harness fixes, --restricted, and the hourly cache repair.79

Latest is also where 2.1.245 had to patch a glibc 2.44 startup crash for Arch, CachyOS and Fedora Rawhide — a real regression on a real distro family, and exactly the kind of break stable is designed to skip.1510 That cut is a point in stable's favor. It does not restore the money fixes to 2.1.236.

Native installs default to latest and auto-update.10 The readers most exposed to the lag are the ones who did the "right" enterprise thing: Homebrew stable cask, distro stable repo, or managed autoUpdatesChannel: "stable" without a floor. The product makes that path easy. The release train makes it late on the bugs that cost money.

So what

  • Run claude --version and compare it to npm latest before the next Bedrock, gateway, or multi-hour session. If you are on 2.1.236 or older, you do not have the double-bill fix, the gateway cache fix, or the 2.1.246/248 harness repairs.9121158
  • If org policy wants the stable channel, set minimumVersion to at least 2.1.248 (or today's latest) in managed settings so the channel cannot drag you below the money and credential cuts.10
  • Homebrew: brew upgrade claude-code@latest if you need those cuts today; brew upgrade claude-code alone stays on stable's cadence.10
  • For CI and shared machines, take latest ≥2.1.248 for --restricted rather than waiting for stable to grow a hardened mode.8
  • Stop reading the word stable as safer. Read it as older. Decide the pin from the release notes you need, not from the channel adjective.

?What would change our mind

  • Stable advancing past 2.1.239 (and ideally past 2.1.248) within a day of those tags, with the Bedrock double-bill, gateway cache, credential-host, and hourly OAuth cache lines present on the stable pin. That would collapse the claim that the careful channel keeps the broken bill.
  • Docs that redefine stable as "has absorbed billing and credential fixes from latest" rather than "about a week old, regressions skipped." A product promise we could audit against the tags.
  • A published install split showing that almost nobody on Bedrock or ANTHROPIC_BASE_URL runs stable — field evidence that the expensive path is theoretical. We would narrow the operational half without touching the release timeline.
  • Evidence that 2.1.237 and 2.1.239 were held off stable because they themselves regressed production at a rate that justified the delay. Right now the only printed stable-skip rationale in docs is generic major-regression skipping, not a named hold on those cuts.10
Sources, with the date each was read
  1. 1NO FEED issue 015 — 24 Aug 2026 (stable 2.1.231 / latest 2.1.241)read 2026-08-29
  2. 2github — claude-code v2.1.241read 2026-08-29
  3. 3github — claude-code v2.1.231 (stable pin Mon–Thu)read 2026-08-29
  4. 4NO FEED issue 017 — 26 Aug 2026read 2026-08-29
  5. 5github — claude-code v2.1.246read 2026-08-29
  6. 6NO FEED issue 018 — 27 Aug 2026read 2026-08-29
  7. 7NO FEED issue 019 — 28 Aug 2026read 2026-08-29
  8. 8github — claude-code v2.1.248read 2026-08-29
  9. 9npm — @anthropic-ai/claude-code dist-tags (stable 2.1.236 / latest 2.1.251)read 2026-08-29
  10. 10Claude Code docs — Advanced setup / release channelsread 2026-08-29
  11. 11github — claude-code v2.1.237 (gateway cache)read 2026-08-29
  12. 12github — claude-code v2.1.239 (Bedrock double-bill)read 2026-08-29
  13. 13github — claude-code v2.1.236 (Friday stable pin)read 2026-08-29
  14. 14NO FEED dive — The session left the laptop (22 Aug 2026)read 2026-08-29
  15. 15github — claude-code v2.1.245 (glibc 2.44)read 2026-08-29
EOF

End of feed. That is everything from the window worth your time.
The weekday issues resume Monday, 06:00 UTC.

One argument a week, properly made.

One issue every weekday. The whole thing, not a teaser.

Or RSS, if you would rather we never had your address.