openai / openai/codex

[macOS] Wrong thread preview, unstable history pagination, and corrupted cross-task handoffs in long tasks

Open
#44,461 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app app-server bug model-behavior subagent
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)?

26.901.51231 (build 8109)

What subscription do you have?

ChatGPT Pro (internal plan type reported as prolite)

What platform is your computer?

Darwin 24.6.0 arm64 arm; macOS 15.7.4 (24G517)

What issue are you seeing?

Codex Desktop 26.901.51231 (build 8109) is unreliable with several long-running local tasks.

Observed failures:

  • A task remains pinned under its correct title but displays a preview copied from an unrelated task.
  • Its visible history collapsed to two recent turns even though its local JSONL retained 613 events, including 66 message records and 24 task/turn starts.
  • A diagnostic read initially returned nextCursor: null and hasMore: false; after further activity the same task began returning additional turns with hasMore: true, without any repair action. The unrelated preview remained.
  • Other long tasks report status: notLoaded; completed turns have sometimes been returned with empty item arrays despite the work existing in local JSONL.
  • In a separate long-task workflow using gpt-5.6-sol, otherwise coherent instructions generated through send_message_to_thread were corrupted twice by contradictory or nonsensical text. Both handoffs were appropriately rejected by the safety layer, but the user was then asked to manually authorize a “clean retry” despite having already authorized the task.

Representative rejected fragments were:

  1. Level is obsolete? No… Use Level? disregard
  2. pragmatic UI “ennialsliz”? Stop

No repository writes resulted from the rejected handoffs. The local session records remain intact.

OpenAI's Help Center assistant acknowledged that the history evidence is consistent with a thread-listing/turn-pagination mismatch, but it could not create a case number or transfer the multi-part complaint to a human representative.

What steps can reproduce the bug?

History/preview failure:

  1. Use a long-running local Codex task over multiple weeks and allow normal context compaction. The affected task had two compaction events.
  2. Keep the task pinned under its correct title.
  3. Reopen the task after further activity.
  4. Observe that the visible conversation contains only the latest turns while the preview belongs to an unrelated task.
  5. Compare the visible result with the corresponding local JSONL record.
  6. Query the task history. The affected task initially returned two turns with hasMore: false and no cursor despite substantially more local history.
  7. Continue the conversation and query again. The result may change to additional turns with hasMore: true without any repair action, while the wrong preview persists.

Cross-task handoff corruption:

  1. In a long-running task using gpt-5.6-sol, authorize a bounded documentation-only movement.
  2. Have the task send the coherent instruction to another Codex task using send_message_to_thread.
  3. Observe contradictory or nonsensical words inserted into the generated handoff payload.
  4. The safety layer rejects the handoff because the corrupted payload is materially ambiguous.
  5. Retry once. Different gibberish may appear and cause a second rejection.

Affected session IDs (no conversation content included):

  • history/preview mismatch: 019ff235-dc89-72d3-8a93-b0c7d107f2ea
  • corrupted handoff source: 019fc6f4-7ba8-7fc2-a971-427174589fb1
  • handoff destination / related empty-turn loading: 01a07813-5785-7143-95ea-a1362f66eed8
What is the expected behavior?
  • A task's preview must always belong to that task.
  • Stored history and pagination must remain stable and complete across compaction and reopening.
  • hasMore and nextCursor must not change merely because a new turn was added when older stored turns already existed.
  • Loaded completed turns should not be presented as empty when their items remain in local storage.
  • Cross-task handoff payloads must preserve the coherent instruction being sent without inserting contradictory or nonsensical text.
  • When malformed generation causes a safety rejection, recovery should not push repeated authorization and routing work back onto the user.
Additional information

This is an ongoing reliability problem in the current build, not a historical report.

Environment:

  • Codex Desktop: 26.901.51231
  • Build: 8109
  • macOS: 15.7.4 (24G517)
  • Platform: Darwin 24.6.0 arm64 arm
  • Model involved in corrupted handoffs: gpt-5.6-sol

Privacy-safe local telemetry over the affected window recorded very high context processing in the two handoff-related tasks (approximately 137M and 282M processed tokens respectively, predominantly cached input). These are workload measures, not billing claims, but the failures consumed substantial task activity.

Related open reports found before filing:

  • #23979 — local conversation history missing while threads remain in state DB
  • #31433 — rollout files left unindexed with no supported repair
  • #35746 — paginated history drops valid rollout records
  • #20493 — chats disappear or open blank despite JSONL turns
  • #42937 — GPT-5.6 Sol / GPT-6 Astra operational reliability

This report adds a reproducible wrong-preview association, nondeterministic hasMore/nextCursor behaviour in the current build, and generated gibberish propagating into cross-task handoff payloads.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by comparing the affected task's local JSONL with task-history pagination responses, including nextCursor, hasMore, and preview association. Then trace the send_message_to_thread path and safety-layer rejection using the listed session IDs. Done means stable complete history, correct previews and loaded items, and uncorrupted handoff payloads without unnecessary reauthorization.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, rust
Domain
backend, desktop
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.