openRectificationCase 构造 merged 时无条件 title: resolveSessionTitle(…) 与 updatedAt: timestamp()。同一个对象里 pinned 和 archivedAt 是从 existing 继承 的,说明作者知道这条路径会跑在已存在的会话上,只是漏了这两个字段。 resolveSessionTitle 的日期来自 new Date(),于是 9/12 建的会话被改名成 「9月15日 · 生时校正」,同名时再追加时:分。 两种损坏持久性不同,修复时要分开:persistSession 的 update 分支写 title 但不写 updated_at(BUG-553 的正确遗产),所以标题是永久写坏服务端,排序 只坏在客户端 state、刷新自行恢复。已坏的历史标题按 created_at 修回,取不到 就退回不带日期的中性标题,不猜。 复发自 BUG-553——它的防复发「updatedAt 只由对话活动推进」只是 Bug 记录里 的一句话,没有任何测试执行,且当时只覆盖元数据 PATCH 与五条客户端路径, 漏了当时就存在的校正 open 路径。本单要求把那句话变成测试。 咨询侧三处 resolveSessionTitle 都有 messages.length === 0 && 通用标题的守卫, 不受影响,明令不得顺手改。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155nFCgCHtoA7jhSDGmZmMu