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

35 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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。