Files
cc-web/.trellis/tasks/08-07-fix-title-anchor/prd.md
2026-08-07 14:22:52 +08:00

2.1 KiB

修复标题显示归属

背景

会话中的自动标题用于标记某条用户消息所开启的新主题。当前标题条再次显示在 目标消息之后,造成视觉上像是标题属于下一条消息。该逻辑此前已调整为标题显示 在所属消息上方。源码、持久化事件和当前服务返回的静态脚本均已包含该修复, 实际回归来自长期打开的标签页仍运行旧的内存脚本。

用户故事

作为查看长会话的用户,我希望自动标题显示在它所概括的消息上方,从而能快速 识别每个主题从哪条消息开始。

功能要求

  1. 标题事件有明确锚点时,按锚点消息索引在该消息上方渲染。
  2. 实时收到标题事件与重新加载持久化会话时,显示位置必须一致。
  3. 历史事件缺少显式锚点时,使用已定义的兼容回退,不得丢失标题。
  4. 不改变标题文本、标题生成时机和其他消息顺序。
  5. 服务端应以当前 app.js 内容生成稳定资源指纹,并注入入口页、随 WebSocket 鉴权成功消息下发。
  6. 已加载本次版本自检逻辑的客户端,发现自己加载的资源指纹与服务端不一致时, 应只触发一次页面刷新,防止重连或异常数据造成刷新循环。

验收场景

  • 给定标题事件 messageIndex = 1、anchorMessageIndex = 0,标题应出现在 索引 0 的目标消息上方。
  • 刷新页面后,同一标题仍在同一消息上方。
  • 仅含旧 messageIndex 的标题事件仍能显示,且行为由测试明确锁定。
  • 入口页脚本 URL 带服务端生成的当前资源指纹。
  • 已具备自检逻辑的页面在前后端资源指纹一致时不刷新;不一致时调用一次刷新, 重复握手不重复触发。

非目标

  • 不重做标题条视觉样式。
  • 不改变模型生成标题的提示词。
  • 不迁移或批量改写历史会话文件。
  • 不引入 service worker、构建系统或第三方前端依赖。
  • 不尝试远程刷新本机制上线前已经打开、且自身没有版本自检代码的旧页面; 这些页面在本次上线后需要用户手动刷新一次。