diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index 3de52eb6..75bf130f 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -4971,6 +4971,22 @@ - 复发自:BUG-328(当时为了露出聊天改成下半屏分栏,叠层低于输入框) - 修复版本:9670b661 +## BUG-331 | Raman 默认岁差后,Lahiri 校准的 CLI smoke 仍按旧盘面断言 + +- 状态:resolved +- 首次发现:2026-08-20 +- 最近更新:2026-08-20 +- 影响面:Gitea `backend-quality-gate` Python quick quality gate、`tests/test_cli_smoke.py`、`tests/golden/golden_cases.json` 只被 JSON 校验通过后进入同一套 pytest +- 用户现象:质量门禁打印 `json ok tests/golden/golden_cases.json` 后继续跑 `audit_*` / `validate_bphs_invariants` / `pytest tests/test_cli_smoke.py ...`。JSON 本身有效;失败发生在 CLI smoke:Dasha 起始时刻、D9 Jupiter 尊严、Darakaraka 行星与 Navamsa 敌友标签对不上。 +- 触发条件:产品默认岁差改为 Raman 后,未给 Lahiri 校准样本显式传 `--ayanamsa lahiri`,再跑 quick quality gate。 +- 根因:这些断言锁的是旧 Lahiri 盘面(例如 `1952-03-19T20:24:47`、`NEECHA_BHANGA`、DK=`Sun`)。默认 Raman 后月亮分宿与分盘换升改变,断言失败。`golden_cases.json` 的 SAV=337 等不变量与岁差无关,JSON 校验和 golden runner 仍通过。 +- 修复:Lahiri 校准的 dignity / Dasha / DK 样本显式传 `--ayanamsa lahiri`。产品默认仍是 Raman;Raman 元数据测试继续显式传 `raman`。 +- 验证:`tests/test_cli_smoke.py` 中上述失败项;`tests/test_cli_smoke.py::test_full_reading_golden_cases_cover_user_ready_output`。 +- 防复发:对照样本必须显式写岁差名,不得依赖引擎默认;改 `DEFAULT_AYANAMSA_NAME` 后必须跑 `tests/test_cli_smoke.py` 与 quick quality gate 的 CORE pytest 列表。 +- 相关记录:无 +- 复发自:无 +- 修复版本:待发布 + ## BUG-329 | 生时纠正 Agent 回答在结算后一次性出现,推理中无法停止 - 状态:resolved diff --git a/tests/test_cli_smoke.py b/tests/test_cli_smoke.py index 046a1db3..bba153ae 100644 --- a/tests/test_cli_smoke.py +++ b/tests/test_cli_smoke.py @@ -24,6 +24,9 @@ BASE_BIRTH_ARGS = [ "--lon", "116.4", "--tz", "8", ] +# Lahiri-calibrated comparison fixtures. Product default is Raman; these +# assertions lock Dasha/D9/DK labels that were measured under Lahiri. +LAHIRI_ARGS = ["--ayanamsa", "lahiri"] def run_engine(*args: str) -> dict: @@ -138,6 +141,7 @@ def test_chart_reports_richer_d1_dignity_labels_for_user_case() -> None: "--lat", "37.7749", "--lon", "-122.4194", "--tz", "8", + *LAHIRI_ARGS, ) assert result["planets"]["Jupiter"]["sign"] == "Gemini" @@ -227,6 +231,7 @@ def test_full_reading_accepts_second_and_preserves_birth_time_precision() -> Non "--lat", "37.7749", "--lon", "-122.4194", "--tz", "8", + *LAHIRI_ARGS, "--today", "2026-06-24", "--transit-date", "2026-06-24", ) @@ -699,7 +704,7 @@ def test_full_reading_exposes_sensitive_point_modules() -> None: def test_full_reading_uses_d9_context_for_navamsa_dignity() -> None: - result = run_engine("full-reading", *BASE_BIRTH_ARGS) + result = run_engine("full-reading", *BASE_BIRTH_ARGS, *LAHIRI_ARGS) d9_jupiter = result["modules"]["d9_navamsa_expanded"]["Jupiter"] assert d9_jupiter["sign"] == "Capricorn" @@ -717,6 +722,7 @@ def test_full_reading_uses_d9_context_for_darakaraka_dignity() -> None: "--lat", "35.6895", "--lon", "139.6917", "--tz", "9", + *LAHIRI_ARGS, ) darakaraka = result["modules"]["jaimini"]["darakaraka"] @@ -736,6 +742,7 @@ def test_full_reading_uses_d9_context_for_vimsopaka_navamsa_dignity() -> None: "--lat", "35.6895", "--lon", "139.6917", "--tz", "9", + *LAHIRI_ARGS, ) navamsa = result["modules"]["vimsopaka"]["Sun"]["varga_scores"]["Navamsa"] @@ -743,7 +750,7 @@ def test_full_reading_uses_d9_context_for_vimsopaka_navamsa_dignity() -> None: def test_full_reading_maps_advanced_dignity_labels_into_vimsopaka_scores() -> None: - result = run_engine("full-reading", *BASE_BIRTH_ARGS) + result = run_engine("full-reading", *BASE_BIRTH_ARGS, *LAHIRI_ARGS) jupiter_d9 = result["modules"]["d9_navamsa_expanded"]["Jupiter"] assert jupiter_d9["dignity"] == "NEECHA_BHANGA"