Platform / 平台
macOS
OS version / 系统版本
26.5.2 (25F84)
CPU / 架构
Apple Silicon (arm64)
Codex Desktop version / source / Codex 桌面版版本或来源
26.721.41059
Dream Skin version / 皮肤工具版本
1.5.6(1.5.1 / 1.5.4 同样复现)
Problem category / 问题类型
Verify / doctor failed / 校验或 doctor 失败
Self-check / 自检
未勾选 Restore:根因已定位到 injector.mjs 的具体分支(见下),与本地状态无关,Restore 不影响结论。
Steps to reproduce / 复现步骤
- 在 Codex 首页(显示 "What should we work on?" 的界面)状态下点击菜单栏「应用皮肤」,或运行
start-dream-skin-macos.sh
- 随机失败;失败时
start-error.log 写入 Injection verification failed,注入器被停止
- 切到任意对话页后重新应用 → 稳定成功
本机 4 天内累计 24 次 Injection verification failed。
Expected behavior / 期望结果
注入成功且皮肤已正确渲染时,验证应通过并保持会话。
Actual behavior / 实际结果
注入本身总是成功(installed: true、stylePresent: true、styleMode: "adopted",截图确认皮肤渲染正常),但验证把一个健康会话拆掉了。
根因:[data-testid="home-icon"] 在 26.721.41059 首页并非稳定渲染。
同一台机器、同一 app build、同一会话,用 CDP 直接实测:
t0 首页 [role=main]=1 home-icon=0 game-source=1 -> verify rc=2 失败
t1 对话页 [role=main]=0 home-icon=0 game-source=0 -> verify rc=0 通过
t2 首页 [role=main]=1 home-icon=1 game-source=1 -> verify rc=0 通过
即:首页显示期间 home-icon 有时缺失。缺失时——
// injector.mjs (1.5.6) :1085-1089
const homeIndicator = document.querySelector(SEL_HOME_ICON); // null
const homeSignal = homeIndicator
?? document.querySelector(SEL_GAME_SOURCE) // <- 仍能解析
?? document.querySelector(SEL_HOME_SUGGESTIONS);
const homeRoute = homeSignal?.closest('[role="main"]') ?? null; // truthy
const home = document.querySelector(SEL_HOME_ROUTE); // :has([data-testid=home-icon]) -> null
homeRoute 为真(经 game-source)但 home 为 null,于是 homePresent = false、hero = null:
// injector.mjs :247-253
const homePass = !result.homeRoute || (result.homePresent && result.hero?.visible && ...);
// false || (false && ...) -> false
result.pass = Boolean(basePass && homePass && payloadPass); // -> false
其余全部通过:
"checks": { "documentVisible": true, "fallbackWindowPass": true, "nativeWindowPass": false,
"payloadPass": true, "structurePass": true, "viewportPass": true, "windowPass": true },
"homeRoute": true, "homePresent": false, "hero": null, "pass": false
两个首页信号是独立推导的:homeRoute 接受三个信号中任意一个,而 home 只认 home-icon。当 home-icon 是唯一缺失的那个时,验证就会对一个完好的会话 fail closed。
为什么是间歇性:需要两个条件同时成立 —— (1) 处于首页路由(对话页没有 [role="main"],homeRoute=false 会让 homePass 短路为 true);(2) 该瞬间 home-icon 尚未渲染。所以在对话页应用稳定成功,在首页应用是抛硬币。
这不是 #251,也不是 #244。 -32000 的修复已生效(fallbackWindowPass: true / windowPass: true 均正确);#244 的 banner-sibling hero 探针本身工作正常——问题在更早一步,home 本身就是 null,探针拿不到容器。也不是 #256(那是 apply-from-menubar-macos.sh 的 shell unbound variable,已修复)。
Modified official Codex install? / 是否改过官方 Codex 安装?
No — official app only / 否,仅官方安装
Logs / Verify / doctor output(recommended)/ 日志与校验输出(强烈建议)
$ node injector.mjs --verify --port 9341 --theme-dir <theme>
rc=2
homeRoute = True homePresent = False hero = None pass = False
checks = {'documentVisible': True, 'fallbackWindowPass': True, 'nativeWindowPass': False,
'payloadPass': True, 'structurePass': True, 'viewportPass': True, 'windowPass': True}
$ tail start-error.log
2026-07-28T13:47:27Z Injection verification failed. The injector was stopped
2026-07-28T13:47:27Z exit=1 line=45
(同类记录 4 天内 24 条)
Screenshots / video / 截图或录屏
失败时截图确认皮肤已正常渲染(背景图、配色 token、右下角 quote 全部生效),仅验证判定失败。
Extra context / 其他信息
建议修复:homeRoute 已经是"触发的那个首页信号"的 [role="main"] 祖先节点,正是 home 想要的容器。严格选择器落空时回退到它即可:
- const home = document.querySelector(${selectorLiteral("home-route")});
+ // 26.721.x 并不总是渲染 [data-testid="home-icon"],严格的 home-route 选择器
+ // 会在确实处于首页时落空。homeRoute 已经是该首页信号的 [role="main"] 祖先。
+ const home = document.querySelector(${selectorLiteral("home-route")}) ?? homeRoute;
严格选择器命中时仍然优先(?? 短路),因此在 home-icon 存在的构建上行为完全不变。
验证:把 1.5.6 的 hero 算法(第 1115–1126 行)原样跑在实际 DOM 上,分别喂入不同容器:
| 容器 |
homePresent |
hero |
严格选择器,home-icon 存在 |
true |
1760×1067 visible |
严格选择器,home-icon 缺失 |
false |
null ← 当前故障 |
homeRoute 回退,home-icon 缺失 |
true |
1760×1067 visible |
回退产出的 hero box 与严格路径完全一致,属于零副作用替换。本机应用该补丁后,首页状态下 --verify 恒为 pass: true,与 home-icon 是否恰好渲染无关。
披露:为验证该修复,本机已在 ~/.codex/codex-dream-skin-studio/scripts/injector.mjs 上应用上述一行补丁。官方 ChatGPT.app 未做任何改动。上文 t0/t1/t2 的实测数据均采集自未打补丁状态。
旁注:selectors.json 的 verifiedAgainst.codexVersionMac 在 1.5.1、1.5.4、1.5.6 中始终是 26.715.61943。针对 26.721.x 重新基线可能会一并暴露这类漂移。更根本地说,官方若是条件渲染 home-icon,把它列为 L1 / required 锚点就不太安全——让 home 复用与 homeRoute 相同的已解析信号可以彻底移除这个依赖。
Confirmation / 确认
Platform / 平台
macOS
OS version / 系统版本
26.5.2 (25F84)
CPU / 架构
Apple Silicon (arm64)
Codex Desktop version / source / Codex 桌面版版本或来源
26.721.41059
Dream Skin version / 皮肤工具版本
1.5.6(1.5.1 / 1.5.4 同样复现)
Problem category / 问题类型
Verify / doctor failed / 校验或 doctor 失败
Self-check / 自检
Steps to reproduce / 复现步骤
start-dream-skin-macos.shstart-error.log写入Injection verification failed,注入器被停止本机 4 天内累计 24 次
Injection verification failed。Expected behavior / 期望结果
注入成功且皮肤已正确渲染时,验证应通过并保持会话。
Actual behavior / 实际结果
注入本身总是成功(
installed: true、stylePresent: true、styleMode: "adopted",截图确认皮肤渲染正常),但验证把一个健康会话拆掉了。根因:
[data-testid="home-icon"]在 26.721.41059 首页并非稳定渲染。同一台机器、同一 app build、同一会话,用 CDP 直接实测:
即:首页显示期间
home-icon有时缺失。缺失时——homeRoute为真(经game-source)但home为null,于是homePresent = false、hero = null:其余全部通过:
两个首页信号是独立推导的:
homeRoute接受三个信号中任意一个,而home只认home-icon。当home-icon是唯一缺失的那个时,验证就会对一个完好的会话 fail closed。为什么是间歇性:需要两个条件同时成立 —— (1) 处于首页路由(对话页没有
[role="main"],homeRoute=false会让homePass短路为 true);(2) 该瞬间home-icon尚未渲染。所以在对话页应用稳定成功,在首页应用是抛硬币。这不是 #251,也不是 #244。
-32000的修复已生效(fallbackWindowPass: true/windowPass: true均正确);#244 的 banner-sibling hero 探针本身工作正常——问题在更早一步,home本身就是null,探针拿不到容器。也不是 #256(那是apply-from-menubar-macos.sh的 shell unbound variable,已修复)。Modified official Codex install? / 是否改过官方 Codex 安装?
No — official app only / 否,仅官方安装
Logs / Verify / doctor output(recommended)/ 日志与校验输出(强烈建议)
Screenshots / video / 截图或录屏
失败时截图确认皮肤已正常渲染(背景图、配色 token、右下角 quote 全部生效),仅验证判定失败。
Extra context / 其他信息
建议修复:
homeRoute已经是"触发的那个首页信号"的[role="main"]祖先节点,正是home想要的容器。严格选择器落空时回退到它即可:严格选择器命中时仍然优先(
??短路),因此在home-icon存在的构建上行为完全不变。验证:把 1.5.6 的 hero 算法(第 1115–1126 行)原样跑在实际 DOM 上,分别喂入不同容器:
homePresentherohome-icon存在true1760×1067visiblehome-icon缺失falsenull← 当前故障homeRoute回退,home-icon缺失true1760×1067visible回退产出的 hero box 与严格路径完全一致,属于零副作用替换。本机应用该补丁后,首页状态下
--verify恒为pass: true,与home-icon是否恰好渲染无关。旁注:
selectors.json的verifiedAgainst.codexVersionMac在 1.5.1、1.5.4、1.5.6 中始终是26.715.61943。针对 26.721.x 重新基线可能会一并暴露这类漂移。更根本地说,官方若是条件渲染home-icon,把它列为L1 / required锚点就不太安全——让home复用与homeRoute相同的已解析信号可以彻底移除这个依赖。Confirmation / 确认