Files
Jyotisha/docs/tasks/PROGRESS-ui-kit-4-people-20261023.md
T
jesse-uxandGrok (agent loop) eee8564b7f
Independent Staging Quality Gate / validate (push) Failing after 9m16s
Independent Staging Quality Gate / publish (push) Skipped
星盘档案可以拖动排序,合盘开始前先确认扣点。
人物卡、菜单、编辑和删除换成组件库。chart_profiles 增加可空的 archive_order,本人始终排在第一。合盘选人页两个名字并排,开始按钮居中,点了先说出点数和余额。

自测:tsc 0;lint 0 error(122 警告,与上一张相同);定向测试通过;next build 后 / 仍是 Static;首页 JS gzip-9 639609,相对 640131 少 0.08%。test:db 79 通过、13 失败,失败名单与 windows-known-failures.txt 一致,排序列断言在通过的那一组。没有浏览器登录态。

Co-Authored-By: Grok (agent loop)
2026-10-25 05:05:00 +08:00

9.2 KiB
Raw Blame History

PROGRESS · 组件库 K4 星盘档案与婚恋合盘(2026-10-25)

工单 #108。分支 codex/ui-kit-4-people-20261023。基线 origin/staging b7ec8e78ed4d280b25f5180cd7302e3ec3ef085c(#107 星盘页已在这个提交里)。只做任务书 K4 星盘档案与婚恋合盘。K5 及之后没做。没有重做星盘页、对话页、侧栏。

结论

人物卡可以拖动排序。刷新、换一台登录的设备,顺序还在。本人始终是第一张,拖不动。合盘选人页两个人并排,窄屏上下排,开始按钮在正中。点开始会先说出将用掉多少点、余额还有多少点。不够时改去补点数。

做了什么

  • 人物卡用 Card 和 CardAction。更多菜单用 DropdownMenu。编辑用 Dialog,表单仍是原来的那一份,没有在表单里再套一层对话框。删除用 AlertDialog。菜单里写「删除」,确认框里仍是「删除这个人」。
  • 拖动排序用 dnd-kit 的网格策略。零件在档案页载入后再出现,不进首页同步包。本人不是 chart_profiles 里的一行,放在可拖的那一组外面。moveArchiveIds 遇到 self 就不动。
  • chart_profiles 只加可空整数 archive_order,默认空,已部署的代码还能读这张表。不删列、不改类型、不收紧非空。会话的 sidebar_order 没有再加,语义也没改。只改顺序时不改 updated_at。名单仍按最近更新取出,再在程序里排序:有数字的在前,都没有数字时保持原来的先后。新位置是 10、20、30。
  • 关系用 ToggleGroup,不是页签。性别也是同一排标签,所以能离开白名单。空的关系在名单上仍显示「其他」,再点这一项会写入。性别再点已选中的一项不会改值,「不填」仍存空。标签和读屏名称都留着。
  • 合盘选人页去掉页内标题和副标题。两个 Select 左右并排,中间是 Lucide 的叉,aria-hidden。窄屏上下排,叉仍显示并居中。开始按钮用 HeartHandshake,不用 Sparkles,上面不写价格。点了才弹确认:「会用掉 N 点,余额 M 点。」按钮是「取消 / 开始」。不够时说「需要 N 点,余额只有 M 点。」,主按钮换成「去补点数」。N、M 从计价表和账户读。计价或余额读不到时不弹空确认,只说「计费配置不可用」,也不再发出生成请求。这比原来的按钮更严:原来计价未知时仍可以点。扣点仍发生在服务端生成报告时。删人后合盘和报告仍走原来的删除接口。
  • 合盘报告的返回改成图标加「婚恋合盘」。语言用页签。追问仍是原来的八节。标题里的 × 还在,第一次打开时两个头像靠拢仍按这个标题拆。减少动态效果时仍只淡入。
  • people-home-links.tsx 没有改。首页仍只从这里拿账户深链和合盘深链。
  • 白名单去掉 7 个文件,没有加长,测试里写死的基线名单没有改。
  • 没有改 .gitea/**,没有改生产部署,没有给 scripts/jyotish_api_server.py 加方法,没有改 page.tsx。Home() 的 useState / useRef 没有增长。

断言改动(原值 / 新值 / 原因)

位置 原值 新值 原因
人物卡个数 class="people-archive-row" 的个数 完整的 data-slot="card" 个数,不含 card-action 人物卡改用 Card。CardAction 的槽位名字以 card 开头,不能算成另一张卡
当前人物 按 <li> 切开 只按完整 data-slot="card" 切开 同上。本人仍是第一张
添加按钮 + 添加一个人,到顶是 disabled 仍写「添加一个人」,到顶是 aria-disabled,没有 disabled 加号改用图标。到顶仍可点,用来弹出限额提示
返回 按钮里是 ‹,类名后 240 字内是「返回」 类名 people-archive-back 后 800 字内是「返回」 箭头改用图标,图标 SVG 比一个字符长
本人脚注 类名后 500 字内是「编辑」 1600 字内是「编辑」 编辑改用 Button,组件库样式写在同一个 class 里
关系选项 编辑态静态 HTML 里有「孩子」 字段渲染关系词表,词表里仍是 child: "孩子" 编辑放进对话框,传送门不进静态 HTML
性别 role="radio" 按钮的 aria-pressed;再点已选项由 genderChoice 决定不改 性别改成同一排标签
合盘副标题 开关未返回时静态 HTML 有副标题 源码和静态 HTML 都没有这句 顶栏已经有页名
合盘可访问名称 写死 aria-label="第一个人" label="第一个人" / label="第二个人",触发器 aria-label={props.label} 两个选择框共用一个组件,名字仍是这两个词
开始按钮 下面写「生成一份完整合盘报告,用掉 N 点。」,图标是 Sparkles 按钮上不写价格;确认句是「会用掉 N 点,余额 M 点。」和「需要 N 点,余额只有 M 点。」;图标是 HeartHandshake 先确认再生成。价格从计价表读
报告返回 ‹ 婚恋合盘 链接仍是 /synastry,文字是「婚恋合盘」,源码有 ChevronLeft 去掉手写箭头。标题里的 × 还在
编辑表单接线 editing ? ( 紧跟表单 中间可以先是 Dialog,400 字内仍是表单 编辑改用对话框
排序列 只核对会话的 sidebar_order 同时核对 chart_profiles.archive_order 可空、可更新,且不复制到旧迁移目录 只加一列,对已部署代码向后兼容
白名单 含这 7 个档案和合盘文件 这 7 个移出 它们已经改用组件库。名单只许变短

移出的 7 个文件:chart-profile-form.tsx、people/people-page.tsx、person-relation-field.tsx、profile-gender-field.tsx、synastry/synastry-add-dialog.tsx、synastry/synastry-picker.tsx、synastry/synastry-report-view.tsx。

自测

检查 命令 结果
类型 仓库根 frontend\node_modules\.bin\tsc --noEmit -p frontend 退出码 0
检查 在 frontend 下 npm run lint 退出码 0。122 个警告,0 error。警告数和上一张记下的一样,没有为这一张新加
定向测试 在 frontend 下 node node_modules/tsx/dist/cli.mjs --test 下面列出的文件 先 180 条里 4 条失败,按上面的三栏改完断言后,失败的 4 个文件 43 条全部通过。整批重跑的其余文件在第一次里已通过
构建 在 frontend 下 npm run build 退出码 0。编译 10.7s,TypeScript 55s。/ 仍是 ○ Static。5 条既有 skill-package-registry 警告,没有改
首屏体积 首页 HTML 引用的 /_next/static/**.js,gzip-9 相加,不含 CSS 基线 b7ec8e78(上一张记下的数):36 个文件,640131 字节。本张:36 个文件,缺失 0,639609 字节,少 522(-0.08%)。±2% 大约是 627329 到 652933。dnd-kit、dropdown-menu、people-page、people-archive-sortable 命中都是 0
数据库 在 frontend 下 npm run test:db 92 条,通过 79,失败 13,取消 0。失败的 13 条名字与 tools/agent-loop/windows-known-failures.txt 逐条一致,没有多出来的。排序列断言在通过的「local PostgreSQL applies the reviewed business schema」里。退出码是 1,因为这 13 条在 Windows 上本来就会失败,不写成整套通过

定向测试文件:adopted-birth-date.test.ts、chart-birth-editor-and-report-table.test.tsx、chart-library-other-profile.test.ts、chat-session-url.test.ts、consultation-entrypoint.test.ts、loading-motion-20260930.test.tsx、onboarding-checklist-20261022.test.ts、people-archive-order.test.ts、people-archive-regressions.test.ts、people-archive-view.test.tsx、profile-gender-20260927.test.ts、profile-gender-ui-20260927.test.tsx、profile-onboarding-birth-sky-reveal.test.ts、self-edit-people-20260928.test.tsx、settings-mvp-contract.test.ts、synastry-full-report.test.ts、synastry-report-surface.test.ts、ui-kit-whitelist.test.ts。

没有跑前端全量 npm test,没有跑 Python 快速门。tests/test_repo_privacy_markers.py 退出码 0。page.tsx 和 scripts/jyotish_api_server.py 没有改。

偏离

  • 决策 D7 说长相尽量不变。K4 写明人物卡、网格排序和合盘选人页的新样子,以 K4 为准。左栏仍是 18–22rem,所以桌面上卡片多半排成一列;手机上的列表最宽 640px,宽一点会排成两列。排序用的是网格策略。
  • 决策 D9 说能用页签就用页签。K4 写明关系用 ToggleGroup。性别也用同一排标签,这样能离开白名单,而不是再做一套页签。
  • 计价或余额读不到时,不再允许直接生成。原来的按钮在价格未知时仍会提交。确认框不能空着说一个编出来的价格。
  • people-home-links.tsx 没有改界面。首页不从档案页拿拖动排序。
  • 编辑对话框在静态渲染里挂不进页面。合同改为源码接线和直接渲染表单字段。删除确认的句子仍在源码里。

环境缺口

  • 没有登录态。没有在浏览器里拖过人物卡,也没有点过开始合盘。不写成通过。可照做的步骤在 docs/testing/ui-kit-migration-20261023.md 的「星盘档案」和「婚恋合盘」两节。