fix(chat): make cloud the only truth for charts, synastry, and pin/archive
Independent Staging Quality Gate / validate (push) Has been cancelled
Independent Staging Quality Gate / publish (push) Has been cancelled

Local fallbacks were creating fake saves and resurrecting deleted rows.
Pin and archive now live on chat_sessions so they follow the account.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-01 21:38:21 +08:00
parent 31c7b48261
commit ce6a8a7e72
16 changed files with 390 additions and 153 deletions
+16
View File
@@ -7150,3 +7150,19 @@
- 相关记录:BUG-464
- 复发自:无
- 修复版本:待发布
## BUG-466 | 星盘库、合盘历史和会话置顶/归档仍有一份会骗人的本地真相
- 状态:resolved
- 首次发现:2026-09-01
- 最近更新:2026-09-01
- 影响面:星盘库保存/删除、合盘历史、会话置顶与归档、`chat_sessions`
- 用户现象:云端保存失败仍提示已保存,刷新后记录消失;云端删除失败后刷新会复活;合盘历史按 id 并集,服务端删掉的记录会从本机回来;置顶和归档只活在这台浏览器里,换设备全部归零。
- 触发条件:断网或接口失败时保存/删除其他人的星盘;云端删除合盘历史后刷新;在一台设备置顶或归档后再换设备打开。
- 根因:星盘库和合盘历史同时写 localStorage 与云端,启动时又用云端替换或并集覆盖;置顶/归档只有 `jyotisha-session-controls` 本地键,没有账户数据。仓内曾用 `20260718100000_repair_missing_chart_profiles.sql``20260718101000_repair_missing_synastry_reports.sql` 修过同类双份真相。
- 修复:星盘库与合盘历史只信云端列表;写失败保留表单或当页报告并明确报错,不再写本地副本。启动清除旧库/历史键。`chat_sessions` 增加 `pinned``archived_at`,置顶/归档走既有 PATCH;本地控制键一次性导入后删除。每日星语缓存与 `activeChartId` 不动。
- 验证:合同测试锁保存/删除失败不再写本地、合盘不再并集、列表/详情带上两列、PATCH 元数据接受 `pinned`/`archived_at`、旧 `messages` PATCH 仍忽略。`npm run test:db` 重放加列迁移并验证 RLS。`./node_modules/.bin/tsc --noEmit`、前端测试与 `next build``/` `○ Static` 必须通过。
- 防复发:不得把 `jyotisha_chart_library` / `jyotisha_synastry_history` / `jyotisha-session-controls` 写回作为权威存储。云端写失败不得再提示已保存到本地。不得把业务迁移复制进 `frontend/db/migrations`。列表 GET 仍不得带回 `messages`
- 相关记录:BUG-464、BUG-465
- 复发自:无
- 修复版本:待发布