Codex Desktop: complete edited theme JSON leaves Import theme disabled with no validation error
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of the Codex App are you using (From “About Codex” dialog)?
26.901.51231, build 8109 (read from the running app bundle's Info.plist, not the About dialog).
What subscription do you have?
Not provided; subscription-specific behavior has not been tested.
What platform is your computer?
macOS 26.6.2 (25G83); uname -mprs: Darwin 25.6.0 arm64 arm. App UI language: Chinese.
What issue are you seeing?
In Appearance > Import theme, after pasting an edited codex-theme-v1: string, the “导入主题” (Import theme) button remains gray/unavailable, with no visible explanation of which field is invalid.
The user explicitly confirmed that the entire JSON payload was pasted. Two screenshots show the beginning and end of the input respectively; the second shows the expected "surface":"#202322"},"variant":"dark"} ending. Both show the gray Import theme button and no visible validation error. JSON truncation is not the reported issue.
A complete, syntactically valid edited theme string cannot be imported, and the UI provides no actionable validation feedback. The root cause is not yet established; if a semantic restriction prevents this combination, it should be explained in the dialog.
What steps can reproduce the bug?
Reported workflow (not independently reproduced by the reporting assistant):
- Obtain a theme string using Copy theme. The user supplied this exported string:
codex-theme-v1:{"codeThemeId":"proof","theme":{"accent":"#3d755d","accentSource":"custom","contrast":40,"fonts":{"code":null,"ui":null},"ink":"#2f312d","opaqueWindows":false,"semanticColors":{"diffAdded":"#3d755d","diffRemoved":"#ba2623","skill":"#5f6ac2"},"surface":"#f5f3ed"},"variant":"light"}
- Edit the accent, ink, and surface colors and change the variant from light to dark. The assistant provided the following candidate to paste:
codex-theme-v1:{"codeThemeId":"proof","theme":{"accent":"#A3BE8C","accentSource":"custom","contrast":40,"fonts":{"code":null,"ui":null},"ink":"#E0E4DF","opaqueWindows":false,"semanticColors":{"diffAdded":"#3d755d","diffRemoved":"#ba2623","skill":"#5f6ac2"},"surface":"#202322"},"variant":"dark"}
- Open Appearance > Import theme and paste the candidate.
- Observe that Import theme is unavailable and the dialog gives no visible reason.
The user confirmed the full candidate was pasted. Its JSON syntax was also checked locally with Python json.loads. An unchanged export/import round-trip has not been tested.
What is the expected behavior?
If the payload is valid, allow import. If it is invalid or the code theme is incompatible with the selected variant, show a specific, actionable validation message (for example, malformed/truncated JSON, unsupported codeThemeId, or variant incompatibility), rather than only leaving the button disabled.
Additional information
Related: #14766 (theme importer rejects unsupported codeThemeId values).
In this report, proof was retained from the user-supplied export rather than invented as a custom ID. Whether it supports the dark variant is unknown. This may share the underlying validation path with #14766; please link/merge if appropriate. The observed bug is that the complete edited theme cannot be imported and the UI does not explain why import is unavailable.
The two user-supplied screenshots are described above; image attachments are not included in this submission. No application settings were changed by the reporting assistant.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in Appearance > Import theme by reproducing the unchanged export/import round trip and then the edited candidate; compare the results with related issue #14766. Trace the shared validation behavior and make the dialog either accept valid payloads or show a specific actionable reason when import is unavailable.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos, rust
- Domain
- design, desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100