6.5 KiB
6.5 KiB
标题历史定位时间线:进度
2026-07-27
- 已读取
planning-with-files与todo-list-csv技能全文。 - 已运行 session catchup;未发现需要接管的未同步计划。
- 已检查 Trellis 工作流、当前任务与工作区状态;为避免干扰并行工作,采用独立 scoped planning 目录。
- 已确认用户给出的核心交互:标题历史进入定位列表,但标题项不可点击。
- 用户补充日期时间线:按天显示横线气泡,只显示日期,不显示时分秒;同样为只读节点。
- 第一次独立计划审查要求明确时区、横线气泡形态与跨天边界;已按“浏览器用户本地时区 + 本地 23:59/00:01 回归”修订。
home-cc-web代码索引已确认 ready;Trellis 相关规范目前未提供额外项目约束。- 第二次独立计划审查已通过;阶段 1 完成,进入前后端链路定位。
- codebase-memory 已定位
setCurrentConversationTitle()、handleRenameSession()、buildUserOutlineItems()、updateUserOutlinePanel()及现有assertSetTitleMcpContract()回归入口。 - 初步数据设计:会话新增标题事件数组;事件包含标题、时间戳和调用时消息索引,前端与用户消息按索引合并;日期从用户消息时间派生。
- 已确认 session_info、snapshot cache、实时 session_renamed 和分批历史渲染都需要同步标题历史;定位节点可复用既有 agent divider 的横线视觉。
- 阶段 2 完成:确定使用
titleHistory[{ title, changedAt, messageIndex }];messageIndex表示事件发生前已持久化的消息数量,时间戳负责日期与异常回退。 - 进入阶段 3:先补纯函数、静态契约与 MCP 集成失败回归,再写实现。
- 并行后端审计完成并与本地结论一致;明确拒绝把未生效/手动/系统标题写入本次定位时间线。
- 已新增
title-history-outline专项回归和全量集成断言;首次运行在缺少normalizeTitleHistory处按预期失败(exit 1)。 - 阶段 3 完成,进入后端标题事件持久化与 session_info/实时事件传输实现。
- 后端已实现事件清洗、最近 100 条裁剪、仅 changed 追加、session_info 恢复与实时
titleEvent推送;专项回归已越过后端断言并按预期停在缺少前端 helper。 - 阶段 4 完成,进入定位列表标题/日期时间线与样式实现。
- 前端已实现浏览器本地日期格式化、消息/标题稳定合并、只读 DOM、横线日期气泡、实时事件刷新与 snapshot cache 恢复。
node --check(server/app/regression)和title-history-outline专项回归通过;阶段 5 完成,进入全量集成验证。- 全量
npm run regression通过并输出Regression checks passed.;再次运行语法检查与git diff --check均为 exit 0。 - 运行会话 MCP 查询超时;本机降级检查发现除当前
91b7...外,另有745d...会话于 15:38 收到用户消息且常驻服务高负载,无法证明无其他 running 会话,因此未重启 ccweb。 - codebase-memory 变更影响检测 transport closed;此前函数级检索结果和本地全量回归有效,已记录但不重复失败调用。
- 阶段 6 完成,进入最终代码审查与临时跟踪清理。
- 最终 diff 审查确认:标题/日期输出均转义,只有消息节点使用按钮与
data-target;旧会话默认空历史;MCP unchanged/invalid/manual-lock 均不产生伪事件;缓存版本已同步。 - 最终状态:7 个阶段全部完成;保留 scoped planning 记录,删除本任务 TODO CSV。服务重启因另一条活跃会话被明确暂缓。
- 下一步:审查计划,并通过 codebase-memory 定位前后端链路。
2026-07-29
- 用户确认落地“标题作为章节标题,显示在触发用户消息上方”的调整。
- 已读取
planning-with-files与todo-list-csv技能全文,运行 session catchup 并恢复上轮上下文。 - 已建立“调整标题定位锚点”六步计划及同名 TODO CSV;保留其他任务的 active plan 与未跟踪 CSV。
- codebase-memory 索引状态为 ready(4176 nodes / 8942 edges),已定位
setCurrentConversationTitle()、normalizeTitleHistory()、buildUserOutlineTimelineItems()和updateUserOutlinePanel()。 - 根因确认:后端保存调用时消息总数,前端以
messageIndex * 2 - 1排序,导致标题位于触发用户消息之后。 - 设计确定:新增
anchorMessageIndex,保留messageIndex原语义;旧事件回退到事件之前最近的用户消息,日期继承锚点消息时间。 - 首轮独立计划审查未通过:要求明确锚点字段契约、实时/缓存/重载传输路径及对应回归。
- 已补充
anchorMessageIndex的零基索引、合法范围、与messageIndex的优先级、锚点不可见降级规则,以及实时和重载一致性验收;等待复审。 - 第二轮独立计划审查已通过;阶段 1 完成,进入标题前置、旧历史、跨午夜及实时/重载传输失败回归编写。
- 已补充专项纯函数与 MCP 集成断言;首次专项回归在“后端应保留合法触发消息锚点”处按预期失败(exit 1)。
- 阶段 2 完成,进入后端
anchorMessageIndex归一化、生成、实时返回与重载持久化实现。 - 后端已生成最近用户消息零基锚点,并在 normalizer 中仅保留合法整数且早于事件位置的锚点。
- 专项回归已越过后端断言,在“标题应位于触发用户消息之前”处按预期失败;阶段 3 完成,进入前端排序实现。
- 前端 normalizer 已保留合法
anchorMessageIndex;时间线优先精确锚点,旧历史/不可见锚点回退到事件前最近可见用户消息,并继承锚点日期。 title-history-outline专项回归通过;阶段 4 完成,进入语法检查与专项复核。node --check(server/app/regression)与专项回归复核均通过;阶段 5 完成,进入全量回归和最终差异审查。- 最终收紧异常索引边界后,重新运行三项语法检查和
title-history-outline专项回归,全部通过。 - 最终全量
npm run regression在 60 秒超时约束内完成,exit 0,输出Regression checks passed.;git diff --check通过。 - codebase-memory 最终影响检测 transport closed,未重复调用;本地函数级 diff 确认本次只涉及标题锚点、前端排序及对应回归,其他在途工作区改动保持原样。
- 阶段 6 完成,准备清理本次临时 TODO CSV;随后按项目规则复查运行会话并处理此前未完成的服务重启。