Backend queued messages are retried and drained for idle threads even if the original turn/completed notification was missed or the server starts with persisted queue state already present.
- Dev server running (
pnpm run dev) - A thread exists with queued messages persisted in
/codex-api/thread-queue-state - The thread's latest turn is completed/idle
- Light theme and dark theme are both available
- In light theme, open the thread with persisted queued rows
- Confirm the queued rows are visible above the composer
- Wait for backend queue recovery to start the first queued message
- Confirm the first queued row is removed and a new turn starts
- Wait for the queued turn to complete
- Confirm the next queued row starts automatically
- Repeat until
/codex-api/thread-queue-stateno longer includes the thread - Refresh the thread and confirm all queued messages completed in order
- Switch to dark theme and confirm the completed conversation and empty queue state remain readable
- Idle persisted queues recover without requiring a new manual message
- Queued messages do not start while the thread has an in-progress turn
- Multiple queued messages drain one at a time and complete in order
- The queue panel disappears after the final queued message is started
- The recovered turns and empty queue state are visible in both light theme and dark theme
- Delete any remaining queued test rows or let recovery drain them
- Remove temporary test projects/threads if they are no longer needed