Files
Jyotisha/docs/tasks/PROGRESS-home-sidebar-rerender-20261013.md
T
jesse-uxandGrok (agent loop) 6a94edf200 让充值入口的旧检查认侧栏的新写法
账户菜单里点充值,仍然打开充值面板,来源仍是账户菜单。只改了这一条按源码对照的检查,业务代码没动。tsc 通过,lint 0 个错误(125 条原有警告),这条检查 13 通过、0 失败。

Co-Authored-By: Grok (agent loop)
2026-10-14 07:53:38 +08:00

5.4 KiB
Raw Blame History

PROGRESS · 流式回答时侧栏不再跟着每帧重画(issue #59)

  • 分支:codex/home-sidebar-rerender-20261013
  • 实际基线:origin/staging 66cd60081f37a57680274633fcb3fb942d01bb2f
  • 任务书基线写成 77057a819,计划评论里的 base 是 2994588ad4d858dead4835943e5883c5aa2b03f8。开工时远端 staging 已是上面的 66cd6008。A/B 就跑在这个提交上,没有另开只读工作树(本轮不能离开当前工作树)。方向没有改,不需要拍板。
  • docs/BUG_HISTORY.md 在这个基线上停在 BUG-1322。BUG-1323~1328、1345、1346 属于还没合入的别的分支,本单只用 BUG-1329。
  • 未改 page.tsx。没有运行时开关。没有启用 React Compiler。Skill 版本不变。浏览器 A/B 未跑。

做了什么

外壳拿到的点击函数不再每次渲染换新,点下去仍执行首页刚渲染的那一版。注册只在数据变了才发给侧栏:会话行要逐条还是同一个对象才算没变,没变就不重建行。可见会话按当前人物记忆。侧栏自己的上下文对象也不再每次新建。卸载首页时仍会清掉注册。

断言三栏

位置 原值 新值 原因
frontend/tests/session-list-lifecycle.test.tsx 外壳「打开资料」函数 assert.notEqual(onOpenProfile, initialCallback) assert.equal(...);再改一版后仍是同一个函数,调用记录从 [1] 加强到 [1, 2] 包装函数身份稳定。调用必须落到最新一次渲染,不能只删掉「不相等」

HomeProbe 仍是每次渲染新回调、新数组,没有改成常量。

基线失败(改代码之前,同一测试,3 次,退出码都是 1)

失败停在 assert.equal(duringFrames.registers, 0),实际是 60。60 帧里侧栏提交也是 60。换当前项、改标题、换人各注册 1 次;只改回调版本也会再注册 1 次。剔除函数后的内容摘要:

档 60 帧注册 60 帧提交 60 帧耗时三次(毫秒) 中位 内容摘要
30 条虚构会话 60 60 2774.964 / 2778.961 / 4202.085 2778.961 b18f05a3d83be5b41584787b7c0495f1fcec8ef7b8ecfbdbb3c083c40796c103
100 条虚构会话 60 60 10530.828 / 11799.253 / 12284.103 11799.253 cef0a63d6f3fe72e541f9ac882b8eaf305b6933fdd07ca3002e8cd03bb139d25

更早一次探针把注册函数也做成每次渲染新建,60 帧数到 120 次注册、60 次提交。那是清理函数跟着新函数又清了一次,不是产品路径。交付用的测试和生产一样,用提供者给出的稳定注册函数,所以改前是 60 而不是 120。

改后(同一测试,3 次,退出码都是 0)

档 60 帧注册 60 帧提交 60 帧耗时中位 换当前项 改标题 只改回调版本 换人 内容摘要
30 0 0 0 注册 1、提交 1 注册 1,标题更新 注册 0,调用记到第 4 版 注册 1,列表换成另一人 与改前相同
100 0 0 0 注册 1、提交 1 注册 1,标题更新 注册 0,调用记到第 4 版 注册 1,列表换成另一人 与改前相同

三次摘要都与上表相同。门槛达到:60 帧内注册 0、侧栏提交 0,内容摘要逐字节一致。

自测

检查 命令 结果
类型 node frontend/node_modules/typescript/bin/tsc --noEmit -p frontend 退出码 0
规范 npm run lint --prefix frontend 0 error,126 条原有 warning。本单文件没有新增 warning,没有 eslint-disable
定向测试 tsx --test 下表 10 个文件 tests 94,pass 94,fail 0,cancelled 0
数据库 未跑 本单不碰数据库
浏览器 未跑 浏览器 A/B 未跑。步骤在 docs/testing/home-sidebar-rerender-20261013.md
隐私标记 .venv\Scripts\python.exe -m pytest tests/test_repo_privacy_markers.py -q 通过

定向文件:home-sidebar-rerender、session-list-lifecycle、session-list-provider、sidebar-contract、sidebar-state、secondary-page-entry、account-dialog-inert-20260918、home-shell-growth-contract、home-streaming-render-split、chat-profile-picker。

全量 npm test、next build、Python 快速门未跑,留给验收。

2026-10-14 修复单

按修复单合并了最新 origin/staging。只改了 frontend/tests/chat-navigation-a11y-contract.test.ts 里账户菜单「充值」那一条源码断言,改成认稳定包装的写法,仍然要求打开 billing 且来源是 account-menu。业务代码没有改。

又搜了一遍 onOpenProfile、onOpenGeneral、onOpenLogout、onNewChat、onSelectSession、onLoadMore。测试里其余命中的是侧栏组件自己的入口,或校正点数不足时打开充值,不是这条旧写法,没有改。

和上一版 63509431 比,网页业务目录里多出来的只有合并测试线带入的校正提速(engine-client.ts),不是这单写的。这单自己的提交不碰 frontend/src。

检查 命令 结果
类型 tsc --noEmit -p frontend 通过,退出码 0
规范 npm run lint(在 frontend) 0 error,125 条原有 warning。本单改的测试文件没有新增 warning
这条旧检查 tsx --test tests/chat-navigation-a11y-contract.test.ts 13 通过,0 失败,0 取消

全量 npm test 仍留给验收。