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.
35 lines
4.0 KiB
Markdown
35 lines
4.0 KiB
Markdown
# 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。
|