From e31c2064b4e502951cd48b3cf18132b5d9d06ac8 Mon Sep 17 00:00:00 2001 From: Jesse_Chen Date: Sat, 3 Oct 2026 17:19:03 +0800 Subject: [PATCH] docs: astrologer rulings batch 2 records (BUG-1213..1215, PROGRESS, CHANGELOG, BLOCKED, T5 note) Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE --- BLOCKED.md | 7 + CHANGELOG.md | 7 + docs/BUG_HISTORY.md | 48 ++++++ ...ana_rath_rectification_trial_2026_10_03.md | 24 +++ ...RESS-astrologer-rulings-batch2-20261003.md | 161 ++++++++++++++++++ docs/tasks/README.md | 2 +- 6 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 docs/research/narayana_rath_rectification_trial_2026_10_03.md create mode 100644 docs/tasks/PROGRESS-astrologer-rulings-batch2-20261003.md diff --git a/BLOCKED.md b/BLOCKED.md index d5f54adf..735c033e 100644 --- a/BLOCKED.md +++ b/BLOCKED.md @@ -1,5 +1,12 @@ # BLOCKED +## TASK-astrologer-rulings-batch2:Rath 版 Narayana 起运宫、名人生平回测、`next build`、真机(2026-10-03) + +- **Rath 版 Narayana 起运宫(任务书红线 2)**:给定原书起运宫时,Table 15 / 17 / 18 的 36 个大运星座与年数全对;但现有强弱规则选出的起运宫 Table 17 为处女(原书双鱼)、Table 18 平局(原书巨蟹)。缺两条口径(见 `docs/tasks/PROGRESS-astrologer-rulings-batch2-20261003.md`「下轮问占星师」1、2),答复前 `scripts/narayana_rath.py` 不接任何用户可见面与打分,T5 校正试算不做。替代证据:`tests/test_narayana_rath_book_tables.py`。 +- **名人生平回测**:卡片字段有变化(年运 `varshesha_basis` 文字与 Mudda 分段、`timing.narayana.algorithm`、Narayana AD/PD 去 `years`)。本机无模型凭据,按 `docs/testing/consult-affliction-backtest-20261001.md` 重跑一轮,核对严重冲突数不高于第七轮。替代证据:两份 golden 用真实引擎重采,前端全量失败清单与开工基线逐条一致。 +- **`next build` / 首屏 gzip**:`frontend/node_modules` 为工作树外软链,Turbopack 拒绝;本单不改页面与路由,未测。 +- **真机**:卡片年主依据、参考版报告「算法:旧算法…」行需登录态浏览器查看。 + ## TASK-astrologer-rulings-batch1:名人生平回测、`next build` / 首屏 gzip、真机待验(2026-10-03) - **名人生平回测**:卡片字段有变化(`traditional_yogas` 文字带「成立条件 / 部分减弱」、`shadbala` 每星改为 `rupas / minimum_check / level`、`sav_by_house` 加 `sav_sodhita`、年盘 `varshesha_basis`)。执行环境没有任何模型凭据,按 `docs/testing/consult-affliction-backtest-20261001.md` 的命令重跑一轮,核对严重冲突数不高于第七轮。替代证据:两份 golden 用真实引擎重采且二次重采逐字节相同;前端全量测试失败清单与开工基线逐条一致。 diff --git a/CHANGELOG.md b/CHANGELOG.md index cd675a71..efbdd4cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # 印度占星 Skill 更新日志 +## 2026-10-03 — 占星师口径第二批:五大人格 D9 落陷只算减弱、年主按 Panchadhikari 选、Narayana 标明旧算法 + +- 五大人格(Ruchaka、Bhadra、Hamsa、Malavya、Sasa):主星在 D9(九分盘)落陷时格局照常列出,附「D9 落陷,兑现减弱」,不再判不成立;只有命宫角宫 + 入庙/入旺这一条不满足才不成立。以前这条 D9 检查实际从未执行,现在卡片、报告都会按经度算 D9(BUG-1213)。9 位公开名人盘结论不变。 +- 年运的年主(Varshesha)改按占星师定的 Panchadhikari 选法:五类候选(昼夜年主、本命上升主、Muntha 主、年盘上升主、Tri-Rashi 主)里,先看谁以吉相位照年盘上升,取其中 Panchavargiya 最强的;都没有就看凶相位;再没有就取全体最强。卡片与报告年主旁写一句选法依据,并注明「Panchavargiya 为本地近似计算」;去掉上一批的「暂用 Muntha 主星」。年内 Mudda 分段从新的年主起排,所以月份分段也会变。Muntha 仍按「本命上升 + 已满年数」(BUG-1214)。 +- Narayana 第二时间轴:凡是显示 Narayana 的地方(咨询数据卡、参考版报告、命令行)都标明「旧算法(从上升起、一律顺行),待替换为 Sanjay Rath 版」;咨询和报告的结论、生时校正打分仍用旧算法,不变。Sanjay Rath 版已按原书三张样表试做:给定原书起运宫时大运顺序与年数全对,但起运宫强弱规则在两张样表上不一致,按约定不上线、不做校正试算,已列入下轮问占星师(BUG-1215)。 +- 生时校正:本批没有改动打分用到的文件,分数不变、算法版本不变,研究记录无需重新冻结(v5 77 例对比见进度记录)。名人生平回测因本机无模型凭据未跑(见 BLOCKED)。Skill 版本不变;不改数据库结构。新生成的报告和数据卡才有这些变化,旧报告内容不变。 + ## 2026-10-03 — 占星师口径第一批:五大人格、孤月、落陷取消、行星力量、宫位力量、八分法、罗计本宫、年主标注 - 五大人格(Ruchaka、Bhadra、Hamsa、Malavya、Sasa)只按占星师定的一套判:只看上升起的角宫;逆行不再算破格;燃烧、与凶星同宫或被凶星照只写「部分减弱」并列原因,不再直接判失效。木星在 1/5/9 宫的「三方宫汉萨」这类非经典写法不再出现在卡片和报告上(BUG-1207)。 diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index d9544367..8d76e450 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -16341,3 +16341,51 @@ - 相关记录:BUG-1028。 - 复发自:无 - 修复版本:待发布 + +## BUG-1213 | 五大人格 D9 落陷判「不成立」,与占星师裁定(只算减弱)不符;且产品路径从未传 D9,这条一直没执行 + +- 状态:resolved(分支 `codex/astrologer-rulings-batch2-20261003`,未推送;待验收) +- 首次发现 / 最近更新:2026-10-03 / 2026-10-03 +- 来源:占星师第四轮裁定 2026-10-03 问 1;任务书 `TASK-astrologer-rulings-batch2-20261003` T1。 +- 影响面:`scripts/pancha_mahapurusha.py`(主检测器)、`scripts/main_yoga_detectors.py`(规则引擎行)、`jyotish_api_server._detect_yogas`(`chart.yogas`)、`/api/pancha_mahapurusha`、卡片 `traditional_yogas`、报告瑜伽总表。 +- 现象:主检测器写着「D9 落陷 → `is_valid: False`」,但只在调用方给 `navamsa_sign` 时检查;咨询、报告、规则引擎都不给,所以这条从未生效(BUG-1207 已记)。占星师裁定 D9 落陷只算减弱。 +- 根因:规则写成破格,且 D9 来源依赖调用方,调用方都不传。 +- 修复:`bc03bba2`。D9 落陷时格局仍成立(`status: formed`),加 `d9_dignity_modifier: "weakened"`、`d9_sign`,原因列「D9 落陷,兑现减弱」(英文 `debilitated in D9: delivery weakened`),强度为部分减弱;只有 D1 条件(命宫角宫 + 入庙/入旺)不成立才是 `not_formed`(`include_not_formed=True` 时返回该行)。没给 `navamsa_sign` 时由黄道经度推出 D9,所以卡片、报告、`/api/pancha_mahapurusha` 都检查。 +- 验证:`tests/test_pancha_mahapurusha_main_detector.py`(D9 落陷只减弱、D1 不成立为 not_formed、卡片与规则引擎同一行同一原因;既有两条按三栏改写)。9 位公开名人盘:没有一张的五大人格星在 D9 落陷,卡片与报告结论不变(golden 只多出 `d9_dignity_modifier: null`)。 +- 防复发:同上测试。 +- 相关记录:BUG-1207。 +- 复发自:无 +- 修复版本:待发布 + +## BUG-1214 | 年运年主一直取 Muntha 主星;Panchadhikari 选法上游已实现但没同步(另:本地 PyJHora 查询函数引用了未定义的名字) + +- 状态:resolved(分支 `codex/astrologer-rulings-batch2-20261003`,未推送;待验收) +- 首次发现 / 最近更新:2026-10-03 / 2026-10-03 +- 来源:占星师第四轮裁定 2026-10-03 问 3;任务书 T2。移植来源:上游 `yinduzhanxing` `c7117f92`。 +- 影响面:`scripts/tajika.py`(新增 `calc_panchadhikari_year_lord`、Tri-Rasi 主星表、`PLANET_TO_INDEX` / `INDEX_TO_PLANET`、带岁差参数的 PyJHora 查询函数)、`references/tajika_panchavargiya_rules.json`(新增)、新 `scripts/tajika_year_lord.py`、`solar_return.solar_return_full_report` 与 `jyotish_engine.cmd_tajika`(两个年运生产者)、`annual_tajika_pack`、咨询年运层 `varshesha_basis`、报告两处「Selection basis」、Mudda Dasha / Tri-Pataka(从年主起)。 +- 现象:卡片与报告的年主就是 Muntha 星座的主星,只标「暂用」(BUG-1212)。 +- 根因:上游 `calc_panchadhikari_year_lord`(五类候选 → 吉相位照年盘上升者中取 Panchavargiya 最强 → 否则凶相位者中取最强 → 否则全体最强)没有同步到本仓;BUG-1037 只删掉了引用它的死代码。另:本仓 `_external_pyjhora_panchavargiya_score*` 用了未定义的 `PLANET_TO_INDEX` / `INDEX_TO_PLANET` / `_PYJHORA_PVB_SIDECAR_CACHE`,因为没有调用方一直没暴露。 +- 修复:`0afcc2d9`。按上游原样移植函数、依赖与规则 JSON(blob `e8c15ac3` 一致)。本地差异两处:① 加关键字参数 `muntha_sign_idx`——上游的 Muntha 主候选用「年盘上升 + 年数」,本仓 Muntha 一律「本命上升 + 已满年数」(问 3 维持),生产调用方传入;不传时与上游行为相同。② 产品路径不把年盘 JD 交给 PyJHora(AGPL,API 镜像与 CI 都没有;本机有时会选出与生产不同的年主,且进程内调用不设岁差、同输入跨进程分数不同),Panchavargiya 一律 `native_proxy`,标注「Panchavargiya 为本地近似计算」;`JYOTISH_YEAR_LORD_PYJHORA_REFERENCE=1` 恢复上游查询,仅供研究。两个生产者共用 `select_annual_year_lord`,冲突门照常比较。输出 `candidates` / `candidate_list`(每个候选的分数、engine、吉凶相位)、`selection_basis`、一句话依据(中英)、`muntha_basis`。卡片 `varshesha_basis` 与报告「Selection basis」改为这句话,去掉 BUG-1212 的暂用标注。 +- 验证:`tests/test_tajika_panchadhikari_year_lord.py`(四种选法分支、Muntha 参数、规则 JSON 与上游 blob 一致、两个生产者同盘同年主、研究开关)、`tests/test_year_lord_basis_label.py`、`tests/test_report_reader_main.py`(三条按三栏改写)。9 位公开名人 2026 年年盘:同输入下与上游函数逐项相同 9/9(native);生产结果与上游年主不同 2/9,原因都是 Muntha 起点(本命 vs 年盘)。上游 `tests/test_tajika.py` 没有 Panchadhikari 用例;上游 CLI 冒烟用例依赖私有本地盘,未移植。 +- 防复发:同上测试。 +- 相关记录:BUG-1212、BUG-1037、BUG-1028。 +- 复发自:无 +- 修复版本:待发布 + +## BUG-1215 | 第二时间轴 Narayana 一律从上升起、一律顺行,各 profile 只改标签;Sanjay Rath 版起运宫未能复现原书样表 + +- 状态:investigating(标注已修;Rath 版起运宫未复现原书 Table 17 / 18,按红线未接任何用户可见面与打分;T5 试算未做) +- 首次发现 / 最近更新:2026-10-03 / 2026-10-03 +- 来源:占星师第四轮裁定 2026-10-03 问 4;产品选方案 A;任务书 T3、T4(T5 未做)。移植来源:上游 `yinduzhanxing` `c7117f92`(规则账本 JSON / md、原书样表 JSON)。 +- 影响面:`narayana_dasha.narayana_dasha_full_report` 的使用方(咨询 `modules.narayana_dasha`、报告 Step 4.13、`cmd_narayana_dasha`)、卡片 `timing.narayana`、参考版报告 Narayana 段与 dasha 家族表;新 `scripts/narayana_rath.py`(研究用,未接)。 +- 现象:`calc_narayana_mahadasha` 始终从上升起、顺黄道;`select_narayana_seed_sign` 只写进 `seed_selection` 元数据。 +- 根因:第二时间轴从未按任何作者的规则实现。 +- 修复: + - T4 `9eb22f63`、`693467bf`:新 `narayana_legacy_label`(放在消费层,`narayana_dasha.py` 在冻结身份里不动)给结果加 `profile: legacy_reference_only`、`algorithm_note`「旧算法(从上升起、一律顺行),待替换为 Sanjay Rath 版」(中英)与短标签 `algorithm_label`「旧算法(从上升起、一律顺行)」;卡片 `timing.narayana.algorithm` 原样抄短标签(全文会让乔布斯婚恋卡超 12,000 字预算,卡片里 Narayana AD/PD 去掉可由起止年龄推出的 `years`,最大卡 11,979 < 基线 11,983)、投影白名单 `algorithmlabel`、参考版报告 Narayana 段和 dasha 家族表、CLI 输出都带这句。删掉没有使用方的 `narayana-dasha --variant-profile`(唯一把 Chara Dasha 作者名当作 Narayana profile 的地方)。全仓用户可见面没有「K.N. Rao / kn_rao」挨着 Narayana。 + - T3 `7cb332bc`:`narayana_rath.calc_narayana_rath`(Table 10 顺序、土星在起运宫 Table 11、计都反转、年数 `jaimini_odd_footed_dignity_v2` + 双主星 `jaimini_dual_lord_source_v1`、子运 12 等分 Table 13/11/14、起运宫用现有 `select_narayana_seed_sign`、平局输出 `parameter_sensitive` 并列两种起法)。给定原书起运宫时,三张样表 36/36 个大运星座与年数全对;但起运宫:Table 15 对(巨蟹),Table 17 选出处女(原书双鱼),Table 18 平局(原书巨蟹)。 +- 验证:`tests/test_narayana_legacy_label.py`、`tests/test_narayana_rath_book_tables.py`(含「没有任何脚本导入 narayana_rath」)、`frontend/tests/consult-evidence-card-20260927.test.ts` 新增一条断言。 +- 未解决:起运宫强弱规则缺两处口径,见进度记录「下轮问占星师」。答复前 Rath 版不接用户可见面、不进打分;T5 试算不做。 +- 防复发:同上测试。 +- 相关记录:BUG-1211(`narayana_dasha` 双主星不动)。 +- 复发自:无 +- 修复版本:待发布(标注部分) diff --git a/docs/research/narayana_rath_rectification_trial_2026_10_03.md b/docs/research/narayana_rath_rectification_trial_2026_10_03.md new file mode 100644 index 00000000..5a1f2b88 --- /dev/null +++ b/docs/research/narayana_rath_rectification_trial_2026_10_03.md @@ -0,0 +1,24 @@ +# Narayana Rath 版替换校正试算(任务书 T5)— 2026-10-03 + +## 结论 + +**未做。** 任务书红线 2:Rath 版若不能复现原书三张样表的起运宫与大运顺序,就停在 T3、T5 不做。实测起运宫三张里只对一张,所以没有加试算开关,没有跑 v5 77 例的 R1 / R2 变体,生时校正打分文件一个字节都没动。 + +## 原书样表复现(`tests/test_narayana_rath_book_tables.py`) + +样表与规则账本按原样移植自上游 `yinduzhanxing` `c7117f92`(`references/oracle/sanjay_rath_narayana_book_ledger_2026_08_28.json`)。出生资料用书中样表对应的公开盘,Lahiri 岁差。 + +| 样表 | 原书起运宫 | 现有强弱规则选出 | 给定原书起运宫时:大运顺序 | 给定原书起运宫时:年数 | +| --- | --- | --- | --- | --- | +| Table 15(Sri Aurobindo 1872) | 巨蟹 | 巨蟹 ✓ | 12/12 ✓(Table 10) | 12/12 ✓ | +| Table 17(书中标准盘 1963) | 双鱼 | 处女 ✗ | 12/12 ✓(Table 10) | 12/12 ✓ | +| Table 18(Indira Gandhi 1917) | 巨蟹 | 平局(parameter_sensitive,列出巨蟹 / 摩羯两种) | 12/12 ✓(土星在巨蟹,Table 11 顺行) | 12/12 ✓ | + +- 年数用 `jaimini_odd_footed_dignity_v2`(Upadesa 1.1.25–27 奇偶足计数、定宫例外、入旺 +1 / 落陷 −1;账本 `upadesa_1125_1126_odd_even_count`、`upadesa_1127_fixed_sign_exception`、`upadesa_bphs_exalt_debil_adjustment`),天蝎 / 水瓶双主星用 `jaimini_dual_lord_source_v1`。36 行全对,说明年数规则和三张盘的出生资料都没问题。 +- 差距只在起运宫强弱判定: + - Table 17:命宫双鱼(木星在本宫)与第 7 宫处女(火星)各一星;现有规则第二级只数「木星、水星、宫主的星座相位」,不数同宫,处女得到木星的相位而胜出。若「同宫也算、且木星作为木星与作为宫主各算一次」(上游 `rath_p36_role_conjunction_v1` 的读法),双鱼 2 比 1 胜出,与原书一致。 + - Table 18:巨蟹(土星)与摩羯(月亮)在一、二级都打平;入旺、星座性质、宫主奇偶、大运年数(都是 6 年)也都打平。若下一级是「含 Atmakaraka 的宫」,土星是 AK、在巨蟹,巨蟹胜,与原书一致;若是「宫主为 AK 的宫」,摩羯胜,与原书相反。 + +## 下一步 + +占星师答复两处口径后:改起运宫规则 → 三张样表全过 → 再加开关跑 R1 / R2(只换大运 / 大运与子运都换),三段对比与「逐例变化最大的 5 例」按任务书写在本文件。 diff --git a/docs/tasks/PROGRESS-astrologer-rulings-batch2-20261003.md b/docs/tasks/PROGRESS-astrologer-rulings-batch2-20261003.md new file mode 100644 index 00000000..54ebc35b --- /dev/null +++ b/docs/tasks/PROGRESS-astrologer-rulings-batch2-20261003.md @@ -0,0 +1,161 @@ +# PROGRESS:占星师口径第二批(D9 修饰、Tajika 年主、Narayana Rath 版)— 2026-10-03 + +- 任务书:`docs/tasks/TASK-astrologer-rulings-batch2-20261003.md`。执行方:Claude 子代理(产品负责人要求直接执行)。 +- 分支 `codex/astrologer-rulings-batch2-20261003`,工作树 `.worktrees/astrologer-rulings-batch2-20261003`,基线 `origin/staging` = `52b3061f`。**未推送**。 +- 上游:`/workspace/yinduzhanxing` `origin/main` = `c7117f92`(与任务书一致;只读,未提交、未推送)。 +- BUG 编号:开工时最大号 BUG-1212;本单 BUG-1213~1215。 + +## 结论 + +| 任务 | 结果 | +| --- | --- | +| T1 五大人格 D9 落陷只算减弱 | 完成(BUG-1213) | +| T2 Tajika 年主 Panchadhikari | 完成(BUG-1214);同输入与上游函数逐项相同 9/9 | +| T3 Narayana Rath 版 | 实现并按原书样表回放:给定原书起运宫时大运顺序与年数 36/36 全对;**起运宫只对 1/3**(Table 17 选出处女、原书双鱼;Table 18 平局、原书巨蟹)→ 红线 2:未接任何用户可见面与打分 | +| T4 旧 Narayana 如实标注 | 完成(BUG-1215) | +| T5 Rath 版替换校正试算 | **未做**(红线 2 / 让步顺序:T3 样表不过就停在 T3);研究记录写明原因 | +| 生时校正 | 本单没有改动任何冻结身份文件(`PRODUCTION_FILES` 与 dataset `frozen_scoring.files`),无需重新冻结;v5 77 例改前改后逐项相同;不升打分版本 | + +## 环境 + +| 项 | 实际 | +| --- | --- | +| Python | 无 `.venv`,全部用系统 `python3`(3.13.5)。本机用户目录装了 PyJHora 4.8.7(API 镜像与 CI 都没有) | +| Node | `/exec-daemon/node` v22.14.0(scratchpad 临时 bin 软链);`frontend/node_modules` 软链到同 lockfile 的 `.worktrees/consult-career-yoga-functional-20261002/frontend/node_modules` | +| 磁盘 | 开工 45G 可用;评测前 45G | +| 预检 | `pre_work_check.py` exit 0 | +| 模型 key | 无 → 名人生平回测未跑(BLOCKED) | +| `next build` | 未跑(node_modules 为软链,Turbopack 拒绝;本单不改页面与路由) | +| 一次性工作树 | `.worktrees/batch2-baseline-52b3061f`(基线)、`.worktrees/batch2-eval-921b336b`(改后评测),均 `--detach` 新建,未切换任何别人的工作树分支 | + +## 提交与任务对应 + +| 任务 | 提交 | BUG | +| --- | --- | --- | +| T1 | `bc03bba2` | BUG-1213 | +| T2 | `0afcc2d9` | BUG-1214 | +| T3 | `7cb332bc` | BUG-1215 | +| T4 | `9eb22f63`、`693467bf`(卡片字数预算补修) | BUG-1215 | +| golden 重采 | `921b336b`、`693467bf` | — | +| 记录(BUG 历史、CHANGELOG、本文件、任务索引、BLOCKED、T5 研究记录) | 最后一个 docs 提交 | — | + +## 实现说明 + +### T1(BUG-1213) +- `pancha_mahapurusha.detect_pancha_mahapurusha`:D9 落陷 → `status: formed`、`d9_dignity_modifier: "weakened"`、`d9_sign`,原因「D9 落陷,兑现减弱」,强度部分减弱。D1 条件不成立才是 `not_formed`(`include_not_formed=True` 时返回该行)。 +- 「调用方都传 D9」的做法:检测器在没收到 `navamsa_sign` 时由经度推出 D9(与 `main_yoga_detectors.with_navamsa` 同公式),所以 `_detect_yogas`(卡片 `chart.yogas`)、规则引擎(报告、卡片筛选)、`/api/pancha_mahapurusha`(`_compute_pmc`)都检查,不必逐个改调用方。规则引擎行与 API 行带 `d9_dignity_modifier`。 +- 9 位公开名人:五大人格星都不在 D9 落陷(奥巴马萨萨 D9 水瓶、嘉兰巴德拉 D9 射手),卡片与报告结论不变;golden 只多 `d9_dignity_modifier: null`。 + +### T2(BUG-1214) +- 从上游 `c7117f92` 原样移植:`calc_panchadhikari_year_lord`、`TRI_RASI_DAYTIME_LORDS / NIGHTTIME_LORDS`、`PLANET_TO_INDEX / INDEX_TO_PLANET`、`_PYJHORA_PVB_SIDECAR_CACHE`、带岁差参数的 `_resolve_year_lord_panchavargiya_score` / `_external_pyjhora_panchavargiya_score*`、`references/tajika_panchavargiya_rules.json`(git blob `e8c15ac3` 与上游一致)及其加载器。本仓原有的三个 PyJHora 查询函数引用了未定义的名字(无调用方,所以没暴露),一并由移植修好。 +- 没有移植:上游 `_resolve_external_pyjhora_python` 的差异(多了 `.workbuddy` 路径候选,AGENTS §9 不得把镜像当运行主仓)、上游 `saham_daynight` 的昼夜判定修改、上游 `_calc_native_panchavargiya_bala`(规则 JSON 的消费者,不在授权范围;年主选法本身也不用它)。规则 JSON 已入库并有加载,但目前没有消费者——列入下轮问题。 +- 本地差异两处(都写在代码与 BUG 记录里): + 1. **Muntha**:上游 Muntha 主候选 = 年盘上升 + 年数;本仓 Muntha = 本命上升 + 已满年数(问 3 维持)。加关键字参数 `muntha_sign_idx`,生产调用方传入;不传与上游一致。 + 2. **Panchavargiya 引擎**:上游把年盘 JD 交给 PyJHora,本机有 PyJHora 时进程内调用,且不设岁差(全局状态),同一输入跨进程得分不同(实测 9 盘里 9 盘候选分数不同、1 盘年主不同);生产与 CI 没有 PyJHora。产品路径因此一律用 `native_proxy`,标注「Panchavargiya 为本地近似计算」;`JYOTISH_YEAR_LORD_PYJHORA_REFERENCE=1` 恢复上游查询,仅研究用。 +- 两个生产者(`solar_return_full_report`、`cmd_tajika`)共用 `tajika_year_lord.select_annual_year_lord`;`cmd_tajika` 现在自己算一次太阳返照盘。冲突门照常比较(测试三年同盘两侧一致)。 +- 输出:`candidates`(上游原样)、`candidate_list`(来源、星、星座、吉 / 凶相位照年盘上升、Panchavargiya 分数、engine、是否当选)、`selection_basis`、`selection_basis_text`(中)/ `_en`、`muntha_basis`、`source`。卡片 `varshesha_basis` 与报告两处「Selection basis」显示这句话;英文版靠 `pl9_reader_english_terms.REGEX_EN` 五条模板。 +- 年运里 Mudda Dasha 与 Tri-Pataka 从「年主」起排(原逻辑),所以随新年主变化——卡片 golden 的 Mudda 分段因此变了(3 张盘里 3 张 `varshesha_basis` 变、1 张年主变)。 +- 上游 `tests/test_tajika.py` 没有 Panchadhikari 用例;上游 `tests/test_cli_smoke.py` 的两条年主用例依赖私有本地盘(`domi_birth_args`,没有时 skip),未移植。改为 `tests/test_tajika_panchadhikari_year_lord.py`(合成经度覆盖四个分支)。 + +#### 9 位公开名人 2026 年年盘:本仓 vs 上游 `c7117f92` + +同输入(同一张太阳返照盘、上游签名、不传 `muntha_sign_idx`、无 PyJHora)调用两边的 `calc_panchadhikari_year_lord`:**9/9 逐项相同**(上游函数在上游 `scripts/` + `references/` 抽出的独立目录里运行)。产品路径与上游的差别只来自 Muntha 起点: + +| 名人 | 旧年主(Muntha 主) | 上游年主(选法) | 本仓年主(选法) | 本仓 Muntha / 上游 Muntha | +| --- | --- | --- | --- | --- | +| 乔布斯 | 太阳 | 金星(凶相位最强) | 金星(凶相位最强) | 狮子 / 天秤 | +| 奥巴马 | 水星 | 水星(唯一吉相位) | 水星(唯一吉相位) | 双子 / 水瓶 | +| 泰勒 | 水星 | 水星(吉相位最强) | 水星(吉相位最强) | 处女 / 天秤 | +| 梦露 | 火星 | 水星(吉相位最强) | **月亮**(吉相位最强) | 天蝎 / 双子 | +| 嘉兰 | 土星 | 火星(唯一吉相位) | 火星(唯一吉相位) | 水瓶 / 狮子 | +| 皮雅芙 | 土星 | 火星(唯一吉相位) | 火星(唯一吉相位) | 水瓶 / 处女 | +| 卡罗 | 月亮 | 土星(吉相位最强) | 土星(吉相位最强) | 巨蟹 / 射手 | +| 小布什 | 木星 | 月亮(凶相位最强) | 月亮(凶相位最强) | 双鱼 / 狮子 | +| 齐达内 | 火星 | 太阳(唯一吉相位) | **火星**(唯一凶相位) | 天蝎 / 狮子 | + +年主相对旧口径变了 6/9;本仓与上游不同 2/9(梦露、齐达内),都是 Muntha 起点不同造成的。 + +### T3(BUG-1215,未接) +- 新 `scripts/narayana_rath.py`(不改冻结的 `narayana_dasha.py`,复用其中 Table 10/11/13/14、`select_narayana_seed_sign`、年数与双主星函数)。年数用 `jaimini_odd_footed_dignity_v2`(账本 `upadesa_1125_1126_odd_even_count`、`upadesa_1127_fixed_sign_exception`、`upadesa_bphs_exalt_debil_adjustment`),双主星 `jaimini_dual_lord_source_v1`(`upadesa_dual_lord_strength_chain`,账本标 partial)。计都在起运宫时大运把 Table 10 方向反过来(账本只给了子运表 Table 14);子运从大运星座起 12 等分,土星在该宫用 Table 11、计都用 Table 14。第二周期 12 减首周期年数。 +- 输出:`profile: sanjay_rath`、`seed_sign`、`seed_basis`、`direction`、`dual_lord_rule`、`mahadasha`(含年数)、`source`、`status`(平局为 `parameter_sensitive`,`alternatives` 列两种起法)。 +- 移植(原样,blob 与上游一致):`references/oracle/sanjay_rath_narayana_book_ledger_2026_08_28.json`、`docs/research/sanjay_rath_narayana_book_ledger_2026_08_28.md`、`references/oracle/chara_narayana_book_golden_cases_2026_08_28.json`。**注意**:任务书说三张 Rath 样表在 `chara_narayana_book_golden_cases` 里,实际该文件是 K.N. Rao / Goel 的 Chara、Narayana 样表;Rath 的 Table 15 / 17 / 18 在规则账本 JSON 的 `golden_cases` 里。两份都已移植。 +- 样表盘出生资料(公开资料,fixture 注明出处):Sri Aurobindo 1872-08-15 05:00 LMT 加尔各答;书中「标准盘」1963-08-07 21:15 IST Sambalpur;Indira Gandhi 1917-11-19 23:11 IST Allahabad。Lahiri。 + +| 样表 | 原书起运宫 | 本仓选出 | 顺序(给定原书起运宫) | 年数(给定原书起运宫) | +| --- | --- | --- | --- | --- | +| Table 15 | 巨蟹 | 巨蟹 ✓ | 12/12 | 12/12 | +| Table 17 | 双鱼 | 处女 ✗ | 12/12 | 12/12 | +| Table 18 | 巨蟹 | 平局(巨蟹 / 摩羯) | 12/12(土星在巨蟹 → Table 11) | 12/12 | + +- 差距分析与两种可能的修法见 `docs/research/narayana_rath_rectification_trial_2026_10_03.md`。这需要占星师给口径,不能自己拟合。 +- `tests/test_narayana_rath_book_tables.py` 把现状钉住(含「没有任何脚本导入 `narayana_rath`」),口径确定后同步改测试。 + +### T4(BUG-1215) +- 新 `scripts/narayana_legacy_label.py`,在消费层(咨询 `modules.narayana_dasha`、全量解读 Step 4.13、`cmd_narayana_dasha`)加 `profile: legacy_reference_only`、`algorithm_note`(「旧算法(从上升起、一律顺行),待替换为 Sanjay Rath 版」及英文)、`algorithm_label`(「旧算法(从上升起、一律顺行)」)。`narayana_dasha.py` 在冻结身份里,不动(ERR-115 做法)。 +- 用户可见处:咨询数据卡 `timing.narayana.algorithm`(原样抄短标签);参考版报告「Narayana Dasha 交叉时间轴」段和 dasha 家族表 p89 加「算法:…」行(英文版有对照);CLI 文本输出。读者版(reader_main)不显示 Narayana,星盘页不显示 Narayana(只有审计面板一行静态技法名),前端个人报告的「Narayana 大运」证据行读的键与引擎实际输出不符、对真实数据不出现——这三处未改。 +- 卡片字数:全文标签让乔布斯婚恋卡到 12,028(上限 12,000)。卡片改抄引擎给的短标签,Narayana 子运 / 次子运行去掉 `years`(可由起止年龄算出);最大卡 11,979(基线 11,983)。 +- K.N. Rao:全仓用户可见文案没有挨着 Narayana 的「K.N. Rao / kn_rao」;唯一相关处是 `narayana-dasha` 命令行没有使用方的 `--variant-profile`(选项里有 `kn_rao`),已删。`report_builder.py` 的「Parashari Jyotish | KN Rao School」不涉及 Narayana,未动。 + +## 改动的既有断言(原值 / 新值 / 原因) + +| 文件 / 测试 | 原值 | 新值 | 原因 | +| --- | --- | --- | --- | +| `tests/test_pancha_mahapurusha_main_detector.py::test_d9_debilitation_still_cancels_when_the_caller_gives_d9` | 给 D9 落陷 → `is_valid False`、`cancelled`;不给不查 | 改名 `test_d9_debilitation_only_weakens`:`formed`、`weakened`、原因「D9 落陷,兑现减弱」;不给也由经度推出 | 问 1(BUG-1213) | +| 同文件 `test_a_rejected_yoga_does_not_come_back_by_another_path` | 被拒样例 = 上升巨蟹木星入旺但 D9 落陷 | 被拒样例 = 双鱼上升、木星巨蟹第 9 宫(D1 不成立) | D9 落陷不再拒绝格局 | +| 同文件 `test_reduced_yoga_reaches_the_card_with_its_reasons` | 土星摩羯 10° | 土星摩羯 2°,断言不变 | 摩羯 10° 的 D9 是白羊(落陷),新规则会多一条减弱;本用例只测凶星照 | +| `tests/test_year_lord_basis_label.py` 三条 | 「暂用 Muntha 主星;占星师口径为 Panchavargiya,待接入」;年主 == Muntha 主星 | 选法依据一句话(中 / 英、无中文残留);年主与 Muntha 主星都在候选里,Muntha 用本命起点 | BUG-1214 | +| `tests/test_report_reader_main.py::test_real_annual_producers_agree_without_identical_metadata` | 左有 `year_lord_sign`、右没有 | 两侧年主、候选、选法一致 | 两个生产者同一选法 | +| 同文件 `test_reader_annual_cells_use_real_distinct_years_and_keep_return_dates` | 「Muntha 所在星座的守护星(当前本地口径)」(**开工基线即失败**:BUG-1212 改了该文案而本条未跟改) | 每个年度都有含「年盘上升」的选法依据 | BUG-1214 | +| 同文件 `test_reader_annual_conflict_keeps_both_real_producer_values` | 「太阳返照:火星;Tajika:金星(两者不同)」 | 「太阳返照:火星;Tajika:月亮(两者不同)」并断言两年年主 | 次年年主按新选法 | +| `frontend/tests/consult-evidence-card-20260927.test.ts` | — | 新增一条:`timing.narayana.algorithm` 为短标签 | BUG-1215(新增,不改旧断言) | + +## 测试 + +| 项 | 结果 | +| --- | --- | +| 新增 Python 测试 | `test_tajika_panchadhikari_year_lord.py`(15)、`test_narayana_rath_book_tables.py`(10)、`test_narayana_legacy_label.py`(4),T1 新增 3 条 | +| 定向回归(五大人格、格局合并、年运包、Muntha、读者版中英、英文版、太阳返照时区、Tajika、CLI 冒烟、咨询原生层、冻结完整性 / 新鲜度) | 全过;唯一失败 `test_report_english_dictionary.py::test_every_han_string_has_an_english_sibling` **开工基线同样失败**(第一批给 `mahapurusha_*` 规则加的 `reference_only_reason` 没有英文对照),不在本单范围,未改 | +| `tests/run_all.py` | 102/102 | +| `run_quality_gate.py --profile quick --skip-frontend-runtime`(系统 python3) | `Quality gate passed`,exit 0:1047 passed、1 skipped | +| 隐私 `tests/test_repo_privacy_markers.py` | 通过(记录提交后复跑) | +| `tsc --noEmit` | 0 错 | +| `npm run lint` | 0 error(126 warnings,与开工同数) | +| `npm test`(Node 22.14) | 开工基线 4929 项 / fail 24 / cancelled 0;收尾 4929 项 / fail 24 / cancelled 0,**失败清单与基线逐条相同**(24 条均为 DB / Docker / 部署类)。确认门 `rectification-confirmation-gate.test.ts` 通过(本单未重新冻结,读取路径无需改)。中途一次多出 1 条(卡片 12,000 字预算),已在 `693467bf` 修复 | + +## 生时校正评测(v5 77 例) + +- 命令:`python3 scripts/research/holdout_v5_baseline.py --dataset v5 --out-dir --json-out /summary.json`,`PYTHONHASHSEED=0`、`JYOTISH_API_CHART_CACHE_TTL_SECONDS=0`;改前 `52b3061f`、改后 `921b336b`(T1–T4 全部引擎改动之后;之后的 `693467bf` 只改前端、标签模块与 golden),各在一次性工作树。 +- 本单无试算开关(T5 未做),「开关关闭时逐项相同」即改前改后逐项相同: + +| 指标(v5 77 例) | ±10 | ±30 | ±60 | +| --- | --- | --- | --- | +| 先验头名 前 / 后 | 0.1818 / 0.1818 | 0.0909 / 0.0909 | 0.0779 / 0.0779 | +| 六题回放头名 前 / 后 | 0.6364 / 0.6364 | 0.4935 / 0.4935 | 0.3117 / 0.3117 | +| 线上区间回放头名 前 / 后 | 0.6623 / 0.6623 | 0.5584 / 0.5584 | 0.4026 / 0.4026 | +| 覆盖(回放)前 / 后 | 0.987 / 0.987 | 0.987 / 0.987 | 0.987 / 0.987 | +| 中位宽度(回放)前 / 后 | 13 / 13 | 33 / 33 | 65 / 65 | +| futile_collect 真值在区间(truth 方向)前 / 后 | 76 / 76 | 75 / 75 | 76 / 76 | + +三段输出文件(sweep、cluster_width、合并 summary 含 futile_collect)去掉耗时与路径字段后 **逐项相同**(`IDENTICAL` ×3)。红线(任一档降 > 1pt)未触发。 + +- 冻结身份:本单改动的文件都不在 `sealed_holdout_rerun.PRODUCTION_FILES` 与 dataset `frozen_scoring.files` 里,`test_rectification_validation_integrity_gate` / `test_sealed_holdout_contract_freshness` 通过,无需按 ERR-110 重新冻结,`rectification-confirmation-gate.test.ts` 的冻结记录路径不用改。`ALGORITHM_VERSION` 仍为 `rectification-v5-matrix-scoring-10`,不涉及 BUG-621。 + +## 名人生平回测 + +卡片字段变了(年运依据与 Mudda 分段、Narayana 标签、子运去 `years`)。本机无模型 key,未跑,写入 `BLOCKED.md`。 + +## 其他观察(不在本单范围,未改) + +- 生产里 `_resolve_external_pyjhora_python` 每张年盘会起一次子进程探测 PyJHora(`python` 与 `python3` 路径不同时);产品路径现在不调用它,无影响。 +- 上游 `saham_daynight` 的昼夜判定已改为 Hindu rising 与同一民用日窗口,本仓未同步;9 盘年主比对没受影响,Sahams 的昼夜可能受影响,建议另开同步单。 +- 第一批遗留:`test_report_english_dictionary` 基线即失败(见上)。 + +## 下轮问占星师 + +1. **Narayana 起运宫第二级**(「木星、水星或宫主」那一级):是只数相位,还是同宫也算?木星既是木星又是该宫主时算一次还是两次?——原书 Table 17(双鱼起)只有「同宫也算、按身份各算一次」才对得上。 +2. **Narayana 起运宫后续各级**:前几级都打平时(Table 18 Indira:巨蟹有土星、摩羯有月亮,入旺、星座性质、宫主奇偶、大运年数都相同),下一级是「含 Atmakaraka 的宫」还是「宫主为 Atmakaraka 的宫」?原书选巨蟹(土星是 AK、在巨蟹)。各级的完整次序请给书页。 +3. **计都在起运宫时大运的顺序**:账本只给了子运的 Table 14;大运是否同样把 Table 10 方向倒过来?土星、计都同在起运宫时谁优先? +4. **Narayana 子运起点**:从大运星座本身起(Table 13),还是从大运宫主所在星座起(原书 Table 25 的例子)? +5. **Tajika Panchavargiya 的算法**:年主比强弱用哪一套——上游现在用的是 D1/D2/D3/D9/D12 庙旺分(本地近似),还是规则 JSON 对应的 Tajika 五分法(Graha / Uchcha / Hudda / Drekkana / Navamsha,按 Tajika 友敌关系)?若是后者,我们照上游把它接上。 +6. **Muntha 主候选**:五类候选里的 Muntha 用「本命上升 + 已满年数」(我们)还是「年盘上升 + 年数」(上游)?9 盘里有 2 盘因此年主不同。 +7. **Mudda Dasha 的起点**:现在从年主起排(年主一变,全年月份分段都变)。经典是否从年主起,还是从出生月宿推算? diff --git a/docs/tasks/README.md b/docs/tasks/README.md index 3878c60a..574f2964 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -414,4 +414,4 @@ | `TASK-upstream-sync5-20261002.md` | `PROGRESS-upstream-sync5-20261002.md` | 上游同步第五轮:Narayana 默认 K.N. Rao、Chara Karaka 罗睺、燃烧统一、八分法净化、Yogini、诅咒格措辞、Budha-Aditya、Badhaka;生时校正至少 4 件事 3 个领域 | **待验收**(PM 移植 U2–U8 + 子代理 U8 后续 / R1 / 冻结 / 评测 / 回测第七轮,未推送;U1 延后;分数不变不升 scoring-11,policy v3 → v4;BUG-1192~1198) | 分支 `codex/upstream-sync5-20261002` | | `TASK-report-chart-blank-columns-20261003.md` | `PROGRESS-report-chart-blank-columns-20261003.md` | 报告/星盘页空列:Kranti 删列、八分法宫位表 SAV 标错(实为含上升 386)补三列、上升补星宿、分盘庙旺接引擎十档(有限推翻 BUG-1076/1099 三档)、报告末尾重复分盘去重(BUG-1199~1203);Claude 直接执行,已部署 staging `ae18952e`,真机待产品 | | `TASK-astrologer-rulings-batch1-20261003.md` | `PROGRESS-astrologer-rulings-batch1-20261003.md` | 占星师定稿 2026-10-03 第一批(低风险批):五大人格、Kemadruma 各只留一个主检测器;Shadbala 达标在前、分档标「网站分档」;Bhava Bala 改正式三分量;罗计不设本宫、宫主链固定传统主星;8 星制 Karaka 排位按 BPHS 修正;八分法净化值进报告/卡片(过运不动);落陷取消改条件清单;Tajika 年主如实标注。乙3 Narayana、甲1、甲8/9 不在本单(BUG 从 1204 起) | 已实现待验收 | 分支 `codex/astrologer-rulings-batch1-20261003`(未推送;BUG-1204~1212;校正分数不变、未升版本) | -| `TASK-astrologer-rulings-batch2-20261003.md` | `PROGRESS-astrologer-rulings-batch2-20261003.md` | 占星师第四轮:五大人格 D9 落陷只算减弱;Tajika 年主按 Panchadhikari 选法(移植上游 c7117f92);Narayana 实现 Sanjay Rath 版并用原书三张样表验收,不接打分;旧 Narayana 如实标注;Rath 版替换校正 Narayana 的 v5 试算(只研究)。产品选方案 A(BUG 从 1213 起) | 待领取 | 分支 `codex/astrologer-rulings-batch2-20261003` | +| `TASK-astrologer-rulings-batch2-20261003.md` | `PROGRESS-astrologer-rulings-batch2-20261003.md` | 占星师第四轮:五大人格 D9 落陷只算减弱;Tajika 年主按 Panchadhikari 选法(移植上游 c7117f92);Narayana 实现 Sanjay Rath 版并用原书三张样表验收,不接打分;旧 Narayana 如实标注;Rath 版替换校正 Narayana 的 v5 试算(只研究)。产品选方案 A(BUG 从 1213 起) | 已实现待验收(T3 起运宫未过原书样表,按红线未接、T5 未做) | 分支 `codex/astrologer-rulings-batch2-20261003`(未推送;BUG-1213~1215;校正分数不变、未升版本) |