You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Final response is incorrectly placed inside the Thinking/“Worked for” section, leaving no visible output #41948
What version of the Codex App are you using (From “About Codex” dialog)?
Version 26.825.51511
What subscription do you have?
Plus
What platform is your computer?
Darwin 27.0.0 arm64 arm
What issue are you seeing?
In the Codex App, the generated response is sometimes incorrectly placed inside the Thinking / “Worked for …” section instead of being rendered as the final assistant response.
When this happens, Codex appears to finish working, but no normal response is shown in the conversation. The actual generated content seems to have been attached to or hidden inside the Thinking section.
In the affected conversation, I can see entries such as “Worked for 7s”, “Worked for 23s”, and “Worked for 1m 12s”, but there is no visible final response below them.
This makes it appear as if Codex completed the task without returning any output.
What steps can reproduce the bug?
Open the Codex App.
Start a task that causes Codex to enter the working/thinking state.
Wait for Codex to finish processing the task.
Observe the conversation after the “Worked for …” section completes.
Sometimes, no final assistant response is displayed.
The generated response appears to have been incorrectly placed inside or associated with the Thinking / “Worked for …” section instead of the normal response area.
Reproduction frequency: frequently
What is the expected behavior?
Content generated as the final assistant response should always be rendered in the normal response area after the Thinking / “Worked for …” section.
The Thinking section should contain only the corresponding working/thinking state, and it should not consume, hide, or capture the final response.
After Codex finishes working, the user should always be able to see the final generated output.
Additional information
Codex App version: 26.825.51511
Screenshot attached showing multiple completed “Worked for …” sections with no visible final assistant response.
This looks like a response rendering/state-classification issue: the final assistant message may be getting assigned to the Thinking section instead of the final response section.
Thanks — I reviewed #41733. This appears to be a different issue.
In #41733, assistant messages are missing from the timeline entirely and become visible again after restarting the app, in a Windows + MCP Elicitation scenario.
In my case, the final assistant response appears to be incorrectly associated with or rendered inside the Thinking / “Worked for …” section, leaving the normal final response area empty. I’m seeing this on macOS, and it does not require MCP.
So while both may belong to the same general family of Desktop rendering/state synchronization bugs, the observed failure mode is different.
Additional deterministic reproduction and candidate source-level fix for this symptom, observed on Codex desktop 26.901.6511.0, Windows x64, Microsoft Store build.
What was isolated
A non-empty completed final_answer is present in both persisted paginated history and the history API response. A late commandExecution completion is appended after that final answer, including after the turn-completed record. Reopening the task leaves the normal final-response area empty while keeping the answer inside the collapsed “Worked for…” activity group.
This is not evidence that the answer text was deleted. The observed late command was a long-running diagnostic process. Its result arrived after the assistant's final answer.
Minimal normalized renderer input
constitems=[{type: 'assistant-message',searchItemId: 'synthetic-final',content: 'Synthetic final answer',phase: 'final_answer',completed: true,},{type: 'exec',callId: 'synthetic-late-exec',commandExecutionItemId: 'synthetic-late-exec',executionStatus: 'failed',completed: true,output: {exitCode: 1},},];// Pass items to split-items-into-render-groups with status 'completed'.
Expected: assistantItem is the synthetic final answer, and the command remains an activity item.
Observed with the original installed splitter: assistantItem is null; both objects remain in agentItems. The text is preserved, but the final answer is collapsed with activity.
Selection logic
The affected installed module is split-items-into-render-groups-1d07f8e220e8.js. It selects the separate assistant response from the activity tail. Its backward fallback skips certain trailing reasoning/subagent/elicitation events, but does not skip a late exec result, so this case never reaches the explicit final answer.
Candidate change: for a completed turn, prefer its latest eligible completed explicit final answer, then use the existing extraction logic. Keep the ordinary fallback for other cases. Eligibility must preserve the existing async-delivery and exclusion checks.
Equivalent source-level proposal:
if(turnStatus==='completed'){constfinalIndex=activityItems.findLastIndex(item=>item.type==='assistant-message'&&item.phase==='final_answer'&&item.completed===true&&item.delivery!=='async'&&shouldExcludeAssistantMessage?.(item)!==true);if(finalIndex>=0)assistantIndex=finalIndex;}// Existing extraction and deduplication logic remains unchanged.
Do not reorder persisted history or discard late tool results to work around the rendering issue.
Verification status
The original module was checked byte-for-byte against the installed ASAR entry. The candidate changes only source-level answer selection, not fixture order or persisted history.
Original-module control: 5 passing, 7 failing behavioral tests. Failures cover late exec, MCP, patch and async-question tails, latest-final selection, completed-vs-unfinished-final selection, and combined preservation with a late command.
Patched-module run: 15 passing, 0 failing tests: the same 12 behaviors plus guards against missing/ambiguous source anchors and double application.
Existing behavior is checked for in-progress turns, legacy phase-less assistant tails, exclusion callbacks and commentary-only histories. Tests also assert that activity order, text, command data and pending input are preserved.
The source-level candidate and its regression tests have passed independent review. This is not a packaged-client integration test.
Deployment and privacy
This is a source-level candidate, not an installed-client fix. The Store package remains unchanged; it requires a vendor-signed release. The test harness isolates the original splitter with bundler/dependency adapters, rather than testing the full desktop UI.
No private conversation text, task/session identifiers, local usernames, personal paths, screenshots, credentials, or full logs are included here. The input above is synthetic. Separate archive/startup symptoms have not been attributed to this rendering defect.
Activity
github-actions commentedon Sep 1, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
lliooly commentedon Sep 1, 2026
Thanks — I reviewed #41733. This appears to be a different issue.
In #41733, assistant messages are missing from the timeline entirely and become visible again after restarting the app, in a Windows + MCP Elicitation scenario.
In my case, the final assistant response appears to be incorrectly associated with or rendered inside the Thinking / “Worked for …” section, leaving the normal final response area empty. I’m seeing this on macOS, and it does not require MCP.
So while both may belong to the same general family of Desktop rendering/state synchronization bugs, the observed failure mode is different.
vrudik commentedon Sep 6, 2026
Additional deterministic reproduction and candidate source-level fix for this symptom, observed on Codex desktop 26.901.6511.0, Windows x64, Microsoft Store build.
What was isolated
A non-empty completed
final_answeris present in both persisted paginated history and the history API response. A latecommandExecutioncompletion is appended after that final answer, including after the turn-completed record. Reopening the task leaves the normal final-response area empty while keeping the answer inside the collapsed “Worked for…” activity group.This is not evidence that the answer text was deleted. The observed late command was a long-running diagnostic process. Its result arrived after the assistant's final answer.
Minimal normalized renderer input
Expected:
assistantItemis the synthetic final answer, and the command remains an activity item.Observed with the original installed splitter:
assistantItemisnull; both objects remain inagentItems. The text is preserved, but the final answer is collapsed with activity.Selection logic
The affected installed module is
split-items-into-render-groups-1d07f8e220e8.js. It selects the separate assistant response from the activity tail. Its backward fallback skips certain trailing reasoning/subagent/elicitation events, but does not skip a late exec result, so this case never reaches the explicit final answer.Candidate change: for a completed turn, prefer its latest eligible completed explicit final answer, then use the existing extraction logic. Keep the ordinary fallback for other cases. Eligibility must preserve the existing async-delivery and exclusion checks.
Equivalent source-level proposal:
Do not reorder persisted history or discard late tool results to work around the rendering issue.
Verification status
The original module was checked byte-for-byte against the installed ASAR entry. The candidate changes only source-level answer selection, not fixture order or persisted history.
The source-level candidate and its regression tests have passed independent review. This is not a packaged-client integration test.
Deployment and privacy
This is a source-level candidate, not an installed-client fix. The Store package remains unchanged; it requires a vendor-signed release. The test harness isolates the original splitter with bundler/dependency adapters, rather than testing the full desktop UI.
No private conversation text, task/session identifiers, local usernames, personal paths, screenshots, credentials, or full logs are included here. The input above is synthetic. Separate archive/startup symptoms have not been attributed to this rendering defect.