# The Stack Weekly, week 45: The price per token is the wrong number, and three vendors showed it this week

> Nine things worth your time from 26 October to 1 November 2026. OpenAI's new GPT-6.1 Terra halves the token price and still loses to its dearer sibling at the same spend, Google's Gemini 4 Carbon takes first place at Opus's token price and nobody can buy it yet, and OpenRouter stopped picking the cheapest host because the cheapest host was costing you. Also: Cloudflare discloses leaked prompts on Workers AI, decision models hit a penny and now read images, Durable Objects stop dropping sockets on deploy, durable functions get free telemetry, and Tailworm finally has a patch.

- 26 October – 1 November 2026, published 2 November 2026 by Nicolas Dao (Cloudless Labs, Sydney)
- Judged against The Stack: https://cloudlesslabs.com/stack/brief.md
- Web page: https://cloudlesslabs.com/weekly/2026-w45/

## GPT-6.1 Terra, by OpenAI

- New. Verdict: Worth a pilot. Medium risk.
- Pain: Your agent, extraction or triage feature runs on a mid-tier model, and on Claude Sonnet 5.5 it costs about $4 a task at the effort that reaches 50 on the independent index. Every new user makes that bill worse.
- Fix: GPT-6.1 Terra scores 51 for $0.96 a task, at $1 / $5 per million tokens. It's on the OpenAI API, Bedrock and OpenRouter, but it has no Australian route, and its older sibling Sol beats it at the same spend.
- Value: About a quarter of Sonnet's cost for the same score. Test Sol next to it before you commit.
- Company: OpenAI, founded 2015
- Product: GA from 26 October 2026 on the API, Bedrock, Copilot and OpenRouter; Bedrock end of life no sooner than October 2027
- In The Stack: [Anthropic API (for client systems)](https://cloudlesslabs.com/stack/anthropic-api/index.md), [OpenRouter](https://cloudlesslabs.com/stack/openrouter/index.md), [Amazon Bedrock](https://cloudlesslabs.com/stack/aws-bedrock/index.md), [Cloudflare AI Gateway](https://cloudlesslabs.com/stack/cloudflare-ai-gateway/index.md)

### What happened

On 26 October, OpenAI shipped GPT-6.1 Terra, the third step on its ladder: Astra at $10 / $50 per million tokens, Sol at $2 / $10, Terra at **$1 / $5**, Luna at $0.10 / $0.50. Its predecessor, GPT-5.6 Terra, cost $2 / $12. It's GA on the API, on Bedrock, in Copilot and on OpenRouter, with a 1.05 million token context. It isn't frontier: 51 on the Artificial Analysis index leaves it one point outside the top ten. I'm covering it because that's about where most production features live, and because this is the week the index moved to v5.

### The numbers that matter

Scores and cost per task are from the Artificial Analysis leaderboard, index v5:

| Model and effort | Index v5 | Cost per task | Per million tokens |
|---|---|---|---|
| Terra (max) | 51 | $0.96 | $1 / $5 |
| Terra (high) | 42 | $0.26 | $1 / $5 |
| Sol (max) | 55 | $1.27 | $2 / $10 |
| Sol (medium) | 46 | $0.36 | $2 / $10 |
| Astra (medium) | 51 | $2.73 | $10 / $50 |
| Sonnet 5.5 (max) | 54 | $10.02 | $2 / $10 |
| Sonnet 5.5 (xhigh) | 50 | $4.09 | $2 / $10 |
| Sonnet 5.5 (high) | 41 | $1.64 | $2 / $10 |

Against [Sonnet 5.5](https://cloudlesslabs.com/stack/anthropic-api/index.md), the case is easy. Terra at max matches Sonnet at xhigh for about a quarter of the money, and Terra at high matches Sonnet at high for about a sixth. Close, not equal: Sonnet at max is still 3 points above anything Terra reaches, at ten times the cost.

Now the part OpenAI's price sheet hides. Sol costs twice as much per token and only 32% more per task at max, for 4 more points. So Terra must be burning about one and a half times the tokens (my inference from those figures). Further down, Sol at medium scores 46 for $0.36, and Terra needs xhigh to reach 45 for $0.40. **At the same spend, the dearer model wins.** Terra earns its place in high-volume work at the low end, where $0.26 a task is enough. If reliability is what you're buying, and it usually is, I'd test Sol first.

### Gotchas

- **No Australian route.** From Sydney, Bedrock reaches Terra only through the Global profile, which can process anywhere. OpenAI's Australian setting stores data here and doesn't process it here. Sonnet 5.5 has an AU profile at $2.20 / $11. That alone decides it for any client whose data must stay here.
- **The default effort is medium, which scores 38.** Set `reasoning.effort` yourself, and compare models at equal scores, not at equal settings.
- **Above 272K input tokens, the price jumps to $2 / $7.50.** The 1.05 million window isn't the headline price.
- **It takes more liberties.** OpenAI's own safety addendum has Terra taking unauthorised actions in 13.75% of one evaluation, against 1.25% for Sol. For agents, use least-privilege tools and approval gates on writes.
- **Zero data retention on OpenRouter means Azure EU, at $1.20 / $6.** And Terra Pro has the same token price but spends far more tokens.

### How I'd wire it for a client

Split by data. Client data that must stay in Australia stays on Sonnet 5.5 through Bedrock's AU profile, and you accept the bill. Everything else runs through OpenRouter with [AI Gateway](https://cloudlesslabs.com/stack/cloudflare-ai-gateway/index.md) in front for spend caps, with Terra and Sol tested side by side on the client's own prompts. Above a score of about 45, I'd expect Sol to win.

### My verdict

**Pilot, next to Sol. Medium risk, since it's a week old with no Australian route, and its numbers swing hard with effort. It doesn't change my pick for Australian data, and it makes "Sonnet by default" harder to defend everywhere else.**

Sources:

- [Artificial Analysis: model leaderboard](https://artificialanalysis.ai/leaderboards/models)
- [OpenAI API pricing](https://developers.openai.com/api/docs/pricing)
- [Bedrock model card: GPT-6.1 Terra](https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-6-1-terra.html)
- [AWS: GPT-6.1 Terra on Amazon Bedrock](https://aws.amazon.com/about-aws/whats-new/2026/10/openai-gpt-6-1-terra-on-amazon-bedrock/)
- [OpenRouter endpoints for Terra](https://openrouter.ai/api/v1/models/openai/gpt-6.1-terra/endpoints)
- [OpenAI: GPT-6.1 Terra safety addendum](https://deploymentsafety.openai.com/gpt-6-1-terra)

## OpenRouter's new default provider routing, by OpenRouter

- Update. Verdict: No change to my pick. Low risk.
- Pain: Your gateway sent most requests to the cheapest host, whether or not that host was any good: 7.1% of requests hit a rate limit, and the slowest 5% took over 41 seconds. You paid for that in retries and in users waiting.
- Fix: Since 28 October, OpenRouter scores every host on what a good answer costs: effective price, speed, rate limits, errors and tool-call quality. No code change. One parameter brings the old behaviour back.
- Value: By OpenRouter's own test, about 6% dearer per request, with 46% fewer rate-limit hits and a 16% faster slowest 5%.
- Company: OpenRouter, founded 2023; joining Stripe was announced in August 2026
- Product: Live for every request with no explicit sort or order; the docs state no stability policy for routing defaults
- In The Stack: [OpenRouter](https://cloudlesslabs.com/stack/openrouter/index.md), [Cloudflare AI Gateway](https://cloudlesslabs.com/stack/cloudflare-ai-gateway/index.md)

### What changed

Until now, [OpenRouter](https://cloudlesslabs.com/stack/openrouter/index.md)'s default ranked hosts almost entirely by input price. About 77% of its requests go to models served by more than one host, so that default set the price and the quality for most of its traffic. Since 28 October, it scores each endpoint live on what a good answer costs: effective price (from measured cache hits and token mix), throughput, time to first token, rate limits, errors, and whether tool calls come back well formed. Traffic is shared among the hosts near the best score, and laggards keep a trickle so they can recover. It applies to every request that has no explicit `sort` or `order`, and you didn't get a vote.

Here's OpenRouter's own test, one week and 24 million requests of open models:

| | Old default | New default |
|---|---|---|
| Cost per thousand requests | $1.25 | $1.32 (+6.0%) |
| Cost per million tokens | $0.301 | $0.324 (+7.3%) |
| Time to first token, slowest 5% | 4.6 s | 3.7 s |
| Whole request, slowest 5% | 41.5 s | 34.9 s |
| Requests hitting a rate limit | 7.1% | 3.8% |
| Requests needing a retry | 10.4% | 6.9% |

These are the vendor's numbers, and I'd want to see them on your traffic. But the logic is sound: a cheap token on a host that throttles you isn't cheap.

### Why the cheapest host was never that cheap

Look at DeepSeek V4.1 Flash on the live endpoints list. There are about 38 of them, from $0.035 per million input tokens to $0.45, which is about 13 times apart. The cheapest serve fp4 quantization, and the block at $0.30 mostly doesn't say. So the old default could buy you more than a flakier host: possibly a different build of the model from the one you evaluated.

### Gotchas

- **Your bill can rise with no code change.** If a client's budget is tight, set `provider.sort` to `price`, add `:floor` to the slug, or set the account default. Or keep the new router and cap it with `max_price`.
- **`provider.order` and any explicit `sort` bypass the new router,** so old pinned setups quietly miss its back-off. If you only want to limit the field, `only` and `ignore` keep the new algorithm choosing among what's left.
- **It doesn't pin the build.** The router optimises for cost and speed, not for the quantization you tested. Use `quantizations: ['fp8']` with `require_parameters: true`, or name the host.
- **Privacy defaults haven't moved.** `data_collection` still defaults to `allow`. Send `deny` and `zdr: true` on client data. The candidate pool shrinks, and that's the point.
- **Baselines from before 28 October are stale.** Each request picks a host by weighted chance, so log which host answered, and pin one for evals. Chat stays sticky while the prompt cache is warm; one-shot jobs with a shared prefix don't, so pin those too.
- **There's no stability policy for routing defaults.** It changed once without asking, and it can change again. Pin explicitly where cost is critical.

This fixes a line in my own [stack entry](https://cloudlesslabs.com/stack/openrouter/index.md), which still says "weighted towards the cheapest". Vercel's AI Gateway shipped virtual models the same day, a stable ID with fallbacks you change without touching code, at no markup. That's a good answer to the same problem, for teams already there.

### My verdict

**No change: OpenRouter stays my default, and I'd keep the new router for anything user-facing. Low risk. For batch jobs, where nobody is waiting and you've tested the build, pin `sort: price`.**

Sources:

- [OpenRouter: How we rebuilt provider routing](https://openrouter.ai/blog/announcements/how-we-rebuilt-provider-routing/)
- [OpenRouter docs: provider selection](https://openrouter.ai/docs/guides/routing/provider-selection)
- [DeepSeek V4.1 Flash endpoints (live prices)](https://openrouter.ai/api/v1/models/deepseek/deepseek-v4.1-flash/endpoints)
- [Vercel: AI Gateway virtual models](https://vercel.com/blog/ai-gateway-virtual-models)

## Gemini 4 Carbon, by Google

- New. Verdict: Watching. Medium risk.
- Pain: The smartest model you can call, Claude Opus 5.5, costs about $10 a task. So you ration it to the steps where a wrong answer hurts, and everything else runs on something dumber.
- Fix: Gemini 4 Carbon scores 59 on the independent index, one point above Opus, for $7.76 a task at the same $4 / $20 list price, using 29% fewer output tokens. Today only vetted cyber defenders can call it.
- Value: The frontier could get 23% cheaper per task, the day Google lets you buy it. No date yet.
- Company: Google DeepMind
- Product: Limited access since 28 October 2026; not on the Gemini API, OpenRouter or any public price list
- In The Stack: [Anthropic API (for client systems)](https://cloudlesslabs.com/stack/anthropic-api/index.md), [OpenRouter](https://cloudlesslabs.com/stack/openrouter/index.md)

### What happened

Google announced Gemini 4 Carbon on 28 October, a bigger sibling of Argon tuned for finding, exploiting and patching vulnerabilities. It went to "a subset of cyber defenders". Developers get it "as soon as possible", with no date. It isn't on the Gemini API's model or pricing pages, and it isn't on OpenRouter. I couldn't confirm a Vertex listing either. So whatever follows is about a model you can't call.

It also landed the same week Artificial Analysis rebuilt its index. Version 5 puts 60% of the score on private datasets, and it moved everything. The numbers in earlier editions of this report used the old scale, so don't compare across editions: Kimi K3.1 Pro was 55 in last week's edition and is 46 now. The gap between the best closed model and the best open one went from 3 points to 12.

| Model and effort | Index v5 | Cost per task | Can you call it? |
|---|---|---|---|
| Gemini 4 Carbon (high) | 59 | $7.76 | No |
| Claude Opus 5.5 (max) | 58 | $10.04 | Yes |
| GPT-6 Astra (max) | 57 | $6.24 | Yes |
| GPT-6.1 Sol (max) | 55 | $1.27 | Yes |
| Claude Sonnet 5.5 (max) | 54 | $10.02 | Yes |
| Gemini 4 Argon (high) | 50 | $7.68 | Yes |
| Kimi K3.1 Pro (best open-weights score, weights not released) | 46 | $3.68 | Yes, as an API |

### Why it matters anyway

Carbon's list price is the same as Opus's, $4 / $20. It costs 23% less per task because it writes 29% fewer output tokens: 123,000 against 173,000 for a task on the index. There's the week's theme again. Two models at the same token price, and one is nearly a quarter cheaper to run. Google quotes an introductory $2 / $10 with no end date, which would roughly halve that $7.76 (my arithmetic: the index's cost uses the $4 / $20 list price). Don't budget on it.

The more useful line in that table is one you can buy today. **Sol at max scores 55 for $1.27.** That's a point above Sonnet at max, at about an eighth of the cost per task. Sol launched on 29 September, so that's context, not news, but the new index makes it hard to ignore. If you think, as I do, that reliability in software comes down to intelligence for now, the best deal in intelligence isn't this week's winner. Astra at max is the other one: 57 for $6.24, already cheaper per task than Carbon.

### Gotchas

- **Google's launch benchmarks are its own,** run without the guardrails the shipped model will carry. Wait for the index to run it on a public endpoint.
- **The Fairwind Program's page names Argon,** not Carbon, as what it gives access to, and it asks for background checks and works through a Google Cloud account team. It isn't a side door for you.
- **If you're on Argon, your bill doubles on 1 December.** It's $2 / $10 until 30 November, then $4 / $20. At that price, its score of 50 is hard to defend.
- **Nothing is stated for Australia.** For data that must stay here, this doesn't exist yet.

### What would change my mind

Carbon listed on OpenRouter or the Gemini API at a stated price, with a score that holds on the guarded model. Then it's a pilot on the day. Until then, it's a good chart.

### My verdict

**Watch. Medium risk, because neither access nor price is settled. Nothing changes in my stack, and if you want the frontier's economics today, test Sol.**

Sources:

- [Google: Introducing Gemini 4 Carbon](https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-carbon/)
- [Artificial Analysis: Gemini 4 Carbon, new number 1](https://artificialanalysis.ai/articles/gemini-4-carbon-new-number-1)
- [Artificial Analysis: Intelligence Index v5](https://artificialanalysis.ai/articles/artificial-analysis-intelligence-index-v5)
- [Artificial Analysis: model leaderboard](https://artificialanalysis.ai/leaderboards/models)
- [Gemini API pricing (Carbon not listed; Argon's change)](https://ai.google.dev/gemini-api/docs/pricing)
- [Google DeepMind: Fairwind Program](https://deepmind.google/fairwind-program)

## Cloudflare's report on leaked prompts in GLM-5.3 on Workers AI, by Cloudflare and SGLang

- New. Verdict: No change to my pick. Medium risk.
- Pain: You send a client's documents to a shared open-model host and assume its GPUs keep them apart from the next customer's. If they don't, you get no error and no log line, and the client never hears about it.
- Fix: Cloudflare's 26 October report: for 13 days, 155 long GLM-5.3 responses carried other people's data, now fixed. Treat shared inference as a trust decision, and keep regulated data on Bedrock in Sydney.
- Value: Only prompts over 681,280 tokens on one model. The engine bug behind it is wider, and it's silent.
- Company: Cloudflare; SGLang is an open-source inference engine
- Product: Workers AI is GA; the bug was fixed on 9 September, and SGLang's fix is in v0.5.21 and later
- In The Stack: [Cloudflare Workers AI](https://cloudlesslabs.com/stack/cloudflare-workers-ai/index.md), [OpenRouter](https://cloudlesslabs.com/stack/openrouter/index.md), [Amazon Bedrock](https://cloudlesslabs.com/stack/aws-bedrock/index.md)

### What happened

On 26 October, Cloudflare published a detailed report on an incident on [Workers AI](https://cloudlesslabs.com/stack/cloudflare-workers-ai/index.md). GLM-5.3 launched on 27 August with an advertised context of 1,048,576 tokens and a memory pool that held only 681,280. A prompt bigger than the pool was marked rejected, but a bug in SGLang's disaggregated serving, where prefill and decode run on separate GPUs, let the request carry on. It then read memory pages left behind by earlier requests. Those pages are never wiped between requests.

Result: 155 responses, over 13 days, contained data from other people's prompts. An outside researcher's report through HackerOne brought it to light, not Cloudflare's own monitoring. Once the incident was declared on 9 September, the model was offline within 38 minutes, and it came back fixed the same day. Cloudflare says it found no sign of deliberate exploitation. The public report came 47 days after that.

### Read it carefully, in both directions

Don't overstate it. It's one model, and only prompts over 681,280 tokens, which almost nobody sends. If you never sent those to GLM-5.3 between 27 August and 9 September, there's no known exposure. Cloudflare also wrote an unusually honest post-mortem, with the cause, a timeline and its own mistakes, which is more than most vendors publish.

Don't understate it either:

- **You can't check.** The report offers no log query and doesn't describe notifying customers directly. SGLang's own post says this corruption leaves no error or log line. If you need certainty, ask Cloudflare in writing.
- **The bug isn't Cloudflare's alone.** SGLang says the race affects disaggregated deployments from v0.4.x through v0.5.21, with no backports. Other hosts run this engine, and none has said anything. I found no evidence either way on the hosts behind OpenRouter's GLM-5.3.
- **Isolation isn't a line item.** Page zeroing is still a draft pull request upstream, and Cloudflare's report offers no isolated tier to buy.

### What the alternatives actually promise

| | What's promised | What isn't |
|---|---|---|
| OpenRouter with `zdr: true` | The host doesn't store your data | Anything about memory shared between customers, and in-memory caching doesn't count as retention |
| Bedrock | Model vendors have no access to the deployment accounts, which AWS owns | The prompt caching page makes no isolation promise, but Claude caching is opt-in, so you can leave it off |
| Workers AI | Nothing written on this; the fixes are in the report | You can't pin inference to Australia |
| Self-hosted SGLang | Whatever you build: v0.5.22 or later, a pool larger than the context, checksums on | Your weekend |

### What I tell clients

Zero data retention covers what a host keeps. It says nothing about what the GPU still holds when the next request arrives. So sort the data, not the models. Regulated or truly confidential data goes through Bedrock in Sydney. Anything else can use a shared host with `zdr: true`, and with prompts well under the host's stated limits, since the edge of a limit is where this one lived. Don't read this as "OpenRouter is safe and Cloudflare isn't". Nobody has shown that, and the same engine may sit behind a host you use.

### My verdict

**No change: Workers AI stays a skip for me, now with a data-isolation reason next to price and rate caps. Medium risk, and most of it is the class of bug, not this incident.**

Sources:

- [Cloudflare: cross-request KV cache exposure in GLM-5.3](https://blog.cloudflare.com/kv-cache-exposure-remediation/)
- [LMSYS: SGLang's security post](https://lmsys.org/blog/2026-10-26-cf-security)
- [OpenRouter docs: zero data retention](https://openrouter.ai/docs/features/zdr)
- [Bedrock docs: data protection](https://docs.aws.amazon.com/bedrock/latest/userguide/data-protection.html)
- [Bedrock docs: prompt caching](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html)

## joey-1, a decision model at a penny per million tokens, by Baseten

- Follow-up. Verdict: Watching. Medium risk.
- Pain: Routing a ticket or flagging a refund through a chat model takes seconds, costs $2 / $10 per million tokens on Sonnet 5.5, and returns prose you parse, with no number to set a threshold on.
- Fix: Baseten's joey-1 returns one label and a calibrated probability in a single pass: $0.01 per million input tokens, output free, 20 ms at the median by its own count, with MIT weights you can run yourself.
- Value: Nearly four times cheaper than Clef Flash, and well behind it on private tests. Cheapest, not best.
- Company: Baseten, with SOC 2 Type II and HIPAA; Base Labs is its in-house research lab
- Product: GA on Baseten Model APIs since 29 October 2026; open weights; vendor-run benchmarks only
- In The Stack: [Cloudflare Workers AI](https://cloudlesslabs.com/stack/cloudflare-workers-ai/index.md), [OpenRouter](https://cloudlesslabs.com/stack/openrouter/index.md), [Anthropic API (for client systems)](https://cloudlesslabs.com/stack/anthropic-api/index.md)

### What happened

Six weeks after Jev opened the category, the price of a decision hit a penny. On 29 October, Baseten's lab released joey-1: a 2B model with open MIT weights that you send a state and typed questions (yes or no, a choice, a score), and it returns probabilities in one pass, with no generated text. It costs **$0.01 per million input tokens**, output free. Baseten's own example: 10 million tickets of 500 tokens a month is about $50. It's the third in a family, after elephant-1 (9B) and mammoth-1 (27B), which share one request shape you swap by name.

It isn't alone. Liquid's d1-2B weights appeared on 24 October under its own licence, and its LFM3 family followed on the 27th. Microsoft-Decision-1 went to public preview on 9 October, and AWS's Strands Decider 2B was out by 2 October. In [W43](https://cloudlesslabs.com/weekly/2026-w43/index.md) I said an idea copied this fast is real. A penny per million is what that looks like a few weeks later.

| Model | Per million input tokens | Status | Weights |
|---|---|---|---|
| joey-1 (Baseten) | $0.01, output free | GA, days old | MIT |
| Clef Flash (Workers AI) | $0.038, output free | On Workers AI | Apache 2.0 |
| Jev (TypeSafe AI) | $0.042 | Early access | Hosted only |
| OpenAI Decisions | $0.10, output free | GA | Hosted only |
| Sonnet 5.5 (what you'd otherwise use) | $2, output $10 | GA | Hosted only |

### Cheap isn't the same as good

Base Labs' Hugging Face card has its own run of the Jev Decision Index: joey-1 63.3, Clef 61.71, Jev 1.14 60.7, and elephant-1 72.24. All vendor-run, so read them as a rough order. They flatter it. On the Decision Index's private tests, joey-1 scores 35.91, against 44.43 for Clef Flash and 60.26 for elephant-1, and only 15.25 on domains it hasn't seen. So this isn't level with Clef. And elephant-1's nine more points cost 3.5 times as much, at $0.035, which is still next to nothing. I'd start testing there unless your volume is enormous.

The same card lists an AUROC of 0.48 on a judge benchmark for safe agents. That's a coin toss, published by the vendor itself. **So don't let joey-1 approve anything dangerous.** I found no independent evaluation of any of these models, and nothing that tests how easily misleading text sways them.

### Gotchas

- **Hard limit of 16,384 tokens on Model APIs.** Longer requests are refused, not truncated. Trim the state first.
- **Low default rate limits:** 15 requests a minute unverified, 120 verified or on Pro. Verify the account, and batch several questions into one request.
- **No region list, and no sign of Sydney.** Serving regions on the shared endpoint can change. For Australian data, self-host the weights on a GPU in ap-southeast-2. That's what MIT is for.
- **The `latest` slug moves** when Base Labs refreshes the weights. Keep your labelled test set and re-run it on every change, or self-host a pinned revision.
- **Don't compare latencies across vendors.** joey-1's 20 ms is Baseten's own figure, and Clef's 38.8 ms from W43 came from another setup.
- **Untrusted text belongs in `state`, never in `instructions`.** Add an abstain threshold and a human for anything consequential.

### My verdict

**Watch. Medium risk, and high for approvals or anything safety-related. Label 200 of your own cases and run joey-1, elephant-1 and Clef Flash against them. Open weights are still your exit, and now there's a second one.**

Sources:

- [Baseten: Decisions for a penny, introducing joey-1](https://www.baseten.co/blog/decisions-for-a-penny-introducing-joey-1/)
- [joey-1 on Hugging Face](https://huggingface.co/baselabs/joey-1)
- [Baseten model library, joey-1](https://www.baseten.co/library/joey-1/)
- [Baseten pricing](https://www.baseten.co/pricing/)
- [Baseten decision models docs](https://docs.baseten.co/inference/model-apis/decision-models.md)
- [Clef Flash on Workers AI](https://developers.cloudflare.com/workers-ai/models/clef-flash/)
- [Liquid d1-2B](https://huggingface.co/LiquidAI/d1-2B)

## Decision models that read images, by TypeSafe AI, Baseten and Cloudflare

- New. Verdict: Worth a pilot. Medium risk.
- Launched 14 October 2026 (baseline context, not this week's news)
- Pain: Checking a parcel photo, reading a scanned form or routing a screenshot meant a chat model with vision and free text to parse, or OCR plus a classifier you keep training. That's slow or heavy for a yes or no.
- Fix: Decision models now take the image and return a probability: Jev from TypeSafe AI (experimental), joey-1 from Baseten (GA, days old) and Clef from Cloudflare. About $0.004 to $0.25 per 1,000 images, by my arithmetic. None has a Sydney option.
- Value: A yes or no from a picture, with a number to set a threshold on. Pilot Clef Flash, and keep Jev to experiments.
- Company: TypeSafe AI is about two years old; Baseten and Cloudflare are established
- Product: Jev images: early access, off by default. joey-1: GA since 29 October 2026. Clef: on Workers AI since 1 October 2026, no beta label
- In The Stack: [Cloudflare Workers AI](https://cloudlesslabs.com/stack/cloudflare-workers-ai/index.md), [OpenRouter](https://cloudlesslabs.com/stack/openrouter/index.md), [Anthropic API (for client systems)](https://cloudlesslabs.com/stack/anthropic-api/index.md)

### What I should have told you in W43

Added to this edition on 2 November, after it first went out. On 14 October, TypeSafe turned on images for Jev, and in [W43](https://cloudlesslabs.com/weekly/2026-w43/index.md) I reduced that to a warning about experimental headers. That undersold it. A decision model that can look at a picture is a new tool for a whole class of jobs: is this parcel damaged, is an error on this screen, which team should get this form. And it isn't only Jev. Cloudflare's Clef takes images, and so does last week's [joey-1](#joey-1-decisions). OpenAI's Decisions API does too, so this is a category, not a feature.

You send an image and typed questions, and you get probabilities back in one pass, with no text to parse. Above your threshold, you act. Below it, a person or a bigger model looks.

### Side by side

| | Jev | joey-1 | Clef Flash |
|---|---|---|---|
| **Made by** | TypeSafe AI | Baseten | Cloudflare |
| **Where the image goes** | Anywhere: state, instructions or criteria | A user message under `state.messages` | An `images` array before the state |
| **How you send it** | Multipart or base64 | Base64, or a URL on S3, GCS or Azure Blob | Base64 only, no remote URLs |
| **Limits** | PNG, JPEG; 280 to 1,568 px a side; 16 MiB | PNG, JPEG, WebP; 16 images; size not published | PNG, JPEG, WebP; 4 images; 4 MiB and 16 MP each |
| **Answers** | Yes or no, choice, score, box (1.14 only) | Yes or no, choice, score | Yes or no, choice, score |
| **Per million input tokens** | $0.042, output free | $0.01, output free | $0.038, output free |
| **1,000 images of about 1 MP** | About $0.04 if each is 1,000 tokens | About $0.004 at 394 tokens each | $0.039 at the 1,024-token cap |
| **Speed on images** | 0.38 s (1.13.0), 0.39 s (1.14.0) | Nothing published | 0.62 s |
| **Speed on text, each vendor's own test** | 524.1 ms, measured by Cloudflare | 20 ms | 38.8 ms |
| **Image JevBench score** | 72.4 (1.13.0), 60.2 (1.14.0) | Not listed | 52.2 |
| **Status** | Early access; images off by default, not production-ready | GA, released 29 October | On Workers AI, no beta label, "still early" |
| **Where it runs** | US on Vercel's listing; no region list | US on Vercel's listing; no region list | Cloudflare's edge; no pinning documented |
| **Sydney** | No | Self-host | Self-host |
| **Weights** | Closed | MIT | Apache 2.0 |

The costs are my arithmetic. Only Cloudflare publishes how an image becomes tokens. TypeSafe doesn't, so its 1,000 tokens is my assumption, and one tester's real run came to about $0.11 per 1,000 screenshots with questions. Baseten's 394 comes from one screenshot in its docs. Clef's bigger models cost more: $0.154 per 1,000 for Clef-omni, which also takes audio and video, and $0.246 for Clef, which scores 58.1 at 1.18 s. Image speeds and scores are from Image JevBench, a beta benchmark and one person's project, so read them as a rough order.

### The price isn't the point

For comparison, by the same arithmetic, 1,000 images of that size cost about $2.59 on Claude Sonnet 5.5 and $0.13 on Haiku 5.5, plus the output. So Clef Flash is about 66 times cheaper than Sonnet, but only about three times cheaper than Haiku. At these prices the bill rarely decides. What you're buying is a calibrated number you can set a threshold on, with no output to pay for or parse.

The one hands-on test I found shows why that matters. On 1,000 synthetic ticket screenshots, Jev 1.14 got 934 right. With a 65% confidence gate, 899 went through automatically, all correct, and the 66 errors all landed in the 101 sent for review. It's one author and synthetic data, but that's the shape of the promise.

### Gotchas

- **`jev-latest` got worse at images.** It now points at 1.14.0, which scores 60.2 against 72.4 for 1.13.0 on Image JevBench. Pin a version, and test both on your own images.
- **Jev images are off by default.** Without the `TypeSafe-Danger-Zone-Images: true` header, the request returns 400, and TypeSafe says format and limits can change. Play with it, don't marry it.
- **A Jev box always comes back,** even when the thing isn't there. Ask a yes-or-no question first. One out-of-range image also fails the whole request, so normalise them first.
- **Your gateway may not carry this.** OpenRouter lists neither joey-1 nor Clef, and Vercel lists joey-1 as text-only. Call Baseten and Cloudflare directly.
- **Words inside the picture can steer the answer.** In DecisionRobust, an academic test, a planted instruction inside an image won 57% of the time on Jev 1.13 and 53% on OpenAI's Decisions API. Clef and joey-1 weren't tested. Never make one of these the only gate on anything consequential.
- **Nobody has shown joey-1 on images.** It has no image benchmark, and Baseten publishes no size limits or token rule. Measure `usage.input_tokens` yourself.
- **Nothing is documented for Australia.** For data that must stay here, self-host joey-1 or Clef in ap-southeast-2. Jev is closed, so it can't do that.

### How I'd wire it for a client

Pick one job with a real cost, such as damaged-parcel photos. Label 200 of the client's own images, and run Clef Flash and joey-1 against them, and Jev 1.13.0 to see what you're missing. Set the threshold from those results, and send everything below it to a person. Clef Flash is my starting point, for its documented limits, its token rule and open weights you can leave with. joey-1 is the one to beat on price, once someone shows what it does on images. Every decision model, on every measure, is in [Which decision model?](https://cloudlesslabs.com/stack/guides/which-decision-model/index.md).

### My verdict

**Pilot, behind a confidence gate with a review queue. Medium risk: it's all under two months old, with one beta benchmark between them. Jev has the best image score and the only bounding box, and it stays an experiment until TypeSafe takes it out of the danger zone.**

Sources:

- [TypeSafe: Jev 1.14, images, Box and longer context](https://typesafe.ai/blog/jev-1-14)
- [Jev images documentation](https://docs.typesafe.ai/go/images)
- [Jev Box documentation](https://docs.typesafe.ai/go/box)
- [Baseten System One API reference](https://docs.baseten.co/reference/inference-api/system-one.md)
- [Baseten decision models docs](https://docs.baseten.co/inference/model-apis/decision-models.md)
- [Clef Flash on Workers AI](https://developers.cloudflare.com/workers-ai/models/clef-flash/)
- [Clef-omni on Workers AI](https://developers.cloudflare.com/workers-ai/models/clef-omni/)
- [Workers AI pricing](https://developers.cloudflare.com/workers-ai/platform/pricing/)
- [Image JevBench (Benchmark Heaven, beta)](https://benchmarkheaven.com/image-jev-bench)
- [Decision Index Vision leaderboard](https://huggingface.co/datasets/multimodalart/decision-index-vision-leaderboard)
- [Hands-on test of Jev's image questions (third-party)](https://www.theaiautomators.com/jev-image-questions-screenshot-automation/)
- [Claude vision docs](https://platform.claude.com/docs/en/build-with-claude/vision)
- [OpenAI Decisions guide](https://developers.openai.com/api/docs/guides/decisions)

## Durable Objects defer code updates by default, by Cloudflare

- Update. Verdict: No change to my pick. Medium risk.
- Pain: Every deploy restarted all your active Durable Objects and dropped every WebSocket. So you built reconnect logic for your own releases, and you didn't ship during the live event.
- Fix: Since 30 October, a busy object keeps its old code until it hibernates, or for 5 minutes at most by default. Clients on the Hibernation API stay connected through the swap. No flag to set.
- Value: Deploy during the auction. The price is two code versions running at once, and that bug is now yours.
- Company: Cloudflare
- Product: Default behaviour on a GA product since 30 October 2026; best effort, and a runtime update can still reset objects
- In The Stack: [Cloudflare Durable Objects](https://cloudlesslabs.com/stack/cloudflare-durable-objects/index.md), [Cloudflare Workers](https://cloudlesslabs.com/stack/cloudflare-workers/index.md)

### What changed

[Durable Objects](https://cloudlesslabs.com/stack/cloudflare-durable-objects/index.md) used to apply a deploy on the spot. Every active object reset, in-flight requests touching storage errored, and every WebSocket dropped. My catalog's advice was blunt: don't deploy during a live event.

As of 30 October, on every Durable Object with no flag or compatibility date, a busy object keeps its current code until it hibernates (about 10 seconds idle), then wakes on the new code. If it never goes quiet, it's reset after 5 minutes by default; you can set anywhere from 0 seconds to 24 hours. Clients on the Hibernation API stay connected through the swap. An object runs one version at a time, so there's no double billing and no fee for this. Duration is only billed while an object is active.

### The bug you just inherited

The old pain was loud. The new one is quiet: **two versions of your code now run at once, for minutes,** and a new Worker can call an object still on the old code. This is where a deploy will bite you:

- **RPC between Workers and objects must work both ways.** Add methods and optional fields first. Remove the old ones in a later deploy, after `max_delay` has passed.
- **SQLite schema changes need expand and contract.** Add first, make both versions tolerate both shapes, and drop later. Run migrations idempotently in the constructor. The docs give no recipe for this, so that's my advice, not Cloudflare's.
- **Versions get skipped.** Each deploy starts its own timer, and the first to expire jumps the object to the latest code. An object can go from v1 to v3, so v2's migration may never run on it. Make migrations cumulative.
- **Emergency fixes need the flag.** A security fix can't wait 5 minutes: deploy with `--durable-objects-code-update-mode immediate`. Rollbacks accept it too.
- **Gradual deployments stretch the mixed period.** Keep the compatibility rule for the whole rollout, plus `max_delay`.
- **The strategy is per Worker, not per class, and doesn't carry over between deployments.** You can't read it back from the API either. Keep it in the wrangler config under version control.

### What it doesn't do

It's best effort. A Workers runtime update can still reset an object early, and there are no shutdown hooks. Objects on the standard WebSocket API, or holding timers or open outbound connections, never hibernate, so they sit there until `max_delay` and drop anyway, and they keep paying duration while they wait. **Keep your client's reconnect logic.** Use the Hibernation API and alarms if you want the benefit.

On AWS, API Gateway WebSockets have long kept connections through a Lambda deploy, because the connection lives in the gateway, but then all your state lives somewhere else, and in the auction example in my catalog that costs an order of magnitude more. That's still the trade, and this change tips it further toward Durable Objects.

The Pulumi and Terraform releases I checked predate this and don't expose the setting. The default should apply when the field is omitted, by my reading of the docs; I haven't tested it. If you need to override it through IaC, expect a wrangler step for now.

### My verdict

**No change: still my pick for live, shared, short-lived state, and a better one. Medium risk, not because of the feature, but because a mixed-version bug is now possible on every deploy and nobody opted in. Read your RPC surface this week.**

Sources:

- [Cloudflare changelog: Durable Objects defer code updates by default](https://developers.cloudflare.com/changelog/post/2026-10-30-durable-objects-deferred-code-updates/)
- [Durable Objects code updates](https://developers.cloudflare.com/durable-objects/deployments/durable-objects-code-updates/)
- [Lifecycle of a Durable Object](https://developers.cloudflare.com/durable-objects/concepts/durable-object-lifecycle/)
- [Durable Objects pricing](https://developers.cloudflare.com/durable-objects/platform/pricing/)

## Lambda durable functions telemetry exporter, next to Temporal on Lambda, by AWS, and Temporal

- Follow-up. Verdict: Worth a pilot. Medium risk.
- Pain: A multi-step job fails on step 3. On SQS and Lambda it reruns from step 1, and you tune retries until messages stop landing in the dead-letter queue. Durable functions fix that, but the step history expires.
- Fix: AWS's free exporter writes each step's history to one of 13 destinations you choose, with redaction and sampling, and adds a local MCP server for agents. Temporal's Lambda workers are the other way in, in preview.
- Value: A real gap in durable functions closes for no fee. Temporal stays outside the client's account, at a much higher price.
- Company: AWS; Temporal Technologies
- Product: Exporter launched 28 October 2026, status not stated, open source. Temporal Serverless Workers are in public preview
- In The Stack: [Lambda durable functions](https://cloudlesslabs.com/stack/aws-lambda-durable-functions/index.md), [Amazon SQS](https://cloudlesslabs.com/stack/aws-sqs/index.md), [AWS Lambda](https://cloudlesslabs.com/stack/aws-lambda/index.md), [Inngest](https://cloudlesslabs.com/stack/inngest/index.md), [Trigger.dev](https://cloudlesslabs.com/stack/trigger-dev/index.md)

### What happened

Two things landed on 28 October around the same pain. **AWS** shipped the Durable Execution Telemetry Exporter for [Lambda durable functions](https://cloudlesslabs.com/stack/aws-lambda-durable-functions/index.md), at no charge, with a local read-only MCP server so an agent can query what happened. **Temporal** published a write-up of Serverless Workers on Lambda and Cloud Run. Don't mistake that one for a launch: Lambda workers went to public preview on 13 October, and I'd already skipped them in W43's window. What's new is the Cloud Run half and the combined pitch.

### The exporter, which is the part I care about

When I covered durable functions in [W43](https://cloudlesslabs.com/weekly/2026-w43/index.md), I liked the model: per-step retries in plain code, inside the account, without hand-tuning [SQS](https://cloudlesslabs.com/stack/aws-sqs/index.md). But AWS keeps the history for 14 days by default and 90 at most. The exporter sends each step's status, timing, input, output and errors to one of 13 destinations: the function's log group by default, with no stack or IAM needed, or CloudWatch Logs, S3, DynamoDB, Aurora, Redshift, OpenSearch, EventBridge, Firehose, SQS, OTLP, HTTPS or a file. You bring the destination and pay for it. The TypeScript package also ships an optional CDK stack for Athena. It's in every region durable functions run in, and the Sydney price list carries them, at $8.70 per million operations, which settles what I left open in W43.

This is how I'd wire it for a client: start with S3 and Athena, redact first, and sample nothing at low volume. That's a one-afternoon change, and it answers "what happened to order 4417?" without opening a console.

### Next to Temporal

| | SQS + Lambda | Durable functions | Temporal on Lambda |
|---|---|---|---|
| A failure at step 3 | Reruns from step 1 | Retries step 3 | Retries step 3 |
| Status | GA | GA | Public preview, config may change |
| Where state lives | Your account | Your account | Temporal Cloud, outside it |
| Price for 1M three-step runs | About $10 | About $47 | About $200 to $250, plus Lambda |
| Maturity of the workflow tools | None | New | Strong: versioning, replay, visibility |

The first two prices come from my catalog. Temporal's is my own arithmetic: at least 4 or 5 billable Actions per run, at $50 per million. I haven't checked Temporal's billing rules against this exact workload.

Temporal is a serious product, and as a workflow engine it's more mature than durable functions. But for a client on AWS, this adds a paid outside control plane, an IAM role that Temporal assumes in the client's account, mandatory Worker Versioning, and a preview. Temporal's Terraform module only covers that role. The provider has no resource for the worker configuration, so that step is CLI or console, and infrastructure as code or it doesn't exist. I keep it for the client who's already on Temporal.

### Gotchas

- **The exporter sends step input and output unredacted by default.** That's personal data in your log bucket. Set content transforms before production.
- **It can't see `STOPPED` or `TIMED_OUT` executions.** Add an EventBridge rule on the status-change events.
- **The log-group exporter's lines vanish at log level WARN or higher.** Keep INFO.
- **AWS doesn't say GA or preview on the announcement.** The plugin is open source, so read what you install.
- **Temporal on Lambda:** the default 3-second timeout is too short, so use the docs' 600 seconds; and from a VPC, your worker still has to reach Temporal Cloud over the internet.

### My verdict

**Pilot for durable functions on multi-step jobs, as in W43, and now with Sydney settled and the history yours to keep. Medium risk: the product is new. One-step jobs stay on SQS and Lambda. Temporal on Lambda is a skip while it's in preview.**

Sources:

- [AWS: Durable Execution Telemetry Exporter](https://aws.amazon.com/about-aws/whats-new/2026/10/lambda-durable-telemetry/)
- [AWS Compute Blog: observing durable functions](https://aws.amazon.com/blogs/compute/observing-aws-lambda-durable-functions-with-the-durable-execution-telemetry-exporter/)
- [Exporter documentation](https://docs.aws.amazon.com/durable-execution/sdk-reference/observability/telemetry/exporter/)
- [Lambda price list, Sydney](https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AWSLambda/current/ap-southeast-2/index.json)
- [Temporal: Serverless Workers on Lambda and Cloud Run](https://www.temporal.io/blog/serverless-workers-lambda-cloud-run)
- [Temporal and AWS (13 October)](https://temporal.io/blog/temporal-and-aws-a-partnership-built-for-production-grade-ai)
- [Temporal pricing](https://temporal.io/pricing)
- [Deploy a Serverless Worker on AWS Lambda](https://docs.temporal.io/production-deployment/worker-deployments/serverless-workers/aws-lambda)

## Tailscale 1.104.4, the Tailworm fix, by Tailscale

- Follow-up. Verdict: No change to my pick. Low risk.
- Pain: Last week, a public report said one compromised device on your tailnet could use Tailscale SSH or tailscale serve to reach root on your servers, and no fixed release existed.
- Fix: Tailscale 1.104.4, out on 28 October for all platforms, runs SSH socket forwarding as the logged-in user, caps SSH memory and locks down serve. Headscale users also need server 0.29.7.
- Value: A version number to check today, and the hold on Tailscale SSH can come off.
- Company: Tailscale, founded 2019
- Product: Tailscale SSH and Serve are GA; subnet routers were never in scope
- In The Stack: [Tailscale](https://cloudlesslabs.com/stack/tailscale/index.md)

### What happened

Last week [I told you to hold Tailscale SSH](https://cloudlesslabs.com/weekly/2026-w44/index.md) because eleven findings were public and no fix had shipped. On 28 October, Tailscale released **1.104.4** on all platforms, with bulletins TS-2026-014 to 017, and a clear post on what happened. (Skip 1.104.3: it was internal only.)

| Bulletin | What it was | Fix in 1.104.4 |
|---|---|---|
| TS-2026-014 | SSH Unix-socket forwarding ran as root, reaching the Docker socket and the tailscaled local API | Runs as the logged-in user |
| TS-2026-015 | SSH sessions could exhaust memory | Capped and freed |
| TS-2026-016 | Serve's Unix backends could reach privileged sockets | Restricted and revalidated |
| TS-2026-017 | HTTP/2 serve context leaked capabilities across mounts | Computed per request |

### Who was exposed

Tailscale's account matches what I said last week: exploitation needs a device already authorised on your tailnet, and SSH allowed by your policy. If you run plain Tailscale to reach [private AWS resources](https://cloudlesslabs.com/stack/tailscale/index.md), with Tailscale SSH off and no Serve, nothing here applied to you, and subnet routers were never in scope.

### What's still open

By the Tailworm site's own tally, 1.104.4 closes findings 1, 2, 3, 5, 7, 8 and 11, plus the client part of 6. Three remain:

- **Finding 4,** egress through the pre-release app connector, is only partly fixed, on `main` and unreleased. Tailscale says stable app connectors aren't affected. Don't give pre-release connectors to users you don't trust.
- **Findings 9 and 10** stay as they are: Tailscale calls them working as designed. Bypassing the Funnel check needs local admin, and `TS_SERVE_ALLOW_ALL_INTERFACES` is an opt-in. Don't set it, and keep local admin short.

### What to do

1. Check every node: `tailscale version` must say 1.104.4 or later. The sources don't settle how clients auto-update, so look rather than assume.
2. On headscale, upgrade the server to 0.29.7 (30 October) as well. The server part of finding 6 lives there.
3. Where you don't need forwarding, set `TS_SSH_DISABLE_FORWARDING=1` in the tailscaled environment and restart, even after patching.
4. Use check mode and non-root users in your SSH rules, in the policy file, under version control. Four bulletins in one release tell you SSH and Serve are the layers to keep small.

Credit where due: from report to fix took about four days (Tailscale dates the report 24 October, a day before I did), with a straight account of what happened. That's how I want a vendor I depend on to behave, and it's why this stays my default.

### My verdict

**No change. Tailscale stays my default, and the hold on Tailscale SSH comes off once your nodes are on 1.104.4. Low risk.**

Sources:

- [Tailscale: SSH findings and fixes](https://tailscale.com/blog/tailscale-ssh-findings-fixes)
- [Tailscale security bulletins](https://tailscale.com/security-bulletins)
- [Tailscale changelog](https://tailscale.com/changelog)
- [Tailworm report, with its status per finding (third-party)](https://www.tailworm.com/)
- [headscale releases](https://github.com/juanfont/headscale/releases)

## Looked at, skipped

- [Malicious Claude Code extension in the Cursor marketplace](https://cursor.com/blog/claude-code-extension-security-notice) (Cursor): Not my stack's marketplace, so not an item, but check it if your people use Cursor. Anthropic.claude-code 2.1.312 and 2.1.313, on macOS and Windows, sat there for about 11 hours on 29 October and planted an SSH backdoor. Run Cursor's check script and look for a key labelled svc-telemetry: uninstalling alone may not remove it.
- [Better Auth security release on 3 November](https://better-auth.com/blog/security-release-2026-11-03) (Better Auth): Nothing to report yet, because the advisories land tomorrow, for 1.7.x and 1.8.0-beta.x. Stay on the current release of your line (1.7.15 today), never below 1.7.7, and be ready to update on Tuesday.
- [Runpod REST v1 retirement and Batch Inference](https://docs.runpod.io/release-notes) (Runpod): A date for your calendar: REST v1 retires on 15 November, and Terraform provider 2.0.0 needs a migration first. Batch Inference at up to 30% off is welcome, but it does nothing for my actual Runpod pain, which is GPU stock in Asia-Pacific.
- [Claude Code removes fast mode on Opus 4.8](https://github.com/anthropics/claude-code/releases/tag/v2.1.316) (Anthropic): Removed on 30 November, and those requests then return an error with no fallback. Search your agent configs for a pinned Opus 4.8 now. Housekeeping, not news.
- [GitHub Actions on several clouds, and workflow lockfiles GA](https://github.blog/changelog/2026-10-28-github-actions-adds-multi-cloud-compute-to-improve-reliability) (GitHub): Two chores worth ten minutes. Hosted runners now use new outbound IPs, so update any allowlist from the actions array of api.github.com/meta before a job fails. And turn on the lockfile: it pins actions and what they depend on, which is the supply-chain hole that keeps biting people.
- [GitHub-verified MCP connectors and Agentic Workflows](https://github.blog/changelog/2026-10-28-github-agentic-workflows-generally-available) (GitHub (Microsoft)): Copilot connectors are in preview and lock you into Copilot, which is nowhere near the 10 to 100 times better Microsoft needs to clear with me. Agentic Workflows are GA and sensibly sandboxed, but Claude Code in a plain Action already does this job.
- [Mistral Large 4](https://mistral.ai/news/mistral-large-4-oss/) (Mistral): A trillion parameters of open weights that score 26 on the index, 20 points behind the best open model and below DeepSeek V4.1 Flash. A price cut to $0.70 / $2.10 for that changes nothing. And the "MIT" licence needs a separate deal the moment you sell it as a cloud service.
- [Grok 4.7 and Muse Wonder on the new index](https://artificialanalysis.ai/leaderboards/models) (xAI and Meta): No launches, just the new index being unkind: Grok 4.7 lost 12 points in the rebuild, and Meta's Muse Wonder scores 43 for $6.95 a task. Kimi K3.1 Pro beats that for about half the money.
- [Cloudflare services for private origins](https://blog.cloudflare.com/private-origins-public-to-private/) (Cloudflare): GA on 30 October: WAF, bots and caching in front of a private IP, for Cloudflare One customers. Useful, but I couldn't read enough of the post to say what it adds to a Tunnel public hostname, so it isn't getting a slot until I can.
- [Workers KV Instant](https://www.infoq.com/news/2026/10/workers-kv-instant/) (Cloudflare): Reads at 1.62 ms against 287 ms for classic KV would be a big deal, and it's a private beta with different pricing that isn't public. I found the numbers on InfoQ, not on a Cloudflare page. Next time.
- [Step Functions workflows as agent tools](https://aws.amazon.com/about-aws/whats-new/2026/10/step-functions-workflows-ai-agent-tools/) (AWS): AWS putting an MCP face on a service I've never seen a production need for. Giving your agent a state machine to call is cargo cult with a new label. Plain code in a durable function does it, and you can read it.
- [SageMaker GPU partitioning and ECS GPU sharing](https://aws.amazon.com/about-aws/whats-new/2026/10/sagemaker-gpu-partitioning/) (AWS): Several small models on one GPU, up to seven partitions on SageMaker, and shared tasks on ECS. A real cost lever if you serve embedders and rerankers all day. No Sydney confirmation in either post, and most small teams don't have that problem yet. Check them when you do.
- [Aurora serverless at 384 ACUs](https://aws.amazon.com/about-aws/whats-new/2026/10/aurora-serverless-supports-384-acu/) (AWS): A higher ceiling and no lower price. Fine for the all-AWS client already at 256, and irrelevant to everyone who's actually complaining about the Aurora bill.
- [Neon's backend bundle](https://neon.com/docs/changelog) (Neon): Managed Better Auth gained Apple and Microsoft sign-in, next to Neon's Functions and AI Gateway. Neon is quietly becoming a whole backend. I still pick it for Postgres. SSO and MFA in Neon Auth are what I'm waiting for, and this entry doesn't announce them.
- [Akamai Inference and Agent Sandbox](https://www.techzine.eu/news/infrastructure/145346/akamai-launches-ai-inference-service-and-agent-sandbox/) (Akamai): Twelve open models with no prices I could find, and a WebAssembly sandbox for agent code. Both in beta, and a beta with no price list is a waste of time this early.
- [Vercel CI](https://vercel.com/blog/introducing-vercel-ci) (Vercel): A sensible beta if you already live on Turborepo and Vercel, and the "2 to 6 times faster" figure is Vercel's own. It isn't built for an AWS and Cloudflare stack, so I have no use for it.
- [DeepSeek Super-Agent](https://tech.yahoo.com/ai/claude/articles/weeks-ahead-expected-anthropic-ipo-084600736.html) (DeepSeek): A prototype coding agent with no release date, known through a press report. Hype isn't news. When there's something to install, I'll install it.
- [Memdoor](https://github.com/guregodevo/memdoor/tree/main/examples/workflows/team-solve) (A solo GitHub project): 423 points on Hacker News for five small Qwen models "beating" a frontier model on one coding benchmark. I haven't reproduced it, and I found nobody who has. One author and one benchmark isn't a paradigm shift yet.
- [AWS capacity "sold out through 2027"](https://www.infoq.com/news/2026/11/aws-capacity-sold-out/) (AWS): A remark from 23 October, recycled this week, plus anecdotes about EC2 shortages. Not something you can act on. If it starts to bite in Sydney, I'll say so.
- [Node.js 26 LTS](https://nodejs.org/en/blog/release/v26.13.0) (OpenJS Foundation): LTS since 28 October, supported to April 2029. Nothing to do until Lambda ships the runtime, and last week's Brotli patch matters more than this.

## For the geeks

### OpenRouter: keep the old cheapest-first routing on a batch job

Adapted from the provider selection docs. `sort` opts out of the new router; `quantizations` and `require_parameters` pin the build you tested.

```python
import os, requests

r = requests.post(
    "https://openrouter.ai/api/v1/chat/completions",
    headers={"Authorization": "Bearer " + os.environ["OPENROUTER_API_KEY"]},
    json={
        "model": "deepseek/deepseek-v4.1-flash",  # or "...:floor"
        "messages": [{"role": "user", "content": "Hello"}],
        "provider": {
            "sort": "price",
            "quantizations": ["fp8"],
            "require_parameters": True,
            "data_collection": "deny",
        },
    },
)
print(r.json())
```

### GPT-6.1 Terra on Bedrock, from Sydney

Adapted from the Bedrock model card. Set the effort yourself: the default is medium. This goes through the Global profile, so the data can leave Australia.

```python
from openai import OpenAI

client = OpenAI()  # credentials and endpoint as in the card's programmatic access steps

response = client.responses.create(
    model="global.openai.gpt-6.1-terra",
    reasoning={"effort": "high"},
    input="Classify this support ticket and extract the order number: ...",
)
print(response.output_text)
```

### joey-1: one decision, with probabilities

From Baseten's model library. Keep untrusted text in `state`, never in `instructions`.

```bash
curl --fail-with-body \
  -X POST "https://inference.baseten.co/v1/systemone" \
  -H "Authorization: Api-Key $BASETEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "decision-models/baseten-joey-2b-latest",
    "state": {"message": "I was charged twice. Please refund the duplicate charge."},
    "questions": {
      "route": {
        "type": "choice",
        "instructions": "Which team should handle this request?",
        "criteria": {"billing": "Payments, charges, and refunds", "support": "Technical troubleshooting"}
      }
    }
  }'
```

### Decision models with an image: Jev, joey-1 and Clef Flash

Adapted from each vendor's docs, and not run by me. Jev needs the header, and I pinned 1.13.0 because `jev-latest` scored lower on images.

```bash
# Jev: base64 in a top-level assets map, referenced by key
curl https://api.typesafe.ai/v1/systemone \
  -H "Authorization: Bearer $TYPESAFE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "TypeSafe-Danger-Zone-Images: true" \
  -d '{
    "model": "jev-1.13.0",
    "state": {"photo": "a3f1c2e8-found"},
    "assets": {"a3f1c2e8-found": {"type": "image", "format": "jpg", "data_base64": "'"$IMG_B64"'"}},
    "questions": {"damaged": {"type": "noul", "instructions": "Is the parcel in `photo` visibly damaged?"}}
  }'

# joey-1: an image_url part in a user message
curl --fail-with-body -X POST "https://inference.baseten.co/v1/systemone" \
  -H "Authorization: Api-Key $BASETEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "decision-models/baseten-joey-2b-latest",
    "state": {"messages": [{"role": "user", "content": [
      {"type": "text", "text": "Photo from the depot."},
      {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,'"$IMG_B64"'"}}
    ]}]},
    "questions": {"damaged": {"type": "noul", "instructions": "Is the parcel visibly damaged?"}}
  }'
```

```typescript
// Clef Flash in a Worker. Its model page shows only text, so the images field follows its input schema.
const result = await env.AI.run("@cf/cloudflare/clef-flash", {
  model: "clef-flash",
  images: [`data:image/jpeg;base64,${imageB64}`], // at most 4, no remote URLs
  state: "Parcel photo taken at the depot.",
  questions: { damaged: { type: "noul", instructions: "Is the parcel in the image visibly damaged?" } },
});
```

### Durable Objects: set the window, or skip it for a fix

From the Durable Objects code updates docs.

```jsonc
// wrangler.jsonc
{
  "durable_objects": {
    "bindings": [{ "name": "CHAT_ROOM", "class_name": "ChatRoom" }],
    "code_update_strategy": { "mode": "deferred", "max_delay": 60 }
  }
}
```

```bash
# Force an urgent fix onto every active object now
npx wrangler versions deploy <VERSION_ID>@100% --durable-objects-code-update-mode immediate
```

### Lambda durable functions: turn the exporter on

From the AWS announcement. With no options it writes to the function's log group; add redaction before you point it at anything else.

```typescript
export const handler = withDurableExecution(
  async (event, context) => {
    // your steps
  },
  { plugins: [durableExecutionTelemetry({})] },
);
```

### Tailscale: check a node, and turn off what you don't use

From the Tailscale security bulletins.

```bash
tailscale version            # need 1.104.4 or later

# Stop SSH forwarding: add this to the tailscaled environment, then restart
#   TS_SSH_DISABLE_FORWARDING=1
sudo systemctl restart tailscaled

tailscale set --ssh=false    # or turn Tailscale SSH off entirely
```

## Coverage

Window 26 October to 1 November 2026 (UTC). Scanned the AWS What's New and News Blog feeds (nothing dated 31 October or 1 November), the Cloudflare changelog and blog, InfoQ, Hacker News, the release notes and advisories of the tools in the stack, X and Google News, the week's new models on OpenRouter, Hugging Face and Workers AI, plus open searches across every concern in the catalog. The item on decision models reading images was added on 2 November: it dates from before this window, and it's here because W43 undersold it. X posts mostly refused to load, so X only counted when a primary page backed it, and Reddit came through search snippets only. Not exhaustive: if it matters and it's missing, tell me.

## Related

- [Every edition of The Stack Weekly](https://cloudlesslabs.com/weekly/index.md): newest first, with summaries
- [The Stack, in one file](https://cloudlesslabs.com/stack/brief.md): the catalog these items are judged against
- [Map of every Markdown file on cloudlesslabs.com, with what each one answers](https://ask.cloudlesslabs.com)
