From da2613ffd9ab6b00f601a4136a5e3f9a6ebc2816 Mon Sep 17 00:00:00 2001 From: Jesse_Chen Date: Sat, 26 Sep 2026 10:41:46 +0800 Subject: [PATCH] fix(chat): attach scroll anchor when the scroller appears; only reader scroll releases a pin (BUG-1043, BUG-1044) - The anchor listener and follow observer now attach whenever the scroller element itself appears (checked after every commit, no-op unless element, active or resetKey changed). The home page mounts `.conversation` after its loading screen with unchanged active/resetKey, so a directly opened session never got a listener, never landed on its newest content, showed the jump chip under short replies and did not follow after pressing it. - After a pin, geometry no longer releases the hold: only a wheel, touch drag, scroll key or scrollbar press followed by a scroll within 1s does. The rectification pin rests 94px from the bottom, inside the 96px threshold, which dragged long replies to their last line. - Real React lifecycle tests (loading screen -> reveal, 94px rest), DESIGN, BUG history, PROGRESS, CHANGELOG, device checklist and CDP screenshots. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8 --- CHANGELOG.md | 6 + docs/BUG_HISTORY.md | 38 +- ...GRESS-scroll-anchor-hook-fixes-20260926.md | 96 ++++ docs/tasks/README.md | 2 +- .../scroll-anchor-hook-fixes-20260926.md | 20 + .../consult-reload-short-375-after.png | Bin 0 -> 24094 bytes .../consult-reload-short-375-before.png | Bin 0 -> 27499 bytes .../rectification-long-375-after.png | Bin 0 -> 88641 bytes .../rectification-long-375-before.png | Bin 0 -> 75342 bytes frontend/DESIGN.md | 3 +- .../hooks/use-conversation-scroll-anchor.ts | 247 +++++---- ...versation-scroll-anchor-lifecycle.test.tsx | 488 ++++++++++++++++++ 12 files changed, 792 insertions(+), 108 deletions(-) create mode 100644 docs/tasks/PROGRESS-scroll-anchor-hook-fixes-20260926.md create mode 100644 docs/testing/scroll-anchor-hook-fixes-20260926.md create mode 100644 docs/testing/scroll-anchor-hook-fixes-20260926/consult-reload-short-375-after.png create mode 100644 docs/testing/scroll-anchor-hook-fixes-20260926/consult-reload-short-375-before.png create mode 100644 docs/testing/scroll-anchor-hook-fixes-20260926/rectification-long-375-after.png create mode 100644 docs/testing/scroll-anchor-hook-fixes-20260926/rectification-long-375-before.png create mode 100644 frontend/tests/conversation-scroll-anchor-lifecycle.test.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 413c0880..8107f15d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # 印度占星 Skill 更新日志 +## 2026-09-26 — 刷新后回到对话「跳到最新」不再乱出现,生时校正长回答停在开头(待验收) + +- 刷新页面、用链接直接打开或一打开就落到一个已有的普通对话时:先落到最新一条;再问一个短问题,回答下面不再冒出「跳到最新」;长回答照常出现这个按钮,点了之后回答继续变长也会一直跟到最后(BUG-1043)。 +- 生时校正里回答超过一屏时,本轮开头停在屏幕顶部,不再一到就跳到最后一个字;自己往下滑到底之后,再长出来的内容会继续跟随(BUG-1044)。 +- Skill 版本不 bump。只改聊天滚动逻辑,不改接口、数据库和样式;登录态真机与部署待验收。 + ## 2026-09-26 — 回答下面的点赞 / 踩 / 复制 / 重试紧贴正文(待验收) - 最后一轮回答很短时,点赞 / 踩 / 复制 / 重试那一排不再被推到屏幕下部,直接跟在正文下面;空白挪到按钮(和追问建议)之后。普通对话和生时校正一样。 diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index 73847c28..af434c18 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -13962,29 +13962,29 @@ ## BUG-1043 | 直接打开普通咨询会话后,滚动锚的监听从未挂上 -- 状态:investigating(仅诊断;本轮任务书禁止改 `useConversationScrollAnchor`,未修) +- 状态:investigating(已修复、本地真实浏览器验证通过;等待 Claude 验收与 staging 部署后真机复核) - 首次发现 / 最近更新:2026-09-26 / 2026-09-26 -- 影响面:`frontend/src/hooks/use-conversation-scroll-anchor.ts` 两个 effect(scroll 监听、ResizeObserver 跟随)与首页 `page.tsx` 的加载闸门;普通咨询面。生时校正面不受影响(组件在揭幕后才挂载)。 -- 用户现象(本地复现):刷新页面或经 `?c=` / 启动落点直接进入一个已有的普通咨询会话后,发一个短问题,回答很短也会出现「跳到最新」;上下滚动该按钮不消失;点它之后回答继续变长也不会跟随。 -- 触发条件:首页揭幕时当前会话就是一条有消息的普通咨询(不是揭幕后再切换过去)。 -- 已确认事实:无头 Chrome 151、生产构建、虚构数据下给 `EventTarget.addEventListener` 与 `ResizeObserver.observe` 打点:该路径下 `.conversation` 上 scroll 监听 0 次、ResizeObserver 观察 0 次;先开 `/?new=1` 再点侧栏进入同一会话,则各挂上 1 次,短回答不再出现「跳到最新」。`pinLatestTurn` 走 rAF 不依赖 effect,所以钉顶本身正常,但 `latestBelowFold` 停在钉顶那一刻算出的值。 -- 推测根因(未证实):加载闸门期间 `page.tsx` 早退渲染 `.app-loading`,`.conversation` 尚未挂载,effect 因 `container.current` 为空直接返回;揭幕后 `active` 与 `resetKey`(`activeSessionId`)都没变,effect 不会重跑。 -- 修复:未修。需要单独任务书授权改 hook(例如依赖里加入容器是否已挂载的状态)。 -- 验证:见上,复现脚本在执行方 scratchpad,未入库。 -- 防复发:待定。 -- 相关记录:BUG-930、BUG-932、BUG-1042。 +- 影响面:`frontend/src/hooks/use-conversation-scroll-anchor.ts` 的挂载逻辑(scroll 监听、ResizeObserver 跟随);首页 `page.tsx` 的加载闸门之后才挂载的 `.conversation`。生时校正面不受影响(组件在揭幕后才挂载,容器从首帧就在)。 +- 用户现象:刷新页面、经 `?c=` 深链或启动落点直接进入一个已有的普通咨询会话后:没有落到最新一条(停在历史中段);发一个短问题,回答很短也会出现「跳到最新」;上下滚动该按钮不消失;点它之后回答继续变长也不会跟随。 +- 触发条件:首页揭幕时当前会话就是一条有消息的普通咨询(不是揭幕后再切换过去)。先开 `/?new=1` 再点侧栏进入同一会话则正常。 +- 根因(已证实):hook 的两个 effect 依赖 `[active, container, resetKey]`。加载闸门期间 `page.tsx` 早退渲染 `.app-loading`,`.conversation` 未挂载,两个 effect 因 `container.current` 为空直接返回;揭幕那次提交里 `active`(`!rectificationSurfaceOpen && !starterHomeVisible`)与 `resetKey`(`activeSessionId`)都没变,`container` 是同一个 ref 对象,effect 不重跑,于是 scroll 监听、ResizeObserver 与「打开会话先落底」三件事都没发生。`pinLatestTurn` 走 rAF 不依赖 effect,所以钉顶本身正常,但 `latestBelowFold` 停在钉顶那一刻(平滑滚动尚未开始时)算出的值。证据:新增的真实 React 生命周期测试(先渲染加载屏再揭幕)中 3 条 BUG-1043 用例对改前代码全部失败(scroll 监听 0、点「跳到最新」后不跟随、容器重挂载后旧元素仍挂着监听);无头 Chrome 插桩改前 `.conversation` scroll 监听 0、ResizeObserver 观察 0、打开后距底 1819px。 +- 修复:挂载改由「滚动容器元素本身」驱动:一个每次提交后运行的 effect 比较 `container.current`、`active`、`resetKey` 与上次挂载时的记录,三者都没变就什么也不做;元素出现、换了、`active` 翻转或换会话时先卸下旧的,再对新元素挂 scroll 监听 + ResizeObserver/MutationObserver;卸载时另一个空依赖 effect 负责清理。调用处与 hook 签名不变(`page.tsx`、`rectification-agentic-chat.tsx` 未改)。选这一路而不是 callback ref,是因为两个调用处都把同一个 `RefObject` 另作他用,改 callback ref 必须改校正面组件(本轮并行任务在改);也不用「effect 里 setState 记录元素」,那会触发 react-hooks 编译器规则。 +- 验证:`frontend/tests/conversation-scroll-anchor-lifecycle.test.tsx`(createRoot + act 真实生命周期,宿主节点只伪造几何与事件):「加载屏 → 揭幕」后 scroll 监听 1 个、ResizeObserver 有观察、落到最新、重复渲染不重复挂载、短回答平滑滚动落定后不显示「跳到最新」;长回答显示按钮、点击后继续跟随;同一会话下容器重挂载会迁到新元素、旧元素监听被卸下;`active` 关开会卸下 / 重挂。无头 Chrome 151 + 生产构建 + 虚构数据(`?c=` 直接打开、打开后刷新、先 `?new=1` 再点侧栏三种进入方式):改后 scroll 监听 1、观察 1、打开后距底 0;短回答「跳到最新」不出现(改前出现);长回答按钮出现,点击后落底,再插入 400px 仍距底 0(改前 400)。全量前端测试失败名单与基线逐条一致。截图 `docs/testing/scroll-anchor-hook-fixes-20260926/consult-reload-short-375-{before,after}.png`。 +- 防复发:hook 不得再用只依赖 `active` / `resetKey` 的 effect 挂监听;生命周期测试锁住「加载屏 → 揭幕」路径。 +- 相关记录:BUG-930、BUG-932、BUG-1042、BUG-1044。 - 复发自:无。 -- 修复版本:无。 +- 修复版本:`codex/scroll-anchor-hook-fixes-20260926`,未部署。 ## BUG-1044 | 生时校正长回答钉顶后又被拉到底部 -- 状态:investigating(仅诊断;本轮任务书禁止改 `useConversationScrollAnchor`,未修) +- 状态:investigating(已修复、本地真实浏览器验证通过;等待 Claude 验收与 staging 部署后真机复核) - 首次发现 / 最近更新:2026-09-26 / 2026-09-26 -- 影响面:`useConversationScrollAnchor` 的 `holdUnpin` 解除条件 × 生时校正 `.message-list` 的底部留白(`padding-bottom: calc(var(--rectification-jump-clearance) + var(--space-3))`)。 -- 用户现象(本地复现):生时校正里发一句话,回答超过一屏时,本轮开头先被钉到顶部,回答一到视口就跳到最后一个字(BUG-930 想解决的现象)。 -- 已确认事实:CDP 逐 100ms 采样:平滑滚动结束时本轮开头距顶 10px、`distanceFromBottom` = 94(≤ `conversationAnchorThreshold` 96),下一帧回答撑高后 `scrollTop` 直接到底。改动前(旧留白规则)表现完全相同(开头位置 −1323px,落底),与 BUG-1042 无关。普通咨询同一时刻距离约 198,不触发。 -- 推测根因(未证实):钉顶后的静止距离等于该面底部留白 + 钉顶间距,校正面恰好 ≤ 96,`measure()` 把它当成「读者回到底部」,解除 `holdUnpin` 并把 `anchored` 翻回真,随后 ResizeObserver 贴底跟随。BUG-931 修的是留白坍塌导致的同一症状,这里留白正常但阈值判断仍然命中。 -- 修复:未修。需单独任务书决定改阈值判定还是改该面的留白口径。 -- 相关记录:BUG-930、BUG-931、BUG-1042。 +- 影响面:`useConversationScrollAnchor` 的 `holdUnpin` 解除条件;生时校正面(钉顶后静止距底 94px)。普通咨询静止距底约 198px,未触发,但同一逻辑也适用。 +- 用户现象:生时校正里发一句话,回答超过一屏时,本轮开头先被钉到顶部,回答一到视口就跳到最后一个字(BUG-930 想解决的现象)。 +- 根因(已证实):钉顶后 `holdUnpin` 为真,`measure()` 在任何 scroll 事件里若 `distanceFromBottom ≤ 96` 就当作「读者回到底部」,解除 `holdUnpin` 并把 `anchored` 翻回真,随后 ResizeObserver 贴底跟随。钉顶平滑滚动自己产生的 scroll 事件落定时,校正面距底恰为 94(全视口留白 + `.message-list` 底部的跳到最新让位 56+12px − 钉顶间距),命中阈值。另一条同类路径:钉顶后任何向上的非用户滚动(内容收缩夹紧)也会解除 `holdUnpin`,再由几何距离翻回贴底。 +- 修复:钉顶后只有读者自己的滚动能解除钉住:hook 在滚动容器上记 `wheel`、`touchmove`、按在容器本身(滚动条)的 `pointerdown`,在 window 上记文本框 / 按钮之外的滚动键(方向、翻页、Home/End、空格),`measure()` 仅当距上次这类手势 1 秒内(`conversationGestureWindowMs`)才解除 `holdUnpin`,之后照旧:回到底部 96px 内恢复跟随,上滑则停在读者的位置。`pinLatestTurn` 在钉顶时清掉手势时间戳,发问那一下点按 / 回车不会解除自己的钉顶。消息里的按钮点按(复制、展开思考)不算。阈值 96 与留白口径都不改。 +- 验证:`conversation-scroll-anchor-lifecycle.test.tsx`:静止距底 94 且收到无手势 scroll 事件后回答撑长,仍钉在开头、`latestBelowFold` 为真(改前被拉到底);滚轮滚到底后恢复跟随;触摸上拉解除钉住但不跟随(BUG-930 语义);点按消息内按钮不算手势;滚动键过滤单测。无头 Chrome 151:375 宽改前开头位置 −1323px(落底),改后 10px 且 2 秒后仍是 10px、再插入 400px 仍是 10px(「跳到最新」出现);随后真实滚轮(CDP `mouseWheel`)滚到底 → 距底 0,再插入 400px 仍距底 0(恢复跟随);触摸拖动(CDP `dispatchTouchEvent`)同样到底后跟随。1280 宽改前 −482px,改后 10px,同样通过。截图 `docs/testing/scroll-anchor-hook-fixes-20260926/rectification-long-375-{before,after}.png`。 +- 防复发:钉顶的解除只能来自用户手势;生命周期测试用 94px 静止距离锁住。 +- 相关记录:BUG-930、BUG-931(同症状、留白坍塌触发)、BUG-1042、BUG-1043。 - 复发自:无(BUG-931 同症状、不同触发条件)。 -- 修复版本:无。 +- 修复版本:`codex/scroll-anchor-hook-fixes-20260926`,未部署。 diff --git a/docs/tasks/PROGRESS-scroll-anchor-hook-fixes-20260926.md b/docs/tasks/PROGRESS-scroll-anchor-hook-fixes-20260926.md new file mode 100644 index 00000000..4257a8dd --- /dev/null +++ b/docs/tasks/PROGRESS-scroll-anchor-hook-fixes-20260926.md @@ -0,0 +1,96 @@ +# PROGRESS · 滚动锚两处老问题(2026-09-26) + +任务书:`TASK-scroll-anchor-hook-fixes-20260926.md`。执行方:Claude 子代理(直接执行模式)。分支 `codex/scroll-anchor-hook-fixes-20260926`,worktree `.worktrees/scroll-anchor-hook-fixes-20260926`,本地提交未推送。 + +## 基线 + +- `origin/staging` = `509987b9`(BUG-1042 `080ea5ca` 已合入)。 +- 基线全量前端测试(Node 20.19.2):3961 条,pass 3873 / fail 61(均为环境缺口:Node 20 `mock.module` 的 `ERR_MODULE_NOT_FOUND @/…`、无 Docker)。 +- 基线 rootMainFiles gzip 130933 B;`index.html` 引用的全部 js/css 合计 656748 B。 +- BUG 编号:沿用 BUG-1042 单已建的 BUG-1043、BUG-1044,本单不新增编号。 + +## 先复现(真实 React 生命周期测试) + +新增 `frontend/tests/conversation-scroll-anchor-lifecycle.test.tsx`,用仓内 `react-client-lifecycle-test-support.ts`(`createRoot` + `act`,effect / ref 都是 React 自己的),宿主节点只伪造几何(scrollTop 夹紧、scrollHeight、clientHeight)、事件表、ResizeObserver,以及「异步移动后再发 scroll」的平滑 `scrollTo`。测试组件照 `page.tsx` 的形状:hook 在闸门之上每次渲染都调用,加载时只渲染 `.app-loading`,揭幕后才渲染 `.conversation`。 + +对改前 hook 跑:9 条里 6 条失败(BUG-1043 三条:揭幕后 scroll 监听 0;点「跳到最新」后长大不跟随;容器重挂载后旧元素仍挂着监听。BUG-1044 三条:静止 94px 时被拉到底;滚轮到底后跟随断言因已提前贴底而位置不符;点消息内按钮后被拉到底)。「触摸上拉不跟随」「active 关开」「滚动键过滤」三条改前也通过(保持语义用)。改后 9/9 通过。 + +## 根因(均已证实) + +| BUG | 根因 | +| --- | --- | +| 1043 | 两个 effect 依赖 `[active, container, resetKey]`。加载闸门期间容器为 null,effect 早退;揭幕那次提交三个依赖都没变,effect 不重跑 → scroll 监听、ResizeObserver、「打开会话先落底」都没发生。浏览器插桩:改前监听 0 / 观察 0 / 打开后距底 1819px。 | +| 1044 | 钉顶后 `measure()` 在任何 scroll 事件里只要距底 ≤ 96 就解除 `holdUnpin` 并翻回贴底。钉顶平滑滚动自己的 scroll 事件落定时校正面距底 94(逐 100ms 采样:…99 → 94 后下一帧跳到底)。向上的非用户滚动也会解除 `holdUnpin`,是同类路径。 | + +## 改动 + +| 文件 | 内容 | +| --- | --- | +| `frontend/src/hooks/use-conversation-scroll-anchor.ts` | D1:原两个 `[active, container, resetKey]` effect 合为一个**每次提交后运行**的挂载 effect,比对 `container.current` / `active` / `resetKey` 与上次挂载记录,未变即空操作;变了先卸下旧挂载,再对当前元素挂 scroll 监听(`watchAnchor`)与 ResizeObserver + MutationObserver 跟随(`followContent`),两段内部逻辑与原来逐行一致;另有空依赖 effect 在卸载时清理。D2:钉顶期间 `measure()` 只有在 1 秒内出现过读者手势(容器上的 `wheel` / `touchmove` / 按在容器本身即滚动条的 `pointerdown`,window 上文本框与按钮之外的滚动键)时才解除 `holdUnpin`,之后照旧由 `nextAnchorState` 判断;`pinLatestTurn` 钉顶时清掉手势时间戳。新导出 `conversationGestureWindowMs`、`isScrollKeyGesture`。签名不变。 | +| 调用处 | **未改**(`page.tsx`、`rectification-agentic-chat.tsx` 一行未动)。不用 callback ref 的原因:两处都另用同一个 `RefObject`,校正面组件本轮由并行任务在改;也不用「effect 里 setState 记下元素」,会触发 react-hooks 编译器规则。 | +| `frontend/tests/conversation-scroll-anchor-lifecycle.test.tsx` | 新增 9 条(见上)。 | +| `frontend/DESIGN.md` | Answer start anchor:新增 **Release** 条目(只有读者滚动解除钉顶,94px 静止位置不算回到底部);**History** 条目补「页面加载时的第一个会话同样落底、hook 随容器元素挂载」。 | +| 记录 | `docs/BUG_HISTORY.md`(BUG-1043 / 1044 根因、修复、验证,状态保持 investigating 等部署)、`CHANGELOG.md`、`docs/testing/scroll-anchor-hook-fixes-20260926.md` + 4 张截图、`docs/tasks/README.md`。 | + +### 改动既有断言 + +无。BUG-930 / 931 / 932 / 1042 的全部既有断言(`chat-notice-and-scroll-contract.test.ts` 的源码合同与假 DOM 行为、`starter-questions.test.ts`「Follow 段在 `if (!active || !element) return;` 之后才写 scrollTop」、`rectification-agentic-entry` / `rectification-timeline` / `rectification-mobile-timeline-readout` / `rectification-answer-choice` 对 hook 的断言)原样通过,一条未改。 + +## 测试 + +| 项 | 结果 | +| --- | --- | +| `tsc --noEmit` | 0 错 | +| `npm run lint` | 0 error(126 warning,与基线相同,均为既有) | +| 全量 `npm test` | 3970 条,pass 3882 / fail 61 | +| 失败名单 vs 基线 | 逐条一致(61 = 61,diff 为空),新增失败 0 | +| 测试名单 vs 基线 | +9 新名(本单新增),消失 0 | +| `npm run build -- --webpack` | 通过;`/`、`/_not-found`、`/chart`、`/ephemeris`、`/people` 均 ○ Static | +| gzip | rootMainFiles 130933 → 130933 B(0);`index.html` 引用的 js/css 合计 656748 → 657114 B(+366 B,+0.06%) | + +构建经 node_modules 软链在 `frontend/frontend/` 下生成的杂散目录已删除,未提交。 + +## 真实浏览器验证 + +环境:本地 `next build --webpack` + `next start`(:3471 本分支;:3461 为 BUG-1042 工作树的构建,hook 与 `origin/staging` 相同,作「改前」),无头 Chrome 151(`--headless=new --disable-dev-shm-usage`),CDP `Fetch` 拦截 `/api/*` 回虚构数据(5 轮虚构历史;普通咨询 `/api/consult` 回纯文本,校正 `/api/rectification/agent` 回 ndjson)。输入框用 `Input.insertText` + Enter 真发问;滚轮用 `Input.dispatchMouseEvent mouseWheel`,触摸用 `Input.dispatchTouchEvent`。给 `EventTarget.addEventListener` / `ResizeObserver.observe` 打点计数 `.conversation` 上的监听。脚本在执行方 scratchpad `sa/sa.mjs`(由 BUG-1042 的 `gap.mjs` 改写),未入库。 + +「开头距顶」= 本轮用户行顶边 − 滚动容器顶边;「距底」= scrollHeight − scrollTop − clientHeight。 + +### (a) 普通咨询,直接打开已有会话(BUG-1043),375 宽 + +| 进入方式 | 版本 | 监听 / 观察 | 打开后距底 | 短回答结算后「跳到最新」 | 开头距顶 | +| --- | --- | --- | --- | --- | --- | +| `?c=` 直接打开 | 改前 | 0 / 0 | 1819 | **出现** | 14 | +| `?c=` 直接打开 | 改后 | 1 / 1 | 0 | 不出现 | 11 | +| 打开后刷新 | 改前 | 0 / 0 | 1819 | **出现**(上下滚动后仍在) | 11 | +| 打开后刷新 | 改后 | 1 / 1 | 0 | 不出现(上下滚动后仍不出现) | 13 | +| `?new=1` 再点侧栏 | 改后 | 1 / 1 | 0 | 不出现 | 10 | + +长回答(14 段),`?c=` 直接打开: + +| 宽度 | 版本 | 结算后 | 点「跳到最新」后 | 再插入 400px 后距底 | +| --- | --- | --- | --- | --- | +| 375 | 改前 | 开头距顶 10,按钮出现 | 距底 0,按钮消失 | **400**(不跟随) | +| 375 | 改后 | 开头距顶 12,按钮出现 | 距底 0,按钮消失 | 0(跟随) | +| 1280 | 改后 | 开头距顶 10,按钮出现 | 距底 0,按钮消失 | 0(跟随) | + +### (b) 生时校正长回答(BUG-1044),`?c=` 打开 + +| 宽度 | 版本 | 结算后开头距顶 / 距底 | 2 秒后 | 无手势 scroll 事件 + 插入 400px | 用户滚轮到底后 | 再插入 400px 后距底 | +| --- | --- | --- | --- | --- | --- | --- | +| 375 | 改前 | **−1323 / 0**(被拉到底) | 同 | 距底 0(贴底) | — | 0 | +| 375 | 改后 | 10 / 1333,按钮出现 | 10 | 开头仍 10,距底 1737 | 距底 0,按钮消失 | 0(恢复跟随) | +| 375 触摸 | 改后 | 10 / 1333 | 10 | 开头仍 10 | 触摸拖到底,距底 0 | 0(恢复跟随) | +| 1280 | 改前 | **−482 / 0** | 同 | 0 | — | 0 | +| 1280 | 改后 | 10 / 492,按钮出现 | 10 | 开头仍 10 | 距底 0 | 0(恢复跟随) | + +逐 100ms 采样(375,scrollTop,距底,开头距顶):改前 `…2014,96,12 → 3349,0,-1323`;改后 `…2011,99,15 → 2016,1333,10` 并保持。校正短回答(375)静止距底 94、开头 10,插入 400px 后开头仍 10(不再因 94 ≤ 96 被判回到底部)。 + +截图(入库,375 宽):`docs/testing/scroll-anchor-hook-fixes-20260926/consult-reload-short-375-{before,after}.png`(改前短回答下有「跳到最新」)、`rectification-long-375-{before,after}.png`。校正截图底部的「合盘历史暂时无法读取」是虚构数据没回合盘接口所致,与本单无关(BUG-1042 同)。 + +## 未做 / 环境缺口 + +- 登录态 iPhone Safari 真机:留给 `docs/testing/scroll-anchor-hook-fixes-20260926.md`。无头 Chrome 的触摸是 CDP 合成事件,不等于 iOS 的惯性滚动,真机第 6–8 条需要人看。 +- 键盘滚动(PageDown / 方向键)只有单测覆盖过滤规则,未在浏览器里实测。 +- 校正面「点选项」一轮(无用户行)未在浏览器里单独跑;生命周期测试覆盖的就是无用户行、头即尾的钉顶。 +- 未部署、未推送。 diff --git a/docs/tasks/README.md b/docs/tasks/README.md index 263c98f0..85da6632 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -121,7 +121,7 @@ | 任务书 | 进度 | 主题 | 状态 | 落点 | | --- | --- | --- | --- | --- | -| `TASK-scroll-anchor-hook-fixes-20260926.md` | — | **滚动锚两处老问题**:直接打开已有会话时监听未挂上(BUG-1043)、校正长回答钉顶后因 96px 阈值被拉到底(BUG-1044)。排在 BUG-1042 合入后 | 待领取 | — | +| `TASK-scroll-anchor-hook-fixes-20260926.md` | `PROGRESS-scroll-anchor-hook-fixes-20260926.md` | **滚动锚两处老问题**:直接打开已有会话时监听未挂上(BUG-1043)、校正长回答钉顶后因 96px 阈值被拉到底(BUG-1044)。排在 BUG-1042 合入后。挂载改由容器元素本身驱动(每次提交比对元素 / active / resetKey);钉顶只由用户滚动手势解除 | 待验收 | `codex/scroll-anchor-hook-fixes-20260926`(BUG-1043/1044) | | `TASK-latest-turn-actions-gap-20260926.md` | — | **最后一轮正文与点赞 / 踩之间空大半屏**:BUG-930 钉顶留白(`min-height: 视口 − 本轮开头`)加在 `.message-assistant` 上,把兄弟节点 `.message-actions` 推到留白之后;改为加在整轮外层,按钮紧贴正文、空白落在后面;不动滚动 hook | 已验收(Claude 09-26 直接执行:子代理实现,Claude 独立复验 tsc/lint 0、全量 3961 条失败名单与基线逐条一致、四路由 ○、gzip 不变;CDP 实测间距 450–600px → 23px,钉顶仍在) | `080ea5ca`(已部署 `509987b9`,health 一致) | | `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`(已部署 `62d4c9c4`,health 一致) | | `TASK-latest-turn-actions-gap-20260926.md` | `PROGRESS-latest-turn-actions-gap-20260926.md` | **末轮回答与点赞一排之间大段空白**:BUG-930 的钉顶留白加在助手行上,把其后的 `.message-actions` 顶到留白之后;改加在整轮外层(`:last-child:has(.message-assistant)` + `align-content: start`),不改 hook。验证中另查出既有 BUG-1043(直接进入普通咨询会话时滚动锚监听未挂上)、BUG-1044(校正长回答钉顶后被拉到底),未修 | 待验收 | `codex/latest-turn-actions-gap-20260926`(BUG-1042) | diff --git a/docs/testing/scroll-anchor-hook-fixes-20260926.md b/docs/testing/scroll-anchor-hook-fixes-20260926.md new file mode 100644 index 00000000..a3c874d0 --- /dev/null +++ b/docs/testing/scroll-anchor-hook-fixes-20260926.md @@ -0,0 +1,20 @@ +# 滚动锚两处老问题 · 真机清单(2026-09-26) + +本轮在本地 `next start` + 无头 Chrome 里用虚构接口数据验证并截图(`scroll-anchor-hook-fixes-20260926/`,375 宽改动前后各两张),没有登录态真机。部署到 staging 后请用自己的账户照做,iPhone Safari 与桌面浏览器各一遍: + +## 普通对话(BUG-1043) + +1. 打开一个已有好几轮内容的普通对话,然后**刷新页面**。揭幕后画面停在最后一条回答(不是停在中间某条)。 +2. 问一个很短就能答完的问题。回答结束后:你的问题停在屏幕顶部附近,**底部没有「跳到最新」**。 +3. 手指往上滑一点再滑回来,「跳到最新」不会一直挂着。 +4. 再问一个会得到长回答的问题。回答超过一屏时底部出现「跳到最新」;点一下滚到最后,之后回答继续变长,画面**一直跟着最后一行**。 +5. 从侧栏复制这条对话的链接(带 `?c=`),在新标签页里直接打开,重复 2 和 4,表现一致。 + +## 生时校正(BUG-1044) + +6. 打开一个生时校正会话,打一段会让助手长篇回复的经历发出去。回复超过一屏时:**本轮开头停在屏幕顶部**,底部出现「跳到最新」,画面不会自己跳到最后一个字。 +7. 不碰屏幕等回复写完,开头仍在顶部。 +8. 用手指往下滑到最底。之后若回复还在变长(或下一段出现),画面跟着最后一行走。 +9. 点一个选项按钮(没有打字的那种一轮):新回复的开头同样停在顶部,不被拉到底。 + +看到下面任一情况算不通过,请截图:刷新后短回答下仍有「跳到最新」;点了「跳到最新」后回答再变长画面不跟;校正长回复一到就滚到最后一个字;滑到底后不再跟随。 diff --git a/docs/testing/scroll-anchor-hook-fixes-20260926/consult-reload-short-375-after.png b/docs/testing/scroll-anchor-hook-fixes-20260926/consult-reload-short-375-after.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3769d737a7d514528eda7b1fd883d16f52d314 GIT binary patch literal 24094 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 literal 0 HcmV?d00001 diff --git a/docs/testing/scroll-anchor-hook-fixes-20260926/rectification-long-375-after.png b/docs/testing/scroll-anchor-hook-fixes-20260926/rectification-long-375-after.png new file mode 100644 index 0000000000000000000000000000000000000000..02d868500ff7ef260d91a7a992255e16ecc9a5ac GIT binary patch literal 88641 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 cOfjexjA_y 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 literal 0 HcmV?d00001 diff --git a/frontend/DESIGN.md b/frontend/DESIGN.md index f31f77a3..5279c4f6 100644 --- a/frontend/DESIGN.md +++ b/frontend/DESIGN.md @@ -258,7 +258,8 @@ Both chat surfaces pin a new turn at its head instead of following the last stre - **Head:** the user row of this turn. When this turn has no user row (rectification choice tap, opening, auto-continue) the head is the new assistant row. - **Pin:** on send (and on those rectification new-turn entries) the scroller places that row at the top with a `space-4` gap and then holds still while the reply grows downward. - **Spacer:** the last turn's entry — the `.message-list` child that holds the assistant row, its `.message-actions`, follow-up chips and (rectification) delivery card — gets `min-height: calc(var(--conversation-viewport) - var(--latest-turn-head-height))` plus `align-content: start`, both variables written onto the scroller by `useConversationScrollAnchor`. The spacer trails the whole turn: the actions row sits right under the text at its own `margin: -4px 0 8px`, and the empty space comes after it (BUG-1042; the assistant row itself never carries the spacer — that pushed the actions half a screen down). `align-content: start` keeps the rectification wrap's grid rows from stretching into the space. Not sticky, and `.conversation`'s `padding-bottom` is unchanged. The spacer lasts until the next send; switching sessions clears it. -- **History:** opening another session still lands on the newest content once. +- **Release:** the pin holds until the reader scrolls — a wheel, a touch drag, a scroll key outside a text field, or a press on the scroller's own scrollbar, followed by a scroll within 1s. Scrolling back to within 96px of the bottom then resumes following; scrolling up leaves the viewport where they put it. Where the pin happens to rest never releases it: the rectification surface rests 94px from the bottom (its spacer plus the jump-chip clearance), inside the threshold, and treating that as "back at the bottom" dragged long rectification replies to their last line (BUG-1044). Taps on buttons inside a message do not count. +- **History:** opening another session still lands on the newest content once. That includes the first session on page load (refresh, `?c=` deep link, boot landing): the scroller only mounts after the loading screen, and the hook attaches its scroll listener and resize observer whenever the scroller element appears, not only when `active` or the session key changes (BUG-1043). Without that, a directly opened session showed “跳到最新” under a short reply and never followed. - **Jump to latest:** if the growing turn (or the reader scrolling) leaves more than 96px below the fold, the shared chip appears; pressing it sticks to the bottom for the rest of the turn. ### Jump to latest diff --git a/frontend/src/hooks/use-conversation-scroll-anchor.ts b/frontend/src/hooks/use-conversation-scroll-anchor.ts index 7b4f02bc..747619ed 100644 --- a/frontend/src/hooks/use-conversation-scroll-anchor.ts +++ b/frontend/src/hooks/use-conversation-scroll-anchor.ts @@ -116,6 +116,26 @@ export function latestContentBelowFold(overflow: number): boolean { return overflow > conversationAnchorThreshold; } +/** How long after a wheel / touch drag / scroll key / scrollbar press a scroll still counts as the reader's own. */ +export const conversationGestureWindowMs = 1_000; + +const scrollKeys = new Set(["ArrowUp", "ArrowDown", "PageUp", "PageDown", "Home", "End", " "]); + +export function isScrollKeyGesture(event: Pick): boolean { + if (!scrollKeys.has(event.key) || event.altKey || event.ctrlKey || event.metaKey) return false; + const target = event.target as { closest?: (selector: string) => unknown } | null; + if (typeof target?.closest !== "function") return true; + if (target.closest("input, textarea, select, [contenteditable]:not([contenteditable='false'])")) return false; + // Space on a button or link activates it instead of scrolling. + return !(event.key === " " && target.closest("button, a[href], summary, [role='button']")); +} + +type Attachment = { + readonly element: HTMLElement; + readonly resetKey: string; + readonly detach: () => void; +}; + /** * Owns both halves of "follow the conversation": whether the reader is * anchored to the bottom (a scroll listener), and landing the viewport on the @@ -123,8 +143,9 @@ export function latestContentBelowFold(overflow: number): boolean { * children, one frame per change). Both chat surfaces use this one hook. * * A new turn pins its head (the user row, or the new assistant when this turn - * has no user row) at the top and does not follow streamed growth. Switching - * conversations still lands on the newest content once. + * has no user row) at the top and does not follow streamed growth. Only the + * reader's own scrolling releases that pin (BUG-1044). Switching conversations + * still lands on the newest content once. */ export function useConversationScrollAnchor( container: RefObject, @@ -138,6 +159,8 @@ export function useConversationScrollAnchor( const shouldLand = useRef(true); const holdUnpin = useRef(false); const pinnedHeadRef = useRef(null); + const lastGestureAt = useRef(Number.NEGATIVE_INFINITY); + const attachment = useRef(null); const anchored = anchor.key === resetKey ? anchor.anchored : true; useEffect(() => { @@ -150,102 +173,150 @@ export function useConversationScrollAnchor( pinnedHeadRef.current = null; }, [resetKey]); - useEffect(() => { - const element = container.current; - if (!active || !element) return; - lastScrollTop.current = element.scrollTop; - let frame = 0; - const measure = () => { - frame = 0; - const overflow = turnTailOverflow(element); - const distance = conversationDistanceFromBottom(element); - const scrolledUp = element.scrollTop < lastScrollTop.current; - lastScrollTop.current = element.scrollTop; - setLatestBelowFold(latestContentBelowFold(overflow)); - if (holdUnpin.current) { - if (scrolledUp) { - holdUnpin.current = false; - } else if (distance <= conversationAnchorThreshold) { - holdUnpin.current = false; - } else { - return; - } - } - setAnchor((current) => { - const currentAnchored = current.key === resetKey ? current.anchored : true; - const next = nextAnchorState(currentAnchored, distance, scrolledUp); - return next === currentAnchored && current.key === resetKey ? current : { key: resetKey, anchored: next }; - }); - }; - const onScroll = () => { - if (frame) return; - frame = window.requestAnimationFrame(measure); - }; - element.addEventListener("scroll", onScroll, { passive: true }); - frame = window.requestAnimationFrame(measure); - return () => { - if (frame) window.cancelAnimationFrame(frame); - element.removeEventListener("scroll", onScroll); - }; - }, [active, container, resetKey]); - // Follow: while anchored, any change in the scroller's content height lands the // viewport on the bottom, at most once per frame. Switching conversations // (resetKey) lands there immediately. Unanchored turns only refresh the spacer. + // + // The anchor listener and this observer attach to the scroller element itself, + // whenever it appears. The home page mounts `.conversation` only after its + // loading screen, while `active` and `resetKey` stay the same, so an effect + // keyed on those alone ran once against a null ref and never again (BUG-1043). + // This effect therefore checks after every commit and is a no-op unless the + // element, `active` or `resetKey` changed. useEffect(() => { const element = container.current; + const current = attachment.current; + if (current && active && current.element === element && current.resetKey === resetKey) return; + current?.detach(); + attachment.current = null; if (!active || !element) return; - let frame = 0; - const follow = () => { - frame = 0; - if (shouldLand.current) { - element.scrollTop = element.scrollHeight; - shouldLand.current = false; - holdUnpin.current = false; - pinnedHeadRef.current = null; - clearTurnSpacer(element); - const atBottom = conversationDistanceFromBottom(element) <= conversationAnchorThreshold; - anchoredRef.current = atBottom; - setAnchor({ key: resetKey, anchored: atBottom }); - setLatestBelowFold(false); - return; - } - if (anchoredRef.current) { - element.scrollTop = element.scrollHeight; - } else if (pinnedHeadRef.current) { - applyTurnSpacer(element, pinnedHeadRef.current); - } - setLatestBelowFold(latestContentBelowFold(turnTailOverflow(element))); - }; - const requestFollow = () => { - if (frame) return; - frame = window.requestAnimationFrame(follow); - }; - requestFollow(); - if (typeof ResizeObserver === "undefined") { + + // Anchored or not: a scroll listener, plus the reader-gesture marks that alone may release a pin. + const watchAnchor = () => { + lastScrollTop.current = element.scrollTop; + let frame = 0; + const measure = () => { + frame = 0; + const overflow = turnTailOverflow(element); + const distance = conversationDistanceFromBottom(element); + const scrolledUp = element.scrollTop < lastScrollTop.current; + lastScrollTop.current = element.scrollTop; + setLatestBelowFold(latestContentBelowFold(overflow)); + if (holdUnpin.current) { + // A pinned turn rests wherever the pin and the spacer put it, which on + // the rectification surface is 94px from the bottom, inside the + // threshold. Geometry alone therefore never releases the pin; only a + // scroll the reader made does, up or down (BUG-1044). + const readerScrolled = performance.now() - lastGestureAt.current <= conversationGestureWindowMs; + if (!readerScrolled) return; + holdUnpin.current = false; + } + setAnchor((state) => { + const currentAnchored = state.key === resetKey ? state.anchored : true; + const next = nextAnchorState(currentAnchored, distance, scrolledUp); + return next === currentAnchored && state.key === resetKey ? state : { key: resetKey, anchored: next }; + }); + }; + const onScroll = () => { + if (frame) return; + frame = window.requestAnimationFrame(measure); + }; + const markGesture = () => { + lastGestureAt.current = performance.now(); + }; + // Pointer presses count only on the scroller itself (its scrollbar), not on + // a button or text inside a message. + const onPointerDown = (event: Event) => { + if (event.target === element) markGesture(); + }; + const onKeyDown = (event: KeyboardEvent) => { + if (isScrollKeyGesture(event)) markGesture(); + }; + element.addEventListener("scroll", onScroll, { passive: true }); + element.addEventListener("wheel", markGesture, { passive: true }); + element.addEventListener("touchmove", markGesture, { passive: true }); + element.addEventListener("pointerdown", onPointerDown, { passive: true }); + window.addEventListener("keydown", onKeyDown); + frame = window.requestAnimationFrame(measure); return () => { if (frame) window.cancelAnimationFrame(frame); + element.removeEventListener("scroll", onScroll); + element.removeEventListener("wheel", markGesture); + element.removeEventListener("touchmove", markGesture); + element.removeEventListener("pointerdown", onPointerDown); + window.removeEventListener("keydown", onKeyDown); }; - } - const sizes = new ResizeObserver(requestFollow); - const observeChildren = () => { - sizes.disconnect(); - for (const child of Array.from(element.children)) sizes.observe(child); }; - observeChildren(); - const children = typeof MutationObserver === "undefined" - ? null - : new MutationObserver(() => { - observeChildren(); - requestFollow(); - }); - children?.observe(element, { childList: true }); - return () => { - sizes.disconnect(); - children?.disconnect(); - if (frame) window.cancelAnimationFrame(frame); + + const followContent = () => { + let frame = 0; + const follow = () => { + frame = 0; + if (shouldLand.current) { + element.scrollTop = element.scrollHeight; + shouldLand.current = false; + holdUnpin.current = false; + pinnedHeadRef.current = null; + clearTurnSpacer(element); + const atBottom = conversationDistanceFromBottom(element) <= conversationAnchorThreshold; + anchoredRef.current = atBottom; + setAnchor({ key: resetKey, anchored: atBottom }); + setLatestBelowFold(false); + return; + } + if (anchoredRef.current) { + element.scrollTop = element.scrollHeight; + } else if (pinnedHeadRef.current) { + applyTurnSpacer(element, pinnedHeadRef.current); + } + setLatestBelowFold(latestContentBelowFold(turnTailOverflow(element))); + }; + const requestFollow = () => { + if (frame) return; + frame = window.requestAnimationFrame(follow); + }; + requestFollow(); + if (typeof ResizeObserver === "undefined") { + return () => { + if (frame) window.cancelAnimationFrame(frame); + }; + } + const sizes = new ResizeObserver(requestFollow); + const observeChildren = () => { + sizes.disconnect(); + for (const child of Array.from(element.children)) sizes.observe(child); + }; + observeChildren(); + const children = typeof MutationObserver === "undefined" + ? null + : new MutationObserver(() => { + observeChildren(); + requestFollow(); + }); + children?.observe(element, { childList: true }); + return () => { + sizes.disconnect(); + children?.disconnect(); + if (frame) window.cancelAnimationFrame(frame); + }; }; - }, [active, container, resetKey]); + + const stopWatching = watchAnchor(); + const stopFollowing = followContent(); + attachment.current = { + element, + resetKey, + detach: () => { + stopWatching(); + stopFollowing(); + }, + }; + }); + + useEffect(() => () => { + attachment.current?.detach(); + attachment.current = null; + }, []); return { anchored, @@ -268,6 +339,8 @@ export function useConversationScrollAnchor( const run = () => { shouldLand.current = false; holdUnpin.current = true; + // The gesture that sent this turn (tap, Enter) must not release its own pin. + lastGestureAt.current = Number.NEGATIVE_INFINITY; anchoredRef.current = false; if (!element) { setAnchor({ key: resetKey, anchored: false }); diff --git a/frontend/tests/conversation-scroll-anchor-lifecycle.test.tsx b/frontend/tests/conversation-scroll-anchor-lifecycle.test.tsx new file mode 100644 index 00000000..5dfc22ba --- /dev/null +++ b/frontend/tests/conversation-scroll-anchor-lifecycle.test.tsx @@ -0,0 +1,488 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import React, { useRef } from "react"; + +import { isScrollKeyGesture, useConversationScrollAnchor } from "../src/hooks/use-conversation-scroll-anchor.ts"; +import { createClientLifecycleHarness } from "./react-client-lifecycle-test-support.ts"; + +Object.assign(globalThis, { React }); + +/** + * Real React lifecycle (createRoot + act, effects and refs are React's own) + * around `useConversationScrollAnchor`. Only the scroller's geometry, its + * listeners and ResizeObserver are faked: the host node React mounts is + * decorated with scrollTop / scrollHeight / clientHeight, an event registry and + * an async `scrollTo` that fires `scroll` afterwards, as a browser's smooth + * scroll does. Numbers follow the CDP measurements in BUG-1042 / 1044 + * (consultation rests ~198px above the bottom after a pin, rectification 94px). + */ + +type Listener = (event: Record) => void; + +type FakeRow = { + offsetTop: number; + offsetHeight: number; + getBoundingClientRect: () => { top: number }; +}; + +type FakeScroller = { + scrollTop: number; + scrollHeight: number; + clientHeight: number; + tail: FakeRow; + children: unknown[]; + listeners: Map>; + scrollListenerAdds: number; + dispatch: (type: string, event?: Record) => void; + scrollTo: (options: { top: number }) => void; +}; + +type Anchor = ReturnType; + +let observeCalls = 0; +const observers = new Set(); + +class FakeResizeObserver { + readonly targets = new Set(); + constructor(readonly callback: () => void) { + observers.add(this); + } + observe(target: unknown) { + observeCalls += 1; + this.targets.add(target); + } + disconnect() { + this.targets.clear(); + } + unobserve() {} +} + +/** Content grew: every observer that still watches something fires. */ +function resizeAll() { + for (const observer of Array.from(observers)) { + if (observer.targets.size) observer.callback(); + } +} + +function row(offsetTop: number, offsetHeight: number, scroller: () => FakeScroller | null): FakeRow { + return { + offsetTop, + offsetHeight, + getBoundingClientRect() { + return { top: this.offsetTop - (scroller()?.scrollTop ?? 0) }; + }, + }; +} + +const decorated = new WeakMap(); + +// The inline ref callback below runs again on every render; decorate each host node once. +function decorate(node: Record, geometry: { scrollHeight: number; clientHeight: number; tail: FakeRow }): FakeScroller { + const existing = decorated.get(node); + if (existing) return existing; + const styles = new Map(); + const listeners = new Map>(); + let top = 0; + const scroller = node as unknown as FakeScroller; + Object.defineProperty(node, "style", { + configurable: true, + value: { + setProperty: (name: string, value: string) => styles.set(name, value), + getPropertyValue: (name: string) => styles.get(name) ?? "", + removeProperty: (name: string) => styles.delete(name), + }, + }); + Object.defineProperty(node, "scrollTop", { + configurable: true, + get: () => top, + set: (value: number) => { + top = Math.max(0, Math.min(value, scroller.scrollHeight - scroller.clientHeight)); + }, + }); + Object.assign(node, { + scrollHeight: geometry.scrollHeight, + clientHeight: geometry.clientHeight, + tail: geometry.tail, + children: [{ child: 1 }, { child: 2 }], + listeners, + scrollListenerAdds: 0, + addEventListener(type: string, listener: Listener) { + if (type === "scroll") scroller.scrollListenerAdds += 1; + if (!listeners.has(type)) listeners.set(type, new Set()); + listeners.get(type)!.add(listener); + }, + removeEventListener(type: string, listener: Listener) { + listeners.get(type)?.delete(listener); + }, + dispatch(type: string, event: Record = {}) { + for (const listener of Array.from(listeners.get(type) ?? [])) listener({ target: node, ...event }); + }, + // Smooth scroll: the position moves later, then `scroll` fires. + scrollTo({ top: next }: { top: number }) { + setTimeout(() => { + scroller.scrollTop = next; + scroller.dispatch("scroll"); + }, 0); + }, + getBoundingClientRect: () => ({ top: 0 }), + querySelector: () => scroller.tail, + querySelectorAll: () => [], + }); + decorated.set(node, scroller); + return scroller; +} + +function setup() { + const harness = createClientLifecycleHarness(); + const window = globalThis.window as unknown as Record; + window.matchMedia = () => ({ matches: false }); + const originalResizeObserver = Object.getOwnPropertyDescriptor(globalThis, "ResizeObserver"); + Object.defineProperty(globalThis, "ResizeObserver", { value: FakeResizeObserver, configurable: true, writable: true }); + observers.clear(); + observeCalls = 0; + return { + harness, + async close() { + await harness.close(); + if (originalResizeObserver) Object.defineProperty(globalThis, "ResizeObserver", originalResizeObserver); + else Reflect.deleteProperty(globalThis, "ResizeObserver"); + }, + }; +} + +type SurfaceProps = { + readonly loading: boolean; + readonly active?: boolean; + readonly resetKey: string; + readonly geometry: () => { scrollHeight: number; clientHeight: number; tail: FakeRow }; + readonly onScroller: (scroller: FakeScroller | null) => void; + readonly onAnchor: (anchor: Anchor) => void; + readonly generation?: number; +}; + +/** + * Mirrors the home page: while bootstrapping it renders only the loading + * screen, then reveals `.conversation` with the same `active` and `resetKey`. + * The hook is called above the gate on every render, as `page.tsx` does. + */ +function Surface({ loading, active = true, resetKey, geometry, onScroller, onAnchor, generation = 0 }: SurfaceProps) { + const conversation = useRef(null); + const anchor = useConversationScrollAnchor(conversation, active, resetKey); + onAnchor(anchor); + if (loading) return
; + return ( +
{ + const scroller = node ? decorate(node as unknown as Record, geometry()) : null; + conversation.current = scroller as unknown as HTMLDivElement | null; + onScroller(scroller); + }} + /> + ); +} + +const VIEWPORT = 600; +const PIN_SPACE = 16; + +test("an existing conversation revealed after the loading screen attaches the anchor (BUG-1043)", async () => { + const { harness, close } = setup(); + try { + let scroller: FakeScroller | null = null; + let anchor!: Anchor; + const history = row(1700, 276, () => scroller); + const props = { + resetKey: "session-1", + geometry: () => ({ scrollHeight: 2000, clientHeight: VIEWPORT, tail: history }), + onScroller: (value: FakeScroller | null) => { scroller = value; }, + onAnchor: (value: Anchor) => { anchor = value; }, + }; + + // Given: the page boots behind the loading screen, then reveals the same session. + await harness.render(); + await harness.idle(); + assert.equal(scroller, null); + await harness.render(); + await harness.idle(); + + // Then: the scroll listener and the resize observer are attached to the revealed scroller, + // and opening the session landed on its newest content once. + const element = scroller as unknown as FakeScroller; + assert.equal(element.scrollListenerAdds, 1); + assert.ok(observeCalls > 0, "ResizeObserver never observed the scroller's children"); + assert.equal(element.scrollTop, 2000 - VIEWPORT); + + // Re-rendering (every streamed token re-renders the page) does not attach twice. + await harness.render(); + await harness.render(); + await harness.idle(); + assert.equal(element.scrollListenerAdds, 1); + assert.equal(element.listeners.get("scroll")?.size, 1); + + // When: a short question is sent. The user row lands at 2000, the reply is 80px, and the + // spacer makes room for the pin; consultation rests ~198px above the bottom. + const user = row(2000, 48, () => scroller); + element.tail = row(2064, 80, () => scroller); + element.scrollHeight = 2000 - PIN_SPACE + VIEWPORT + 198; + await harness.update(() => anchor.pinLatestTurn(user as unknown as HTMLElement)); + await harness.idle(); + await harness.idle(); + + // Then: the head is pinned and, once the smooth scroll lands, a short reply shows no jump chip. + assert.equal(element.scrollTop, 2000 - PIN_SPACE); + assert.equal(anchor.latestBelowFold, false); + assert.equal(anchor.anchored, false); + } finally { + await close(); + } +}); + +test("a long reply after reveal shows the jump chip and following works once pressed (BUG-1043)", async () => { + const { harness, close } = setup(); + try { + let scroller: FakeScroller | null = null; + let anchor!: Anchor; + const history = row(1700, 276, () => scroller); + const props = { + resetKey: "session-1", + geometry: () => ({ scrollHeight: 2000, clientHeight: VIEWPORT, tail: history }), + onScroller: (value: FakeScroller | null) => { scroller = value; }, + onAnchor: (value: Anchor) => { anchor = value; }, + }; + await harness.render(); + await harness.render(); + await harness.idle(); + const element = scroller as unknown as FakeScroller; + + const user = row(2000, 48, () => scroller); + element.tail = row(2064, 1400, () => scroller); + element.scrollHeight = 2064 + 1400 + 198; + await harness.update(() => anchor.pinLatestTurn(user as unknown as HTMLElement)); + await harness.idle(); + await harness.idle(); + assert.equal(element.scrollTop, 2000 - PIN_SPACE); + assert.equal(anchor.latestBelowFold, true); + + // When: the reader presses 跳到最新. + await harness.update(() => anchor.anchorToLatest()); + await harness.idle(); + await harness.idle(); + assert.equal(element.scrollTop, element.scrollHeight - VIEWPORT); + assert.equal(anchor.latestBelowFold, false); + assert.equal(anchor.anchored, true); + + // Then: further growth keeps the viewport on the bottom. + element.tail.offsetHeight += 400; + element.scrollHeight += 400; + await harness.update(() => resizeAll()); + await harness.idle(); + assert.equal(element.scrollTop, element.scrollHeight - VIEWPORT); + } finally { + await close(); + } +}); + +test("a scroller that remounts under the same key re-attaches to the new element (BUG-1043)", async () => { + const { harness, close } = setup(); + try { + const seen: FakeScroller[] = []; + let anchor!: Anchor; + const props = { + loading: false, + resetKey: "session-1", + geometry: () => ({ scrollHeight: 1200, clientHeight: VIEWPORT, tail: row(900, 276, () => null) }), + onScroller: (value: FakeScroller | null) => { if (value && !seen.includes(value)) seen.push(value); }, + onAnchor: (value: Anchor) => { anchor = value; }, + }; + await harness.render(); + await harness.idle(); + await harness.render(); + await harness.idle(); + assert.equal(seen.length, 2); + const [first, second] = seen; + assert.equal(first.listeners.get("scroll")?.size ?? 0, 0, "the detached scroller kept its listener"); + assert.equal(second.listeners.get("scroll")?.size, 1); + assert.ok(anchor); + + // Unmounting the page releases the listener. + await harness.render(); + await harness.idle(); + assert.equal(second.listeners.get("scroll")?.size ?? 0, 0); + } finally { + await close(); + } +}); + +async function pinnedRectificationTurn() { + const env = setup(); + let scroller: FakeScroller | null = null; + let anchor!: Anchor; + const history = row(1700, 276, () => scroller); + const props = { + loading: false, + resetKey: "case-1", + geometry: () => ({ scrollHeight: 2000, clientHeight: VIEWPORT, tail: history }), + onScroller: (value: FakeScroller | null) => { scroller = value; }, + onAnchor: (value: Anchor) => { anchor = value; }, + }; + // The rectification surface mounts after reveal, so its scroller exists from the first render. + await env.harness.render(); + await env.harness.idle(); + const element = scroller as unknown as FakeScroller; + assert.equal(element.scrollTop, 2000 - VIEWPORT); + + // A choice tap: no user row, the new assistant is the head and the tail. The full-viewport + // spacer plus the rectification list's bottom padding leave the pin resting 94px above the + // bottom, i.e. inside the 96px threshold (CDP measurement, BUG-1044). + const head = row(2000, 80, () => scroller); + element.tail = head; + element.scrollHeight = 2000 - PIN_SPACE + VIEWPORT + 94; + await env.harness.update(() => anchor.pinLatestTurn(head as unknown as HTMLElement)); + await env.harness.idle(); + await env.harness.idle(); + return { ...env, element, head, anchor: () => anchor }; +} + +test("a rectification pin resting within the threshold is not pulled to the bottom (BUG-1044)", async () => { + const { harness, close, element, head, anchor } = await pinnedRectificationTurn(); + try { + const pinned = 2000 - PIN_SPACE; + assert.equal(element.scrollTop, pinned); + assert.equal(element.scrollHeight - element.scrollTop - element.clientHeight, 94); + assert.equal(anchor().anchored, false); + + // A scroll event nobody made (layout, scroll anchoring) at the same resting position. + await harness.update(() => element.dispatch("scroll")); + await harness.idle(); + assert.equal(anchor().anchored, false); + + // When: the reply streams past the viewport. + head.offsetHeight = 1400; + element.scrollHeight = 2000 + 1400 + 94; + await harness.update(() => resizeAll()); + await harness.idle(); + + // Then: the head stays at the top and the jump chip appears instead. + assert.equal(element.scrollTop, pinned); + assert.equal(anchor().anchored, false); + assert.equal(anchor().latestBelowFold, true); + } finally { + await close(); + } +}); + +test("after a pin only a reader's own scroll to the bottom resumes following (BUG-1044)", async () => { + const { harness, close, element, head, anchor } = await pinnedRectificationTurn(); + try { + head.offsetHeight = 1400; + element.scrollHeight = 2000 + 1400 + 94; + await harness.update(() => resizeAll()); + await harness.idle(); + assert.equal(element.scrollTop, 2000 - PIN_SPACE); + + // When: the reader wheels down to the bottom. + await harness.update(() => { + element.dispatch("wheel", { deltaY: 900 }); + element.scrollTop = element.scrollHeight; + element.dispatch("scroll"); + }); + await harness.idle(); + assert.equal(anchor().anchored, true); + assert.equal(anchor().latestBelowFold, false); + + // Then: further growth is followed. + head.offsetHeight += 400; + element.scrollHeight += 400; + await harness.update(() => resizeAll()); + await harness.idle(); + assert.equal(element.scrollTop, element.scrollHeight - VIEWPORT); + } finally { + await close(); + } +}); + +test("after a pin a touch drag upward releases the pin without following (BUG-930 kept)", async () => { + const { harness, close, element, head, anchor } = await pinnedRectificationTurn(); + try { + await harness.update(() => { + element.dispatch("touchmove"); + element.scrollTop -= 300; + element.dispatch("scroll"); + }); + await harness.idle(); + assert.equal(anchor().anchored, false); + const readingAt = element.scrollTop; + + head.offsetHeight = 1400; + element.scrollHeight = 2000 + 1400 + 94; + await harness.update(() => resizeAll()); + await harness.idle(); + assert.equal(element.scrollTop, readingAt); + assert.equal(anchor().latestBelowFold, true); + } finally { + await close(); + } +}); + +test("clicking inside the transcript is not a scroll gesture (BUG-1044)", async () => { + const { harness, close, element, head, anchor } = await pinnedRectificationTurn(); + try { + // A tap on a button in a message (copy, thinking toggle) bubbles pointerdown to the scroller. + await harness.update(() => { + element.dispatch("pointerdown", { target: head }); + element.dispatch("scroll"); + }); + await harness.idle(); + head.offsetHeight = 1400; + element.scrollHeight = 2000 + 1400 + 94; + await harness.update(() => resizeAll()); + await harness.idle(); + assert.equal(element.scrollTop, 2000 - PIN_SPACE); + assert.equal(anchor().anchored, false); + } finally { + await close(); + } +}); + +test("switching the hook off and on (starter home, rectification surface) detaches and re-attaches", async () => { + const { harness, close } = setup(); + try { + let scroller: FakeScroller | null = null; + const props = { + loading: false, + resetKey: "session-1", + geometry: () => ({ scrollHeight: 1200, clientHeight: VIEWPORT, tail: row(900, 276, () => null) }), + onScroller: (value: FakeScroller | null) => { scroller = value; }, + onAnchor: () => undefined, + }; + await harness.render(); + await harness.idle(); + const element = scroller as unknown as FakeScroller; + assert.equal(element.listeners.get("scroll")?.size ?? 0, 0); + await harness.render(); + await harness.idle(); + assert.equal(element.listeners.get("scroll")?.size, 1); + await harness.render(); + await harness.idle(); + assert.equal(element.listeners.get("scroll")?.size ?? 0, 0); + } finally { + await close(); + } +}); + +test("scroll keys count as a reader gesture only outside text fields and buttons", () => { + const target = (match: string | null) => ({ closest: (selector: string) => (match && selector.includes(match) ? {} : null) }); + const key = (value: string, over: Partial = {}) => ({ + key: value, target: target(null), altKey: false, ctrlKey: false, metaKey: false, ...over, + }) as unknown as KeyboardEvent; + assert.equal(isScrollKeyGesture(key("PageDown")), true); + assert.equal(isScrollKeyGesture(key("End")), true); + assert.equal(isScrollKeyGesture(key(" ")), true); + assert.equal(isScrollKeyGesture(key("a")), false); + assert.equal(isScrollKeyGesture(key("Enter")), false); + assert.equal(isScrollKeyGesture(key("ArrowDown", { target: target("textarea") as unknown as EventTarget })), false); + assert.equal(isScrollKeyGesture(key(" ", { target: target("button") as unknown as EventTarget })), false); + assert.equal(isScrollKeyGesture(key("PageDown", { target: target("button") as unknown as EventTarget })), true); + assert.equal(isScrollKeyGesture(key("ArrowDown", { metaKey: true })), false); +});