feat(narayana-rath): follow book p.43 for dual lords and node years (BUG-1227~1229)
Independent Staging Quality Gate / validate (push) Failing after 16m17s
Independent Staging Quality Gate / publish (push) Skipped

Round-7 option A is text-first, so Scorpio and Aquarius lords, the Ketu-only degree reversal, and node exaltation years now live in the Rath display layer. Scoring files stay unchanged.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-10-04 18:37:34 +08:00
co-authored by Cursor
parent 64c652eea2
commit baf4ae8b34
15 changed files with 604 additions and 84 deletions
@@ -0,0 +1,97 @@
# PROGRESS:占星师第七轮落地(p.43 双主星、只倒算计都、罗计旺陷加减年)— 2026-10-04
- 任务书:`docs/tasks/TASK-astrologer-rulings-batch6-20261004.md`(`64c652ee`)。
- 分支:`codex/astrologer-rulings-batch6-20261004`,工作树 `.worktrees/astrologer-rulings-batch6-20261004`。
- 开工基线:`origin/staging` = `64c652ee`。预检 `scripts/pre_work_check.py` 为 `pass`,远端 `verified`。磁盘 `/` 可用约 343 GiB。
- BUG:开工时最大号 BUG-1227。本单 BUG-1227 改 resolved,新增 BUG-1228(T2)、BUG-1229(T3)。
- 研究分支 `86e55514` 不在本仓对象库,p.43 按任务书与第七轮回复在 `narayana_rath.py` 重写,没有搬研究开关。
- 冻结文件未改:`scripts/narayana_dasha.py`、`references/rectification_sealed_holdout.v1.json`。Rath 仍只被 `narayana_legacy_label.py` 导入。
## 我替任务书确认的实现
1. (a)(b) 的 `rule` 记年数条款,同宫身份另记 `identity_rule: p116_longitude`。经度全同则 `status: undecided`,不按列表先后取星。
2. (d) 的比较若因循环变成未决,不改走 (e)。
3. (a) 两主都在天蝎或水瓶时,年数固定 12(四颗星在该宫的旺陷修正都是 0),身份仍可比经度。
4. 第 2 周期仍是 12 减第 1 周期,基本年数和修正留空,只保留最终年数。
## T2 第 5 级只倒算计都(BUG-1228)
`_strength_degree`:实体星与罗睺用宫内度数,计都用 30 − 宫内度数,0° 计都的比较值是 30。原书软件表 30 对的胜者与改前相同,不符仍是 Wadiyar 双子/射手、处女/双鱼,都在第 5 级。没有因本条改判的盘。
## T3 罗计旺陷 ±1(BUG-1229)
`rath_period_years`。实体星沿用冻结函数。罗计按 Phalita:罗睺旺双子 / 陷射手,计都旺射手 / 陷双子。截在 0–12。大运和第 7 级都走这层。
显式起运宫后的年数(顺序都是 12/12):
| 表 | 星座 | 书印 | 新值 | 基本 | 修正 | 来源 |
| --- | --- | --- | --- | --- | --- | --- |
| Table 15 | 水瓶、天蝎 | 2、7 | 2、7 | | | 与书印相同 |
| Table 17 | 天蝎 | 10(火星;Chart 3 也是 10) | 2 | 1 | +1 | 双主星 A 取计都,计都在射手入旺 |
| Table 17 | 水瓶 | 8(Table 17);9(Chart 3:罗睺 8+1) | 1 | 1 | 0 | 双主星 A 取土星,不取罗睺。Chart 3 的 9 年按罗睺仍可算出(基本 8、修正 +1),本单不采用 |
| Table 18 | 水瓶 | 2 | 1 | 2 | −1 | 主星仍是罗睺,罗睺落陷减 1。其余 11 段与书印相同 |
| Table 18 | 天蝎 | 9 | 9 | | | 与书印相同 |
其余样表行与书印相同的不逐行列。年数不再作通过线。
## T1 双主星(BUG-1227,解除 blocked)
软件表 10 条都由 (d) 判出:
| 表 | 宫 | 书 | 我们 | 级 | 两主所在 |
| --- | --- | --- | --- | --- | --- |
| Table 22 | 水瓶 | 土星 | 土星 | 1 | 摩羯 / 巨蟹 |
| Table 22 | 天蝎 | 火星 | 火星 | 1 | 水瓶 / 摩羯 |
| Table 23 | 水瓶 | 土星 | 土星 | 2 | 摩羯 / 双子 |
| Table 23 | 天蝎 | 火星 | 计都 | 2 | 处女 / 射手 |
| Table 24 | 水瓶 | 土星 | 土星 | 2 | 天秤 / 射手 |
| Table 24 | 天蝎 | 火星 | 火星 | 2 | 水瓶 / 双子 |
| Table 25 | 水瓶 | 土星 | 土星 | 1 | 金牛 / 处女 |
| Table 25 | 天蝎 | 计都 | 计都 | 3 | 狮子 / 双鱼 |
| Table 27 | 水瓶 | 罗睺 | 罗睺 | 1 | 巨蟹 / 射手 |
| Table 27 | 天蝎 | 火星 | 火星 | 3 | 狮子 / 双子 |
9/10。唯一不符:Table 23 天蝎,书火星,第 2 级计都(射手得木星两个角色)。这是选 A 的已知代价。
底线:Table 15、17 通则起运宫仍自动复现(巨蟹第 1 级、双鱼第 2 级)。Table 18 显式巨蟹后顺序 12/12,通则仍是摩羯第 5 级。强弱 28/30。Table 25 子运仍是 24/36(巨蟹 12、双子 0、金牛 12)。
## T4 展示
- 标签改为「Sanjay Rath 版(并列参考,未进打分与时间轴结论;按原书 p.43 正文(第七轮裁定))」,英文对照在 `pl9_reader_english_terms.py`。
- 参考版报告大运表改为基本年数 / 修正 / 最终。天蝎、水瓶各写一句双主星依据。
- 咨询卡只在当前大运是天蝎或水瓶时带这一句。字数测试仍不超过 12,500(加方法清单的年运、时运不超过 18,500)。
- 12 张公开盘的 Rath 段用真实引擎按盘内经度重算后写入 golden。乔布斯当前大运由天秤 70–72 岁改为水瓶 71–72 岁(前面天蝎少了 1 年,年龄边界前移)。嘉兰水瓶主星由土星改为罗睺,年数仍是 5 / 7。齐达内天蝎由火星 7 年改为计都 8 年(基本 7,入旺 +1)。梦露水瓶由 8 年改为 9 年(罗睺入旺 +1)。
## 测试
| 项 | 结果 |
| --- | --- |
| `test_narayana_rath_rules.py`、`test_narayana_rath_book_tables.py`、`test_narayana_legacy_label.py`、`test_report_english_dictionary.py`、`test_report_english_edition.py`、`test_narayana_dasha.py`、`test_node_own_sign_and_fixed_lords.py` | 通过(上游对照 1 条因本机没有上游仓而跳过) |
| 咨询卡:Rath 三例、字数三份(证据卡、v2、压缩清单) | 通过 |
| `tsc --noEmit` | 0 错。本机 Node 是 v24.15.0;`tsc` 与 `npm test` 用 nvm 的 Node 22.14.0 |
| `npm run lint` | 0 error,126 warnings |
| `npm test`(Node 22.14.0) | 4932 项,pass 4872,fail 19,skipped 41。失败 19 条都是本机没有 Docker,起不来 Postgres。与开工基线同一条命令的失败名单相同,顺序也相同 |
| 全量 `pytest tests` | 见下节 |
| v5 77 例 | 与第五批公布的记分板相同,见下节 |
| 快速门 `run_quality_gate.py --profile quick --skip-frontend-runtime` | `Quality gate passed`。1046 passed、2 skipped(第五批记录是 1047 passed、1 skipped;本机多跳过 1 条,门禁结果是通过) |
## 全量 pytest
开工基线 `64c652ee`(一次性 `--detach` 工作树)与本分支各跑一遍 `.venv` 的 `python -m pytest tests -q --tb=line`。两边都先放好本机已有的 `de421.bsp` 和 `hip_main.dat`,避免 Skyfield 经本机代理现下这两份星历。
失败名单:基线 68 条,本分支 67 条。本分支没有多出来的失败。基线多的一条是 `tests/test_vedastro_divisional_longitude_bridge.py::test_vedastro_bridge_divisional_longitudes_match_local_degree_mapping`,当时报 `bridge_runtime_error`(两套全量同时在跑)。这条在基线工作树单独再跑通过。其余 67 条名字相同,包括库存清单、占星 oracle 快照、VedAstro 运行时针脚;Rath 定向测试和英文版测试不在失败名单里。
跑完后 `git checkout` 掉测试改写的 4 个 `references/oracle/prashna_*_2026_07_20.json`。
## v5 77 例
命令:`PYTHONHASHSEED=0 JYOTISH_API_CHART_CACHE_TTL_SECONDS=0 python scripts/research/holdout_v5_baseline.py --dataset v5`。77 例,三套 harness 都没有 errors。打分文件与 `64c652ee` 无差异。记分板与第五批进度记录里的改前 / 改后数字相同:
| 指标 | ±10 | ±30 | ±60 |
| --- | --- | --- | --- |
| 先验头名 | 0.1818 | 0.0909 | 0.0779 |
| 六题回放头名 | 0.6364 | 0.4935 | 0.3117 |
| 线上区间回放头名 | 0.6623 | 0.5584 | 0.4026 |
| 覆盖(回放) | 0.987 | 0.987 | 0.987 |
| 中位宽度(回放) | 13 | 33 | 65 |
| futile 真值在区间 | 76 | 75 | 76 |
+1 -1
View File
@@ -419,4 +419,4 @@
| `TASK-annual-return-frame-20261003.md` | `PROGRESS-annual-return-frame-20261003.md` | 太阳返照时刻错位:出生太阳与求解器不同参考系(差 15″≈6 分钟)+ 年盘丢秒;243 张年盘里年盘上升变 13、年主变 11;搬上游 7cc6425d/46ed9399 两处,PyJHora 对照 ≤0.5 分钟;排在第三批之后(依据 `docs/research/shared_engine_reuse_audit_2026_10_03.md`) | 已部署 staging `01929bae`(BUG-1220) | 分支 `codex/annual-return-frame-20261003` |
| `TASK-astrologer-rulings-batch4-20261003.md` | `PROGRESS-astrologer-rulings-batch4-20261003.md` | Rath 当前大运进全部领域卡(卡预算 12,000→12,500、总 18,000→18,500,修改 BUG-1160/1161 决定);报告年运强度表改 Tajika 五分法(与年主同口径);校正打分不换,等第六轮 | 已实现待验收(T1–T3 完成) | 分支 `codex/astrologer-rulings-batch4-20261003`(未推送;BUG-1221~1222;校正分数不变、未升版本) |
| `TASK-astrologer-rulings-batch5-20261004.md` | `PROGRESS-astrologer-rulings-batch5-20261004.md` | 占星师第六轮:Rath 双主星按 p.43(a)–(e)、罗计尊贵按 Rath Table 9(仅 Narayana 内)、子运方向 p.51 例外与书内分歧标注、Wadiyar 两对标软件特例;年主选不出时不再用 Muntha 主星顶替(对齐上游 03bea6ed);Rath 替换校正 v5 重试算(研究)(BUG 从 1223 起) | 已实现待验收(T2–T5 完成;T1 按红线停下 blocked;T6 研究分支已跑) | 分支 `codex/astrologer-rulings-batch5-20261004`(未推送;BUG-1223~1227;校正分数不变、未升版本);研究分支 `codex/narayana-rath-rectification-trial-20261004`(不合入) |
| `TASK-astrologer-rulings-batch6-20261004.md` | `PROGRESS-astrologer-rulings-batch6-20261004.md` | 第七轮裁定(共享仓书面回复,产品采用;问 1 选 A):Rath 版双主星按 p.43 (a)–(e)(BUG-1227 解除 blocked,推翻第五批红线 2 的 Table 17 年数底线);第 5 级宫主度数只倒算计都(p.71 脚注 42);罗计旺陷 ±1 年;同宫两主比经度;BUG 从 1228 起 | 待领取 | 分支 `codex/astrologer-rulings-batch6-20261004` |
| `TASK-astrologer-rulings-batch6-20261004.md` | `PROGRESS-astrologer-rulings-batch6-20261004.md` | 第七轮裁定(共享仓书面回复,产品采用;问 1 选 A):Rath 版双主星按 p.43 (a)–(e)(BUG-1227 解除 blocked,推翻第五批红线 2 的 Table 17 年数底线);第 5 级宫主度数只倒算计都(p.71 脚注 42);罗计旺陷 ±1 年;同宫两主比经度;BUG 从 1228 起 | 待验收 | 分支 `codex/astrologer-rulings-batch6-20261004`(BUG-1227~1229;校正分数文件未改、未升版本) |