Codex App response annotations expose raw Markdown syntax from selected rendered text
What version of the Codex App are you using (From “About Codex” dialog)?
Codex App 26.715.4045 (Windows x64 build).
The observed installation is a locally patched copy derived from the official Microsoft Store package OpenAI.Codex_26.715.4045.0_x64__2p2nqsd0c76g0. The local patches affect API-provider gates, one localization string, and the pet overlay; they do not intentionally modify response-annotation or Markdown handling. An unmodified App ASAR is retained locally, but this report has not yet been independently reproduced by launching that unmodified copy.
What subscription do you have?
API-key access through a custom provider configured with CC Switch; no ChatGPT subscription is involved in this reproduction.
What platform is your computer?
Microsoft Windows NT 10.0.22631.0 x64 (Windows 11 23H2, build 22631.7079).
What issue are you seeing?
When text containing Markdown formatting is selected from an already rendered assistant response and added to the next message as a response annotation, the annotation payload contains the raw Markdown source rather than the visible/rendered text.
For example, selecting the visibly bold sentence:
Willing to pay: Wallpaper Engine.
produces annotation text equivalent to:
**Willing to pay: Wallpaper Engine.**
The next model turn therefore receives Markdown delimiters such as **, backticks, or link syntax as literal annotation content. This makes the annotation differ from what the user selected visually and can cause the model to mistake the annotation for a Markdown rendering failure, repeat raw delimiters, or discuss implementation syntax rather than the selected text.
The issue is specifically about the structured response-annotation content supplied to the next turn, not about ordinary Markdown rendering in the assistant response, which renders correctly.
What steps can reproduce the bug?
- Ask Codex to produce an assistant response containing formatted Markdown, such as
**bold text**. - Confirm that the response displays as rendered bold text in the conversation.
- Select the rendered bold text.
- Choose Add to chat to attach the selection as a response annotation.
- Add a short follow-up comment and send the message.
- Inspect how the annotation is represented in the next model turn or ask the model to repeat/describe the selected annotation.
- Observe that the annotation text includes the raw
**delimiters instead of only the visible text.
This also appears applicable to other Markdown constructs such as inline code and links.
What is the expected behavior?
The response annotation should preserve the text the user visibly selected without leaking presentation delimiters into a plain-text annotation field.
For the example above, the next turn should receive:
Willing to pay: Wallpaper Engine.
Possible implementation options include:
- Normalize selected rendered content to plain text before storing/sending the annotation; or
- Preserve both
plain_textandmarkdown_sourceexplicitly, with the plain-text value used by default for model context and UI annotations.
If retaining the Markdown source is intentional, the annotation schema and UI should distinguish it clearly so the model and user do not interpret it as a failed render.
Additional information
- No screenshot is required to reproduce the issue; the raw delimiters are visible in the structured annotation text.
- Related but not duplicate: openai/codex#33763 concerns Copy as Markdown omitting response annotations. This report concerns the contents of an annotation delivered to the next model turn.
- Search terms checked before filing included
response annotation,annotation raw markdown,annotation bold markdown, andselected text markdown; no matching issue was found.