The hop nobody tests
One Claude Code release broke two indirect paths at once. The gateway path was repaired in 3.3 hours. The third-party endpoint path took 47.9 — and 43 of those ran after the failure had already been reported three times.
A hop between the tool and the model is a second-class path: the same Claude Code cut broke the gateway hop and the third-party-endpoint hop, and the first was repaired in 3.3 hours while the second took 47.9, including 43 hours after the first public report.
01Two regressions, one cut
Claude Code v2.1.265 was published at 20:37:31 UTC on 8 September.1 It carried a long list of fixes and two regressions, and both of them landed on setups where something sits between the CLI and the model.
The first: an undocumented CLAUDE_CODE_USE_GATEWAY variable, previously ignored unless ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN were both set, started forcing Cloud-gateway sign-in on its own. Anyone who had it set alongside an API key, apiKeyHelper, or custom auth headers failed every request with "Not signed in to the Cloud gateway".2 v2.1.266 restored the old behaviour at 23:55:14 UTC the same evening — 3 hours 18 minutes after the break shipped.2
The second: the built-in Artifact tool's input_schema gained a pattern on an identifier field using Unicode property escapes — ^(?!__.*__$)[^\p{Cc}\p{Cf}\p{Zl}\p{Zp}"\\./[\]]{1,200}$. Anthropic-compatible endpoints whose JSON-Schema validators implement a stricter regex subset reject the whole request with a 400. The tool list ships on every call, so the first turn of every interactive session failed.34 That fix arrived in v2.1.268 at 20:30:54 UTC on 10 September: 47 hours 53 minutes after 2.1.265, 14.5 times the gateway turnaround.45
v2.1.267 went out in between, at 19:58:14 UTC on 9 September, with maxEffortLevel, an effort cap across Bedrock, Vertex and Foundry, and two dozen fixes. The 400 was not among them.6
| Event | UTC timestamp | Since 2.1.265 |
|---|---|---|
| 2.1.265 ships both regressions | 8 Sep 20:37:31 | — |
| 2.1.266 fixes the gateway path | 8 Sep 23:55:14 | 3.30 h |
| First public report of the 400 (#92964) | 9 Sep 01:27:41 | 4.84 h |
| Second report, names 2.1.266 (#92969) | 9 Sep 01:57:50 | 5.34 h |
| Third report, z.ai GLM (#93029) | 9 Sep 08:10:13 | 11.54 h |
| 2.1.267 ships without the fix | 9 Sep 19:58:14 | 23.35 h |
| 2.1.268 fixes the 400 | 10 Sep 20:30:54 | 47.89 h |
02The clocks are the argument
Put the two repairs side by side and the gap is not about difficulty. The gateway fix was a revert of one variable's precedence. The Artifact fix was a regex in a schema — the reporters had already isolated it to a single pattern and shown that deleting that one line made the identical request succeed.78
Nor was it about discovery. The 400 was filed at 01:27:41 UTC on 9 September, four hours and fifty minutes after 2.1.265 shipped and an hour and thirty-two minutes after 2.1.266 shipped.7 A second report half an hour later stated in its title that the regression was still present in 2.1.266.8 A third, naming z.ai's GLM Anthropic-compatible endpoint and quoting the exact error code, arrived at 08:10 UTC.9 From that first report to the fix is 43 hours 3 minutes, and a full release passed through the middle of it.
The reporters did the vendor's triage for it. One bisected two captured request bodies; one replayed requests with individual constraints removed and recorded which shapes returned 200; all three named the escape class.789 Those are field reports — we read the issues, not the fix commit, so what the maintainers were doing in those 43 hours is not something we can see.
What the release note does say is that the regression dated to 2.1.265, which means 2.1.266 and 2.1.267 both shipped with it live.4
The gateway path was repaired before the third-party path had even been reported.
03Why a valid regex fails on a hop
One reporter makes the mechanical point precisely: the pattern is valid ECMA-262 with the u flag, and Anthropic's own API accepts it, so first-party traffic never sees the failure.8 That claim is a field report we could not independently test, but it is consistent with the evidence on both sides — the same build works against Anthropic and fails against z.ai.79
If that holds, the mechanism needs no bad actor. A schema author picks a regex construct the reference implementation supports. Continuous integration runs against the reference implementation. Every test passes. The build then ships a wire payload that a second validator, one tier out, refuses. Neither party is testing the pair, and the pair is what the user runs.
This is why a hop degrades differently from a feature. A broken feature fails for the people using that feature. A hop sits under every request: the tool list goes out on every call, so an unusable session is the first symptom, and claude -p against the same backend reportedly kept working because the non-interactive path does not carry that tool.7 A partial failure that follows the transport rather than the feature is harder to attribute, which may be part of why one of these two regressions was so much louder inside the vendor than the other.
We have no measurement of how many installs sit behind a third-party compatible endpoint versus a first-party one, and no vendor figure exists that we could find. Any claim that the slower repair reflects a smaller user base would be a guess.
04The documentation already concedes the point
The gateway page states the position without hedging: any gateway exposing a supported API format works, and "Anthropic doesn't endorse, maintain, or audit third-party gateway products".10 It goes further: "Claude Code adds capabilities with each release, and a gateway that doesn't forward them breaks the corresponding features, so the gateway product needs to be kept updated as Claude Code evolves."10
Read as policy, that sentence is fair and clearly signposted. Read as an operational forecast, it describes exactly what happened this week — with one amendment. The break did not come from a gateway failing to forward a new capability. It came from a new capability's schema shape, and no gateway update could have absorbed it, because the rejection was the intermediary's validator doing its declared job.
The enterprise deployment page lists five separate base-URL variables for routing to a gateway, one per provider, alongside corporate-proxy configuration.11 That is a substantial supported surface. v2.1.269, published 19:17:55 UTC on 11 September, added CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS to extend the gateway /v1/models discovery timeout past its 3-second default.5 The hop is being invested in and widened, which enlarges a contract that neither end tests jointly.
05Three other projects spent the week narrowing hops on purpose
On 7 September the MCP Python SDK shipped 2.2.0 and, on the maintenance line, 1.30.0. HTTP clients now follow a redirect only within the endpoint's origin; anything else fails. Stateful Streamable HTTP sessions close after 30 minutes idle, capped at 10 000 per server. And on the legacy OAuth path, authorization-server metadata whose issuer is not the server's own origin is rejected.1213
On 8 September gemini-cli 0.59.0 landed two fixes of the same family: SSRF prevention in MCP OAuth metadata discovery and authentication, and fail-closed workspace trust that filters mcpServers in restricted mode.14
On 10 September ADK Python 2.9.0 restricted its GCS tools to local paths under local_file_root and made them refuse local file access entirely when that setting is absent — judged by where a path resolves, not how it is spelled.15
These are deliberate tightenings, not accidents, and treating them as the same event as a regression would be sloppy. What they share with it is the location. Every one of them is a maintainer deciding that an indirect path — a redirect to another origin, an issuer that is not the server, a file path outside a declared root — is where the trouble comes from, and closing it by default. The industry is converging on the view that a hop is a liability. The repair clocks above suggest it is also a lower support priority.
06Our own two mornings
On 9 September this desk printed USE_IT and told readers to pin Claude Code ≥2.1.266.16 On 10 September it printed USE_IT and said pin ≥2.1.267.17 For anyone running ANTHROPIC_BASE_URL against a third-party compatible endpoint, both of those builds failed every turn, and we sent those readers into the failure twice.
The 9 September issue's window ran to 06:00 UTC that morning. The first two reports were filed at 01:27 and 01:57 UTC — inside it. The issue's own source note records that the community layer came from digests and that the Hacker News sweep returned nothing; the vendor's issue tracker was not a layer at all.16 Sourcing verdicts from release notes means inheriting the release notes' blind spots, and a regression a vendor has not yet acknowledged is invisible to a desk that only reads what the vendor published.
The narrower lesson is about the verdict, not the sweep. A pin stated as one number is a claim about every configuration. When a release note says a fix applies to gateway and proxy setups, the honest verdict names the paths it does not cover.
07What this week did not settle
Two regressions from one vendor in one cut is not a rate. It is a pair of measurements with a large gap, and the gap is what we are reporting; a trend would need months of release-to-fix intervals split by path, which we have not built.
The 3.3-hour turnaround also deserves its weight. A same-evening revert of a regression is a responsive maintenance operation, and 47.9 hours to fix a schema incompatibility is not negligence by any ordinary standard. The argument is comparative and narrow: two failures, same cut, same class of user-visible outcome, one repaired 14.5 times faster than the other.
There is a real case that the strict validator is the non-conforming party. If the pattern is valid ECMA-262 as reported, an endpoint advertising Anthropic compatibility and then refusing a valid regex has shipped an incomplete implementation.8 That argument wins on standards and loses on outcomes: the user who upgraded on Tuesday had no working session either way, and 2.1.268 chose to change the schema rather than wait for every downstream validator to catch up.4
Finally, all three issues were still open when we read them on 12 September, with no close timestamp, despite 2.1.268 stating the fix.789 An open issue after a shipped fix is ordinary tracker hygiene and we draw nothing from it — but it does mean a reader searching the tracker on Monday will find three open reports of a bug that has been fixed for two days.
→So what
- If any session routes through
ANTHROPIC_BASE_URLto a non-Anthropic compatible endpoint, pin Claude Code ≥2.1.268. Builds 2.1.265 through 2.1.267 fail every interactive turn with a 400 on endpoints whose validators reject\p{...}escapes.47 - Check whether
CLAUDE_CODE_USE_GATEWAYis set anywhere in your environment or managed settings. On 2.1.265 alone it forced Cloud-gateway sign-in by itself; on ≥2.1.266 it is ignored unless base URL and auth token are both set.2 - Put one smoke test on the hop, not on the vendor endpoint: start an interactive session through your actual gateway or compatible endpoint after every auto-update.
claude -pis not the test — it reportedly passed while interactive sessions were dead.7 - On MCP over HTTP with the Python SDK, audit for cross-origin redirects and OAuth issuers that differ from the server origin before taking 2.2.0 or 1.30.0; both now fail closed, and the 30-minute idle expiry is off only with
session_idle_timeout=None.1213 - Read a vendor pin as scoped to the paths the release note names. When a fix is described for gateway and proxy setups, that is not a statement about third-party endpoints.
?What would change our mind
- A published release-to-fix record showing third-party-endpoint regressions in Claude Code repaired on the same clock as first-party and gateway ones — say three consecutive cases inside a day of report. That would make this week's 43-hour gap an outlier rather than a priority ordering.
- Evidence that the 43 hours were spent on the fix rather than on triage priority: a commit or maintainer note dating work on the Artifact schema to 9 September. We read the issues and the release notes only, so this is the piece of the account we are missing.
- Anthropic adding third-party Anthropic-compatible endpoints to its own release-gating tests, or publishing a schema-construct policy for tool
input_schemathat bans constructs outside a common validator subset. Either would remove the mechanism we describe. - A count showing that almost no Claude Code installs sit behind a third-party compatible endpoint, which would make the slower repair a defensible allocation rather than a second-class path. We found no such figure and are not assuming one.
- z.ai and other compatible endpoints shipping full ECMA-262
u-flag regex support, closing the incompatibility from the other side. The repair-clock comparison would stand; the operational advice would expire.
- 1github — claude-code v2.1.265 (published 2026-09-08T20:37:31Z)read 2026-09-12
- 2github — claude-code v2.1.266, gateway regression revert (2026-09-08T23:55:14Z)read 2026-09-12
- 3github — claude-code v2.1.267 (2026-09-09T19:58:14Z)read 2026-09-12
- 4github — claude-code v2.1.268, third-party endpoint 400 fix (2026-09-10T20:30:54Z)read 2026-09-12
- 5github — claude-code v2.1.269, gateway model-discovery timeout (2026-09-11T19:17:55Z)read 2026-09-12
- 6GitHub releases API — v2.1.267 timestamps and bodyread 2026-09-12
- 7claude-code issue #92964 — Artifact input_schema \p{Cc} pattern, 400 on compatible backends (opened 2026-09-09T01:27:41Z)read 2026-09-12
- 8claude-code issue #92969 — regression present in 2.1.266, strict validators reject (opened 2026-09-09T01:57:50Z)read 2026-09-12
- 9claude-code issue #93029 — z.ai GLM endpoint, error code 1210 (opened 2026-09-09T08:10:13Z)read 2026-09-12
- 10Claude Code docs — Other LLM gateways (not endorsed, audited; keep gateway current)read 2026-09-12
- 11Claude Code docs — enterprise deployment, proxies and gateway base-URL variablesread 2026-09-12
- 12github — MCP Python SDK v2.2.0 (2026-09-07T15:53:57Z)read 2026-09-12
- 13github — MCP Python SDK v1.30.0 (2026-09-07T14:03:59Z)read 2026-09-12
- 14github — gemini-cli v0.59.0, MCP OAuth SSRF + fail-closed trust (2026-09-08T21:13:43Z)read 2026-09-12
- 15github — google/adk-python v2.9.0, GCS local_file_root (2026-09-10T21:22:43Z)read 2026-09-12
- 16NO FEED issue 027 — 9 Sep 2026, USE_IT pin ≥2.1.266read 2026-09-12
- 17NO FEED issue 028 — 10 Sep 2026, USE_IT pin ≥2.1.267read 2026-09-12