[macOS][Chat] Server-deleted conversations repopulate in Recents and cannot be removed

Open 💬 8 comments Opened Aug 23, 2026 by ShalevZorany
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the Codex App are you using (From “About Codex” dialog)?

ChatGPT unified desktop app 26.818.41705 (build 6971).

What subscription do you have?

Paid individual ChatGPT plan.

What platform is your computer?

Darwin 25.6.0 arm64 arm

What issue are you seeing?

Product / surface
  • Unified ChatGPT desktop app for macOS
  • Chat tab / ordinary ChatGPT conversations
  • Not Work mode
  • Not Codex mode

Dozens of conversations that have already been deleted server-side remain or repopulate as stale entries in the macOS Recents sidebar. The same account is clean on chatgpt.com and mobile: the deleted conversations are absent there.

The stale macOS entries cannot be opened, deleted, or archived:

  • Open: GET /conversation/<redacted-id> returns HTTP 404.
  • Delete: DELETE /conversation/id/<redacted-id> returns HTTP 404 and the UI shows Failed to delete chat.
  • Archive/unarchive: PATCH /conversation/<redacted-id> returns HTTP 404 and the UI shows Failed to archive conversation.

Every sampled response is terminal and consistent:

{
  "message": "Conversation has been deleted. Start a new chat.",
  "code": "conversation_deleted",
  "can_retry": false
}

Four distinct affected conversation entries were captured in the desktop logs; all four returned conversation_deleted. The sidebar contains dozens of affected entries in total.

Controlled comparison

| Client / surface | Result |
| --- | --- |
| chatgpt.com web, same account | Deleted conversations are absent |
| Mobile app, same account | Deleted conversations are absent |
| macOS unified desktop app → Chat → Recents | Dozens of deleted titles remain/repopulate |

This does not look like ordinary local cache residue. After Cache, Local Storage, Session Storage, and cookies were removed and the app was fully restarted, the clean client subscribed to the remote conversations and alder-conversations topics. The deleted titles then repopulated in Recents and continued returning the same terminal 404 responses.

The evidence suggests a stale remote Recents/conversation-index entry or a missing tombstone-reconciliation path in the macOS client. This is an inference from the comparison and logs, not a confirmed root cause.

What steps can reproduce the bug?

  1. Delete ordinary ChatGPT conversations so that they are no longer present on the server-facing web and mobile clients.
  2. Confirm that the conversations are absent on chatgpt.com and mobile using the same account.
  3. Open the unified ChatGPT desktop app on macOS and select Chat.
  4. Observe that deleted conversation titles remain or repopulate under Recents.
  5. Select an affected entry. It does not open; the request returns 404 conversation_deleted.
  6. Try Delete. The app shows Failed to delete chat, and the DELETE request returns the same terminal 404.
  7. Try Archive. The app shows Failed to archive conversation, and the PATCH request returns the same terminal 404.
  8. Fully quit the app, remove its Cache, Local Storage, Session Storage, and cookies, then restart it.
  9. Observe that the clean app subscribes to the remote conversation topics and the same deleted titles repopulate.

Reproduction rate for the four sampled entries: 4/4. The issue has persisted through sign-out/sign-in, full app restarts, and local web-storage/cache removal.

What is the expected behavior?

Server-deleted conversations should not remain in or repopulate the macOS Recents list.

If a stale Recents entry resolves to the terminal conversation_deleted response, the client/index reconciliation path should remove that entry. Delete or archive requests that encounter this tombstone could be treated as an idempotent cleanup success for the sidebar instead of leaving an undeletable entry and displaying a retryable-looking failure toast.

The Recents index should converge with the authoritative conversation state used by web and mobile.

Additional information

Sanitized diagnostic excerpt
2026-08-23T07:14:11.162Z
method=DELETE
route=/conversation/id/<conversation-A>
status=404
response={"message":"Conversation has been deleted. Start a new chat.","code":"conversation_deleted","can_retry":false}

2026-08-23T07:14:23.279Z
method=GET
route=/conversation/<conversation-A>
status=404
response={"message":"Conversation has been deleted. Start a new chat.","code":"conversation_deleted","can_retry":false,"conversation_id":"<redacted>"}

2026-08-23T07:14:31.367Z
method=GET
route=/conversation/<conversation-B>
status=404
response={"message":"Conversation has been deleted. Start a new chat.","code":"conversation_deleted","can_retry":false,"conversation_id":"<redacted>"}

2026-08-23T07:14:34.224Z
method=GET
route=/conversation/<conversation-C>
status=404
response={"message":"Conversation has been deleted. Start a new chat.","code":"conversation_deleted","can_retry":false,"conversation_id":"<redacted>"}

2026-08-23T07:15:40.460Z and 2026-08-23T07:15:43.057Z
method=PATCH (archive/unarchive attempts)
route=/conversation/<conversation-A>
status=404
response={"message":"Conversation has been deleted. Start a new chat.","code":"conversation_deleted","can_retry":false}

2026-08-23T07:54:37.619Z
method=DELETE
route=/conversation/id/<conversation-D>
status=404
response={"message":"Conversation has been deleted. Start a new chat.","code":"conversation_deleted","can_retry":false}

2026-08-23T07:56:16.479Z
event=chatgpt_pubsub_topic_subscribed
topicId=conversations
catchupCount=0
hadPreviousOffset=false
recovered=false

2026-08-23T07:56:16.479Z
event=chatgpt_pubsub_topic_subscribed
topicId=alder-conversations
catchupCount=0
hadPreviousOffset=false
recovered=false
Troubleshooting already completed
  • Verified the same single account is used on macOS, web, and mobile.
  • Verified web and mobile do not show the affected conversations.
  • Signed out and back in.
  • Fully quit and restarted the desktop app.
  • Removed desktop Cache, Local Storage, Session Storage, and cookies, then performed a clean restart.
  • Retested open, delete, and archive against multiple distinct entries.
  • Did not modify or delete local Codex projects or ~/.codex session data; the affected items are ordinary Chat conversations.
Public-report privacy

Conversation IDs, titles, contents, account identifiers, email addresses, local paths, log filenames, cookies, tokens, and unrelated events are intentionally omitted. Exact affected IDs and a fuller sanitized diagnostic excerpt have been supplied privately to OpenAI Support. A support case is open and its number can be provided privately.

Related but not duplicate
  • #37580 reports ordinary Chat conversations stuck loading on macOS while they remain valid on web. Here the conversations are already deleted server-side, web/mobile are clean, and the macOS Recents index continues surfacing tombstoned entries.
  • #28276 reports a generic archive failure involving unexpected Codex/Desktop threads. Here the affected items are ordinary Chat conversations and all operations fail with the specific server response conversation_deleted.

Useful fixes would include:

  1. reconciling Recents against conversation-deletion tombstones;
  2. removing a stale entry when open/delete/archive receives terminal conversation_deleted with can_retry:false; and
  3. exposing an explicit Recents refresh/rebuild path if automatic reconciliation cannot converge.

View original on GitHub ↗

8 Comments

github-actions[bot] contributor · 5 days ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #39897
  • #39989

Powered by Codex Action

dmurotov · 2 days ago

I have the same problem after the update.

tracedef · 2 days ago

I’m seeing the same issue on macOS. A normal ChatGPT web conversation was deleted successfully and is gone from chatgpt.com and search, but it remains as an orphaned entry in the desktop app’s Recents list.

I’ve already tried sign-out/sign-in, reinstalling the app, and removing Cache, HTTP storage, Local Storage, and Session Storage. The orphan entry remains/reappears.

This appears consistent with the stale remote Recents/index behavior described in this issue.

dmurotov · 2 days ago

Sure — I’m seeing the exact same behavior here. The deleted conversation is gone from the web app and search, but it still remains in the macOS desktop Recents list even after reinstalling and clearing local storage/cache.

So this also looks like a stale remote Recents/index sync issue rather than a local cache problem. I suspect we’ll probably have to wait for a desktop app update to fix it.

I also haven’t tried switching back to the Classic version yet, so I can’t confirm whether the issue appears there as well.

dmurotov · 2 days ago

Quick update: I’ve now tested ChatGPT Classic on the same Mac/account.

The orphaned deleted conversations do not appear there — the Recents list looks normal in Classic. So at least in my case, the issue seems specific to the new macOS desktop app / its Recents implementation, rather than the account’s normal chat history itself.

dongiedong · 2 days ago

same issue, only on unified desktop, not on classic.

ShalevZorany · 2 days ago

Update: confirmed local catalog persistence and repeatable workaround

I have now reproduced and repaired this several times on the same Mac/account. The issue is still present on ChatGPT Desktop 26.820.60940 (build 7119).

Confirmed finding

The affected ChatGPT entries are present in the unified app's local conversation catalog:

~/.codex/sqlite/codex-dev.db
table: local_thread_catalog
source_kind: chatgpt
host_id: chatgpt:<redacted-account>:<redacted-user>

The exact IDs that returned 404 conversation_deleted were found as source_kind='chatgpt' rows in this table. This explains why clearing Electron Cache, Local Storage, Session Storage, HTTP storage, and cookies did not help: those operations do not clear this catalog.

The issue has recurred across multiple cleanup/restart cycles, with different batches of locally cataloged ChatGPT rows (including batches of 19, 4, 9, 8, and 24). The local cleanup succeeds, but startup/full or incremental sync can repopulate entries. Rows for conversations that still legitimately exist on the server are expected to return; the bug is that terminally deleted conversations can return or remain as undeletable ghost entries too.

Workaround that cleared the UI

This is an unsupported local workaround, not a product fix. Fully quit the unified ChatGPT app before modifying the database, and back up the database first if the local catalog matters to you.

For one confirmed-deleted conversation, the narrow form is:

BEGIN IMMEDIATE;

DELETE FROM local_thread_catalog
 WHERE source_kind = 'chatgpt'
   AND host_id LIKE 'chatgpt:%'
   AND thread_id = '<confirmed-deleted-conversation-id>';

UPDATE local_thread_catalog_sync_state
   SET watermark_updated_at = CAST(strftime('%s','now') AS REAL),
       last_full_reconciled_at = CAST(strftime('%s','now') AS INTEGER) * 1000,
       initial_build_complete = 1
 WHERE host_id LIKE 'chatgpt:%';

COMMIT;

In this account the intended Chat Recents list was empty, so the bulk variant used was:

BEGIN IMMEDIATE;

DELETE FROM local_thread_catalog
 WHERE source_kind = 'chatgpt'
   AND host_id LIKE 'chatgpt:%';

UPDATE local_thread_catalog_sync_state
   SET watermark_updated_at = CAST(strftime('%s','now') AS REAL),
       last_full_reconciled_at = CAST(strftime('%s','now') AS INTEGER) * 1000,
       initial_build_complete = 1
 WHERE host_id LIKE 'chatgpt:%';

COMMIT;

Important behavior observed during verification:

  1. The app must actually be fully stopped; deleting while its process remains active is not sufficient for a reliable cleanup.
  2. After one restart, the initial sync repopulated a smaller subset. Waiting for that sync to finish and removing the remaining source_kind='chatgpt' rows produced a stable count of zero during the verification window.
  3. PRAGMA integrity_check returned ok after each repair.
  4. Rows from other sources remained unchanged; local Codex/VS Code tasks and rollout/session files were not deleted.
  5. This only removes local catalog entries. A valid conversation that still exists server-side can be imported again. The workaround is most useful for entries already confirmed as terminally deleted by conversation_deleted, can_retry:false.
Likely missing product behavior

The desktop synchronization/reconciliation path should propagate conversation-deletion tombstones into local_thread_catalog. In addition:

  • GET, DELETE, or PATCH returning 404 conversation_deleted with can_retry:false should invalidate and dismiss the corresponding local row;
  • the delete action should be idempotent from the UI's perspective when the remote object is already gone; and
  • full/incremental sync should not resurrect a tombstoned conversation.

This finding is consistent with #39897, but the repeated cleanup cycles here also demonstrate the interaction between the local catalog, sync watermarks, restart-time repopulation, and the need for a second reconciliation pass in some cases.

No conversation IDs, titles, account/user IDs, email addresses, tokens, cookies, or personal paths are included in this update.

vcbrewers · 13 hours ago

Same issue here.

Environment:

  • macOS 27 Dev Beta running on M1 Pro
  • ChatGPT Version 26.820.80927

Issue

  • 4 Stale/Orphaned Entries in Recents Records on macOS desktop app.
  • Each conversation was deleted via iOS or the web client and is no longer showing on any other platform.
  • Updating, restarting, and signing out/in did not clear them.