Skip to content

Codex/fix codex session title - #513

Open
RainyCoder wants to merge 2 commits into
xintaofei:mainfrom
RainyCoder:codex/fix-codex-session-title
Open

Codex/fix codex session title#513
RainyCoder wants to merge 2 commits into
xintaofei:mainfrom
RainyCoder:codex/fix-codex-session-title

Conversation

@RainyCoder

Copy link
Copy Markdown
Contributor

No description provided.

…nto codex/fix-codex-session-title

# Conflicts:
#	src-tauri/src/commands/conversations.rs
#	src-tauri/src/db/service/conversation_service.rs
@xintaofei

Copy link
Copy Markdown
Owner

Hi @RainyCoder 👋 感谢提这个 PR!仔细看了一遍,结论是这个 PR 目前是空的,建议直接关掉 —— 不过你的工作方向是对的,下面说明一下来龙去脉。

1. 这个 PR 相对 main 的差异是 0

GitHub 显示 0 files changed,本地验证一致:

$ git diff --exit-code origin/main...05b07480   # 无输出,exit 0
$ git merge-base origin/main 05b07480
c416920f9215aed5648328df3cf189cff4fbf8bd
$ git merge-base --is-ancestor c416920f origin/main   # exit 0

merge base c416920f 已经在 main 里了(通过 #468 / merge d951809a 合入),所以这个 PR 没有带来任何新增内容。

2. 原因:合并时的冲突解决把自己的提交丢掉了

分支上有两个提交:

  • ba1d1cbe fix(codex): isolate title refresh side effects —— 真正的改动(commands/conversations.rs + db/service/conversation_service.rs,共 +295 行)
  • 05b07480 —— 合并 ba1d1cbec416920f,冲突正好落在上面这两个文件

关键证据:

$ git rev-parse c416920f^{tree} 05b07480^{tree}
e4cb4e05515b104e71c32580133141c3ea498944
e4cb4e05515b104e71c32580133141c3ea498944

两个 tree 完全相同 —— 冲突解决时整体采用了 c416920f 一侧,ba1d1cbe 的改动在「合并它」的那个提交里被完整丢弃了。这种情况在提交列表里是隐形的:列表上依然好端端地显示着 fix(codex): isolate title refresh side effects

补充一点:这个 patch 本身并没有永久丢失 —— ba1d1cbe 并不是 main 的祖先,git cherry origin/main codex/fix-codex-session-title 仍然报 + ba1d1cbe,真要恢复 cherry-pick 就行。只是通过 merge 这个分支拿不回来,因为 merge base 里已经是丢弃之后的状态了。

3. 好消息:这部分工作 main 里已经有了,而且更完整

ba1d1cbec416920f 是从同一个 base(8a6185f9)并行开发的,解决的是同一组问题。对比下来 main 的版本覆盖更全:

关注点 ba1d1cbe main (c416920f)
候选 SELECT 过滤软删除 folder
条件 UPDATE 过滤软删除 folder
过滤 kind != 'loop'
把 channel 同步从读路径上摘下来 ✅(并返回 JoinHandle
rename 在飞行途中落地时收敛 ❌ 单次发送 sync_conversation_title_until_current

后两项是实打实的正确性差异,不是风格问题:

  • 少了 kind != 'loop':每个被刷新的 id 都会作为侧边栏 upsert 广播出去,于是 loop 行会被推进所有客户端的侧边栏 —— 而 list_all 本来是特意隐藏它的。
  • 少了收敛循环:detach 出去的 edit 最终是一次 Telegram editForumTopic POST(每次 60s 超时)。如果用户在这个调用挂起期间改了标题,单次版本会让会话线程的标题永久停在旧值,后面没有任何东西会重试。

ba1d1cbe 里 main 确实没有的,只剩下这些,都不影响行为:空数组时的 early return、抽出来的 active_folder_ids_query() helper,以及两个走 list_all_conversations_core 入口的测试排列。这两个测试的不变量 main 都在更靠下的层面覆盖了(refresh_codex_auto_titles_skips_rows_the_sidebar_list_hidesrefresh_codex_auto_title_candidate_rechecks_folder_deletion_at_write_timenotify_conversation_title_updates_detaches_channel_sync_from_the_caller)。

main 上相关测试是绿的:codex_auto_title 9/9、title_sync 3/3。

4. 建议

  1. 关掉 Codex/fix codex session title #513,不用合。合进去不会改坏任何东西(tree 完全不变),但历史里会多一条看起来「修复已合入」的记录,容易误导后来的人。
  2. codex/fix-codex-session-title 这个分支不要接着用了 —— 删掉,或者 hard reset 到 upstream/main 之后再开新工作。否则以后从它发出来的 PR,base 里天然就是 ba1d1cbe 被丢弃之后的状态。
  3. 没有需要抢救的东西 🙂

另外一个流程上的小建议:这类「冲突解决顺手 revert 掉自己提交」的情况在 UI 上几乎看不出来,也许值得加一个 CI 检查,对三点差异为空的 PR 打个标签或者直接 fail,能省掉不少来回。

再次感谢!方向本身没问题,只是刚好和 #468 撞车了 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants