diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index 008f65c6..63b8a6d9 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -20175,12 +20175,12 @@ - 状态:resolved(代码 + 回归测试;待部署) - 首次发现 / 最近更新:2026-10-28 / 2026-10-28(issue #141,上游 `45b3b66b`) - 影响面:配偶星 Darakaraka。`scripts/darakaraka_reader.py`。合盘和完整解读会用到它。 -- 现象:读者自己排七星或八星 Karaka,交点和排除规则可能与主表不同。 +- 现象:读者自己排七星或八星 Karaka,交点和排除规则可能与主表不同。旧读者在八星法下取 `sorted_planets[6]`(第 7 高)而不是最低者,所以有的盘给出的配偶星与主表不一致。 - 触发条件:读取 Darakaraka。 - 根因:上游新增的 `calc_chara_karaka` 我方没有。主表在冻结的 `scripts/jaimini.py`,已有七星和八星排序。 - 修复:改为调用已有的 `calc_chara_karaka_7` 与 `calc_chara_karaka_8`。不改 `jaimini.py`。 -- 验证:`tests/test_upstream_sync9_darakaraka_reader_identity.py` 通过,结果与主表同一行。 -- 防复发:该身份测试。不要在读者里再排一套。 +- 验证:`tests/test_upstream_sync9_darakaraka_reader_identity.py` 通过,结果与主表同一行。`tests/test_cli_smoke.py::test_full_reading_uses_d9_context_for_darakaraka_dignity` 原先写死 `dk_planet == "Sun"`,锁的正是旧读者的错值(这张盘月亮 3.09° 最低,主表一直是 Moon),所以一直没拦住;本轮把期望改为 `Moon`,并加一条「读者 = 同一结果里 `chara_karaka_8.karaka_table_8.Darakaraka.planet`」的断言。 +- 防复发:该身份测试,加上 CLI 测试里的「读取器 = 主表」断言。不要在读者里再排一套,也不要再锁具体星名。 - 关联:无。 - 复发自:无。 - 修复版本:分支 `codex/upstream-sync9-20261028`。 diff --git a/docs/tasks/PROGRESS-upstream-sync9-20261028.md b/docs/tasks/PROGRESS-upstream-sync9-20261028.md index b8573693..8614b432 100644 --- a/docs/tasks/PROGRESS-upstream-sync9-20261028.md +++ b/docs/tasks/PROGRESS-upstream-sync9-20261028.md @@ -23,6 +23,25 @@ 接入映射:`docs/research/upstream_capability_map_2026_10_28.md`。 +## 第 1 次打回(2026-10-28) + +- 被验 SHA:`57867c94fe7fd08196a2cb5d0be4b7c1f2cdf5df`。修复单:`docs/tasks/TASK-upstream-sync9-fix-20261028.md`。 +- 只改测试与记录:`tests/test_cli_smoke.py` 一条测试、`docs/BUG_HISTORY.md` 的 BUG-1478、本文件。没有改 `scripts/`、冻结文件、前端。 +- 这张盘:`dk_planet` 由 `Sun` 变 `Moon`(月亮 3.09° 最低,太阳 8.85°),D9 由 `Gemini` / `ENEMY` 变 `Cancer` 第 1 宫 / `OWN_SIGN`。同一结果里 `chara_karaka_7` 与 `chara_karaka_8` 的 `Darakaraka` 都是 `Moon`。 +- 检索 `grep -rn "dk_planet\|Darakaraka\|darakaraka" tests/` 共 56 处:只有 `test_cli_smoke.py` 这一条锁具体星名;`test_api_server_security.py` 只判真假;`test_chara_karaka_8_bphs_order.py`、`test_jaimini.py` 自己算期望;`test_consultation_consumer_context.py` 与主表互比;其余是自造 fixture 的输入,不经过读者。 +- 发现但没改:`tests/golden/upstream_sync2/relationship_einstein.json` 记的 `dk_planet` 是 `Jupiter`,这张盘现在算 `Sun`。`test_upstream_sync2_goldens.py` 只比键和类型、不锁值,本轮不动它。 + +跑过的命令: + +| 检查 | 命令 | 结果 | +| --- | --- | --- | +| Darakaraka CLI 测试 | `.venv\Scripts\python -m pytest tests/test_cli_smoke.py -k darakaraka -o addopts="" -q` | 1 passed、34 deselected | +| 11 个上游同步测试文件 | 同一命令,参数换成那 11 个文件 | 240 passed(本机收集 240 条) | +| 检索到的 Darakaraka 相关测试 | `test_chara_karaka_8_bphs_order.py`、`test_jaimini.py`、`test_synastry_full_dossier.py`、`test_consultation_consumer_context.py`、`test_d9_evidence_bands.py` | 80 passed | +| 接口里的配偶星片段 | `tests/test_api_server_security.py -k relationship_returns_spouse_status_fragment` | 1 passed、134 deselected | + +环境缺口:Windows 上不设 `PYTHONUTF8=1` 时,`full-reading` 子进程按 GBK 编码输出,写到 `⚠` 抛 `UnicodeEncodeError`,测试看起来像引擎挂了。这是本机控制台口径,不是代码问题;本轮所有命令都带了这个变量。 + ## 跑过的命令 | 检查 | 命令 | 结果 | @@ -46,6 +65,7 @@ Python 快速门、前端 tsc / lint / build、`npm test`、`test:db` 本轮不 | 同上,无月亮经度的 Kalachakra | major 行没有 `antardasha` | 无月亮经度时也带按比例子运 | 上游简化路径同样在返回前附上子运 | | Saham `formula_traces` | 上游是 36 个键的字典 | 我方仍是报告用的 36 条列表,每条有 `key` / `rule` / `longitude` | 年运几何测试和报告章节按列表读。Table 74 的数值在各 `*_saham` 行上,黄金值按上游数字断言,没有放宽 | | `tests/test_tajika.py` 规则路径 | `SAHAM_RULES_PATH.endswith('references/saham_rules.json')` | 没有改这条断言 | Windows 上 `os.path.join` 是反斜杠,断言为假。路径拼法本轮没改。这是环境缺口,不把断言改成「或反斜杠」 | +| `tests/test_cli_smoke.py::test_full_reading_uses_d9_context_for_darakaraka_dignity` | `dk_planet` 期望 `Sun`,D9 期望 `Gemini` / `ENEMY` | `Moon`,D9 `Cancer` 第 1 宫 / `OWN_SIGN`,并加「`dk_planet` = `chara_karaka_8.karaka_table_8.Darakaraka.planet`」断言 | 原断言锁的是旧读者八星法取第 7 高给出的错值(BUG-1478)。这张盘月亮 3.09° 最低,主表本来就是 `Moon`;没有删除或放宽任何断言,另补了 D9 宫位 | ## 偏离 diff --git a/tests/test_cli_smoke.py b/tests/test_cli_smoke.py index 3e6aabf6..705594d8 100644 --- a/tests/test_cli_smoke.py +++ b/tests/test_cli_smoke.py @@ -727,10 +727,18 @@ def test_full_reading_uses_d9_context_for_darakaraka_dignity() -> None: *LAHIRI_ARGS, ) - darakaraka = result["modules"]["jaimini"]["darakaraka"] - assert darakaraka["dk_planet"] == "Sun" - assert darakaraka["d9_sign"] == "Gemini" - assert darakaraka["d9_dignity"] == "ENEMY" + jaimini = result["modules"]["jaimini"] + darakaraka = jaimini["darakaraka"] + assert darakaraka["dk_planet"] == "Moon" + assert darakaraka["d9_sign"] == "Cancer" + assert darakaraka["d9_house"] == 1 + assert darakaraka["d9_dignity"] == "OWN_SIGN" + # The reader must agree with the canonical Chara Karaka table (BUG-1478): + # the old reader took the 7th highest degree in the 8-karaka variant. + assert ( + darakaraka["dk_planet"] + == jaimini["chara_karaka_8"]["karaka_table_8"]["Darakaraka"]["planet"] + ) def test_full_reading_uses_d9_context_for_vimsopaka_navamsa_dignity() -> None: