[iOS Remote] Small paginated task fails when one serialized record is large, while larger tasks load
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of the Codex App are you using (From “About Codex” dialog)?
ChatGPT/Codex Desktop 26.831.20005 (build 7524), with bundled codex-cli 0.152.0.
What subscription do you have?
ChatGPT Pro 20x.
What platform is your computer?
Darwin 27.0.0 arm64 arm
The client displaying the failure is ChatGPT/Codex Remote on iOS. The exact iOS app version was not captured.
What issue are you seeing?
Some valid Codex tasks listed in iOS Remote fail to hydrate their message history and display:
Error loading messages
Other tasks on the same account, host, and mobile client load normally. Updating and restarting the Mac desktop app did not resolve the affected tasks.
The failing tasks remain readable through the Codex App Server API on the remote Linux host, so their persisted histories exist and are not obviously corrupt. Total rollout size is also not the determining factor: a roughly 4.56 MB task fails while a roughly 54.2 MB task loads successfully.
What steps can reproduce the bug?
- Connect ChatGPT/Codex Remote on iOS through Codex Desktop on macOS to a remote Linux host running Codex App Server over SSH.
- Select an existing paginated task whose history contains an individual serialized record of roughly 2 MB or larger.
- Observe that the task shell may open, but its messages fail with
Error loading messages. - On the same phone and host, open a larger control task whose individual records are smaller.
- Observe that the larger control task loads successfully.
Four tasks were compared during the same reproduction window:
| Result on iOS | Approximate rollout size | Largest serialized record |
|---|---|---|
| Fails | 40.0 MB | 5.32 MB |
| Fails | 4.56 MB | 2.24 MB |
| Loads | 54.2 MB | 1.60 MB |
| Loads | 8.8 MB | 1.49 MB |
The individual task IDs and raw transcripts are intentionally omitted because they may expose private project content. A private in-app feedback report containing the reproduction details was submitted with feedback/session ID:
01a05e69-4884-7e71-b55e-88bfca7b644c
What is the expected behavior?
iOS Remote should load recent human-readable task history even when one command-output or compacted-history record is large. Oversized records should be byte-bounded, represented by a placeholder, truncated for the initial render, or loaded on demand rather than causing the entire message list to fail.
Additional information
This result suggests that total task size alone is not the trigger. Failure correlates more strongly with the size of an individual serialized message or command-output record, which may indicate a per-page or per-record decoding, transport, or rendering limit in the iOS Remote hydration path.
The updated Desktop logs also contained related state errors such as unknown conversation and conversation state not found from avatarOverlay, although no matching Codex App Server-side corruption or general server failure was found.
Related reports:
- #38653 describes a count-only paginated bootstrap without a byte limit.
- #38889 describes iOS message hydration failures for paginated tasks.
- #22705 describes the broader mobile metadata-load/message-hydration split.
This report adds the size-inverted control case: a small total rollout fails while a substantially larger rollout loads, with the outcome instead tracking the largest individual serialized record.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading related issues #38653, #38889, and #22705, then trace the iOS Remote message-hydration path and its Codex App Server API pagination. Compare per-record serialization, transport, decoding, and rendering limits using the reported size-inverted cases; done means a large individual record no longer prevents the task history from loading.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, rust
- Domain
- backend-api-design, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 50/100