fix(chart): keep zero-year chara and ephemeris dates apart
A zero-year Chara period is shown as 0 years instead of failing the whole chart. Switching ephemeris dates drops the previous day immediately and can be retried. Missing birth data links to chart settings.
This commit is contained in:
@@ -13651,3 +13651,51 @@
|
||||
- 相关记录:BUG-929、BUG-699、BUG-704、BUG-988、BUG-987、BUG-992、BUG-995
|
||||
- 复发自:BUG-929(标题口径两次返工;「旧标题不批量改」被本单推翻)
|
||||
- 修复版本:本分支提交,尚未推送、尚未部署
|
||||
|
||||
## BUG-1023 | Chara 0 年大运把整张星盘收成算不出来
|
||||
|
||||
- 状态:resolved(定向回归已锁;浏览器与部署未验收,不把本分支写成已上线)
|
||||
- 首次发现:2026-09-24
|
||||
- 最近更新:2026-09-25
|
||||
- 影响面:`chart-view-mapper.ts` 的 Chara 时间分配、星盘大运 Tab
|
||||
- 用户现象:大运右栏是「这张盘算不出来,我们已经记录下来了。」
|
||||
- 触发条件:某段 Chara 大运 `duration_years` 为 0。虚构 1985-08-03 03:59、北京可复现,射手段为 0 年。
|
||||
- 根因:子运权重用 `finite(duration) ?? 1`,0 不会被换成 1。12 段子运权重都是 0 时总和为 0,`0/0` 得到 NaN,`new Date(NaN).toISOString()` 抛 `RangeError`。`assembleChartView` 把非 Zod 错误收成 `engine_bad_payload`。0 是 kn_rao「先保底 12 年、再按落陷减 1」的合法结果,不是引擎坏包。
|
||||
- 修复:总权重不是正数时不再构造非法日期。0 年段标注「0 年」,起止同一天,不展开子运,子运区写「本段时长为 0,不展开」。不改 `scripts/jaimini.py`。
|
||||
- 验证:真实 `_compute_chart` + `_compute_chara_dasha` golden。12 段、射手 0 年、前后日期相接、`assembleChartView({layers:["chara"]})` 为 ok。UI 不渲染该段子运。
|
||||
- 防复发:0 权重不得再进入 `Date#toISOString`。0 年是显示规则,不是引擎失败。BUG-715 的失败分档仍留给真正的坏响应。
|
||||
- 相关记录:BUG-715、BUG-1017
|
||||
- 复发自:无
|
||||
- 修复版本:本分支,待推送与部署核对
|
||||
|
||||
## BUG-1024 | 星历切到新日期后下面仍是前一天
|
||||
|
||||
- 状态:resolved(定向回归已锁;浏览器与部署未验收,不把本分支写成已上线)
|
||||
- 首次发现:2026-09-24
|
||||
- 最近更新:2026-09-25
|
||||
- 影响面:`ephemeris-page.tsx`、`/api/ephemeris`
|
||||
- 用户现象:顶部日期已经换成新的一天,五要素和行运还是前一天。失败后一直留着旧数据,再点也不会重取。
|
||||
- 触发条件:切到还没缓存的日期;或请求 429、非 JSON、坏包;或进页时「今天」的刷新在切日期期间回来。
|
||||
- 根因:BUG-966 为了不让整页换成等待句,删掉了缓存未命中时的清空。失败时 `load` 直接返回,effect 又只跟日期变,所以同一天不能重试。进页刷新只比较响应里的 `payload.date`,切日期期间会把今天写回去。
|
||||
- 修复:只有响应日期等于当前所选日期才算就绪,否则保留日期条,三段改静态句。失败句为「这一天的星历没取到,点日期再试一次。」再点日期或失败时的左右箭头会重试。今天的刷新和迟到响应都先看当前日期。本命盘按账户和出生资料缓存 5 分钟,引擎调用带上 `request.signal`。
|
||||
- 验证:生命周期测试覆盖未缓存静态句、迟到的今天、迟到的前一日期、429 后箭头重试。路由测试里同一账户连续两天只打一次本命 `/api/chart`,并且上游 fetch 能看到已中止的 signal。
|
||||
- 防复发:星历仍不得出现骨架、spinner 或「正在加载」。旧日期响应不得写回新日期。BUG-966 的测试只静态渲染了 `EphemerisView`,没有挂上切日期的状态机,所以没拦住这次副作用。
|
||||
- 相关记录:BUG-966、BUG-1016
|
||||
- 复发自:BUG-966
|
||||
- 修复版本:本分支,待推送与部署核对
|
||||
|
||||
## BUG-1025 | 星盘没有出生资料时只有一句话,没有去填写的入口
|
||||
|
||||
- 状态:resolved(定向回归已锁;浏览器与部署未验收,不把本分支写成已上线)
|
||||
- 首次发现:2026-09-24
|
||||
- 最近更新:2026-09-25
|
||||
- 影响面:星盘失败页、`settings-url.ts`、首页设置深链
|
||||
- 用户现象:没有出生资料时只看到说明,不能从这一页去填。
|
||||
- 触发条件:`birth_profile_incomplete`,以及资料查询失败、已采用时间缺时区、时区解析失败。
|
||||
- 根因:失败页只有一段文字。`parseSettingsQuery` 以前只认 `?settings=billing`。
|
||||
- 修复:没有资料时加标题「还没有星盘资料」、原句和主按钮「去填写出生资料」,链到 `/?settings=chart`。另外三种资料失败保留各自的句子,并给同一按钮。首页据此打开设置里的星盘资料。`?settings=billing` 仍只开账户与点数。解析只在 `settings-url.ts`。
|
||||
- 验证:四种资料失败都渲染该按钮;引擎忙不渲染。`?settings=chart` 解析为星盘资料,billing 的既有断言没改。
|
||||
- 防复发:查询失败不得再写成资料不完整。这四类以外的失败不得带上「去填写出生资料」。
|
||||
- 相关记录:BUG-996、BUG-715
|
||||
- 复发自:无
|
||||
- 修复版本:本分支,待推送与部署核对
|
||||
|
||||
Reference in New Issue
Block a user