Final `Worked for ...` duration resets/truncates on long turns instead of tracking submit→final continuously

Open 💬 3 comments Opened Mar 22, 2026 by SlipstreamAI

What version of Codex CLI/Desktop is running?

Observed on recent Codex builds in March 2026 (exact version not captured in this report). I can provide exact version on request.

What subscription do you have?

ChatGPT subscription (exact tier not required for repro).

Which model were you using?

Observed with GPT-5.3 Codex in long-running sessions.

What platform is your computer?

Windows (PowerShell / terminal workflow).

What issue are you seeing?

The final completion duration (Worked for ...) is no longer reliably measuring full turn time from prompt submission to final output.

On long-running turns, the displayed elapsed time appears to reset/truncate partway through (sometimes around ~8 hours in my observations), and the final Worked for ... line reflects the truncated value instead of total end-to-end time.

This is different from stale Waiting for background terminal text. The issue here is specifically the final worked duration accounting.

What steps can reproduce the bug?

  1. Submit a prompt that results in a very long active turn (hours) with sustained activity.
  2. Keep the same turn running continuously.
  3. Observe the in-progress elapsed display over time.
  4. When the model finally returns a final answer, check Worked for ....

Observed:

  • elapsed can reset/truncate during the same long turn,
  • final Worked for ... reports the shortened value, not full submit→final duration.

What is the expected behavior?

Worked for ... should be monotonic and reflect true end-to-end turn duration:

  • Start timing at turn submit/start,
  • Keep counting continuously for the entire turn,
  • Never reset due to UI/status rendering lifecycle,
  • Final line should report full duration (for example, if it ran 25h 43m, show that full duration).

Additional information

This appears related to duration being derived from a status widget lifecycle rather than a stable per-turn timestamp.

Potentially relevant code paths in openai/codex:

  • chatwidget.rs computes final separator elapsed via status_widget().elapsed_seconds() in turn completion path.
  • bottom_pane may recreate/hide status indicator during streaming, and StatusIndicatorWidget::new(...) starts elapsed at zero.

Even if UI status is hidden/restored mid-turn, the final Worked for ... should still use a single per-turn monotonic timer anchor.

Related but distinct issue family (stale waiting state):

  • #12033
  • #12321
  • #13708

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗