Bug: UI reports timeout although background task completes successfully

Environment

  • Surface: ChatGPT Web / Desktop
  • OS: Windows 10
  • Browser: Microsoft Edge / Chromium-based browser
  • Exact browser version at the time: not recorded
  • Affected feature: Long-running document / image tasks / timeout state / result delivery

Bug

A long-running task can trigger a visible timeout/error in the ChatGPT UI even though the requested result is still being generated successfully in the background.

Observed behavior:

  • A document or image task runs for some time.
  • The UI reports that the time limit was exceeded / the task failed.
  • The user is given the impression that the operation did not complete.
  • The backend process may nevertheless continue.
  • The requested result can appear later even though the UI already reported failure.

This creates a mismatch between the actual background job state and the state shown to the user.

Expected behavior

The UI should distinguish between:

  • request failed
  • frontend/client timeout
  • background processing still running
  • completed result available

If the backend job is still active, the user should see a state such as:

“Processing continues in the background”

rather than a hard failure.

Once the result is complete, it should load automatically into the conversation.

Reproduction

  1. Start a long-running task such as document creation or image generation.
  2. Wait until the operation exceeds the visible UI time limit.
  3. The interface reports a timeout / failure.
  4. Do not restart the task.
  5. Wait or reopen the conversation.
  6. The requested result may still appear later.

Impact

The current behavior encourages unnecessary retries because the user cannot tell whether the task actually failed.

This can lead to:

  • duplicate jobs
  • duplicated generated files or images
  • wasted compute
  • confusion about whether work was lost
  • unnecessary repeated submissions

Diagnostics

The issue appears to involve a mismatch between:

frontend timeout
→ background job state
→ completion state
→ result delivery

A frontend timeout should not be treated as proof that the backend job failed.

The client should query the authoritative job state before presenting a final failure.

Acceptance criteria

  1. A frontend timeout is clearly distinguished from backend job failure.
  2. If processing continues, the UI shows a persistent “still processing” state.
  3. Completed background results are inserted automatically into the conversation.
  4. The user is not prompted to retry while the original job is still active.
  5. Reopening or reconnecting to the conversation restores the current authoritative job state.
  6. Duplicate jobs are avoided when a timeout occurs only at the client/UI layer.