Skip to content

fix(chat): 回复完成后保持消息流贴底 - #3731

Open
WEIWEICurry wants to merge 2 commits into
makecindy:mainfrom
WEIWEICurry:fix/3067-chat-scroll-completion
Open

fix(chat): 回复完成后保持消息流贴底#3731
WEIWEICurry wants to merge 2 commits into
makecindy:mainfrom
WEIWEICurry:fix/3067-chat-scroll-completion

Conversation

@WEIWEICurry

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

回复完成时,运行中的工作组会重建为完成态分组。现有的删除/重锚 layout effect 会在贴底状态下先恢复旧视口锚点,覆盖同一提交中的 pinToBottom,因此长对话可能跳回本轮提问位置。

本 PR 让贴底 auto-follow 在该时序中拥有最高优先级,并消费已失效的待重锚;用户主动上滚后的既有阅读位置保护保持不变。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:Fixes 长对话滚动到底部后在回复完成时自动跳回本轮提问位置 #3067
  • 本 PR 包含:调整 Desktop MessageStream 的贴底与视口重锚优先级;补充回复完成时工作组 key 重建的回归测试。
  • 明确不包含:样式、文案、Mobile、服务端、消息协议或分组算法调整。
  • 用户可见变化:用户停留在消息流底部时,回复完成后继续保持贴底,不再自动跳回本轮提问。
  • 是否存在 breaking change:无。

UI 变化

  • 引用的设计规范:docs/design-rules/DESIGN.md §7(禁止无意的视觉跳变)与 §14.4(交互保持快速、直接,流式内容本身已构成运动)。本修复移除无用户操作的视口跳转,不新增样式、布局、文案或动效,因此无截图差异。

怎么验证的

自动验证

pnpm --filter desktop run --if-present typecheck
结果:通过

pnpm test:unit:related
结果:通过(apps/desktop related 2)

pnpm check:dco
结果:通过,1 个 commit 已签名

手工验证

未执行 Desktop 实机长会话验证;本次通过滚动生命周期的定向回归测试和相关单测覆盖。

未执行的验证

  • macOS 0.1.56 与当前 main 的长会话对照验证:当前执行环境为 Windows,且隔离 worktree 未下载 Desktop runtime 二进制。
  • Windows 实机视觉验证:未启动 Desktop;本 PR 不改视觉资源或样式。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:Desktop 消息流滚动生命周期时序

影响与回滚

  • 影响范围:仅 Desktop MessageStream 贴底状态下的删除/分组重建补偿;非贴底阅读、历史恢复和显式导航仍走原逻辑。
  • 回滚 / 降级方式:回退本 PR 的单个 commit 即可恢复原有优先级,无数据迁移或持久化影响。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档(本次无需文档变更)
  • 已确认测试结果或说明未执行原因

Signed-off-by: WEIWEICurry <2728306174@qq.com>
@WEIWEICurry
WEIWEICurry requested a review from a team as a code owner September 1, 2026 08:08
@greptile-apps

greptile-apps Bot commented Sep 1, 2026

Copy link
Copy Markdown

Greptile Summary

本 PR 调整 Desktop 消息流的滚动补偿优先级,使回复完成并重建分组时,贴底状态优先于旧视口锚点恢复。

  • 贴底时清除已失效的待重锚并提前结束删除补偿 effect
  • 增加源码级回归断言,检查贴底 guard 位于重锚逻辑之前

Confidence Score: 4/5

该 PR 看起来可以合并,但建议强化回归测试以实际约束贴底分支的短路行为。

实现中的优先级调整与现有 auto-follow 生命周期一致;唯一保留问题是新增测试即使丢失关键的 return 仍会通过,回归保护不完整。

Files Needing Attention: apps/desktop/src/renderer/tests/focusScrollLifecycle.test.ts

Important Files Changed

Filename Overview
apps/desktop/src/renderer/components/chat/MessageStream.tsx 将贴底 guard 提前并消费待重锚,使 auto-follow 不再被同次提交中的旧锚点恢复覆盖。
apps/desktop/src/renderer/tests/focusScrollLifecycle.test.ts 新增源码顺序测试,但未断言修复所依赖的提前返回语义。
Prompt To Fix All With AI
### Issue 1
apps/desktop/src/renderer/__tests__/focusScrollLifecycle.test.ts:441-444
**回归测试未约束短路语义**

这些断言只检查 guard、清空语句和后续标记的文本顺序;即使删除关键的 `return`,测试仍会通过,而后续旧锚点恢复逻辑将重新具备覆盖 auto-follow 的条件。请让测试直接约束贴底分支的短路行为或最终滚动位置,避免原问题在测试保持通过时回归。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "fix(chat): keep bottom pinned when repli..." | Re-trigger Greptile

Comment thread apps/desktop/src/renderer/__tests__/focusScrollLifecycle.test.ts Outdated
@MagicLizi

Copy link
Copy Markdown
Contributor

@WEIWEICurry 👋 这个 PR 还有 1 条 review conversation 没 resolve(apps/desktop/src/renderer/tests/focusScrollLifecycle.test.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

@MagicLizi MagicLizi added the touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) label Sep 1, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

命中 UI 路径(apps/desktop/src/renderer/components/chat/MessageStream.tsx)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范

@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) and removed awaiting-discussion 等待维护者讨论(review-pr) labels Sep 1, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

这个 PR 会改变消息流在回复完成时的贴底交互,已提交维护者确认。

确认方式:维护者直接在本 PR 上 Approve;如果要求修改,请 Request Changes。讨论 issue:#3740

在维护者确认之前,自动流程不会合并。

Signed-off-by: WEIWEICurry <2728306174@qq.com>
@WEIWEICurry
WEIWEICurry force-pushed the fix/3067-chat-scroll-completion branch from f11435c to 5a3ee2a Compare September 1, 2026 13:19
@WEIWEICurry

Copy link
Copy Markdown
Contributor Author

已按 review 补强回归保护,相关提交:5a3ee2a16
新增行为级测试,确保贴底时短路旧 viewport compensation,同时保留用户主动上滚后的阅读位置。Desktop typecheck 与 test:unit:related 均已通过。
请维护者依据 #3740 在本 PR 上直接 Approve;如仍需调整,请 Request Changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-discussion 等待维护者讨论(review-pr) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

长对话滚动到底部后在回复完成时自动跳回本轮提问位置

2 participants