test(cli): lock Darakaraka to the canonical karaka table (BUG-1478, issue #141)

The D9 smoke case expected Sun, which is what the old reader produced when
it took the 7th highest degree in the 8-karaka variant. The canonical table
and the fixed reader both give Moon for this chart (Moon 3.09 degrees).

Expect Moon and the D9 fields that follow it, and assert the reader agrees
with chara_karaka_8.karaka_table_8.Darakaraka.planet so the test locks
reader/main-table identity instead of one planet name.

Co-Authored-By: Grok (agent loop)
This commit is contained in:
jesse-ux
2026-10-28 12:39:55 +08:00
co-authored by Grok (agent loop)
parent bb2382833b
commit 60116f2813
3 changed files with 35 additions and 7 deletions
+3 -3
View File
@@ -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`。
@@ -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 宫位 |
## 偏离