docs(tasks): brief for the gap between the latest answer and its actions

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-09-26 09:11:16 +08:00
co-authored by Claude Opus 5.5
parent 62d4c9c4d0
commit 010f9b6b83
2 changed files with 44 additions and 0 deletions
+1
View File
@@ -119,6 +119,7 @@
| 任务书 | 进度 | 主题 | 状态 | 落点 |
| --- | --- | --- | --- | --- |
| `TASK-latest-turn-actions-gap-20260926.md` | — | **最后一轮正文与点赞 / 踩之间空大半屏**:BUG-930 钉顶留白(`min-height: 视口 − 本轮开头`)加在 `.message-assistant` 上,把兄弟节点 `.message-actions` 推到留白之后;改为加在整轮外层,按钮紧贴正文、空白落在后面;不动滚动 hook | 待领取 | — |
| `TASK-starter-home-polish-20260926.md` | `PROGRESS-starter-home-polish-20260926.md` | **首页开场小字与图标**:今日趋势(每日模型生成,非写死)移到问候下方副行;入口下方提示只在有未完成校正或非本人时出现,删两句固定文案并修正已校正仍显示首次文案的分支;今日星语图标 MoonStar、点数图标 Coins。排在 BUG-1038、1040 之后。分支误判实为入口摘要解析读错键名(BUG-1041) | 已验收(Claude 09-26 直接执行:子代理实现并查出 BUG-1041 入口摘要驼峰/下划线字段不一致;Claude 改恢复提示文案为「可以在历史对话里接着做」;独立复验 tsc/lint 0、全量 3960 条失败名单与基线逐条一致、四路由 ○、gzip 不变) | `f04da103`(推 staging 待部署) |
| `TASK-home-warm-return-20260926.md` | — | **从其他页面回首页不再放加载动画**:首页按组件挂载计揭幕,客户端返回会重跑模型列表 / 后台状态 / 入口摘要 / 今日星语(3–5 次往返 + 最多 4 秒)。产品定:每次打开网页只揭幕一次;模块级暖快照按账户隔离、只存内存,暖返回首帧即就绪、后台静默刷新;缺项回落冷启动,不许半揭幕。**排在 BUG-1038 合入后**。BUG-1040 | 已验收(Claude 09-26 直接执行:子代理实现,Claude 独立复验 tsc/lint 0、全量 3953 条失败名单与基线逐条一致、四路由 ○、gzip 不变;CDP 实测回首页 5.5 s → ~20 ms、无加载环) | `638b6a60`(已部署 `7475eb6e`,health 一致) |
| `TASK-new-chat-from-people-20260926.md` | `PROGRESS-new-chat-from-people-20260926.md` | **从星盘档案页点新建对话落回上一次生时校正**(产品 09-26 真机):标题显示旧校正会话、输入框「正在打开生时校正…」,中间却是新对话开场;另有两套新建入口(`?new=1` 与 `?newChat=1`)违反 BUG-1015 一处解析红线。先复现写失败测试、定位跨页残留状态再修,合并入口。BUG-1038 | 已验收(Claude 09-26 直接执行:子代理复现并定位 sessionStorage 登录返回存根;Claude 独立复验 tsc/lint 0、全量 3928 条失败名单与基线逐条一致、四路由 ○、gzip 不变、修复前后截图核对) | `0a8350cc`(已部署 `6a22626d`,health 一致) |
@@ -0,0 +1,43 @@
# 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`:
```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,写明为何当时的骨架页验证没发现(验证只看了开头钉顶,没看操作按钮位置)。