Skip to content

v10

Choose a tag to compare

@NeonMedusa NeonMedusa released this 03 Oct 18:07
· 9 commits to main since this release
fix(display): 长消息尾部锚点时视口跨界消息被误卸载——绘制空白

症状(用户报告):滚动到长消息(展开的大思考块 / 超长正文)附近时,
视口出现一大片空白(内容消失),继续滚动后"自己变好";伴随上下文/
缓存统计短暂消失。用真实会话复现并定位。

根因:updateMessageWindow 的前向覆盖计算 keep_hi 用**整条消息的 span**
(从消息开头算)去凑"4 屏 + 一屏",漏了 anchor_row。锚点位于长消息
(如 894 行的消息)尾部时:
- keep_hi 被截断在 anchor+1(复现:anchor=354 → keep_hi=355)
- 视口实际跨界到的后续消息被误判为"区间外"卸载
  (复现:[REPRO3] 19370 在视口内但被卸载)
- 绘制时按冻结行数占位却画不出内容 → 空白
- 锚点移开后重新覆盖 → "自己变好"

修复:keep_hi 从**锚点剩余行**起算(a_span - min(anchor_row, a_rows)),
再向后累计。修复后同场景 keep_hi=372(正确覆盖跨界消息)。

验证:
- 新增回归测试(真实库 894 行消息):锚点放尾部,断言视口跨界消息
  保持加载;修复前失败、修复后通过
- 帧转储:修复后在长消息 5 个位置渲染,非空行 32~39/40,无空白
- 179 pass(含新回归测试)

另注:样本中"上下文/缓存统计消失"是状态栏在 usage 重置后短暂走
"暂无数据"分支(预期行为),非同因。