Skip to content

fix(mobile): 只在消息 key 变化时续 mVCP 安静窗 - #3264

Merged
MagicLizi merged 1 commit into
mainfrom
dash/fix-mobile-mvcp-key-settle
Aug 22, 2026
Merged

fix(mobile): 只在消息 key 变化时续 mVCP 安静窗#3264
MagicLizi merged 1 commit into
mainfrom
dash/fix-mobile-mvcp-key-settle

Conversation

@dashhuang

Copy link
Copy Markdown
Member

这次改了什么

摘要

#3192 合入后,发送后的贴底校验仍可能在整轮流式输出期间跟不住。原因是 120ms mVCP 安静窗绑在 items 数组引用上:流式每个字都会换新数组,窗被一直续上,校验只 wait 直到 2.5s 预算耗尽。

这次改为只在消息 key 真变(追加 / 换行 / 重排)时续窗。高度变化仍走原来的 handleContentSize

变更类型

  • fix 缺陷修复

范围

UI 变化

不涉及:无布局、样式或文案变化;只修正发送后贴底校验的等待条件。

  • 引用的设计规范:不涉及:未改变 UI 布局、样式、交互规则或文案,仅修复滚动锚定时序

怎么验证的

自动验证

pnpm --filter mobile exec vitest run src/__tests__/messageScroll.test.ts src/__tests__/messageListVirtualization.test.ts
结果:70 passed

pnpm --filter mobile run typecheck
结果:通过

pnpm test:unit:related
结果:PASS apps/mobile unit

bash .../run-unit-gate.sh <worktree>
结果:本 PR 相关 mobile 通过;全量 desktop unit 另有 2 条失败(ghostInstallReceipt.test.ts),与本 diff 无关,交给 CI

手工验证

未做真机。建议发送后马上进入长流式(>3s),确认列表仍跟在最新消息。

未执行的验证

真机 / 模拟器发送后贴底目检未跑。

风险

风险分类

  • 其他:Mobile 发送后贴底校验的等待条件

影响与回滚

  • 影响范围:仅 Mobile 会话列表的 mVCP 安静窗触发条件;不改协议、schema、原生指纹
  • 回滚 / 降级方式:revert 本 PR
  • 存量插件影响:无

提交前检查

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

#3192 合入后,流式更新仍会反复换 items 引用并续上 120ms 安静窗,
发送后的贴底校验会在整轮生成期间一直等待。改为只认行身份变化。

Signed-off-by: Dash <dashhuang@gmail.com>
@dashhuang
dashhuang requested a review from a team as a code owner August 22, 2026 21:48
@greptile-apps

greptile-apps Bot commented Aug 22, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 将 Mobile 消息列表的 mVCP 安静窗续期条件从 items 数组引用变化收窄为消息 key 序列变化,避免流式内容更新持续推迟贴底校验。

  • 新增消息列表 key 签名工具,并在 MessageRenderer 中用其驱动安静窗
  • 保留追加、换行和重排时的安静窗续期
  • 增加签名行为及组件依赖契约测试

Confidence Score: 5/5

未发现阻塞或非阻塞问题,此 PR 看起来可以安全合并。

改动只收窄了 mVCP 安静窗的续期条件,同时保留列表行身份变化时的续期行为,未发现具体可达的错误滚动或生命周期回归。

Important Files Changed

Filename Overview
apps/mobile/src/session/MessageRenderer.tsx 将 mVCP settle effect 改为依赖稳定的消息 key 签名,流式内容更新不再反复续期。
apps/mobile/src/session/messageScroll.ts 新增以有序 key 列表生成稳定签名的纯函数。
apps/mobile/src/tests/messageScroll.test.ts 覆盖 key 不变时签名稳定以及新增 key 时签名变化。
apps/mobile/src/tests/messageListVirtualization.test.ts 增加源码契约断言,确保安静窗依赖 key 签名而非临时数组引用。

Reviews (1): Last reviewed commit: "fix(mobile): 只在消息 key 变化时续 mVCP 安静窗" | Re-trigger Greptile

@MagicLizi MagicLizi added status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) and removed status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) labels Aug 22, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

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

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查通过:无 P0/P1。只在消息 key 签名变化时续 mVCP 安静窗,范围与描述一致,不触发冷更。

@MagicLizi
MagicLizi merged commit 8569fe8 into main Aug 22, 2026
19 checks passed
@MagicLizi
MagicLizi deleted the dash/fix-mobile-mvcp-key-settle branch August 22, 2026 23:31
@MagicLizi

Copy link
Copy Markdown
Contributor

合了。流式刷新时列表引用一直在变、key 没变却反复续安静窗,这下贴底判断不会被吊住了。

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

Labels

touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants