背景
codexHistoryHasProductPrompt 是个布尔 marker,只表示「这条线程的历史里曾经写入过产品 prompt」,不带版本信息。
packages/maker-core/src/agents/codex/index.ts 的 thread/resume 分支:
const shouldSendNativeDeveloperInstructions =
!!developerInstructions
&& !useProxyChannel
&& (threadUsesWebSocket || opts.codexHistoryHasProductPrompt !== true);
因此当同时满足以下三条时,客户端升级后新版产品 prompt 永远不会进入该线程的上下文:
- 本地 codex proxy 不可用(
isCodexProxyChannelReady() 为 false,走直连 fallback);
- 该线程不是 WebSocket / 订阅直连线程(
threadModelProvider 为空);
- 该线程此前已写入过产品 prompt(marker = true)。
影响
这是投递机制层面的通用缺口,不绑定任何一次具体的 prompt 改动:只要产品 prompt 文本发生变化(host 共用段、Claude / Codex 专属段,或后续新增的段),存量线程在上述窄路径下继续跑旧文本。用户表现为「新版本已装、但恢复旧任务时行为还是老的」,且没有任何提示。
正常路径不受影响:
- proxy 通道下
registerCodexDeveloperInstructions(threadId, developerInstructions) 每次 resume 都会重新注册当前文本;
- WebSocket / 订阅直连线程
shouldSendNativeDeveloperInstructions 恒为真;
- 全新线程一律拿到当前文本。
期望
给产品 prompt 建模版本(例如持久化内容 hash 或版本号,而不是布尔 marker),resume 时按版本比对决定是否重新下发;或在直连 fallback 路径下无条件重发当前 developerInstructions,由 Codex 侧去重。
需要同时确认:重发对已 compact 过的线程是否会造成重复段落,以及 loaded-thread resume 在当前 Codex 版本下忽略 override 的行为边界(代码注释中已记录 0.145 的这一限制)。
来源
由 PR #1650 的自动 review 发现(thread)。该 PR 新增了一段 Skill 来源优先级 system 文本,是这个缺口的一个实例,但缺口本身早于它存在,因此不在那个 PR 的范围内。
背景
codexHistoryHasProductPrompt是个布尔 marker,只表示「这条线程的历史里曾经写入过产品 prompt」,不带版本信息。packages/maker-core/src/agents/codex/index.ts的thread/resume分支:因此当同时满足以下三条时,客户端升级后新版产品 prompt 永远不会进入该线程的上下文:
isCodexProxyChannelReady()为 false,走直连 fallback);threadModelProvider为空);影响
这是投递机制层面的通用缺口,不绑定任何一次具体的 prompt 改动:只要产品 prompt 文本发生变化(host 共用段、Claude / Codex 专属段,或后续新增的段),存量线程在上述窄路径下继续跑旧文本。用户表现为「新版本已装、但恢复旧任务时行为还是老的」,且没有任何提示。
正常路径不受影响:
registerCodexDeveloperInstructions(threadId, developerInstructions)每次 resume 都会重新注册当前文本;shouldSendNativeDeveloperInstructions恒为真;期望
给产品 prompt 建模版本(例如持久化内容 hash 或版本号,而不是布尔 marker),resume 时按版本比对决定是否重新下发;或在直连 fallback 路径下无条件重发当前
developerInstructions,由 Codex 侧去重。需要同时确认:重发对已 compact 过的线程是否会造成重复段落,以及 loaded-thread resume 在当前 Codex 版本下忽略 override 的行为边界(代码注释中已记录 0.145 的这一限制)。
来源
由 PR #1650 的自动 review 发现(thread)。该 PR 新增了一段 Skill 来源优先级 system 文本,是这个缺口的一个实例,但缺口本身早于它存在,因此不在那个 PR 的范围内。