feat(annual): localise the solar-return instant, relocated returns, compact PL9 export (BUG-1095..1097)
Upstream yinduzhanxing 41d1c740 / 59c9139f, hand-merged; 089858c0 verified not applicable. - solar_return: dt_local was the UT instant verbatim (no caller ever added the offset). Localise with ZoneInfo at the return instant (IANA id) or the fixed offset; expose annual_location; Sahams day/night at the true instant; optional current_location return charts. - cmd_solar_return / annual_tajika_pack / engine: pass birth IANA zone and --solar-return-location-mode / --current-* through; external PyJHora replay blocked when relocated. - output_json keeps the upstream stream= signature; PL9 exports written compact via dumps (measured faster than json.dump streaming), 9.57 -> 4.61 MB. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
15be6a0631
commit
7c5ea7ae5a
@@ -14686,3 +14686,47 @@
|
||||
- 相关记录:BUG-560、BUG-1048、BUG-1084
|
||||
- 复发自:无
|
||||
- 修复版本:未修
|
||||
|
||||
## BUG-1095 | 太阳返照本地时间是 UT 原样:读者版「Varshapravesha」差一个时区,Sahams 昼夜按错误时刻判
|
||||
|
||||
- 状态:resolved(2026-09-29 执行方自验;待 Claude 验收)
|
||||
- 首次发现 / 最近更新:2026-09-29 / 2026-09-29
|
||||
- 影响面:`scripts/solar_return.py`(`find_solar_return_ut` 返回 `dt_local = dt_ut`,注释「调用方另行加 tz」但无调用方加)、`solar_return_full_report` → `calc_all_sahams(tz=birth_tz)` 昼夜判定、`pl9_reader_export.py:1830/2201` 打印 `dt_local`、年运包 `annual_tajika_pack.py` 经 `cmd_solar_return` 同一路径。
|
||||
- 用户现象:报告读者版「Varshapravesha:2026-06-15 08:04:52」实为 UT,北京盘应为 16:04:52;跨日时连日期都错(虚构北京盘 2028 年行 06-14 → 06-15)。
|
||||
- 触发条件:任何目标年的年运;偏移越大越明显。
|
||||
- 根因:返照求解只算 UT,本地化从未实现;任务书写的「固定偏移在夏令时地区差 1 小时」低估了——本仓根本没加偏移。
|
||||
- 修复:抄上游 `41d1c740` 的 `_localize_return_datetime`(ZoneInfo 按返照瞬间取偏移,无 IANA 区则固定偏移),`calc_solar_return_chart` 写回 `dt_local` 与 `annual_location`;Sahams 昼夜用 `annual_location`;返照地点可选 `current_location`(引擎 / CLI / 年运包参数;外部 PyJHora 回放异地时 blocked);新增出生地 `--timezone-id` / API `timezone` 传入。
|
||||
- 验证:`tests/test_solar_return_timezone.py`(10 条);北京盘改前改后解析比对差异仅 `dt_local`、`annual_location`(新增)、`daynight_evidence.julian_day_ut`;`tajika` 0 差异;`Asia/Shanghai` 与固定 +8 0 差异;纽约盘 IANA 区 21:08:03(−4)vs 固定 20:08:03(−5);伦敦异地返照盘上升 Taurus vs Capricorn。数字见 `docs/tasks/PROGRESS-upstream-sync3-20260929.md`。
|
||||
- 防复发:`test_beijing_return_local_time_is_ut_plus_eight` 锁 `dt_local − dt_ut = +8h` 与昼夜判定时刻 = `jd_ut`;不得再返回 UT 当本地时间并寄望调用方补偏移。遗留:网页报告链只传数字偏移(`personal-report-longform-birth.ts:79`),IANA 区未到引擎,夏令时地区用户仍是固定偏移。
|
||||
- 相关记录:BUG-608、BUG-1028、BUG-1096、BUG-1097
|
||||
- 复发自:无
|
||||
- 修复版本:分支 `codex/upstream-sync3-20260929`,未合入
|
||||
|
||||
## BUG-1096 | 全量报告装配时年运面板键被清空(上游 089858c0 所修)——本仓核实不适用
|
||||
|
||||
- 状态:closed_not_applicable(2026-09-29 执行方核实)
|
||||
- 首次发现 / 最近更新:2026-09-29 / 2026-09-29
|
||||
- 影响面:`scripts/jyotish_engine.py::build_professional_report_reference_packet` / `_apply_pl9_pack_selection`;`scripts/annual_tajika_pack.py`。
|
||||
- 用户现象:无(本仓从未生成这些面板)。
|
||||
- 已确认事实:虚构北京盘 `pl9-export --pack full` 的 `annual_tajika_pack` 15 个键里,上游 12 个键中 `profile`、`patyayini_dasha` 有,其余 10 个(`monthly_chart_pack`、`normalized_tables`、`lifetime_annual_chart_pages`、`annual_chart_series_pack`、`pl9_annual_visual_panels`、`pl9_annual_page_map`、`pl9_current_year_results`、`pl9_annual_dasha_results`、`annual_special_points`、`tripataki_chakra`)在整个导出包任何路径都不存在;本仓 `annual_tajika_pack.py` 没有生产者,只有 `pl9_reader_export.py` 防御性读取。`_apply_pl9_pack_selection` 在 `full` 时原样返回 packet,不存在装配丢失。
|
||||
- 根因:不适用——上游修的是它自己 09 月新增的面板生产者被装配层清空;本仓没有该生产者。
|
||||
- 修复:不抄。上游同批 `full_report_quality_gate.py` +86 行(`80756803`)是逐年 Muntha / Year Lord 一致性与 Ashtakavarga 12 宫映射校验,与面板无关,亦未接。
|
||||
- 验证:核实表见 `docs/tasks/PROGRESS-upstream-sync3-20260929.md` §T2。
|
||||
- 防复发:若日后引入年运面板生产者,再评估 `_preserve_annual_report_surface`。
|
||||
- 相关记录:BUG-1095、BUG-1028
|
||||
- 复发自:无
|
||||
- 修复版本:未修(不适用)
|
||||
|
||||
## BUG-1097 | PL9 导出 JSON 在内存里再造一份报告大小的缩进字符串,文件体积翻倍
|
||||
|
||||
- 状态:resolved(2026-09-29 执行方自验;待 Claude 验收)
|
||||
- 首次发现 / 最近更新:2026-09-29 / 2026-09-29
|
||||
- 影响面:`scripts/jyotish_engine.py::output_json` 与 `main()` 的 `pl9-export --output` 落盘。仅 CLI 与落盘路径;生产 API(`jyotish_api_server.py`)自行序列化,不经过此处。
|
||||
- 用户现象:`pl9-export` JSON 9.57 MB(缩进),序列化峰值 46.9 MB。
|
||||
- 根因:`print(json.dumps(..., indent=2))`;上游 `59c9139f` 改为流式紧凑。
|
||||
- 修复:`output_json(data, *, stream=None)` 照抄签名;实现为 PL9 schema 紧凑 `dumps` 一次写出,其他命令仍 `indent=2`。实测上游的 `json.dump` 流式在 CPython 走纯 Python 编码器(0.59 s),比紧凑 `dumps`(0.30 s)慢,故未抄其实现。
|
||||
- 验证:单步基准 A 0.410 s / 46.9 MB / 9.57 MB → C 0.303 s / 22.1 MB / 4.61 MB;整条 CLI 交错 A/B 3 次基线 6.92/6.62/6.42 s、RSS 197.9/169.2/169.6 MB → 6.58/6.42/6.38 s、191.3/159.4/159.0 MB;解析后相等;`test_output_json_is_compact_only_for_pl9_exports`。
|
||||
- 防复发:非 PL9 命令输出格式不变由同一测试锁定。
|
||||
- 相关记录:BUG-1095、ERR-111
|
||||
- 复发自:无
|
||||
- 修复版本:分支 `codex/upstream-sync3-20260929`,未合入
|
||||
|
||||
Reference in New Issue
Block a user