Files
Jyotisha/docs/tasks/PROGRESS-people-archive-p1-20260924.md
T
jesse-ux ab6c55f822 feat: keep up to five chart subjects on typed columns
Chart, ephemeris, reports, daily language, consult, and synastry read birth data only through resolveSubjectBirth. The current person is a request parameter outside Home(). /people replaces the settings chart pane, and deleting someone removes that person's chats and reports.
2026-09-25 04:19:05 +08:00

4.0 KiB
Raw Blame History

PROGRESS · 星盘档案 P1(2026-09-25)

基线 origin/staging 4b579af6。分支 codex/people-archive-p1-20260924。没有推 staging。

完成

  • T1:chart_profiles 增加类型化列,从 jsonb 回填,不猜缺字段。删除 role='self' 镜像。他人最多 4 个。reported_birth_time 写入后不可改。客户端不能写 active_*,也不能把状态写成 accepted/confirmed。delete_chart_subject 连带删除该人的对话和报告。
  • T2:星盘、星历、报告、今日星语、合盘都经 resolveSubjectBirth。普通对话的解析函数改为调用它,他人资料读类型化列。列表按 subject 过滤;本人存量会话在 subject=self 下仍可见(会话列为空或 self;报告列是 uuid,本人是 chart_profile_id is null)。
  • T3:当前人物在 current-subject.ts,不进 Home() 状态。SubjectSwitcher 放在对话和各次级页标题旁。已删除 activeChartId / makeDefaultChart。新对话读当前人物。切人时星盘、星历、报告在绘制前清空上一份结果。
  • T4:/people 为侧栏页。设置弹窗不再有星盘资料。?settings=chart 去 /people。「和 TA 对话」打开空对话,「和我合盘」用本人资料起草问题。
  • T5:BUG-1030、CONTEXT、DESIGN、VOICE、CHANGELOG、本文件和真人清单。

让步

  • 迁移先跑、代码后上的窗口里,旧客户端写本人镜像会失败,账户保存仍成功(旧代码吞掉镜像错误)。旧客户端若只改他人 jsonb,已回填的类型化列不跟着改,避免把正在跑的旧写入打成约束错误。窗口结束后以类型化列为准。
  • 生时校正和任意两人合盘按 D12 留 P2。
  • 今日星语请求放在 DailyStarlanguageBinder,随当前人物重取,没有把 store 放进 Home() 的 useState。卡片在 effect 跑起来之前可能仍显示上一张,不会写进错误的缓存键。

验证

  • tsc --noEmit 通过(exit 0)。
  • npm run lint:0 error,127 warning。warning 是既有未使用符号和 effect 依赖,本单没有为消 warning 改业务代码。
  • frontend/src 中 activeChartId、activeChartStorageKey、makeDefaultChart 为 0。
  • Home() useState 33(开工实测 34,上限 36),useRef 37(未增加,上限 37)。page.tsx 1348 行(基线 1417,上限 1567)。
  • 路由:tests/subject-route-birth.test.ts 与 tests/ephemeris-route.test.ts。他人 subject 时星盘和星历引擎收到的是该人的年、纬度;不存在的人不回落本人,星盘 billed: false,报告 POST 409 且 authorizeUsage 未调用。会话列表 subject=self 含 chart_profile_id 为空和 self 的存量行,他人列表只有该人。报告列表同样按人分开。
  • tests/database-chart-subject.test.ts 与同批 subject-birth、chat-profile-picker:17 pass,0 fail。覆盖回填、第 5 个他人被拒、reported_birth_time 不可改、active_* 与 accepted/confirmed 被拒、删除连带会话和报告、跨用户拒绝。
  • 全量 npm run test:db 在 Windows 上会先撞上 frontend/db/migrations 与 supabase/migrations 同名文件(symlink 在本机是普通副本)的 duplicate migration filename。这不是本单引入的。本单用例走与校正标题测试相同的去重目录,定向结果以上面的 17/0 为准。
  • 没有登录浏览器。没有跑 next build,不宣称 / 与 /people 已在本机确认为 Static。
  • 预览会话 home-bootstrap-run.ts 的 updatedAt: timestamp() 断言在本基线上已失败,本单未改那个对象。
  • 开工后 origin/staging 又前进了 81db05c6、3dd48c0d、c2856466(首页拆分的测试合同,含 BUG-1029)。功能分支在推送前快进到这些提交之上,BUG-1030 仍用原编号。

断言三栏

见各测试文件里的「原值 / 新值 / 原因」注释。主要是:新对话不再固定本人;设置不再有星盘资料;星盘页改为 loadSubjectBirth;今日星语缓存键加入 subjectId。