Desktop project: Mark all as read does not persist unread state

Open 💬 0 comments Opened Jun 12, 2026 by dysthymia

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

26.609.30741

What subscription do you have?

Not provided in this report.

What platform is your computer?

For macOS and Linux: uname -mprs output:
Darwin 25.5.0 arm64 arm

Codex App: macOS desktop
OS: macOS 26.5.1 (25F80)
Kernel: Darwin 25.5.0

What issue are you seeing?

In a project with many threads/conversations, using Mark all as read in the project menu does not persist unread state.
After the action, unread markers remain and reopening the project shows many threads still unread even after repeated clicks.

I confirmed this by inspecting the bundled desktop JavaScript and found the project-level handler currently only closes the menu and invalidates queries (tasks, task/:id) with no mark-as-read mutation call.

What steps can reproduce the bug?

  1. Open the Codex desktop app on macOS.
  2. Open a project with many threads (e.g., large project conversation list).
  3. Click project action Mark all as read.
  4. Reopen the project and repeat the action.
  5. Observe unread count and per-thread unread indicators still present.

What is the expected behavior?

All relevant threads in the selected project should be marked as read and unread state should clear.

Additional information

  • From app.asar analysis in the desktop bundle: project action handler does not call markConversationAsRead/thread/read path.
  • Unread-state API is present on the manager side: markConversationAsRead(e) -> setConversationUnreadState(e, false).
  • Suggestion: route project-level “Mark all as read” to per-thread read mutations (or add bulk mark-as-read API), then invalidate task/thread queries.

View original on GitHub ↗