Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
2.9 KiB
2.9 KiB
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 普通咨询与生时校正两处表现一致。
硬红线
- 不改
useConversationScrollAnchor/JumpToLatestButton行为;BUG-930 / 931 / 932 的钉顶、跳到最新、闲置不写留白全部保持(其测试不得弱化)。 - 只用现有 token;首页
○ Static、gzip ±2%。 - 真实浏览器验证(本机 Chrome,CDP 假数据):375 与 1280 宽度,普通咨询与生时校正各一条短回答——操作按钮与正文间距为
.message-actions自身间距;新一轮开头仍钉在视口顶部;长回答时「跳到最新」正常。截图写进 PROGRESS。 - 全量测试与基线逐条一致、新增 0;改动断言写三栏(写在测试文件里);更新
frontend/DESIGN.md中对应说明。
任务分解
- T1 CSS 调整(D1–D3)+ 合同测试更新(原断言锁的是
.message-assistant选择器,按三栏改为外层容器)。 - T2 浏览器截图与 PROGRESS;BUG 记录:开工时取下一个空号,关联 BUG-930,写明为何当时的骨架页验证没发现(验证只看了开头钉顶,没看操作按钮位置)。