test(report): reader annual-conflict case follows the corrected return instant (BUG-1220)
Independent Staging Quality Gate / validate (push) Successful in 13m33s
Independent Staging Quality Gate / publish (push) Successful in 3m35s

The fictional chart's 2026 return moves 08:48:04 -> 08:41:55 (PyJHora within
0.09 min); the annual Lagna crosses from Taurus 1.3 to Aries 29.6 and the
current-year lord becomes Jupiter. Not in the quick gate, so the BUG-1220
acceptance missed it. Full Python suite: 62 failures before and after,
identical lists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-10-04 09:03:31 +08:00
co-authored by Claude Opus 5.5
parent 3333aa66bf
commit 153c6e99eb
3 changed files with 13 additions and 3 deletions
+2 -1
View File
@@ -16463,7 +16463,8 @@
- 根因:① 目标经度取 `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)。
- 补修(2026-10-04):`tests/test_report_reader_main.py::test_reader_annual_conflict_keeps_both_real_producer_values` 在 `01929bae` 转红(他会话二分发现)。该测试不在快速门里,本单验收只跑了快速门和定向测试,没跑 Python 全量,漏了。虚构盘 2026 年返照从 08:48:04 变 08:41:55(PyJHora 差 0.09 分钟),年盘上升从金牛 1.3° 落到白羊 29.6°,年主由火星变木星;断言按三栏改为木星。补跑 Python 全量:修前 `3c27c38e` 与修后各 62 个失败,名单逐条相同(均为既有环境失败)。
- 防复发:上述测试;同步上游太阳返照时,核对目标经度与求解器同一参考系(已补进 ERR-109)。改引擎计算值的轮次,验收要跑 Python 全量并与基线比对失败名单,不能只跑快速门。
- 相关记录:BUG-1095、BUG-1026~1028、ERR-109。
- 复发自:无(ERR-109 同类漏同步)
- 修复版本:staging `01929bae`(生产待提升)
@@ -76,3 +76,9 @@
- 名人生平回测:本机无模型凭据,未跑(本单不改提示词)。
- 真机:部署后在 staging 打开一张年运数据卡或参考版报告,看年运段能出;数值变化只影响约 5% 的年份,不另立真机清单。
## 补修(2026-10-04)
- 他会话报告 `tests/test_report_reader_main.py::test_reader_annual_conflict_keeps_both_real_producer_values` 自 `01929bae` 起失败(不在快速门里,我验收时没跑 Python 全量)。
- 核实:虚构盘 2026 年返照 08:48:04 → 08:41:55,PyJHora 2461137.529169,修后差 0.09 分钟、修前差 6.1 分钟;年盘上升金牛 1.3° → 白羊 29.6°,只有木星吉照上升,年主火星 → 木星;次年月亮不变。断言按三栏改为(木星,月亮)。
- 补跑 Python 全量(`pytest tests`):修前 `3c27c38e` 62 失败,修后(含第四批)62 失败,名单逐条相同。
+5 -2
View File
@@ -285,8 +285,11 @@ def test_reader_annual_conflict_keeps_both_real_producer_values(reader_packet) -
# 原值:「太阳返照:火星;Tajika:金星(两者不同)」(当年 / 次年的 Muntha 主星)
# 新值:「太阳返照:火星;Tajika:月亮(两者不同)」(当年 / 次年按 Panchadhikari 选出的年主)
# 原因:BUG-1214 年主改为 Panchadhikari 选法(任务书 T2);本用例只测冲突两值都保留
assert (current["year_lord"], later["year_lord"]) == ("Mars", "Moon")
assert "| Varshesha | 太阳返照:火星;Tajika:月亮(两者不同) |" in reader
# 原值:当年年主火星(2026 返照 08:48:04,年盘上升金牛 1.3°,只有火星吉照上升)
# 新值:当年年主木星(返照 08:41:55,与 PyJHora 差 0.09 分钟;年盘上升白羊 29.6°,只有木星吉照上升)
# 原因:BUG-1220 返照时刻改在求解器同一参考系、年盘保留秒;次年月亮不变
assert (current["year_lord"], later["year_lord"]) == ("Jupiter", "Moon")
assert "| Varshesha | 太阳返照:木星;Tajika:月亮(两者不同) |" in reader
assert "两种计算口径给出的年主不同,暂不合并" in reader
assert "| Muntha sign | 白羊座 |" in reader
assert _leak_hits(reader) == []