3.6 KiB
3.6 KiB
进度 · 更新出生资料后星盘真值一致性(2026-09-22)
基线:10baeb2fa865743c428806e115ac92ca9d92fb71(origin/staging)。分支 codex/chart-profile-update-consistency-20260922。未推送,未部署。
做了什么
PATCH /api/account、GET /api/account、GET /api/chart-view共用resolveServerOwnedChartBirth。reported 用声明日期、声明钟点和声明 offset;accepted / confirmed 的完整 adopted 元组用 active date、active time、active offset 和 provenance;跨午夜同此。- confirmed 的普通编辑仍返回空的 application patch,不覆盖
active_birth_time。声明字段变化时,与guard_adopted_birth_date相同:date、offset、provenance 一起清空,排盘落到既有的无 adopted 日期路径(声明日期 + 受保护的 active 分钟 + 声明 offset)。不是半截元组。 - accepted 的普通声明编辑仍把状态收成 reported 并清空 active time;adopted 元组一并清空,不会停在「还能排、但 offset 缺了」。
- adopted 日期在而 offset 缺失:
adopted_calculation_incomplete,不回退声明 offset,也不去调时区解析。 - chart-view 分开记录:
profile_query_error、profile_incomplete、adopted_calculation_incomplete、timezone_resolver_failure、engine_busy、engine_timeout、engine_bad_payload、engine_http_error、response_schema_failure。查询失败的 HTTP 仍是 200 结构化状态,但 status 不是birth_profile_incomplete。日志只有 reason、route、耗时、HTTP status。 - 星盘模块缓存按账户 id + 资料指纹钉住。PATCH 成功立刻换键并丢掉不匹配的旧快照;与这次保存重叠的
refreshAccount不会把旧指纹钉回去。进行中的旧/api/chart-view不能写回旧盘。引擎缓存键仍含日期、时间、offset、ayanamsa、node mode。 /chart仍读账户profiles,不读chart_profiles。
没有新迁移
20260920020000_adopted_birth_date.sql 的 guard_adopted_birth_date 在同一分支把 active_birth_date、active_birth_timezone_offset、active_birth_provenance 置空,不会只清 offset。因此没有「可排盘且 adopted 元组不完整」的 trigger 产物,不加迁移,不跑 npm run test:db。
断言变更
无。既有 chart-view-route、chart-view-engine、server-owned-birth-profile、adopted-birth-date、account-api、secondary-page-entry 的测试名和断言原值都没改。
测试
| 命令 | 结果 |
|---|---|
.\node_modules\.bin\tsc --noEmit |
通过 |
npm run lint |
exit 0,0 error,119 条既有 warning,本次改动的文件不在其中 |
npx tsx --test tests/chart-profile-update-consistency.test.ts |
11 pass / 0 fail |
同命令加上 chart-view-route、chart-view-engine、server-owned-birth-profile、adopted-birth-date、account-api、secondary-page-entry |
57 pass / 0 fail |
未跑全量 npm test,未跑 next build。
偏差
- 现场那一户的数据库行仍未知,BUG-996 不把某一种残缺写成唯一根因。见
BLOCKED.md。 - 账户 GET 的
chartBirth是库存真值。chart-view 只在声明 offset 缺失、且不是 adopted 半截元组时,才在内存里补时区;指纹仍用库存行,所以和 GET 的键一致。带齐 offset 的合成 fixture 上,日期、时间、offset、provenance 完全相同。 - 没有改
frontend/src/app/(app)/page.tsx、没有改scripts/jyotish_api_server.py、没有改迁移。
环境缺口
无受控登录态,不能复核会议里的那一户。无新迁移,故不用 Docker 跑 test:db。