Forked tasks inherit unfinished turns
What version of the Codex App are you using?
Codex App 26.727.40816 (build 6067).
What platform is your computer?
macOS: Darwin 24.6.0 arm64 arm.
What issue are you seeing?
TL;DR: If you fork a task while it is still working, the new task unexpectedly includes that unfinished work instead of starting from completed history only.
Forking an active Codex Desktop task copies its unfinished source turn into the child as an interrupted turn, even though the fork_thread contract states that forks contain completed history only and the active turn and unfinished response are not copied.
ID-targeted follow-up routing remains correct, but the unexpected inherited context means a supposedly clean child contains abandoned survey or implementation instructions.
What steps can reproduce the bug?
- Create a projectless parent task and complete one baseline turn.
- Start a new parent turn that emits a visible marker and stays active (for example, emit
ACTIVE-TURN-MARKERand run a 45-second sleep). - Confirm that the parent is active and its latest turn is in progress.
- Fork the parent with the task-management fork operation.
- Read the child before sending it a follow-up.
What is the expected behavior?
- The new task contains only completed history from the original task.
- The unfinished turn is absent, including its prompt, partial response, and tool activity.
- The new task can then receive its own follow-up work without carrying abandoned context.
Additional information
The child showed the active source turn as interrupted, including the original prompt and partial response, before it received any new prompt.
A control test confirmed that messages sent to the original and forked tasks still went to the correct task. The problem is not incorrect routing; it is the unfinished turn being copied into the fork.
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Reproduction trace
I did not attach my local Codex session logs, but the following is the rough structure of two tasks launched to repro.
The fork did not receive the parent’s final reply. It did contain the prompt and partial assistant output from the active turn.
Copy to repro...
hah this is my first reproduction instructions as a prompt which orchestrates threads...
Paste the following into a new projectless thread.
It creates and inspects its own parent/fork pair threads.