Files
Jyotisha/docs/tasks/TASK-latest-turn-actions-gap-20260926.md
T

2.9 KiB
Raw Blame History

TASK · 最后一轮回答与点赞 / 踩按钮之间的大段空白(2026-09-26)

基线

  • origin/staging 当前 head。分支 codex/latest-turn-actions-gap-20260926。
  • 只改 frontend/src/app/globals.css 与相关合同测试;不碰 useConversationScrollAnchor 的逻辑。与其它在途单不交叉。

事故实证(产品 09-26 真机,iPhone Safari,生时校正会话)

助手正文结束后,点赞 / 踩 / 复制 / 重试一排按钮被推到屏幕下部,中间空出大半屏。

  • frontend/src/app/globals.css:
    /* Last turn fills the remaining viewport so a short reply can still pin its
       head at the top. Variables are written by useConversationScrollAnchor. */
    .conversation .message-list > :last-child .message-assistant {
      min-height: calc(var(--conversation-viewport, 0px) - var(--latest-turn-head-height, 0px));
    }
    
  • .message-actions 是 .message-assistant 之后的兄弟节点(margin: -4px 0 8px 42px),因此最小高度把它顶到留白之后。普通咨询与生时校正共用同一规则,回答越短空白越大。
  • 该留白来自 BUG-930「新一轮开头钉顶」:必须保留,否则短回答时无法把本轮开头停在视口顶部。

根因

留白加在了"助手消息"上,而不是加在"整轮(消息 + 操作按钮 + 追问建议)"之后。

决策记录

  • D1 保留 BUG-930 的钉顶留白,只改位置:最小高度改加在最后一轮的外层(包含助手消息、.message-actions、.conversation-follow-ups 的那个 :last-child 容器),使操作按钮紧跟正文,空白落在按钮与追问建议之后。
  • D2 如果外层容器还包含用户行(按实际 DOM 核对),计算式里需扣除的高度保持由 useConversationScrollAnchor 写入的 --latest-turn-head-height 口径,不改 hook。
  • D3 普通咨询与生时校正两处表现一致。

硬红线

  1. 不改 useConversationScrollAnchor / JumpToLatestButton 行为;BUG-930 / 931 / 932 的钉顶、跳到最新、闲置不写留白全部保持(其测试不得弱化)。
  2. 只用现有 token;首页 ○ Static、gzip ±2%。
  3. 真实浏览器验证(本机 Chrome,CDP 假数据):375 与 1280 宽度,普通咨询与生时校正各一条短回答——操作按钮与正文间距为 .message-actions 自身间距;新一轮开头仍钉在视口顶部;长回答时「跳到最新」正常。截图写进 PROGRESS。
  4. 全量测试与基线逐条一致、新增 0;改动断言写三栏(写在测试文件里);更新 frontend/DESIGN.md 中对应说明。

任务分解

  • T1 CSS 调整(D1–D3)+ 合同测试更新(原断言锁的是 .message-assistant 选择器,按三栏改为外层容器)。
  • T2 浏览器截图与 PROGRESS;BUG 记录:开工时取下一个空号,关联 BUG-930,写明为何当时的骨架页验证没发现(验证只看了开头钉顶,没看操作按钮位置)。