← All issues
Issue 6Week of 12 October 2026Archived

The postponed Next.js fixes landed with two critical RCEs, and the tensorlake worm is built to wipe your home directory if you revoke the token it stole.

Vercel shipped the out of band Next.js update on 14 October: 16.4.1 and 15.5.28 fix two critical remote code execution flaws and one high severity denial of service, two of them postponed from September. On npm, tensorlake 0.5.144 carried a Shai-Hulud variant that StepSecurity says deletes your home directory if you revoke the GitHub token it stole, so the order of your response matters. Gemini 4 Argon went generally available at $2 and $10 per million tokens, doubling on 1 December, and Claude Haiku 5.5 costs a tenth of Haiku 4.5 per token until a prompt passes 100,000 tokens. OpenAI deprecated the GPT-4 series for removal on 14 January, and Google now routes two retired Flash models to their replacements automatically. This issue covers 3 to 15 October, because there was no issue for the week of 5 October.

This issue is a snapshot of week of 12 october 2026 and is kept as published. Figures and links were accurate at the time and are not updated retroactively. Read the current issue →

Hot takes

3

Our read on the week. Opinion, and labelled as such.

Haiku 5.5 costs a tenth of Haiku 4.5 per token, until a prompt passes 100,000 tokens

Opinion
7 Oct

Anthropic launched Claude Haiku 5.5 on 7 October. For prompts up to 100,000 tokens it costs $0.10 input and $0.50 output per million tokens, against $1 and $5 for Haiku 4.5. For prompts over 100,000 tokens it costs $0.50 and $2.50. The pricing page says the prompt length of a request "counts all of its input tokens, including cache reads and cache writes", that each request is priced on its own, and that a request over the threshold pays the higher prices "even when part of its prompt is a cache hit". The migration guide adds that Haiku 5.5 uses the same tokenizer as Claude 4.7 and later, which produces approximately 30 percent more tokens for the same text than Haiku 4.5.

So what

Do the arithmetic on your own traffic before you promise a saving. A tenth of the rate times about 1.3 times the tokens is roughly 0.13 of the old bill, so about 87 percent cheaper, for prompts under the line. Above it the rate is half of Haiku 4.5, the same arithmetic gives about 0.65, and the saving drops to about 35 percent. Look at the long tail of your prompt lengths rather than the average, because agent loops grow: the migration guide says thinking blocks from earlier turns stay in context and count as input, where Haiku 4.5 kept only the latest turn. Compare the shape of the line as well as the rate. OpenAI lists GPT-6 Luna at the same $0.10 and $0.50, but puts its short context limit at 272K input tokens and charges $0.20 and $0.75 beyond it, where Haiku 5.5 steps up fivefold on both. And do not rush the move on a deadline that does not exist yet. The deprecations page lists Haiku 4.5 as active with a tentative retirement of "Not sooner than October 15, 2026", and Anthropic commits to at least 60 days of notice before retiring a public model.

Three labs now list a model at $2 and $10, and the Google one doubles on 1 December

Opinion
13 Oct

Google made Gemini 4 Argon (gemini-4-argon) generally available on 13 October, describing it as its most capable model for complex coding, agentic, math and science tasks. The pricing page lists it at $2 input and $10 output per million tokens "through November 30, 2026" and $4 and $20 "starting December 1, 2026", with output pricing that includes thinking tokens. Context caching goes from $0.10 to $0.20, batch from $1 and $5 to $2 and $10, and Priority from $3.60 and $18 to $7.20 and $36. Only implicit caching is supported, and the model is not available on the free tier or the Google AI Pro plan. That puts it level with Claude Sonnet 5.5 and GPT-6.1 Sol, both listed at $2 and $10 on their own pricing pages today, with no change scheduled on the pages we read.

So what

Cost your product at $4 and $20, not at $2 and $10. A launch price that is scheduled to double is an acquisition offer, and anything you build on it, whether a free tier, a fixed price plan or a margin calculation, inherits the December price whether you planned for it or not. If Argon wins your evals, the honest comparison on 1 December is $4 and $20 against Sonnet 5.5 and GPT-6.1 Sol at $2 and $10, so ask whether the quality gap is worth double. Two other details move the bill: the output price includes thinking tokens, and explicit caching is not supported, so cache savings depend on implicit hits you cannot arrange.

Cache reads on Sonnet 5.5 are now 5 percent of the input price, so caching comes first

Opinion
7 Oct

On 7 October Anthropic lowered Claude Sonnet 5.5 prompt cache reads from $0.20 to $0.10 per million tokens, which its release notes describe as "0.05x the base input price instead of 0.1x", with cache writes and all other prices unchanged. The pricing page lists Claude Opus 5.5 at the same 0.05x multiplier. Cache writes stay at 1.25x the base input price for the five minute duration and 2x for one hour. That brings the Sonnet 5.5 read to the same $0.10 as the cached input rate on GPT-6.1 Sol, which we reported in issue 5 when we said Anthropic at $0.20 against OpenAI at $0.10 could decide the choice.

So what

Correct that comparison before you reuse it: on cached input the two vendors now match, and Gemini 4 Argon lists $0.10 for implicit caching until 30 November and $0.20 after, so the three way comparison is level only until December. More usefully, the arithmetic now favours caching early. On the five minute duration a prefix pays for itself after a single read, because 1.25 plus 0.05 is 1.30 times the base price against 2.00 for two uncached sends. A prefix sent in eleven requests, one write and ten reads, costs 1.75 times one uncached send instead of 11, about 84 percent less on those input tokens. Put the stable material first, meaning the system prompt, tool definitions and reference documents, keep anything that changes per request at the end, and check the usage block in each response to confirm you are getting hits.

Post-mortems

3

What broke, and the specific thing to check in your own stack.

The postponed Next.js fixes landed on 14 October: two critical remote code execution flaws, in 16.4.1 and 15.5.28

Security
14 Oct

Vercel published the out of band Next.js security update on 14 October, as 16.4.1 on Active LTS and 15.5.28 on Maintenance LTS. It fixes three upstream vulnerabilities, two critical and one high, and the pre-announcement said two of the fixes were postponed from the September security release. The first critical flaw, GHSA-673q-mjm6-r5xr, is unauthenticated remote code execution in applications using App Router with Cache Components when a use cache function returns multiple typed arrays, and the post says "There is no known workaround for affected applications." The second, CVE-2026-96889 / GHSA-2464-fhr4-w9xw, is remote code execution in the Image Optimization API when using SVG, which the post scopes to Next.js running on glibc based Linux and gives a workaround for: sharp 0.35.5 or later. The high severity flaw, GHSA-p3m5-59mp-jv5r, is a denial of service in App Router applications with at least one Server Action, and the post says applications using Pages Router or no Server Actions are not vulnerable. The post names only 16.4.1 and 15.5.28, and npm lists no 16.3 release after 16.3.8.

So what

Upgrade today: next@16.4.1 on the 16.x line and next@15.5.28 on 15.5. If you are on 16.3, the post does not name a patched 16.3 release and npm has none, so the move is to 16.4.1. For the use cache flaw the post says to upgrade immediately even if your application has no similar functions, so do not spend time deciding whether you are exposed. If the image flaw is the one you can reach first, check that sharp resolves to 0.35.5 or later in your lockfile, and do not assume the upgrade does it for you: the package metadata for next@15.5.28 accepts sharp ^0.34.3 || ^0.35.5, so an existing lockfile pinned at 0.34.x can stay there, while 16.4.1 requires ^0.35.5. Also check which libc your container image uses, because the post limits that flaw to glibc based Linux. Then redeploy preview and branch deployments, which keep serving the build they were created from. Affected version ranges are not in the post, and the advisories it links carry them, so take the ranges from there.

The compromised tensorlake 0.5.144 package is built to delete your home directory if you revoke the GitHub token it stole

Security
8 Oct

StepSecurity reports that tensorlake 0.5.144 on npm steals credentials at install time, tries to spread to other packages and repositories, and sets a trap. The first malicious commit reached the main branch of tensorlakeai/tensorlake at 01:20 UTC on 7 October under a maintainer name, seven more followed without pull requests, and the repository release workflow published 0.5.144 at 01:12 UTC on 8 October. Because it was built from the repository, the release carries a valid npm provenance attestation, and StepSecurity notes "It doesn't say the code is safe." A preinstall hook runs setup.mjs, which skips CI, fetches the Bun runtime and runs an obfuscated 856 KB payload that collects GitHub and npm tokens, cloud keys, Kubernetes and Vault secrets, SSH keys, saved browser logins and configuration for AI tools including Claude, Cursor and Windsurf. If it holds a GitHub token it installs a service called gh-token-monitor, which checks the token every 60 seconds for up to 24 hours and runs rm -rf ~/ if GitHub rejects it. It also writes .claude/settings.json and .vscode/tasks.json into repositories it can reach. npm no longer lists version 0.5.144.

So what

If 0.5.144 was ever installed on a machine, do not revoke the GitHub token first. StepSecurity says to back up anything you cannot lose, remove the monitor, which lives under ~/.config/gh-token-monitor/, and only then rotate every credential that machine could reach: GitHub and npm tokens, cloud and SSH keys, Kubernetes and Vault credentials, .env secrets and AI tool keys. Then check for spread: new public repositories with the description "Shai-Hulud: Here We Go Again", commits from claude@users.noreply.github.com, and .claude or .vscode files you did not add. Check lockfiles with npm ls tensorlake, and note that StepSecurity suggests pinning 0.5.143. The wider lesson is that a provenance attestation and a green release workflow are not evidence of safety, so set ignore-scripts=true in .npmrc, which stops install hooks like this one.

CISA put five old flaws on its exploited list in one day, including Strapi, and the newest is from 2023

Security
8 Oct

CISA added five vulnerabilities to its Known Exploited Vulnerabilities catalogue on 8 October: ISC BIND CVE-2015-5477, Apache Struts CVE-2016-3081, ProFTPD CVE-2015-3306, ONLYOFFICE Docs CVE-2021-3199 and Strapi CVE-2023-22894. The Strapi entry describes cleartext storage of sensitive information that lets attackers with access to the admin panel discover sensitive user details through the query filter, notes that the product could be end of life, advises users to "discontinue use and/or transition to a supported version", and says it can be chained with CVE-2023-22621 to achieve remote code execution. The ONLYOFFICE Docs entry describes a path traversal when JWT is used, via a /.. sequence in an image upload parameter, that could allow remote code execution. Later in the week the catalogue gained Ivanti Connect Secure and a Windows Shell flaw on 13 October, then Cisco Secure Email Gateway, two chained Ahsay AhsayCBS flaws and Palo Alto PAN-OS on 14 October.

So what

The pattern matters more than any one entry: flaws from 2015 to 2023 are being exploited today, which means attackers are working through software that never got patched rather than hunting new bugs. If you self host Strapi, check your version against the vendor advisory and move to a supported release, because the catalogue entry itself says the product may be end of life and the chain with CVE-2023-22621 reaches code execution. Do the same for anything you run on a long lived server, such as ONLYOFFICE Docs, an FTP daemon or an old DNS resolver. A dependency scanner will not catch a service that sits outside your lockfile, so list what you run on servers as well as what you import.

Wins

6

Rounds, launches, and benchmarks worth measuring yourself against.

Claude Haiku 5.5 launched with a 1M token window, and a migration that is not a model id swap

Models
7 Oct

Anthropic launched Claude Haiku 5.5 (claude-haiku-5-5) on 7 October with a 1M token context window, 128K maximum output and adaptive thinking controlled by the effort parameter. The model id is fixed, with no date suffix and no alias. Compared with Haiku 4.5, a request now returns a 400 error if it sends manual thinking with budget_tokens, sets top_k at all or sets temperature or top_p to anything but their defaults, ends the messages with an assistant prefill even when thinking is off, or declares the computer_20250124 tool. Sending a thinking block back after changing the system prompt, the tools or earlier messages also returns a 400. Thinking text is omitted unless you set thinking.display to "summarized". The guide says Haiku 5.5 runs safety classifiers that can decline a request, that it has no server side fallback, and that Priority Tier is not supported.

So what

Treat this as a migration, not a model id swap. Search your code for budget_tokens, temperature, top_p, top_k and any request that ends on an assistant turn, because each one is now a hard failure rather than a quiet change. Select response content blocks by type, not by position, since a response can begin with a thinking block even when you never asked for thinking. Raise max_tokens, because thinking counts toward it and a small limit can stop after a thinking block with no text. Handle the refusal stop reason, and if you rely on Priority Tier for Haiku 4.5, plan that capacity separately. On Amazon Bedrock, structured outputs are not available for this model.

GPT-6.1 Sol got an Ultrafast mode at six times the standard price, with EU data residency that Astra Ultrafast lacks

Launch
8 Oct

OpenAI added Ultrafast mode for GPT-6.1 Sol in the Responses API on 8 October. Setting service_tier to "ultrafast" on gpt-6.1-sol reduces the time between generated output tokens, and the changelog says it is available to all API users, subject to rate limits, "with global processing and US and EU data residency". The pricing page lists it at $12 input, $0.60 cached input and $60 output per million tokens for short context prompts, and $24, $1.20 and $90 for long context, against $2, $0.10 and $10 on standard. In issue 5 we reported that Ultrafast for GPT-6 Astra does not support EU or other regional inference residency. That is still what the changelog says for Astra, so the two modes differ. The pricing page also notes a 10 percent uplift on regional processing endpoints for models released on or after 5 March 2026.

So what

Ultrafast is a latency product priced like one. Six times the standard rate only makes sense where a person is waiting on each token, such as a live coding or voice surface, and not for background work, which belongs on standard, Batch or Flex. The pricing page lists Sol at $1 input and $5 output on both of those. If you held back from Ultrafast because of EU residency, the Sol mode removes that obstacle, but cost the EU path with the regional uplift included rather than at the headline rate.

Managed Agents can now write and run their own multi phase workflows, in beta

Tooling
9 Oct

On 9 October Anthropic put dynamic workflows into beta for Claude Managed Agents. You enable them in the agent definition with multiagent set to {"type": "multiagent_20261001", "workflows": {"type": "enabled"}}, under the managed-agents-2026-04-01 beta header. The documentation describes a workflow as "a program that runs many agents in phases and combines what they return", which the server runs in the background as a workflow run while the agent keeps working or ends its turn. With the multiagent_20261001 type, workflows and subagents are both enabled by default, and so are inline agents that a workflow defines itself. You can list up to 20 predefined agents for a workflow to use. Separately, on 14 October Anthropic made Managed Agents scheduled deployments available on Claude Platform on AWS.

So what

The risk is spend you did not decide on. Choosing the multiagent_20261001 type turns workflows on by default, and a workflow can fan out to many agents, so if you only want delegation, set workflows to {"type": "disabled"} explicitly. Set a session budget when you create the session, because the documentation says you cannot add one to an existing session, and runs pause when the budget is reached. Tell the agent in its system prompt when a run is warranted, as the documentation suggests, and keep every listed agent on the same inference geography as the main agent, which the documentation requires.

Claude OpenTelemetry export is in beta, and it keeps prompts out of your traces unless you switch them on

Tooling
14 Oct

On 14 October Anthropic released OpenTelemetry export for the Claude API in beta, covering Messages API requests, tool uses and Managed Agents sessions. The Claude SDK emits spans in Python, TypeScript, C#, Go, Java, PHP and Ruby, and API tracing is set up as a destination in the Claude Console, which needs Admin permission. The default content mode is metadata only, with spans holding identifiers, timing, status and token counts. Full content mode adds prompts and responses, up to 0.75 MB per span by default before the content is truncated and anthropic.content.truncated is set to true. The documentation says span delivery is best effort and that exported spans are not a complete record of API usage.

So what

Start in metadata only mode, which is the default, and make switching to full content a decision rather than an accident: prompts and responses will sit in your observability vendor under its own access and retention settings, which the documentation tells you to check. Do not build billing or quota enforcement on spans, because delivery is best effort and the documentation points to the Usage API for that. And if you add up tokens from traces, sum spans from one source only. The SDK and the API both emit an anthropic.messages.create span for the same request, and adding both double counts.

GitHub Actions workflow lockfiles are in public preview, so a moved tag can no longer change what your workflow runs

Tooling
14 Oct

GitHub put Actions workflow dependency lockfiles into public preview on 14 October for GitHub Enterprise Cloud, Enterprise Cloud with data residency, Team and Free plans. The changelog says "Tags and branches can move after you review a workflow, so a later run might execute different code". A lockfile records the exact commits for actions and their transitive dependencies, including reusable workflows, in .github/workflows/actions.lock, and you create and maintain it with the gh actions-lock extension for the GitHub CLI. Once a workflow is onboarded, Actions requires every dependency to be in the lockfile and runs the recorded commit even if a tag or branch moves. A Require lockfile policy is also in public preview for enterprise, organization and repository administrators, and Dependabot regenerates the matching lockfile entry in the same pull request when it updates an action in an onboarded workflow. GitHub is clear that locking "does not determine whether the dependency itself is safe".

So what

Onboard your deploy and release workflows first, because they hold the production secrets and a moved tag does the most damage there. Locking pins what you reviewed, it does not review it, so read each action before you lock it. It also does nothing about a malicious install step inside a workflow, which is the tensorlake case in this issue, so it sits alongside ignore-scripts and a careful look at new dependencies rather than replacing them.

GitHub now blocks Anthropic API keys on push by default, for every repository with secret scanning on, including free public ones

Security
13 Oct

GitHub announced on 13 October that secret scanning detects two new Anthropic secret types, anthropic_service_api_key and anthropic_user_api_key, and that both are included in push protection by default. The changelog says repositories with secret scanning enabled, "including free public repositories", will have commits containing these secrets automatically blocked. It also adds Salesforce as a secret scanning partner with the type salesforce_marketing_cloud_api_oauth2_token, and a Cloudsmith detector, cloudsmith_api_key. Under the partner program, secrets found in public repositories are reported to the issuer so it can revoke or rotate them.

So what

A blocked push is a good failure, but it only protects repositories where secret scanning is on, so check that setting on everything you own rather than assuming a default. Tell your team what the error means before it appears in a deploy, because scripts and CI jobs that commit generated files will hit it first. The block applies to new pushes, so a key that is already in your history needs to be found and rotated by you. Better still, keep Anthropic keys out of client code and committed .env files in the first place.

On the radar

6

Shifts that have not hit you yet but will.

OpenAI deprecated the GPT-4 series on 14 October for removal on 14 January, and the calendar now runs to April 2027

Breaking change
14 Jan

OpenAI notified developers on 14 October that gpt-4o-2024-08-06, gpt-4o-2024-11-20, gpt-4o-mini-2024-07-18, gpt-4.1-2025-04-14 and gpt-4.1-mini-2025-04-14 are deprecated and will be removed from the API on 14 January 2027, naming gpt-6-luna as the recommended replacement for all of them. Fine tuned versions "follow the same shutdown schedule as their underlying base models". The 1 October entries are still open: tts-1, tts-1-hd and two gpt-4o-mini-tts snapshots go on 6 January 2027 with gpt-realtime-2.1-mini as the replacement, and gpt-5.3-codex, gpt-5.1 and gpt-5.4-nano go on 1 April 2027. Dates already on the calendar include the GPT-5 and o3 snapshots on 11 December 2026, and the Evals dashboard, Agent Builder and the reusable prompts API on 30 November 2026, with existing evals going read only on 31 October.

So what

Search for the five GPT-4 snapshot ids in code, prompt configs, eval harnesses and fine tune pipelines this week, because three months is short for a fine tune migration and a fine tune has to be rebuilt on a new base model rather than swapped. The deprecations page names one replacement for models of very different sizes, so run your own evals before assuming parity, for the 4o and the 4.1 mini alike. GPT-6 Luna lists $0.10 input and $0.50 output per million tokens for short context, so the move is likely to be cheaper per token, but measure it on your prompts. Put 31 October and 30 November on the calendar now if anything you run touches Evals or Agent Builder.

Google now routes gemini-3.7-flash and gemini-3.5-flash to their replacements automatically, and a Deep Research agent shuts down on 23 October

Breaking change
8 Oct

The Gemini API release notes for 8 October say gemini-3.7-flash is deprecated and replaced by gemini-3.8-flash, and gemini-3.5-flash is deprecated and replaced by gemini-3.6-flash. Neither can be selected in Google AI Studio any more, and API requests to the old ids are "automatically routed to gemini-3.8-flash" and to gemini-3.6-flash respectively. The deep-research-pro-preview-12-2025 agent is deprecated and shuts down on 23 October 2026, with deep-research-preview-04-2026 (speed and efficiency) and deep-research-max-preview-04-2026 (maximum comprehensiveness) named as replacements; the change is the agent parameter in interactions.create requests. On 6 October Google also deprecated gemini-3.1-flash-image in favour of gemini-nano-banana-2.1, with no shutdown date announced.

So what

A pinned model string no longer pins anything for those two ids: your requests already run on a different model. If you have evals or regression tests anchored to 3.7 Flash or 3.5 Flash, rerun them against the replacement now and update the strings so your logs say what actually ran. If you use the Deep Research agent preview, you have eight days to change the agent parameter and retest, and the two replacements are positioned differently, so pick on whether you stream to a user interface or want the most thorough result.

Managed Agents web tools now obey your network allowlist, and web_fetch only reads URLs it has already seen

Breaking change
7 Oct

Anthropic changed how Managed Agents web tools behave on 7 October. With limited networking, the environment allowed_hosts setting now also applies to web_search and web_fetch, a blocked web_fetch returns a url_not_allowed error result, and creating a session fails with a 400 error when an enabled web tool has an allowed_domains entry that is not within allowed_hosts. Also from that date, web_fetch "now fetches only URLs that have already appeared in the session", and otherwise returns a url_not_in_prior_context error result. The two lists match differently: a tool entry covers its subdomains, while an allowed_hosts entry matches one exact host unless it starts with "*.". The documentation example is that the tool entry docs.example.com is not within an allowed_hosts of ["example.com"].

So what

Re-run session creation for every agent that uses limited networking, because a definition that worked last week can now fail with a 400. The subtle failure is the match rule: listing example.com in allowed_hosts does not cover docs.example.com, so list the host or use "*.example.com". Then check what your agents do with links. One that used to compose or guess a URL and fetch it will now get url_not_in_prior_context, so put the URLs it should read into the task or have it find them first. Unrestricted networking and self hosted environments do not apply the allowlist to these tools, so a setup that looked fine in a self hosted test can behave differently on the cloud environment.

Supabase will stop offering four CBC mode TLS 1.2 ciphers on its HTTP APIs from 10 November at the earliest

Breaking change
10 Nov

Supabase published a breaking change notice on 12 October saying that from 10 November 2026 at the earliest it will stop offering four CBC mode TLS 1.2 cipher suites on project HTTP APIs, meaning <ref>.supabase.co and custom domains: ECDHE-ECDSA-AES128-SHA256, ECDHE-RSA-AES128-SHA256, ECDHE-ECDSA-AES256-SHA384 and ECDHE-RSA-AES256-SHA384. Auth, the Data API, Storage, Realtime and Edge Functions are affected. Direct Postgres connections, pooler connections and the Management API are not, and TLS 1.3 is unchanged. Supabase says fewer than 0.0001 percent of connections in the past 30 days negotiated these ciphers, that affected customers were emailed on 14 October, and that six GCM and ChaCha20 suites remain.

So what

Almost nobody is affected, which is the reason to check rather than skip: the clients that are affected are the ones you will not notice failing, such as embedded devices, kiosks and end of life operating system installs that talk to your project. Find any such client in your fleet and test it against a server limited to the six remaining TLS 1.2 suites or TLS 1.3. This lands alongside the 30 October Data API exposure change we flagged in issue 5, so put both on the same checklist.

Apple revised the Developer Program License Agreement on 13 October, with new security requirements in Section 3.2

Compliance
13 Oct

Apple posted on 13 October that the Apple Developer Program License Agreement has been revised "to support new features and updated policies, and to provide clarification", and asked developers to sign in and accept the updated terms. The listed changes include updated security and related requirements in Section 3.2, terms for the Live Assistance API and the App Replacement Entitlement, terms for iOS app widgets and CarPlay on Apple HomeView, and new terms for offering multiple seats on a subscription through Group Purchases and subscriptions through Volume Purchasing. Schedules 2 and 3 also now say Apple will report legally required information such as tax, sales and contact details to tax authorities, and restrict use of any customer tax information Apple shares with developers to purposes mandated by law. The post gives no acceptance deadline and says translations will follow within one month.

So what

Read Section 3.2 yourself, because the post gives only a one line summary of what changed there, and treat it as a compliance review rather than a click through. If you sell subscriptions, read section 3.3(b) of Schedule 2 or Schedule 3: customer tax information Apple shares with you may be used only for purposes mandated by law, so check that it is not being copied into a CRM, a marketing export or an analytics warehouse. Then confirm in App Store Connect whether anything is waiting on acceptance. The post gives no deadline, and a blocker is better found today than on release day.

From April 2027 every App Store submission needs iPhone Duo screenshots

Deadline
Apr 2027

Apple said on 5 October that iPhone Duo will be available to customers from 23 October 2026. Existing apps can be recompiled with Xcode 27.1, which adds development support, and Device Hub shows how an app behaves across all poses and orientations. You can submit iPhone Duo optimized apps in App Store Connect now, and submitting iPhone Duo screenshots adds a badge to your product page. Apple then states: "Starting April 2027, any apps or games submitted will need to include screenshots for iPhone Duo." The post lists no pixel dimensions and points to its screenshot specification page.

So what

Two dates for the calendar: 23 October, when real users arrive on the device, and April 2027, when a submission needs these screenshots. Recompile on a branch this month and use Device Hub to find layouts that break in the other poses before a customer does. Then pull the exact dimensions from the screenshot specification page the post links, and add the screenshot task to your release checklist rather than discovering it on the day of a submission.

Open the tool.

Most of what shows up in Post-mortems maps to one of ten categories the Stack Grader already checks.

Check your stack against these failures