Repository navigation
Cross-device conversation sync becomes stale; stale client can hide newer mobile continuation #48490
Description
Summary
Cross-device conversation synchronization can become stale between the ChatGPT iPhone app and Windows/web.
In the failure state, the iPhone continues to receive and send new messages, while the same conversation on Windows/web remains frozen at an older revision. Refreshing the Windows/web client may eventually catch up, but sometimes only after repeated refreshes or a delay.
The more serious failure occurs when the user continues the conversation from the stale Windows/web state: the newer mobile continuation may disappear from the visible conversation, or the two clients can show divergent conversation histories.
This is not just a cosmetic refresh delay. It appears to be a stale-client / conversation-version conflict problem.
Feedback reference
Feedback ID:
no-active-thread-01a0dec2-9d2c-7350-be15-e34062f9bf82
Environment
- Account: same ChatGPT account on both devices
- Mobile client: ChatGPT iPhone app
- Desktop client: Windows/web
- Same conversation open on both devices
- Reproducible repeatedly
- Observed date: September 26, 2026
Observed behavior
1. Mobile advances, desktop stays behind
The iPhone app continues to show newly sent messages and newly received assistant replies.
At the same time, Windows/web can remain on an older conversation state and does not automatically advance to the latest server-side history.
The stale desktop tab still appears usable, even though newer messages already exist on the same conversation from the mobile device.
2. Manual refresh is unreliable
Refreshing/reopening the desktop client sometimes causes the missing messages to appear, but:
- it is not immediate,
- it may take repeated refreshes,
- there is no visible indication that the client is stale,
- there is no explicit “refresh conversation from server” action.
This means the user cannot reliably tell whether the desktop is showing the latest authoritative conversation revision.
3. Stale desktop can continue from an old revision
If the user sends a new message from the stale Windows/web state before it catches up, the conversation can diverge.
The newer mobile continuation may then disappear from the visible conversation or become hidden by the continuation created from the stale desktop state.
This creates a data-integrity concern from the user's perspective: a valid conversation continuation appears to have been lost even though it had already existed on another client.
4. No conflict warning
The desktop client currently provides no warning similar to:
- “This conversation changed on another device.”
- “You are viewing an older revision.”
- “Refresh before continuing.”
- “Conversation conflict detected.”
The send box remains active, allowing a message to be sent from an outdated local state.
Reproduction steps
- Sign in to the same ChatGPT account on iPhone and Windows/web.
- Open the exact same conversation on both devices.
- Send a message from one device and continue the conversation on iPhone.
- Confirm that iPhone shows the newest messages/replies.
- Return to Windows/web.
- Observe that Windows/web can remain frozen at an older message.
- Wait or refresh.
- In some cases, the newer messages still do not appear immediately.
- Before desktop catches up, send another message from the stale Windows/web state.
- Compare the conversation on both devices.
- The newer mobile continuation may disappear from the visible history or the two clients may show inconsistent conversation states.
Concrete test performed
During testing, short messages such as:
pc test- repeated
pc testmessages SYNC-TEST-3
were used specifically to make it obvious which client had received the latest server-side continuation.
The tests showed that one client could be visibly behind even while the other client had already advanced.
Screenshot evidence already captured
The following screenshots were captured during the failure and show the problem from the user's side.
Screenshot A — Windows/web stale conversation state
Shows the desktop/web conversation still sitting on the two “pc test” messages and corresponding assistant replies while cross-device testing was being performed.
What it demonstrates:
- the desktop UI can remain on an older visible revision,
- the conversation remains interactable,
- there is no warning that the view may be stale.
Screenshot B — repeated sync failure after prior catch-up
Shows that even after the conversation temporarily synchronized, it later stopped updating again.
What it demonstrates:
- this is not a single one-off load failure,
- synchronization can regress after appearing to recover,
- reopening/refreshing is not a dependable permanent fix.
Screenshot C — no available update / no obvious recovery control
Shows the client state while attempting to resolve the problem, with no clear client-side update or manual conversation-sync mechanism available.
What it demonstrates:
- the user has no direct recovery action specific to conversation synchronization,
- troubleshooting currently depends on refresh/reopen behavior.
Screenshot D — explicit sync test across devices
Shows the conversation after cross-device test messages were sent.
What it demonstrates:
- different clients can temporarily expose different conversation revisions,
- the issue is visible at the conversation-history level rather than only delayed typing/rendering.
Screenshot E — request for manual sync control
Shows the user explicitly requesting a manual “Sync conversation” action after repeated stale states.
What it demonstrates:
- automatic recovery is insufficient for this failure mode,
- a manual authoritative-server refresh would provide an immediate recovery path.
Expected behavior
A conversation should have a clearly authoritative server-side revision.
Before a client sends a new message, it should verify that the local conversation revision is current.
If the server has a newer revision, the client should either:
- automatically fetch and merge the latest state before sending, or
- block the send and inform the user that the conversation changed on another device.
A stale client should never silently create a continuation that causes a newer continuation from another device to disappear from the visible history.
Suggested implementation safeguards
1. Conversation revision / optimistic concurrency check
Each client should track a conversation revision/version identifier.
When sending a new message, include the revision the client believes it is continuing from.
If the server's current revision differs, return a conflict instead of silently accepting a continuation from stale state.
Conceptually:
client_revision != server_revision -> refresh / conflict flow
2. Manual “Sync conversation” action
Add an explicit UI action such as:
Sync conversation
or
Refresh from server
This should:
- discard stale local cache for that conversation,
- fetch the authoritative server history,
- refresh visible messages,
- re-establish streaming/subscription state.
3. Visible synchronization status
Show a lightweight state indicator:
- Synced
- Syncing
- Out of date
- Conflict detected
This would immediately tell the user whether it is safe to continue from the current client.
4. Preserve both branches on conflict
If two devices genuinely create separate continuations from the same earlier revision, preserve both branches.
Do not silently hide one.
The UI could present:
- “Conversation changed on another device”
- “Choose latest branch”
- or a branch/recovery view.
5. Server-authoritative refresh on focus/resume
When a conversation tab/app returns to foreground after being inactive, compare the local latest message/revision with the server before allowing continued interaction.
6. Realtime subscription health check
If the app relies on a realtime stream/subscription, detect when that subscription becomes stale or disconnected.
A client can otherwise look “online” while no longer receiving conversation updates.
Why this matters
This bug is more serious than ordinary delayed synchronization because the stale client is still allowed to mutate the conversation.
The failure mode is effectively:
- Device A advances conversation.
- Device B does not receive that update.
- Device B still accepts user input.
- Device B creates a continuation from obsolete state.
- One continuation may disappear from the user's visible history.
That creates a risk of apparent conversation loss and makes cross-device use unreliable for long-running work.
Requested fix
Please consider implementing all three layers:
- automatic server-side stale-revision detection,
- a visible/manual Sync conversation control,
- conflict-safe preservation of divergent continuations.
Even if realtime sync temporarily fails, these safeguards would prevent a stale client from silently continuing from an obsolete conversation state.
Activity
kouteichan commentedon Oct 4, 2026
Additional Android/macOS reproduction: locally visible mobile turns were absent from current thread state and disappeared after reload
I reproduced a closely related cross-device state divergence on 2026-10-04 using the ChatGPT Android app and ChatGPT macOS desktop app on the same account and same conversation.
To make missing turns unambiguous, I prefixed messages with sequence numbers and originating device.
The relevant sequence was:
Before reloading the Android conversation, messages
007,008, and009were visibly present in the Android UI, and I captured screenshots of all three.However:
007–009;007–009disappeared from Android as well.Observed sequence:
This reproduction occurred in a newly created conversation, within approximately one hour of creation, so a long-running conversation does not appear to be a necessary condition.
Other conversations were syncing normally around the same period, and MacBook → Android synchronization also succeeded in cases where Android-originated turns were missing.
I am not claiming that this has the same root cause as the original report. The additional evidence is that a mobile client can display messages as successfully present even though those messages are apparently not part of the conversation state visible to another client or to the current assistant context, and a reload can then remove the locally visible turns.
I have screenshots showing
007,008, and009before reload and can attach them if useful.kouteichan commentedon Oct 4, 2026
Screenshot evidence before Android reload
These screenshots were captured before closing and reopening the affected Android conversation. They show messages 007, 008, and 009 visibly present in the Android UI before those same turns disappeared after reload.
kouteichan commentedon Oct 4, 2026
Follow-up: controlled stale-client continuation reproduced the previously suspected failure pattern
I performed a more controlled cross-device test on 2026-10-05 JST after noticing the same conversation-state divergence again.
Before the test:
I preserved screenshots and an external handoff before continuing.
Based on earlier incidents, I suspected that sending a new message from the stale macOS state might cause the newer Android-only continuation to disappear or otherwise be reconciled away.
I then sent a short, uniquely identifiable message from macOS:
The resulting behavior was consistent with the previously suspected pattern: continuing from the stale macOS state caused the Android-visible continuation to no longer remain available in the same way.
A more complete observed sequence is:
This makes the earlier disappearance incidents look less like an Android reload problem by itself and more like a possible stale-client continuation / reconciliation conflict.
This still does not establish the implementation-level cause.
In particular, I cannot determine whether the behavior involves:
The stronger user-facing observation is:
This also means my earlier reproduction, where Android messages disappeared after reload, may have exposed the result of an earlier stale-client conflict rather than the reload itself being the trigger.
That interpretation remains a hypothesis, but this controlled reproduction is consistent with it.
kouteichan commentedon Oct 8, 2026
Higher-level observation: this may be a conversation-consistency problem rather than isolated UI symptoms
After observing several related manifestations, I want to add one higher-level user-facing invariant without claiming an implementation-level root cause.
The individual symptoms have varied:
These do not necessarily share one root cause.
However, they appear to violate the same user-facing consistency expectation:
More generally:
may currently be an observable failure boundary.
From the outside, this looks less like one isolated rendering bug and more like a broader cross-device conversation consistency / reconciliation problem.
Possible implementation areas might include revision tracking, stale-client detection, reconciliation, subscription recovery, or persistence acknowledgement, but I am not asserting any of these as the cause.
The important safety property is:
MAVIS-creator commentedon Oct 9, 2026
+1 to the proposed manual Sync conversation / Refresh from server control, especially for the Windows app.
I have repeatedly had the inverse direction as well: a conversation progresses on the web, but the Windows app can remain on an older visible state. When that happens, there is currently no obvious way to tell whether the Windows transcript is authoritative or stale.
A practical Windows UX could be:
It would also be useful if the app automatically detected that the server has a newer conversation revision and showed something like:
That would help prevent continuing from an older Windows state and reduce the risk of apparently missing or divergent conversation branches.
This would be useful even after the underlying sync bug is fixed, because a manual refresh gives users a recovery path when realtime synchronization temporarily fails.
kouteichan commentedon Oct 10, 2026
OBS-007 — macOS native app showed stale history; full app restart restored it (2026-10-10 JST)
Adding a further observation, with the observed behavior separated from an untested hypothesis.
Observed facts
On 2026-10-10 JST, I compared the same conversation across three environments:
In the same macOS app, another conversation successfully synchronized the latest messages sent from Android. The stale state was therefore not observed in every conversation in the app.
Recovery sequence
H-01 — untested hypothesis for this incident
Sending a message from the Mac while its conversation view is stale might lead to inconsistent history or apparent disappearance of newer turns.
I did not send any message from the stale macOS state during OBS-007. The successful Mac message was sent only after the restart had restored the full history. This incident therefore does not establish a causal link between writing from a stale client and history inconsistency/disappearance.
Planned follow-up
I plan to use a disposable test conversation with uniquely identified messages and compare the results across Android, Safari on the Mac, and the macOS native app.
This observation does not establish server-side data loss or an implementation-level root cause, nor does it establish that this incident and the earlier reports share the same cause.
kouteichan commentedon Oct 10, 2026
OBS-007 follow-up — sign-out/sign-in restored sync twice
When the ChatGPT macOS app on my MacBook was missing the latest conversation history, I did not send a new message from the stale client. Instead, I signed out and signed back in; the latest history then synchronized correctly. This recovery sequence has succeeded twice. This adds a second observed recovery method alongside the previously reported Cmd+Q → relaunch.
For context, in earlier incidents, after I sent from an unsynchronized client, newer conversation turns also disappeared from view on the original device where they had been visible. Actual server-side deletion and a causal relationship remain unconfirmed.
As a provisional precaution, I recommend avoiding new messages from a stale client until the latest history is visibly restored. These two successful recoveries do not establish that sign-out/sign-in reliably prevents history loss or resolves the underlying cause.
Whitelaughter commentedon Oct 11, 2026
Independent RETIS observations relevant to OBS-007
We've been conducting a series of Windows desktop / Firefox synchronization and conversation-retrieval experiments since August 2026, which we call RETIS.
Our earlier observations showed that Recents visibility, explicit conversation Search, and information independently retrievable by the assistant did not always agree. We previously documented these observations in #43276.
A further controlled continuity test on 10 October produced two contrasting results:
RETIS-6A: The desktop assistant independently retrieved the original conversation and its exact sentence/codeword from the original assistant message.
RETIS-7A: The assistant retrieved records from the identified original conversation, but the returned message content did not expose the original sentence/codeword. Some entries contained content-reference markers rather than the underlying text.
We also tested whether supplying an exact ChatGPT conversation URL would allow independent retrieval through personal-context search. That attempt returned no matching conversation, although this does not establish that content-based retrieval would fail.
These findings reinforce the importance of distinguishing conversation persistence, client-visible history, conversation discovery, and the contents actually returned by retrieval tools.
Your OBS-007 result—where restarting the desktop client restored messages already visible on other clients—is particularly interesting alongside our earlier restart and continuity observations.
We have not demonstrated permanent message loss, nor do we claim that our observations and yours necessarily share a root cause. We have retained detailed experimental notes if they would be useful.
kouteichan commentedon Oct 12, 2026
Additional observation — macOS desktop sync divergence and sign-in recovery (2026-10-13 JST)
I have continued observing intermittent conversation synchronization divergence between ChatGPT Android and the macOS desktop app.
Observed pattern so far (counts not yet systematically recorded):
Related but distinct recent observation: An assistant answer was initially visible in an open Mac conversation. After the Mac had been asleep with the conversation left open, the answer and its reasoning display were no longer visible on Mac. The answer remained visible on Android, and the conversation continued from Android with earlier context still available. This does not establish server-side deletion or that sleep caused the disappearance.
Precaution: When I detect a stale Mac conversation, I avoid sending from that stale view because of previous observations of cross-device visible-history regression following a stale-client send. I sign out and back in on Mac and verify the latest history before resuming.
Assessment: Root cause remains unknown. Potential areas for investigation include per-conversation update state, reconnection/update subscriptions, session lifecycle, and cache invalidation. Recovery after signing back in does not by itself prove an authentication timeout or identify the failing component.
kouteichan commentedon Oct 13, 2026
Related reports for comparison (OBS-007 follow-up)
I found two potentially relevant existing reports and am linking them as comparative evidence, not confirmed duplicates or evidence of a shared root cause.
For clarity, I am tracking two symptom categories separately:
Both symptom types have recovered after signing out and back into the Mac app in my observed recovery attempts, but this does not establish a common cause. I am starting to count incidents per day and will distinguish affected conversations from separate incidents.
Related: #43267 and #29094
kouteichan commentedon Oct 13, 2026
Additional related report — #53540 (comparative observation, 2026-10-13)
A newly reported case, #53540 — “[ChatGPT Web] Completed assistant answers disappear after next message; Thinking summary remains”, provides a useful cross-platform comparison for OBS-007-B (assistant response body visibility failure).
Overlap: The user-visible assistant final answer is absent while Thinking/reasoning-duration or activity indicators remain present. Both reports leave open whether the response is missing from storage, retrieval, or client-side presentation.
Important differences:
This broadens the set of comparable symptoms beyond macOS, but does not demonstrate a shared defect, shared backend, or common root cause. It also does not establish that any missing response was deleted server-side.
Related issue: #53540
For tracking, please keep this as external comparative evidence, separate from my own directly reproduced Android/macOS observations.
kouteichan commentedon Oct 14, 2026
OBS-007-B follow-up — macOS desktop vs Web comparison (2026-10-14 JST)
Additional directly observed evidence from the same user's environment:
Interpretation: These observations prioritize investigating the macOS desktop client's conversation-state retrieval, cache/session lifecycle, or presentation/hydration behavior. They do not identify a root cause or prove that missing messages were deleted from server storage. The Web-vs-desktop comparison is stronger evidence against a machine-wide display problem than earlier Android-vs-Mac comparisons.
Related comparative report: #53592 describes missing desktop final answers while the underlying
final_answerwas reportedly present in thread records, but its environment differs and a shared root cause is not established.kouteichan commentedon Oct 14, 2026
OBS-007-A — hypothesis for investigation: stale-client write may select an incomplete conversation continuation (2026-10-14 JST)
I would like to add a more specific unverified failure hypothesis to my earlier Android/macOS observations. This is an investigation lead, not a claim about ChatGPT's internal architecture or a confirmed root cause.
Two observed paths from a stale macOS conversation
Path A — write before recovery (history becomes unavailable):
This pattern was tested and described in more detail in my October 5 follow-up.
Path B — refresh state instead of writing (latest turns become visible):
This recovery has been observed in multiple attempts, as reported previously. It does not mean that turns already lost in Path A are restored by signing in again.
Hypothesis — stale state treated as the active continuation
Could a new write from a client holding an older conversation revision cause that client's incomplete continuation, or a branch based on it, to be treated as the active/canonical conversation path and propagated to other clients?
Illustrative conceptual sequence (not a description of the actual implementation):
A last-writer-wins-like state selection, branch-head switch, or erroneous reconciliation could potentially produce this appearance. None of these mechanisms has been verified, and the observation does not establish that any messages were physically deleted from server storage. An independent persistence or retrieval failure could also explain some symptoms.
Specific investigation request
Could the team check whether, when a macOS client submits a turn against a stale conversation state:
The core distinction is “latest write” is not necessarily “latest complete conversation history.” Even if clients are briefly stale, continuing from one should not silently make already visible/sent messages inaccessible.
Please keep this as OBS-007-A (cross-device history divergence), separate from my OBS-007-B (macOS assistant-answer-body rendering/visibility) observations. The two symptoms need not share a root cause.
Status: HYPOTHESIS / UNVERIFIED.
kouteichan commentedon Oct 14, 2026
OBS-007-A — concise clarification of the stale-write hypothesis (2026-10-14 JST)
Detecting a new write does not make the writing client's entire local conversation state the latest authoritative state.
In Japanese: 「最新の書き込みを検知しても、その書き込み元の状態全体を最新として採用してはいけない。」
For example, Android may already display turns
001 → 002 → 003 → 004 → 005, while an unsynchronized macOS client displays only001 → 002 → 003. If macOS then sends turn006, the newness of turn006does not establish that the macOS client's incomplete view is the complete or authoritative conversation history.The distinction is between a new write event and the completeness/currency of the writer's base state. A potential investigation question is whether stale-client writes are checked against the current conversation revision or reconciled without treating the stale base as canonical.
Unverified hypothesis only: This is a general design principle and a possible explanation for the observed visible-history regression, not evidence that ChatGPT internally uses last-writer-wins, replaces canonical state, or deletes server-side messages. No additional risky stale-write test was performed for this clarification.
Related earlier hypothesis: #48490 (comment)