#111 第 3 轮:建档不退回加载、右栏能拖宽、清单不迟到、月亮问句与别人的上升句(BUG-1455~1459)

- 建档重读人物名单时保留旧名单,失败也不卡在加载画面(BUG-1455)
- 对话右栏改用自己的拖宽把手,侧栏与右栏都能用方向键(BUG-1456/1457)
- 启程清单胶囊和首页一起出来,读状态时用上次的样子占位(BUG-1458)
- 起步第一问与别人的天空过场读一次已算好的星盘取星座,上升只在不会换座时用(BUG-1459,产品 10-27 同意)
- 补回删减的断言与三栏说明;登录代码改回原样,替身放进测试;删旧校正画面的无用样式
- 首屏 +7.54% 产品已接受,写进 DESIGN

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LutgzyJqNhPpZy1nFsJtN3
This commit is contained in:
Jesse_Chen
2026-10-27 10:24:57 +08:00
co-authored by Claude Opus 5.5
parent 75cf7ad0e0
commit de9d4826c1
35 changed files with 1005 additions and 183 deletions
+80
View File
@@ -19802,3 +19802,83 @@
- 复发自:无
- 修复版本:分支 `codex/ui-kit-onboarding-fix-20261026`。
## BUG-1455 | 给别人建档后整个聊天页退回「正在载入账户」
- 状态:resolved
- 首次发现:2026-10-27
- 最近更新:2026-10-27
- 影响面:新手建档时选「帮别人看」的账户。首页聊天。
- 用户现象:填完别人的名字,或补完别人的出生地点,整个聊天页被换成「正在载入账户」。那次重新读名单失败时,页面一直停在加载画面。
- 触发条件:建档选「帮别人看」,提交名字,或提交出生地点。
- 根因:首页的加载判断要求人物名单已就绪。建档这两步先把名单作废,就绪标记跟着变回「没就绪」,于是已经揭幕的页面又回到加载画面。名单只在页面挂上时重试一次,失败就不再读。
- 修复:建档改用「重新读名单」:旧名单留着,新名单到了再换。读失败时保留原来那份完整名单,不换成只有本人的降级名单。换账户时仍然整个作废。
- 验证:`frontend/tests/subject-catalog-refresh-20261027.test.ts` 3 通过。重读期间就绪标记一直为真;重读失败后名单还在;建档代码不再作废名单。
- 防复发:上面的测试。已揭幕的页面不得因为重读名单回到加载画面(AGENTS §6)。
- 相关记录:BUG-1448。issue #111 第 2 轮验收第 1 条。
- 复发自:无
- 修复版本:分支 `codex/ui-kit-fix3-20261027`。
## BUG-1456 | 对话右侧本命盘拖不动宽度
- 状态:resolved
- 首次发现:2026-10-27
- 最近更新:2026-10-27
- 影响面:桌面首页对话右侧的本命盘栏。
- 用户现象:右栏左缘的把手拖不动,拖到最窄也不会收起。读代码判断,没有在浏览器复现。
- 触发条件:桌面打开右侧本命盘,拖它的左缘。
- 根因:为了不让聊天列跟着右栏载入整列重挂(BUG-1448),聊天列被移出了分栏组。组里只剩右栏一个面板,把手两边没有可交换的面板,拖宽和收起都不会触发。
- 修复:右栏不再用分栏组。左缘换成自己的拖宽把手:按住拖动改宽度,拖到最窄以下收起,聊天列仍在右栏外面。
- 验证:`frontend/tests/drag-width-handle-20261027.test.tsx` 5 通过。拖动依次报出宽度,超出最宽时停在最宽,拖到最窄以下收起一次,松手后监听移除。`frontend/tests/shell-frame-stable-mount.test.tsx` 仍通过,聊天列不重挂。
- 防复发:上面的测试。`frontend/tests/chat-chart-panel-state.test.ts` 改为要求右栏用这个把手(三栏说明在测试里)。浏览器手感留给 `docs/testing/ui-kit-migration-20261023.md`。
- 相关记录:BUG-1448。issue #111 第 2 轮验收第 2 条。
- 复发自:无
- 修复版本:分支 `codex/ui-kit-fix3-20261027`。
## BUG-1457 | 侧栏和右栏的拖宽把手不能用键盘调
- 状态:resolved
- 首次发现:2026-10-27
- 最近更新:2026-10-27
- 影响面:桌面侧栏右缘、对话右栏左缘。
- 用户现象:用 Tab 移到把手上,按左右方向键没有反应,读屏也读不出它是分隔条、现在多宽。
- 触发条件:只用键盘操作。
- 根因:组件库换外壳时,侧栏把手换成了只听鼠标的按钮,原来分栏组件带的方向键支持一起没了。
- 修复:两个把手共用一个拖宽钩子:左右方向键每次 16 像素,Home / End 到最窄 / 最宽,键盘不会把栏收起。读屏读作竖向分隔条,带当前宽度和范围。
- 验证:`frontend/tests/drag-width-handle-20261027.test.tsx`:方向键改宽度并阻止页面滚动,其他键不处理,分隔条属性齐全;侧栏用同一个钩子。
- 防复发:上面的测试。
- 相关记录:BUG-1456。issue #111 第 2 轮验收第 3 条。
- 复发自:无
- 修复版本:分支 `codex/ui-kit-fix3-20261027`。
## BUG-1458 | 启程清单在首页出来之后才冒出来
- 状态:resolved
- 首次发现:2026-10-27
- 最近更新:2026-10-27
- 影响面:还没关掉启程清单的账户,首页聊天顶栏。
- 用户现象:首页揭幕后过一会儿,顶栏右边才多出启程清单,旁边的东西跟着挪一下。
- 触发条件:进首页,清单还开着。
- 根因:为了压首屏体积,清单整块改成揭幕后再载入,而且不给占位。清单要不要显示,本来就要等账户的启程状态读回来,再加上这次延后,就在揭幕后出现了第二次变化。
- 修复:清单的外观(进度圈和一行字)不再等弹层代码:显示时先画外观,弹层载入后才能点开。读启程状态的这段时间,用这台浏览器上次看到的外观先占住位置;读回来说不显示,就拿掉,并删掉那份记录。从没见过清单的浏览器不占位。
- 验证:`frontend/tests/onboarding-checklist-slot-20261027.test.tsx` 2 通过。`frontend/tests/onboarding-checklist-20261022.test.ts` 改为要求首页用这个占位(三栏说明在测试里)。
- 防复发:上面的测试。
- 相关记录:issue #111 第 2 轮验收第 6 条。
- 复发自:无
- 修复版本:分支 `codex/ui-kit-fix3-20261027`。
## BUG-1459 | 起步第一问走不到「只有月亮」,给别人看时天空过场不说上升
- 状态:resolved
- 首次发现:2026-10-26
- 最近更新:2026-10-27
- 影响面:新手首页的起步三问;给别人建完档后的「那一刻的天空」过场。
- 用户现象:没有出生分钟的人,第一问总是「从我的盘看,我是个什么样的人」,不会说「月亮在……」。给别人建档后,过场下面没有「那一刻,{名字}的上升在……」。
- 触发条件:出生时间不到分钟(大概时段或不知道);或者给别人建档。
- 根因:两处的星座都只从今日星语取。没有出生分钟时不请求今日星语,给别人看时也不请求,所以星座永远是空的。原任务书不许新增请求,执行方就没做。
- 修复:产品 10-27 同意为此多读一次已算好的盘。起步三问和别人的天空过场在需要时读一次星盘页同一份结果(之后打开星盘页直接复用),每人每次打开只读一次。上升只在出生时间范围内不会换座时才用;会换时第一问只说月亮,过场不加上升句。读不到就保持原来的说法,不转圈、不报错。
- 验证:`frontend/tests/starter-chart-signs-20261027.test.ts` 3 通过(真实引擎金样)。上升确定 / 会换 / 不知道三种都对;别人的盘不会被当成本人的;同一人第二次不再请求;读失败时第一问保持原来的说法,且不反复重试。
- 防复发:上面的测试。读取在用到时才载入,首页首屏不带这段代码。
- 相关记录:BUG-1444(上升会不会换)。issue #96、#111 U11 第 2、3 项。
- 复发自:无
- 修复版本:分支 `codex/ui-kit-fix3-20261027`。
@@ -0,0 +1,50 @@
# 进度:组件库修复第 3 轮(issue #111,Claude 直接执行,2026-10-27)
- 修复清单:`TASK-ui-kit-onboarding-fix-20261026.md` 末尾「第 2 轮验收」第 1~7 条,加 U11 第 2、3 项。
- 产品决定(#111,2026-10-27):由 Claude 来修;首屏 +7.54% 接受;为 U11 第 2、3 项允许多读一次已算好的盘。
- 分支 `codex/ui-kit-fix3-20261027`,从 `codex/ui-kit-onboarding-fix-20261026`(`365a623fc`)开出,先合并 `origin/staging`(`9ca933968`,含 #112)。
- BUG 编号:#112 已占 1444~1447。#111 分支原来的 1444~1450 合并时顺延为 1448~1454,本轮新增 1455~1459。
## 逐条
| # | 内容 | 结果 | BUG |
| --- | --- | --- | --- |
| 1 | 建档后整页退回「正在载入账户」 | 建档改用 `refreshSubjectCatalog()`:旧名单保留到新名单到;重读失败保留原来的完整名单。换账户仍用 `invalidateSubjectCatalog()` | 1455 |
| 2 | 对话右栏拖不动 | 右栏不再用分栏组,左缘换成 `useDragWidth` 把手;拖到最窄以下收起。聊天列仍在右栏外,不重挂 | 1456 |
| 3 | 侧栏把手没有键盘 | 侧栏和右栏共用 `useDragWidth`:左右方向键 16px、Home / End,键盘不收起;`role="separator"` 带宽度 | 1457 |
| 4 | 删减断言没写三栏 | 「关闭导出」点按补回;选盘型的源码守卫补回;旧校正组件那条删除补写三栏 | — |
| 5 | 为测试改了线上登录代码 | `modules/identity/client.ts`、`email-otp-login.tsx` 改回合并基线原样。测试替身放进 `login-code-entry.test.tsx`:加载钩子把 `next/image` 换成组件本身;先装好 fetch 替身再动态导入登录页 | — |
| 6 | 清单揭幕后才冒出来 | 新增 `OnboardingChecklistSlot`:胶囊不等弹层代码;读启程状态期间用本机上次的胶囊占位 | 1458 |
| 7 | 无用样式 | 删除旧校正组件独有的 30 个类的规则(`globals.css`、`birth-time-choice.css`),逐个确认 `src/` 无引用、测试无断言 | — |
| U11-2 | 起步第一问「只有月亮」档 | 没有今日星语时读一次星盘页同一份结果;上升只在 `lagnaPrecheck.state === "fixed"` 时用 | 1459 |
| U11-3 | 别人的天空过场上升句 | 过场开始时为别人读同一份结果;上升会换或读不到就不写这句 | 1459 |
## 改动的既有断言(原值 / 新值 / 原因)
| 文件 | 原值 | 新值 | 原因 |
| --- | --- | --- | --- |
| `tests/chat-chart-panel-state.test.ts` | split 里要有 `ResizablePanelGroup`、`collapsible` | split 用 `useDragWidth(`,`onCollapse` 调 `onOpenChange(false)` | 组里只剩一个面板时把手拖不动;聊天列不能进组(BUG-1448),改成不依赖分组的把手 |
| `tests/class-name-definition-contract.test.ts` | 白名单含 `chat-chart-resize-handle` | 删掉这一项 | 这个类现在有自己的样式规则 |
| `tests/onboarding-checklist-20261022.test.ts` | 首页 `<OnboardingChecklistEntry />`,page.tsx 里 dynamic 引入且不给占位 | 首页 `<OnboardingChecklistSlot />`;dynamic 引入在 slot 文件里,带 `loading` | 不给占位导致揭幕后才冒出来(第 6 条) |
| `tests/report-export-drawer.test.tsx` | (365a623fc)没有「关闭导出」点按 | 补回,点了再关一次 | 按钮还在,是最常用的关法 |
| `tests/chart-type-picker.test.tsx` | (365a623fc)没有源码守卫 | 补回 `doesNotMatch(/<dialog\|<button\|ToggleGroup\|role="tablist"/)` | 点按测试拦不住退回手写控件 |
| `tests/birth-time-guided-review-fixes.test.ts` | (365a623fc)整条删除,没写说明 | 补写三栏注释 | 四个旧校正组件已删除,见注释 |
| `tests/onboarding-hint-observer.test.tsx`、`tests/onboarding-motion-gate.test.tsx` | 夹具没有新字段 | 加 `checklistPending: false`、`userId: ""` | 类型新增字段;断言不变 |
## 验收数字(Linux,Node 22)
| 检查 | 结果 |
| --- | --- |
| `tsc --noEmit` | 0 错(构建前后各一次) |
| `npm run lint` | 0 error,122 warning(与 staging 相同) |
| `npm test` 全量 | 5219 项,通过 5143,失败 25,取消 0。25 条与 staging 已知名单逐条同名,没有新增 |
| `next build` | `/` 仍 `○ Static`。第一次构建在本机内存紧张时报「Failed to type check.」且没有任何类型错误,单独重跑通过 |
| 首屏 gzip-9 | 699,664。产品已接受的新基线 694,941(+0.68%);当前 staging 727,735(−3.9%) |
| 隐私标记 `tests/test_repo_privacy_markers.py` | 通过 |
| 数据库 / Python 快速门 | 本轮没动表、没改 `scripts/**` 与根目录 `tests/**`,未跑 |
首屏多出来的约 4.7 KB:合并了 staging 的 #112 页头一句,清单胶囊(进度圈)和拖宽钩子现在在首屏。读星盘那段代码用到时才载入,不在首屏。
## 留给真机
浏览器手感(拖宽、方向键、清单胶囊不跳、建档不退回加载、月亮问句和别人的上升句)写在 `docs/testing/ui-kit-migration-20261023.md`「第 3 轮修复」。
+2 -1
View File
@@ -40,7 +40,8 @@
| `TASK-rectification-explicit-open-20261023.md` | `PROGRESS-rectification-explicit-open-20261023.md` | **明说要校正只回一句话(issue #103)**:找会话直接读一张对服务角色撤权的表、必然失败被吞(真正进行中的也续不上);`candidate_accepted` 被算作进行中挡住入口和提议卡;兜底只给一句话。产品选 C;只改入口口径、经 RPC 找会话、删兜底,不改共享状态集合、不动表。BUG-1423 | 已合入 staging | 分支 `codex/rectification-explicit-open-20261023` |
| `TASK-chart-table-span-20261023.md` | `PROGRESS-chart-table-span-20261023.md` | **星盘页本命 / 月亮行星表挤进左栏(issue #102)**:#87 给表包了 `ChartSymbolHelp` 后跨栏规则失配;根因修法是 `VedicLayout` 用固定整行容器承载表格,跨栏只认容器;加结构断言防复发。BUG-1422 | 已合入 staging | 分支 `codex/chart-table-span-20261023` |
| `TASK-ui-kit-migration-20261023.md` | `PROGRESS-ui-kit-0-base-20261023.md`;`PROGRESS-ui-kit-1-shell-20261023.md`;`PROGRESS-ui-kit-2-chat-20261023.md`;`PROGRESS-ui-kit-3-chart-20261023.md`;`PROGRESS-ui-kit-4-people-20261023.md`;`PROGRESS-ui-kit-5-pages-20261023.md`;`PROGRESS-ui-kit-6-rectification-20261023.md`;`PROGRESS-ui-kit-7-cleanup-20261023.md` | **界面统一换成组件库**:shadcn base-nova(补 `shadcn/tailwind.css`)· Lucide · Motion · react-resizable-panels · dnd-kit · Zustand;lint 拦手写控件(白名单只减不增);对话旁星盘面板;会话、档案拖动排序(动表);长相不变。产品 2026-10-23 拍板 D1~D8;8 个 issue(K0~K7)串行,取代全站动效 #98 #100 #101 | K0–K7 已在测试环境,待验收 | 原型 https://claude.ai/artifact/PGnWsjHhu38KJseEfEMNWG |
| `TASK-ui-kit-onboarding-fix-20261026.md` | `PROGRESS-ui-kit-onboarding-fix-20261026.md` | **组件库 K0~K7 与启程(二)~(四)事后验收**:桌面首屏后整页重挂、中英切换看不出选中、提示层每次 DOM 变化全页扫描、启程动效对所有人生效且会藏内容、清单数据只拉一次、拖动排序 N 个请求与部分失败、缺真库重读测试、首屏超 2%、依赖卫生、补回削弱的测试、启程(二)三处未做 | 执行中(#111,U1–U6、U9、U10、U11 与顺手项已提交;类型检查和 lint 已过) | `codex/ui-kit-onboarding-fix-20261026` |
| `TASK-ui-kit-onboarding-fix-20261026.md` | `PROGRESS-ui-kit-onboarding-fix-20261026.md` | **组件库 K0~K7 与启程(二)~(四)事后验收**:桌面首屏后整页重挂、中英切换看不出选中、提示层每次 DOM 变化全页扫描、启程动效对所有人生效且会藏内容、清单数据只拉一次、拖动排序 N 个请求与部分失败、缺真库重读测试、首屏超 2%、依赖卫生、补回削弱的测试、启程(二)三处未做 | 第 2 轮验收未过,产品 10-27 定由 Claude 修(#111),见下一行 | `codex/ui-kit-onboarding-fix-20261026` |
| `TASK-ui-kit-onboarding-fix-20261026.md`「第 2 轮验收」 | `PROGRESS-ui-kit-fix3-20261027.md` | **#111 第 3 轮(Claude 直接执行)**:建档后整页退回加载(BUG-1455)、右栏拖不动(1456)、把手无键盘(1457)、清单揭幕后才冒出(1458)、月亮档与别人的上升句多读一次星盘(1459);补回删减的断言、登录代码改回、删无用样式;首屏 +7.54% 产品接受 | 待 Claude 独立验收 | `codex/ui-kit-fix3-20261027` |
| —(门禁修复,无新任务书) | `PROGRESS-birth-journey-contract-20261025.md` | **测试分支过不了门禁,网站停在完整数据版(二)**:BUG-1439 出生时间合同;BUG-1440 测试画布;BUG-1441 侧栏流式检查等第一次补画结束再数帧。页面不改 | 已合入 staging,等门禁 | `codex/gate-birth-journey-contract-20261025` |
| `TASK-onboarding-journey-20261022.md` | `PROGRESS-onboarding-1-data-20261022.md`;`PROGRESS-onboarding-2-intake-20261022.md`;`PROGRESS-onboarding-4-motion-20261022.md` | **新用户启程**:建档加「先看谁的盘」(自己 / 帮别人看,本人资料可后补)、人物关系字段、首问免费(服务端原子)、起步三问、启程清单(七项从数据推导,收费项标价,老用户可见)、八条一次性提示(含星盘四页签)、启程流程专用动效。产品 2026-10-22 拍板 D1~D6;动表经产品同意进循环,拆四个 issue 串行。BUG-1420 已被文档去重占用,本轮首问免费记 BUG-1421。(一)T1+T2 在 `codex/onboarding-1-data-20261022`。(二)T3+T4 记 BUG-1431,在 `codex/onboarding-2-intake-20261022`。(四)T7 在 `codex/onboarding-4-motion-20261022` | (一)(二)(三)已在 staging;(四)本分支待验收 | 原型 https://claude.ai/artifact/PcTwMVb9RD611R3qStxv3U |
| `TASK-site-motion-20261022.md` | — | **全站动效**:换页按侧栏方向滑入、选中块跟随、页签、盘型切换星体移宫、换人、翻日期、列表补位、弹窗从触发处长出、抽屉、顶部提示、点数滚动、中英交叉淡入;重写 DESIGN §6(推翻 180 ms 上限与 Spatial Instant),不引动画库,先验证 View Transitions。产品 2026-10-22 拍板;三个 issue,排在启程(三)之后、启程(四)之前;**2026-10-23 被 ui-kit-migration 取代** | 已取代 | 原型 https://claude.ai/artifact/7u9goivnmTNSGTNWNeVMQd |
+12
View File
@@ -117,3 +117,15 @@
2. 打开一份个人报告,切换中文和 English。选中的那个字是主题色,另一个不是。导出抽屉里的语言分段、以及「整篇报告 / 自选章节」,选中的有主题色边框。合盘报告里的语言按钮同样能看出选中。
3. 桌面上拖侧栏右缘。把手仍是一条细缝,不是一枚实心按钮。宽度仍停在大约 200 到 360。拖过最窄就收成窄轨。
4. 在收藏里拖一条会话到另一条上面,只发生一次保存。刷新后顺序还在。别人的会话不会被改到。没拖过的对话仍按最近使用排在上面。档案名单的拖动同样只保存一次;拖失败时整组回到拖之前。
## 第 3 轮修复(2026-10-27,Claude)
没有登录态和浏览器,下面这些没在页面上做过。用自己的账户看,不要把出生资料、邮箱或会话原文写进记录。
1. 新账户建档,选「帮别人看」,填名字、出生日期和时间、出生地。每一步提交后,聊天页都不能整页换成「正在载入账户」。
2. 桌面打开右侧本命盘。拖它的左缘,宽度跟着变,大约 280 到 560。拖过最窄就收起;再点顶栏按钮能重新打开,宽度还是上次的。
3. 用 Tab 移到侧栏右缘和本命盘左缘的把手上,按左右方向键,宽度每次变一点;按到头不会收起。读屏能读出这是分隔条和当前宽度。
4. 启程清单还开着的账户,刷新首页。「启程 n/N」和首页一起出现,不要过一会儿才冒出来,旁边的按钮不要挪。
5. 出生时间只知道大概时段的账户,首问还没用时:第一问是「月亮在……,我是个什么样的人」。上升不会换座的话,是「上升……、月亮……,我是个什么样的人」。
6. 给别人建完档,天空过场下面有「那一刻,{名字}的上升在……」。那个人的出生时间不确定、上升会换座时,没有这一句,过场照常。