test(ephemeris): move the expectations BUG-1275 shifts and regenerate three goldens
Independent Staging Quality Gate / validate (push) Successful in 16m45s
Independent Staging Quality Gate / publish (push) Successful in 4m25s

The nutation branch left the quick gate red: eight expectations still encoded
the mean-ayanamsa frame (dasha boundaries two days late, a solar-return frame
gap that was the bug itself, a 0.01 Kala drift from frozen sidereal fixtures)
and three goldens were never regenerated. Python full suite is back to the
baseline list; quick gate passes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-10-08 22:28:09 +08:00
co-authored by Claude Opus 5.5
parent 7a78638beb
commit db0134f9db
9 changed files with 58 additions and 40 deletions
+3 -1
View File
@@ -17135,7 +17135,7 @@
## BUG-1275 | 恒星黄道经度少扣章动:所有行星偏约 0.005°,Vimshottari 日期差 2–3 天
- 状态:resolved(只覆盖恒星黄道经度与同一框架的上升、宫头;v5 77 例评测单独记在进度,未完成时不把红线 3 的评测格写成已关闭)
- 状态:resolved(代码;部署以 `/api/health` 的 `deployment.gitCommit` 为准)
- 首次发现 / 最近更新:2026-10-08 / 2026-10-08
- 来源:Claude 验收完整数据版报告时,对比上游 `23be1807` 同盘导出。
- 影响面:产品默认盘、行运、Bhava Chalit、日运月亮、Shadbala 记录的岁差、KP 宫头展示、生时校正打分。`mean` 档仍去掉章动。西方盘是热带,不适用。Hora / Ghati / Bhava 上升公式未改。
@@ -17148,3 +17148,5 @@
- 相关记录:2026-10-07 sync6 验收里「虚构盘大运与独立计算差约 2 天」曾被 Claude 判为岁差版本差异,实为本条。BUG-1268(子运起点)。BUG-621(旧校正记录仍只读打开)。
- 复发自:无。
- 修复版本:本分支 `codex/ephemeris-nutation-20261008`。未推送,未部署。
- Claude 验收(2026-10-08,Linux,屏蔽 PyJHora):乔布斯、奥巴马、虚构盘 × Lahiri / Raman / KP,七星与 `FLG_SIDEREAL` 最大差 5.7e-14°。v5 九格:先验头名 −1.3 / −1.3 / −1.3,六题回放 +2.6 / +1.3 / +6.5,线上区间 0 / −5.2 / 0(百分点,±10 / ±30 / ±60);产品 2026-10-08 接受。
- 验收补修(Claude,产品授权直接执行):执行方未跑 Python 全量,留下 8 条旧期望(全量 62→70,快速门红)。三栏:`test_user_invocation_acceptance_contract` 子运起止 2014-04-27/2016-09-20、2023-07-13/2026-09-11、2026-09-11/2027-08-24 → 2014-04-25/2016-09-18、2023-07-11/2026-09-09、2026-09-09/2027-08-22(月亮含章动后边界提前约 2 天;2023-07-11 与独立 `FLG_SIDEREAL` 计算一致),连带 `test_one_command_user_invocation_acceptance_check`、`test_skill_release_clean_trial`;`test_solar_return_frame` 本命太阳与求解框架之差 > 10″ → < 1″(旧值正是本 Bug 造成的框架差);`test_shadbala_precise_context` 月亮 Kala 存档差值 +52.18 → +52.17(夹具里的恒星黄道经度按旧平岁差框架采集,配真岁差后 Ayana 26.09 → 26.08);`references/cross_project_contract/fixture_manifest.v1.json` 本仓兼容哈希 `25704246…` → `f1ea2b20…`(上游仓自存另一份哈希,不受影响);`tests/fixtures/double_transit_d1_cl_golden.json` 与 `references/oracle/shadbala_dig_source_of_truth_audit_2026_07_22.json` 用真实引擎重生成(快照只有经度与上升平移约 0.005°,Dig 值不变)。
@@ -116,3 +116,10 @@ Python 全量没有跑完。不把失败名单写成 Linux 62 的子集。已知
- 快速门:同一条命令已经结束,退出码 1。pytest 段 4 failed / 1059 passed / 1 skipped,用时 667.64 秒。两条记忆化失败是门禁进程读到的还是 `PENDING_NUTATION_COMMIT`;第二笔提交把 `SOURCE_COMMIT` 写成 `e5f2a75183381c4a027014c7f1e89ddcb8393bd3` 之后,`tests/test_rectification_engine_memoization.py` 再跑为 25 通过、退出码 0。`test_consultation_native_layers.py::test_the_new_layer_leaves_every_existing_output_unchanged` 是本机已知失败,不是发布依据。`tests/test_double_transit_d9_targets.py::test_d1_and_chandra_lagna_layers_match_the_pre_fix_golden` 仍对照章动修正前的相位度数,golden 没有重生成。这一条算未完成,不把快速门写成通过。
- `npm run test:db` 未跑。SQL 守卫没有改。
- 记忆化 v5 的 `source_commit` 已写成 `e5f2a75183381c4a027014c7f1e89ddcb8393bd3`。
## Claude 验收与补修(2026-10-08)
- 结论:通过(产品接受 v5 变化)。代码由 Claude 在 `claude/nutation-merge-20261008` 上补修后快进推 staging。
- 独立核对:屏蔽 PyJHora 后,三张盘 × 三种岁差七星与 `FLG_SIDEREAL` 最大差 5.7e-14°。
- Linux Python 全量:执行方分支 70 条失败,基线 62(另有 3 条 prashna 并行噪声);新增 8 条均为旧期望,已按 BUG-1275 验收补修逐条改(三栏见 Bug 历史)。快速门转绿。
- `npm test` 4992 项、失败 24,与基线逐名相同;tsc 0。
+1 -1
View File
@@ -317,7 +317,7 @@
| `TASK-rectification-refresh-r3-r4-20260913.md` | `PROGRESS-rectification-refresh-r3-r4-20260913.md` | 刷新阶段 R3(MIN_BOUNDARY_DAYS 45→30)+ R4(pratyantar 与 D9/D10 上升 Narayana);首轮出题不变。即使放宽仍有 0 题例子,定向补事另线保留(BUG-664/665) | 已实现 `ab1ade59`,已部署;2026-09-13 验收通过(实现单由执行方自拟,无产品决策记录段;收益口径见研究文档) | `codex/rectification-refresh-r3-r4-20260913` |
| `TASK-upstream-sync6-20261007.md` | [PROGRESS-upstream-sync6-20261007.md](PROGRESS-upstream-sync6-20261007.md) | **上游同步第六轮(`23be1807`)**:10-05 五个计算修正一行未合——D5/D6/D8/D11 映射(乔布斯盘四张分盘星座全不同)、Vimsopaka 权重、Yogini 顺序与出生余额、Panchadhikari 宫位参照、Narayana 并列、特殊上升、出生秒数、Neecha Bhanga 两条件、首段大运子运、岁差被覆盖;逐项对照原书核实;最先做 | 已验收(门禁补修 `2df6ee72`,已部署 staging) | [PROGRESS-upstream-sync6-20261007.md](PROGRESS-upstream-sync6-20261007.md) |
| `TASK-special-lagnas-native-20261008.md` | `PROGRESS-special-lagnas-native-20261008.md` | **特殊上升点原生计算(线上缺陷)**:sync6 U6 运行时调 PyJHora,生产镜像没有 PyJHora → staging 上 Hora/Ghati/Sree/Indu/Pranapada 全 blocked;原生实现、PyJHora 只作冻结对照、快速门禁止运行时 import jhora;最先做 | 已验收(已部署 staging `795b8845`,BUG-1273) | `codex/special-lagnas-native-20261008`(未上线;部署以 `/api/health` 为准) |
| `TASK-ephemeris-nutation-20261008.md` | `PROGRESS-ephemeris-nutation-20261008.md` | **恒星黄道少扣章动(BUG-1275)**:行星 = 含章动热带视位置 − 平岁差,全体偏 Δψ(≤17″),大运日期差 2–3 天;改标准算法、PyJHora 冻结对照、scoring-12、v5 重跑 | 待验收 | `codex/ephemeris-nutation-20261008`(未推送,未部署) |
| `TASK-ephemeris-nutation-20261008.md` | `PROGRESS-ephemeris-nutation-20261008.md` | **恒星黄道少扣章动(BUG-1275)**:行星 = 含章动热带视位置 − 平岁差,全体偏 Δψ(≤17″),大运日期差 2–3 天;改标准算法、PyJHora 冻结对照、scoring-12、v5 重跑 | 已验收(Claude 补修 8 条旧期望,产品接受 v5;推 staging) | `codex/ephemeris-nutation-20261008`(未推送,未部署) |
| `TASK-sync6-gate-red-20261007.md` | — | **sync6 后门禁仍红**:run 3213 快速门已过,「Frontend and database tests」开跑 20 秒后日志中断、15 分钟后判失败,后续步骤 failure 0 秒;疑运行机掉线;先 Re-run,红则本机带 Docker 跑 `CI=1 npm test` 对照 `0ed45a4b` | 已完成(Re-run 通过,BUG-1271,部署 `2df6ee72`) | — |
| `TASK-rectification-tie-break-entry-fix-20260913.md` | `PROGRESS-rectification-tie-break-entry-fix-20260913.md` | 修复单:参考题入口只读 `window_scan` 标志位 → 两道答完后仍显示、再点弹「现在没有可答的参考题」;并按产品拍板改成点一次连出 D9+D10(BUG-666~668,Skill 10.0.26) | 已合入(无独立验收记录) | `99127601`(BUG-666~668 resolved;已部署 staging,run 2589) |
@@ -21,7 +21,7 @@
"node_mode": "mean",
"timezone_offset": 5.5
},
"compatibility_hash": "257042461fe303aa3bff5a8333f65090832ce8a2be395f038523838d724b474b"
"compatibility_hash": "f1ea2b20a9521a32801661fdd5d6625308ce1ca9d3efc56abe085006573ceb0f"
}
]
}
@@ -39,8 +39,8 @@
"planet": "Jupiter",
"external_dig_rupa": 1.3433,
"house": 11,
"planet_lon": 87.2772,
"asc_lon": 149.0606,
"planet_lon": 87.2722,
"asc_lon": 149.0556,
"current_linear_house_model": 0.6667,
"house_midpoint_angular_model": 0.5734,
"bhava_madhya_angular_model": 0.6568,
@@ -55,8 +55,8 @@
"planet": "Mars",
"external_dig_rupa": 1.2902,
"house": 9,
"planet_lon": 5.8598,
"asc_lon": 149.0606,
"planet_lon": 5.8548,
"asc_lon": 149.0556,
"current_linear_house_model": 0.8333,
"house_midpoint_angular_model": 0.6211,
"bhava_madhya_angular_model": 0.7044,
@@ -71,8 +71,8 @@
"planet": "Mercury",
"external_dig_rupa": 0.2107,
"house": 6,
"planet_lon": 291.1311,
"asc_lon": 149.0606,
"planet_lon": 291.126,
"asc_lon": 149.0556,
"current_linear_house_model": 0.1667,
"house_midpoint_angular_model": 0.2941,
"bhava_madhya_angular_model": 0.2107,
@@ -87,8 +87,8 @@
"planet": "Moon",
"external_dig_rupa": 1.5913,
"house": 8,
"planet_lon": 344.5165,
"asc_lon": 149.0606,
"planet_lon": 344.5115,
"asc_lon": 149.0556,
"current_linear_house_model": 0.3333,
"house_midpoint_angular_model": 0.4975,
"bhava_madhya_angular_model": 0.4141,
@@ -103,8 +103,8 @@
"planet": "Saturn",
"external_dig_rupa": 0.327,
"house": 3,
"planet_lon": 207.932,
"asc_lon": 149.0606,
"planet_lon": 207.927,
"asc_lon": 149.0556,
"current_linear_house_model": 0.3333,
"house_midpoint_angular_model": 0.2437,
"bhava_madhya_angular_model": 0.3271,
@@ -119,8 +119,8 @@
"planet": "Sun",
"external_dig_rupa": 0.4135,
"house": 7,
"planet_lon": 312.5175,
"asc_lon": 149.0606,
"planet_lon": 312.5124,
"asc_lon": 149.0556,
"current_linear_house_model": 0.5,
"house_midpoint_angular_model": 0.3248,
"bhava_madhya_angular_model": 0.4081,
@@ -135,8 +135,8 @@
"planet": "Venus",
"external_dig_rupa": 1.1658,
"house": 5,
"planet_lon": 267.9412,
"asc_lon": 149.0606,
"planet_lon": 267.9362,
"asc_lon": 149.0556,
"current_linear_house_model": 0.8333,
"house_midpoint_angular_model": 0.9229,
"bhava_madhya_angular_model": 0.8396,
@@ -151,8 +151,8 @@
"planet": "Jupiter",
"external_dig_rupa": 0.631,
"house": 4,
"planet_lon": 34.2332,
"asc_lon": 327.826,
"planet_lon": 34.2375,
"asc_lon": 327.8303,
"current_linear_house_model": 0.5,
"house_midpoint_angular_model": 0.7144,
"bhava_madhya_angular_model": 0.6311,
@@ -167,8 +167,8 @@
"planet": "Mars",
"external_dig_rupa": 0.0193,
"house": 5,
"planet_lon": 69.2064,
"asc_lon": 327.826,
"planet_lon": 69.2107,
"asc_lon": 327.8303,
"current_linear_house_model": 0.1667,
"house_midpoint_angular_model": 0.0201,
"bhava_madhya_angular_model": 0.0632,
@@ -183,8 +183,8 @@
"planet": "Mercury",
"external_dig_rupa": 0.3437,
"house": 5,
"planet_lon": 85.9761,
"asc_lon": 327.826,
"planet_lon": 85.9804,
"asc_lon": 327.8303,
"current_linear_house_model": 0.3333,
"house_midpoint_angular_model": 0.4269,
"bhava_madhya_angular_model": 0.3436,
@@ -199,8 +199,8 @@
"planet": "Moon",
"external_dig_rupa": 0.245,
"house": 12,
"planet_lon": 289.8315,
"asc_lon": 327.826,
"planet_lon": 289.8358,
"asc_lon": 327.8303,
"current_linear_house_model": 0.3333,
"house_midpoint_angular_model": 0.2056,
"bhava_madhya_angular_model": 0.2889,
@@ -215,8 +215,8 @@
"planet": "Saturn",
"external_dig_rupa": 1.6447,
"house": 4,
"planet_lon": 31.7687,
"asc_lon": 327.826,
"planet_lon": 31.773,
"asc_lon": 327.8303,
"current_linear_house_model": 0.5,
"house_midpoint_angular_model": 0.2719,
"bhava_madhya_angular_model": 0.3552,
@@ -231,8 +231,8 @@
"planet": "Sun",
"external_dig_rupa": 0.0022,
"house": 5,
"planet_lon": 66.1221,
"asc_lon": 327.826,
"planet_lon": 66.1264,
"asc_lon": 327.8303,
"current_linear_house_model": 0.1667,
"house_midpoint_angular_model": 0.0372,
"bhava_madhya_angular_model": 0.0461,
@@ -247,8 +247,8 @@
"planet": "Venus",
"external_dig_rupa": 0.9833,
"house": 5,
"planet_lon": 68.7289,
"asc_lon": 327.826,
"planet_lon": 68.7331,
"asc_lon": 327.8303,
"current_linear_house_model": 0.8333,
"house_midpoint_angular_model": 0.9772,
"bhava_madhya_angular_model": 0.9394,
+4 -4
View File
@@ -1597,7 +1597,7 @@
"type": "Position"
},
{
"desc": "合相(4.07°)",
"desc": "合相(4.06°)",
"type": "Conjunction"
}
],
@@ -1629,7 +1629,7 @@
"type": "Position"
},
{
"desc": "合相(4.07°)",
"desc": "合相(4.06°)",
"type": "Conjunction"
}
],
@@ -1709,7 +1709,7 @@
"type": "Position"
},
{
"desc": "合相(4.07°)",
"desc": "合相(4.06°)",
"type": "Conjunction"
}
]
@@ -1776,7 +1776,7 @@
"type": "Position"
},
{
"desc": "合相(4.07°)",
"desc": "合相(4.06°)",
"type": "Conjunction"
}
],
+4 -1
View File
@@ -69,7 +69,10 @@ def test_precise_kala_preserves_archived_comparison_with_corrected_hora() -> Non
assert abs(context["sunrise_hour"] - 6.886306) < 0.00001
assert abs(context["sunset_hour"] - 17.890427) < 0.00001
for planet, expected in PYJHORA_KALA.items():
delta = 52.18 if planet == "Moon" else -60.0 if planet == "Venus" else 0.0
# BUG-1275: Ayana reads tropical = sidereal + ayanamsa. The fixed sidereal
# longitudes of _planets() were captured in the old mean-ayanamsa frame; with the
# true ayanamsa the Moon's Ayana moves 26.09 -> 26.08 (Kala -0.01).
delta = 52.17 if planet == "Moon" else -60.0 if planet == "Venus" else 0.0
assert abs(calc_kala_bala_precise(planet, planets, context)["total"] - expected - delta) < 0.001
+4 -1
View File
@@ -67,7 +67,10 @@ def test_target_longitude_is_the_natal_sun_in_the_solver_frame() -> None:
natal, _asc, natal_jd, _ay = compute_chart_data(*birth, "mean", ayanamsa_name="lahiri")
solver_sun = solar_return._get_sun_lon_jd(natal_jd, ayanamsa_name="lahiri")
chart_sun = natal["planets"]["Sun"]["degree_raw"]
assert abs(chart_sun - solver_sun) * 3600 > 10 # the two frames really differ here
# BUG-1275: the natal chart used to subtract the mean ayanamsa from an apparent
# position, so it sat one nutation (> 10") away from the solver frame. Both now
# use the true (FLG_SIDEREAL) frame and agree.
assert abs(chart_sun - solver_sun) * 3600 < 1
result = _chart(birth, target_year)
assert abs(result["solar_return"]["sun_lon"] - solver_sun) * 3600 < 1
@@ -131,12 +131,15 @@ def test_fixture_dasha_timeline_rejects_workbuddy_regression_claims() -> None:
current["antardasha"]["end"],
)
assert observed["2014-06-15"] == ("Jupiter", "Rahu", "2014-04-27", "2016-09-20")
# BUG-1275: the sidereal Moon now includes nutation on both sides (FLG_SIDEREAL frame),
# which moves every Vimshottari boundary of this fixture about two days earlier.
# Saturn/Venus 2023-07-11 equals an independent Swiss Ephemeris FLG_SIDEREAL calculation.
assert observed["2014-06-15"] == ("Jupiter", "Rahu", "2014-04-25", "2016-09-18")
# BUG-1268 (upstream 4a807e7d): antardashas are laid from the parent
# mahadasha's exact start instant, not its day-truncated date string, so
# Saturn/Venus starts 2023-07-13T05:10:31 (was 2023-07-12 from midnight).
assert observed["2024-03-01"] == ("Saturn", "Venus", "2023-07-13", "2026-09-11")
assert observed["2027-03-01"] == ("Saturn", "Sun", "2026-09-11", "2027-08-24")
assert observed["2024-03-01"] == ("Saturn", "Venus", "2023-07-11", "2026-09-09")
assert observed["2027-03-01"] == ("Saturn", "Sun", "2026-09-09", "2027-08-22")
def test_one_command_user_invocation_acceptance_check() -> None: