Files
Jyotisha/docs/tasks/PROGRESS-ui-kit-onboarding-fix-20261026.md
T

15 KiB
Raw Blame History

进度:组件库与启程事后修复(2026-10-26)

分支 codex/ui-kit-onboarding-fix-20261026。只推这个分支。验收通过前不合进测试环境。承载 issue #111。BUG 从 1444 起。

U1 · 桌面加载不再把整页卸掉再挂上(BUG-1448)

侧栏和主区始终在各自的容器里。拖宽用侧栏里的把手,宽 200–360,默认 288,拖到比 200 更窄收成 64。本命盘加在对话列旁边,不把对话列挪进后到达的分栏里。

检查 命令 结果
挂载与相关合同 node node_modules/tsx/dist/cli.mjs --test tests/shell-frame-stable-mount.test.tsx tests/sidebar-contract.test.ts tests/chat-chart-panel-state.test.ts tests/class-name-definition-contract.test.ts 52 通过,0 失败,退出码 0

断言三栏(sidebar-contract.test.ts「selects desktop and tablet shell widths」):原值是网格列分出 288 / 240 / 64,并检查 minSize={SIDEBAR_WIDTH_MIN}。新值检查横向 flex、shell-sidebar-slot / shell-main-slot,以及宽度上下限常量。原因是可拖面板不再包住整页,页面在分栏到达或跨断点时不再卸载。

全量 npm test、npm run build、npm run test:db、Python 快速门留到本单全部改完再跑。

U2 · 中英切换能看出选中(BUG-1449)

报告语言、导出语言、合盘语言,以及导出的「整篇 / 自选」,选中项改认页签自己的标记。边框和文字用主题色,背景保持中性。

检查 命令 结果
选中态 node node_modules/tsx/dist/cli.mjs --test tests/language-switch-selected.test.tsx;同一命令再跑 tests/report-buttons-scope-20260928.test.ts tests/class-name-definition-contract.test.ts 1 通过;随后 9 通过。两轮都是 0 失败,退出码 0

断言三栏(report-buttons-scope-20260928.test.ts):原值选中规则只认 aria-checked="true"。新值认 data-active 或 aria-selected="true"。原因是页签不设 aria-checked,旧规则对不上。

U3 · 没有待出提示时不再扫整页(BUG-1450)

提示都看过、清单已关、或当前没有能出的提示时,不挂监听。回答正在生成时不扫描。需要时只盯锚点旁边的容器。

检查 命令 结果
提示监听 node node_modules/tsx/dist/cli.mjs --test tests/onboarding-hint-observer.test.tsx tests/onboarding-checklist-20261022.test.ts 14 通过,0 失败,退出码 0

U4 · 启程动效只在启程里播(BUG-1451)

清单已关不播。还在启程里才播。动画代码没到手或超过 300 毫秒,内容保持可见。

检查 命令 结果
动效范围 node node_modules/tsx/dist/cli.mjs --test tests/onboarding-motion-gate.test.tsx tests/onboarding-motion-20261022.test.ts tests/onboarding-hint-observer.test.tsx 10 通过,0 失败,退出码 0

U5 · 清单关掉不翻报告,完成后会打勾(BUG-1452)

清单已关时只读「是否关掉」。还开着时,报告和合盘改成一次「有没有」。加人、合盘存上或报告完成后,这三项再读一次,不用整页刷新。进站时已经做完、但没有关掉的账户,仍会发这一次「有没有」,因为关闭时间这时不写;不再按人和页翻。

检查 命令 结果
拉取与打勾 node node_modules/tsx/dist/cli.mjs --test tests/onboarding-facts-refresh.test.tsx 4 通过,0 失败,退出码 0

U6 / U7 · 拖动排序一次写完,新对话仍在上面(BUG-1453)

会话和档案的排序各改成一个请求。数据库在一次事务里写完整组,任何一行不属于当前用户就整组不动。没拖过的对话按最近活跃排在上面,拖过的排在下面。

检查 命令 结果
一次请求与新对话位置 node node_modules/tsx/dist/cli.mjs --test tests/order-batch.test.ts;同命令再跑 tests/session-groups.test.ts tests/people-archive-order.test.ts order-batch 5 通过,0 失败,退出码 0。排序与档案 16 项通过,0 失败
真库写入后重读 node node_modules/tsx/dist/cli.mjs --test tests/database-order-batch.test.ts 1 通过,0 失败,退出码 0

断言三栏(database-local-business.test.ts 排序段):原值只核对两列存在,以及 authenticated 能更新 archive_order。新值多核对整组顺序的迁移已应用、不在 frontend/db/migrations,以及两个函数只给 authenticated 执行。原因是 U6 要一次事务写完整组,列的语义不改。

U9 · 类名只用一份,验证码输入钉住版本(BUG-1454)

组件改回原来的类名函数。验证码输入钉在 1.5.0。锁文件里 150 个包的地址改回官方源。命令行工具自带的旧类名包还在,页面不引用。

检查 命令 结果
依赖卫生 node node_modules/tsx/dist/cli.mjs --test tests/dependency-hygiene-20261026.test.ts 1 通过,0 失败,退出码 0

U10 · 被放宽的点按检查改回来

没有新的产品故障,所以没有新的 BUG 编号。页面上多出来的只有两处为了让测试能点到真组件:登录图标在测试运行器里也能画出来;登录请求改为每次发送时再使用当前的网络函数,正式页面仍走原来的登录。

检查 原来 现在
星盘类型 只核对源码里有抽屉 点 D60 关闭,再打开后按 Esc 关闭,只选中这一次
导出抽屉 关闭和宽度断言被拿掉 Esc 关一次,点遮罩再关一次,右侧最宽 520px,底部 85dvh
登录 没有输入邮箱、发码、输码的测试 填邮箱、勾选同意、发码、六格填入验证码、验证后进入首页
大运折叠 打开标记用「不少于」 每一条当前大运的标题和内容各一个打开标记,数量正好是条数的两倍
外观 到共享菜单文件里找勾 菜单自己画出三选一,只有「跟随系统」带勾
账户设置 用源码正则核对栏目 打开后看见三个栏目,账单可以是当前页,表单宽度类名仍在

断言三栏(大运打开次数):原值 open.length >= currentCount。新值 open.length === currentCount * 2。原因是每一条当前大运的折叠根和内容面板各写一次打开标记,数量可以数清。

检查 命令 结果
这六处加上登录动作 node node_modules/tsx/dist/cli.mjs --test 盘型、导出、星盘页、账户、外观、登录、登录动作 62 通过,0 失败,0 取消,退出码 0

U11 · 人物目录没到时不当成没建完档

没有新的产品故障,所以没有新的 BUG 编号。这三处里,目录这一处已经按「未知」处理。月亮星座和天空副句的星座,首页手里没有现成资料,不能新发请求,也不能编一个星座。

人物目录还没回来时,不再把它当成「没有别人」。只有名字、盘在别人名下的账户,不会在揭幕后闪出「看谁的盘」,热启动也不会因此改走冷路径。目录确实是空的,仍然算没建完档。揭幕会等到目录回来再显示,所以不会先闪一屏再改口。

起步第一问的「只有月亮」那一档,句子本来就会写。星座目前只从今日星语记住。没有出生分钟时,今日星语不请求。账户、档案、本命盘缓存里都没有月亮星座。星盘页那份结果要有分钟才会有,而且上升和月亮一起都有,对不上「只有月亮」。按任务书不能为了这一问再发请求,也不能临时编一个星座。所以这一档在第一次进首页、又没有分钟时,仍然走不到。有分钟时,今日星语回来后,上升和月亮两档照旧会写上。

帮别人看的天空副句,句子是「那一刻,{名字}的上升在{星座}」。名字在,上升星座不在,这一行就不显示,原来的天空句子照常播。上升同样只在已有的星座记录里,没有就空着。没有为了这一行再排一次盘。

检查 命令 结果
目录未知、已知空列表、副句,以及被改到的首页合同 在 frontend 下 node node_modules/tsx/dist/cli.mjs --test:home-warm-snapshot、onboarding-intake-20261022、home-first-load-20260930、home-bootstrap-run、composer-isolation-contract、chat-composer-queue、birth-time-consultation-consent、home-shell-growth-contract 75 通过,0 失败,0 取消,退出码 0

断言三栏(引导页是否预载):原值是目录还没到也按空列表预载。新值是已知空列表才预载,未知不预载、步骤停在称呼。原因是未知不能当成没建完档。

断言三栏(输入框标签和禁用):原值认 onboardingStep。新值认 shownOnboardingStep,并在目录未到时不收起输入框。原因同上。称呼和发送的两句文案没改。

顺手项

没有新的产品故障,所以没有新的 BUG 编号。

  • 测试用的文档只在需要文档的测试里安装。做服务端渲染的七个测试文件不再因为导入测试工具就装上文档。
  • 外观菜单里已经没人用的 .theme-menu-check 删了。选中勾仍由菜单自己画出来。
  • 校正里选了「这题跳过」时,停止按钮呈选中。
  • 六个没有入口的旧校正组件删了:引导轮、旧选项题、候选结果、证据草稿、旧校正页、更早的旧校正页。首页不再预热其中那一页。
  • 提示和星盘圆点按每一项分开,不再共用同一个键。
  • 清单「去做」在版本一致时走页面内跳转。版本对不上时仍整页打开。
  • 点第三问把输入框点亮后,离开页面会把计时器清掉。
检查 命令 结果
上面这几处,加上首页行数和外观菜单 在 frontend 下 node node_modules/tsx/dist/cli.mjs --test 跑清单、校正表面、清单刷新、首屏揭幕、滚动、输入法、字数、旧引导、起步问、首页行数、外观、首屏屏、起步页、提示监听、分栏挂载 85 通过,0 失败,0 取消,退出码 0

类型检查和 lint

没有新的产品故障,所以没有新的 BUG 编号。报告列表换人时不在渲染里改引用,和 BUG-620 是同一条规矩。

  • 四处测试只有类型不过:语言切换的循环变量、登录邮箱赋值、清单刷新的路由桩缺 bfcacheId、动效测试读透明。断言没改。动效仍是「失败或太慢时不能藏起来」。
  • 侧栏拖宽把手改成组件库按钮。样子仍是 6px 透明细条。
  • 报告列表记住「这份名单属于谁」。换人之后,上一位还在写的报告不会被当成这一位刚写完。
  • 删掉已经没人用的类名 birth-time-evidence-receipt。原值在白名单里。新值删掉。原因是旧校正组件删了,这个类名没人用了。
检查 命令 结果
类型检查 在 frontend 下 node_modules\.bin\tsc.cmd --noEmit 退出码 0
lint 在 frontend 下 npm run lint 退出码 0,0 error,122 条原有 warning
类型那四个文件 node node_modules/tsx/dist/cli.mjs --test 语言切换、登录、清单刷新、动效 8 通过,0 失败,0 取消,退出码 0
把手、导出、报告列表、按钮样式、白名单规则 同上,六个文件 31 通过,0 失败,0 取消,退出码 0
类名白名单 同上,class-name-definition-contract.test.ts 3 通过,0 失败,0 取消,退出码 0

全量 npm test 这次是在改文件的同时跑的,不能当作交回数字。5208 项,通过 5176,失败 32,取消 0,退出码 1。32 条里,13 条是 Windows 已知的数据库名单。birth-time-evidence-receipt 是上面已修的那条。启程阶段那条「300 毫秒内出现第一行」在全量里没赶上,单独重跑通过。其余是 Windows 上旧的双盘符路径、Skill 符号链接、部署脚本和临时目录被占。交回前会再跑一遍干净的全量。

真机步骤写进 docs/testing/ui-kit-migration-20261023.md 和 docs/testing/onboarding-journey-20261022.md 的「事后修复(2026-10-27)」。桌面加载不闪、中英能看出选中、老用户没有启程动画,这三项还没有登录态浏览器记录。

干净全量是在 7f6b7b575 上跑的。npm test:5208 项,通过 5175,失败 33,取消 0,退出码 1。

失败 条数 怎么看
tools/agent-loop/windows-known-failures.txt 里的 13 条 13 Windows 上本来就过不了的库和备份检查
双盘符 G:\G:\、Skill 路径反斜杠、工作流 YAML 退出码 9009、部署脚本、临时目录被占 16 以前的进度里就有的 Windows 环境缺口。相关文件这张单没改
注销和校正标题两条真库 2 临时目录的库槽被占(EPERM)。不是这张单的断言
第一行进度要在 300 毫秒内、查找不重置回答时钟 2 全量里机器忙时没赶上。这两个文件单独重跑,17 通过,0 失败,退出码 0

birth-time-evidence-receipt 已不在失败名单里。全量里「本机 PostgreSQL 应用已审业务表并完成登录后的业务调用」通过。任务书要求的 npm run test:db 还要单独跑。

首屏体积(U8)

口径:npm run build 之后,.next/server/app/index.html 引用的 /_next/static/*.js 和 *.css,去重后每个用 gzip -9,字节相加。基线是 0f66d92d4,在另一棵工作树里用当时的锁文件 npm ci 再构建。两次构建的 / 都是 ○ Static。skill-package-registry.ts 的 5 条追踪警告两边都有,这次没改那份文件,也没改 next 配置。

版本 文件 gzip-9 js css 相对基线
基线 0f66d92d4 36,缺失 0 646201 575350 70851 —
延后加载之前 39,缺失 0 717631 636112 81519 +71430,+11.05%
延后加载之后 38,缺失 0 694941 613422 81519 +48740,+7.54%

延后加载之前那次构建在 521e902f3。超过 2% 之后,启程清单、一次性提示和启程动效宿主改成页面出来后再载入,不占位、不转圈。这一步少了 22690 字节。相对基线仍是 +7.54%,还在 2% 外面。多出来的是组件库外壳和整站样式,不是这三块还留在首屏里。

数据库和 Python 快速门

npm run test:db:93 项,通过 80,失败 13,取消 0,退出码 1。13 条失败和 tools/agent-loop/windows-known-failures.txt 逐条同名,没有多出来的。「本机 PostgreSQL 应用已审业务表并完成登录后的业务调用」通过。「order batch rereads the caller's rows and leaves the group unchanged when one id is foreign」通过。

Python 快速门 run_quality_gate.py --profile quick:pytest 通过,用了 1350.7 秒。接着它又跑了一次 npm test,退出码 1,所以整道门退出码 1。这次是 5208 项,通过 5178,失败 30,取消 0。

失败 条数 怎么看
上面那份 Windows 已知名单 13 逐条同名
双盘符、Skill 反斜杠、工作流 YAML 退出码 9009、部署脚本、临时目录被占 16 和干净全量里那 16 条同名。相关文件这张单没改
查找不重置回答时钟 1 全量里机器忙时没赶上。这个文件相对 staging 没改。上次单独重跑已通过

上次干净全量里另外 3 条(注销库槽被占、校正标题库槽被占、第一行要在 300 毫秒内)这次通过了。没有新的产品故障。