fix(solar-return): return instant in the solver's frame, annual chart keeps seconds (BUG-1220)
The natal Sun target came from compute_chart_data while the solver iterates on _get_sun_lon_jd (swe sidereal flags); the frames differ by up to ~17", moving the return by up to ~7 minutes. The annual chart was also cast at the truncated minute. Ports upstream yinduzhanxing 7cc6425d / 46ed9399 (these two hunks only). PyJHora reference: 3 cases within 0.03 min. 243 public-figure annual charts: annual Lagna changes 13, year lord 11, Mudda first lord 0. v5 77 cases identical to 3c27c38e; consult goldens re-captured byte-identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d0b783bd05
commit
01929baea6
@@ -16451,3 +16451,19 @@
|
||||
- 相关记录:BUG-1214、BUG-1217。
|
||||
- 复发自:无
|
||||
- 修复版本:—(上游)
|
||||
|
||||
## BUG-1220 | 太阳返照时刻偏 3–7 分钟:出生太阳与求解器不在同一参考系,年盘还截到整分钟
|
||||
|
||||
- 状态:resolved(分支 `codex/annual-return-frame-20261003`;待推送部署)
|
||||
- 首次发现 / 最近更新:2026-10-03 / 2026-10-03
|
||||
- 来源:共享引擎复用核对 `docs/research/shared_engine_reuse_audit_2026_10_03.md` §S1;任务书 `TASK-annual-return-frame-20261003`。移植来源:上游 `yinduzhanxing` `7cc6425d`(出生太阳改在求解器参考系重算)、`46ed9399`(年盘保留秒),只取这两处。
|
||||
- 影响面:`solar_return.calc_solar_return_chart` → `solar_return_full_report`、`jyotish_engine.cmd_tajika`、全量解读 Step 9、`annual_tajika_pack`、咨询年运层(数据卡)、参考版报告年运段:年盘上升、年主、Sahams、Mudda 起点时刻。生时校正不用年盘,不受影响。
|
||||
- 现象:同一张盘同一岁差,本站返照时刻与上游、PyJHora 差几分钟(Rath 标准盘 2025 年差 6 分 16 秒)。9 位公开名人 × 2000–2026 年共 243 张年盘里,年盘上升星座错 13 张、年主错 11 张,昼夜判定 0 张受影响。
|
||||
- 触发条件:任何盘。偏差大小取决于出生时刻的章动等参考系差(约 ±17″ 以内,折合返照时刻约 ±7 分钟);年盘上升恰在星座边界附近的年份会换星座。
|
||||
- 根因:① 目标经度取 `compute_chart_data` 的出生太阳 `degree_raw`,求解器 `_find_solar_return_swe` 用 `_get_sun_lon_jd`(`swe.calc_ut` + `sidereal_flags`)逐步逼近,两套参考系对出生太阳差 15.1″(标准盘)。② 起年盘时用整点分钟调用 `compute_chart_data`,丢了秒。上游 9 月 7–8 日已修,本站引擎同步停在 `f2241463`(9 月 3 日),之后 `solar_return.py` 只按 BUG-1095 补过本地化,漏了这两处(ERR-109 同类)。
|
||||
- 修复:`calc_solar_return_chart` 中目标经度改为 `_get_sun_lon_jd(birth_jd_ut)`,拿不到才退回出生盘值;返回 `solar_return.target_sun_frame`(`swe_sidereal_flags` / `birth_chart_degree_raw`)。起年盘传 `second=sr_dt_ut.second`。上游同期加的 `position_mode` 等研究回放参数未搬;本地化保留本站实现。
|
||||
- 验证:`tests/test_solar_return_frame.py`:三例返照 JD 与 PyJHora `drik.next_solar_date` 参照值(只存数字)差 ≤ 0.5 分钟,实测 0.0 / 0.021 / 0.006 分钟;目标经度等于求解器参考系出生太阳(< 1″);年盘时刻与返照差 < 1 秒。换回旧代码这 5 条全部失败。243 张年盘前后对比、v5(三段与基线逐项相同)、快速门、前端失败名单比对见进度记录。咨询两份 golden 用真实引擎重采后逐字节不变(三张盘 2026 年的年盘上升与年主恰好不变,日期只存到天)。
|
||||
- 防复发:上述测试;同步上游太阳返照时,核对目标经度与求解器同一参考系(已补进 ERR-109)。
|
||||
- 相关记录:BUG-1095、BUG-1026~1028、ERR-109。
|
||||
- 复发自:无(ERR-109 同类漏同步)
|
||||
- 修复版本:待发布
|
||||
|
||||
Reference in New Issue
Block a user