OpenAI Did Everything by the Book and Still Shot Itself in the Foot

OpenAI Did Everything by the Book and Still Shot Itself in the Foot

Ihor (Harry) Chyshkala
Ihor (Harry) ChyshkalaAuthor
|12 min read

On July 9, 2026, a Reddit user named ScholarOk7563 spent twenty minutes looking for an application that was still installed on their Mac. It had a new name, a new icon, and it opened into an interface they had never seen. Their verdict was four words long: "What a trash handover."

That same day, OpenAI published a blog post explaining exactly what was happening, updated the official changelog, shipped a new flagship model, and scheduled an AMA with the Codex team for the following morning. By every checklist that a communications team would recognize, OpenAI did this right. And it still landed as a betrayal.

That gap — between a change being announced and a change being received as announced — is the most expensive thing in product work, and almost nobody budgets for it. This is what it looks like up close.

Nothing Was Deleted (Officially)

Let us start with the record, because the record matters. OpenAI's announcement post and its changelog entry for 2026-07-09 say the same thing: Codex is now part of the ChatGPT desktop app on macOS and Windows. Existing Codex users update as usual and keep their projects, settings, and workflows. Codex can be set as the default view. On macOS, you can even keep the Codex app icon. The older ChatGPT desktop app becomes ChatGPT Classic.

Read that carefully and it is not a deletion. It is a consolidation with a migration path and an opt-out. Codex is not going away; it becomes a mode inside a larger shell, next to Chat and Work. OpenAI even had a competitive reason to say so out loud: Anthropic had already packaged Chat and Cowork into a single application, and several developers had been asking OpenAI to do the same.

The next morning, the Codex team ran an AMA on r/codex and opened with numbers that do not look like a company in trouble:

  • More than 5 million people use Codex every week
  • Twice as many as three months earlier
  • 150 features and improvements shipped in that same period

A growing product, a documented change, a public announcement, an executive-level AMA within twenty-four hours. Hold that picture. Now look at what the users saw.

What Actually Shipped

The thread on r/ChatGPT was titled, almost innocently, "the Codex app is merging with the new ChatGPT desktop app, thoughts???" The original poster later noted, with some surprise, that half the people he knew did not like it. The comments explain why, and almost none of them are about the strategy.

The migration broke. On macOS, the old and new applications shipped with the same bundle identifier, which is the one thing you must never do when you want two apps to coexist. The operating system treats them as the same application. What happened next depended on which machine you were standing at.

On one Mac, the update was fine. On a Mac Mini belonging to the same user (Able_Bus_5988), the updater installed the new ChatGPT app and removed Codex from the system entirely, leaving no way back into it. Another user, callmenobody, described it plainly: "No info, no warning. Just click update and delete the app?!"

This is the collision, and it is trivially observable once you know to look for it:

diagnosing the bundle-id collision
1# Two "different" apps, one identity — the OS cannot tell them apart
2$ mdls -name kMDItemCFBundleIdentifier \
3    "/Applications/ChatGPT.app" \
4    "/Applications/ChatGPT Classic.app"
5
6/Applications/ChatGPT.app
7kMDItemCFBundleIdentifier = "com.openai.chat"
8
9/Applications/ChatGPT Classic.app
10kMDItemCFBundleIdentifier = "com.openai.chat"
11
12# Consequence: LaunchServices resolves global shortcuts, the Dock icon,
13# and the updater target to whichever app it registered last.
14$ lsregister -dump | grep -A2 "com.openai.chat" | head -20

The downstream effects read like a list of small betrayals, each one individually forgivable and collectively fatal:

  • The Codex tab and its keyboard shortcut vanished for users on build 1.2026.183, reported on OpenAI's own community forum within hours of the rollout.
  • Option + Space stopped opening quick chat. User Brief_Bed847 discovered that the shortcut only behaved if ChatGPT Classic stayed running permanently — quit it, and the same keystroke opened the Codex interface instead.
  • Both apps carried the same icon in the Windows Start menu, per ChronosDeep, so the disambiguation OpenAI offered was invisible at the moment of choosing.
  • Regular chats became hard to find. DisplacedForest, in the highest-voted comment in the thread, simply wrote that he had no idea where his normal chats went.

Notice what these have in common. Not one of them contradicts the announcement. The announcement said Codex would survive as a mode, and it did. The announcement did not promise that your machine would still have the app on it, that your muscle memory would survive, or that you would be able to find your own conversations. Those things were assumed, because for years they were free.

The Bill Came from June

If the July rollout had happened in a vacuum, it would have been a bad week and a patch release. It did not happen in a vacuum. Five weeks earlier, OpenAI had already spent the credibility it now needed.

On May 26, OpenAI announced that GPT-5.2 and GPT-5.3-Codex were deprecated as user-selectable models in Codex for anyone signed in with a ChatGPT account. On June 2 — seven days later — they were gone.

Seven days is not a deprecation window. It is a notice period for a parking violation. And most affected users never saw even that, because the announcement lived on X while the product it changed lived in an editor. There was no email. There was no entry in the release notes that developers actually read. Meanwhile OpenAI's own pricing pages continued to advertise GPT-5.3-Codex as available on Plus, Pro, and Business — a discrepancy documented in issue #25839 on the Codex repository, where a user called it "anti-consumer and misleading." The issue was closed as not planned.

The replacement was not equivalent, and this is the part that turned annoyance into anger. Developers reported that GPT-5.5 consumed roughly three times more usage limit per minute of reasoning. On a Plus subscription, sixty minutes of thinking became about twenty. The model people had chosen for its restraint — it followed instructions and did not rewrite your architecture unprompted — was replaced by a stronger, more opinionated, and considerably more expensive one, at the same price.

On the official forum, one user wrote that OpenAI had "unceremoniously just rug-pull[ed] the only good model" off the extension, and that he was "about 2 seconds from completely switching to Claude." Another, Flow47, called it the craziest move by an AI company yet to hit his daily workflow.

To OpenAI's credit, a staff member in that thread conceded the point directly: the change could have been communicated better, and there should have been more time between the announcement and the change. That is a genuinely honest answer. It arrived after the fact, in a forum thread, to the people who were already angry enough to go find it.

Why the Audience Now Assumes the Worst

Here is the mechanism, and it is worth stating precisely, because it is the reusable lesson.

Every product change is ambiguous at the moment it lands. The user sees an effect — an icon moved, a model is missing, a shortcut does something new — and has to decide what it means. Trust is the buffer that decides which interpretation they reach for. With a full buffer, a broken shortcut is a bug and the team will fix it. With an empty buffer, the same broken shortcut is evidence — proof of the thing you already suspected.

June emptied the buffer. So in July, when the app icon changed and the tab went missing, users did not reach for "botched rollout." They reached for the story that made sense of both events at once. You can watch them assemble it in real time. techyy25 pointed out that in the merged app, the chat side had quietly lost the ability to read from your terminal and editor without consuming Codex limits, and predicted that the chat surface would keep getting squeezed until all meaningful work counted against the Codex quota. masc98 reported that agentic Work usage already drew from Codex usage. Patt92 observed that any application named "Classic" is end-of-life software that gets updates for a while and then gets dropped.

These are not paranoid readings. They are reasonable inferences from a pattern the company established five weeks earlier: quietly reduce what a subscription buys, and document it somewhere the affected users are unlikely to look. Once the audience believes you will do that, every subsequent change gets read as another instance of it — including the changes that are genuinely improvements.

One user in the merge thread wrote that this was what he had wanted all along, and that he had always found it strange that Codex and ChatGPT lived in separate apps. He is almost certainly right about the product direction. He was also drowned out, because he was arguing about strategy in a room where everyone else was arguing about whether they had just been robbed.

An Announcement Is Not a Notification

The distinction OpenAI missed is the one every product team eventually pays for.

An announcement is a broadcast. It goes on a blog, in a changelog, on X, in a livestream. It creates a record. Its function is to let you say, afterwards and truthfully, that you told everyone.

A notification is addressed. It reaches a specific person, in the surface where the change will hit them, before it hits them, with the action they need to take. Its function is to make sure the change is never a surprise at the moment of contact.

OpenAI announced continuously and notified almost never. The Codex team held an AMA on r/codex, a subreddit for people so invested they follow the tooling community — while the rage was on r/ChatGPT, among people who just wanted their app back. The deprecation of two models went out on X. The merge went into a changelog. The one channel that would have reached every affected user — the app itself, on launch, with a one-time dialog explaining what moved where — went unused, which is why a user's twenty-minute search for a still-installed application was possible at all.

The single sharpest moment in the AMA came from a user named nseavia71501, who did not ask about GPT-5.6, benchmarks, or context windows. He asked why significant user-facing changes were not consistently documented in the release changelogs, and why there was so little transparency around usage-limit fluctuations that users were reverse-engineering them with third-party tooling.

That is not a question about a feature. It is a question about whether the company can be relied upon to tell you what it is doing to something you depend on. It is the only question that mattered in that thread.

How Not to Shoot Yourself in the Foot

None of this requires a bigger budget or a slower roadmap. It requires treating trust as a resource with a balance, and spending it deliberately.

  • Never let an update remove an app. If your migration can leave a machine without the thing the user launched yesterday, it is not a migration. Distinct bundle identifiers, always — an install is a promise, and the operating system is the notary.
  • Notify in the surface you are changing. A blog post is a record, not a message. If a developer will meet the change in their editor, the editor must tell them first.
  • Deprecation windows are measured in months, not days. Seven days between announcing a model's removal and removing it communicates, accurately, that the decision was made without you in the room.
  • Never let your marketing pages outlive your product decisions. A pricing page still selling a model you deleted is the most damaging bug you can ship, because it is indistinguishable from a lie.
  • Price changes disguised as model upgrades are still price changes. If the replacement burns quota three times faster, you cut the subscription by two thirds. Say so, in those words, before someone else does.
  • Go where the anger is. An AMA in the subreddit that already loves you is a victory lap. The people you need to reach are in the room you would rather not enter.

The Actual Cost

OpenAI will fix the bundle identifier. The Codex tab will come back. The shortcut will be restored, and in a month the merged app will probably be better than what it replaced — a single shell where a coding agent, a chat, and an autonomous work mode share context is obviously where this is going, and the competition arrived there first.

What does not get patched is the interpretation. The company taught five million weekly users a rule: when something changes, check whether you lost something, because they will not tell you. That rule now runs automatically, on every release, forever, and it is expensive precisely because it is rational. It was learned from evidence.

In the AMA, a user asked how sustainable the $20 subscription really was and whether it would eventually become token-based or simply cost far more. The top reply, upvoted heavily and answered by no one at OpenAI, was that you do not need to worry until they IPO — and that after that, you do.

A company with a full trust buffer gets to laugh that off as cynicism. A company that spent its buffer in June gets to watch it become the consensus reading of everything it ships next. That is the shot in the foot. Not the merge, which was announced. Not the bug, which was a bug.

The wound is that when a user spends twenty minutes hunting for an app that was never deleted, the conclusion he reaches is not "they made a mistake." It is "they did this on purpose, and they did not think I deserved to know."

AI Integration Services

Looking to integrate AI into your production environment? I build secure RAG systems and custom LLM solutions.

About the Author

Ihor (Harry) Chyshkala

Ihor (Harry) Chyshkala

Code Alchemist: Transmuting Ideas into Reality with JS & PHP. DevOps Wizard: Transforming Infrastructure into Cloud Gold | Orchestrating CI/CD Magic | Crafting Automation Elixirs