diff --git a/BLOCKED.md b/BLOCKED.md index 735c033e..625a19c6 100644 --- a/BLOCKED.md +++ b/BLOCKED.md @@ -1,5 +1,12 @@ # BLOCKED +## TASK-astrologer-rulings-batch3:Rath 版 Table 18、名人生平回测、`next build`、真机(2026-10-03) + +- **Rath 版 Narayana Table 18(任务书红线 3)**:第五轮 7 级通则下 Table 15、17 复现;Table 18(Indira)前四级全平、第 5 级(宫主度数:月亮 5.6° < 土星 21.8°)判摩羯,原书巨蟹。书内 AK 特例只在七级全平时可用,够不着。T4 并列展示、T5 v5 试算不做;问题见 `docs/tasks/PROGRESS-astrologer-rulings-batch3-20261003.md`「下轮问占星师」。替代证据:`tests/test_narayana_rath_book_tables.py`、`tests/test_narayana_rath_rules.py`。 +- **名人生平回测**:卡片年运段有变化(Mudda 分段改从出生月宿起、依据句改「按 Tajika 五分力量」、一张盘年主变)。本机无模型凭据,按 `docs/testing/consult-affliction-backtest-20261001.md` 重跑一轮,核对严重冲突数不高于第七轮。替代证据:咨询 golden 用真实引擎重采,前端全量失败清单与开工基线逐条一致。 +- **`next build` / 首屏 gzip**:`frontend/node_modules` 为工作树外软链,Turbopack 拒绝;本单只改 Python 引擎与测试夹具,不改页面与路由,未测。 +- **真机**:数据卡年内分段、年主依据句,参考版报告「Mudda Dasha 年度阶段」表需登录态浏览器查看。 + ## 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`。 diff --git a/CHANGELOG.md b/CHANGELOG.md index efbdd4cc..554d35ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # 印度占星 Skill 更新日志 +## 2026-10-03 — 占星师口径第三批:Mudda 改从出生月宿起排、年主按 Tajika 五分力量比、Rath 版 Narayana 起运宫重做(未上线) + +- 年内 Mudda Dasha 不再从年主起排,改按占星师定的公式:起运星 =(已满年数 + 出生月宿序号 − 2)除以 9 的余数(1 日、2 月、3 火、4 罗、5 木、6 土、7 水、8 计、0 金),余额按出生时月亮在月宿里走过的比例,年长 365.25 天。年主怎么变,月份分段都不变。数据卡和报告的年内分段都来自这个新算法;9 位公开名人里 8 位的年内第一段与原来不同(BUG-1216)。 +- 年主(Varshesha)候选之间比强弱,改用 Tajika 正式五分力量(宫位、入旺、Hadda、Drekkana、Navamsa 五项,满分 20),不再用五张分盘庙旺的近似分;年主旁的依据句改注「按 Tajika 五分力量」。9 位公开名人里 3 位年主因此改变(BUG-1217)。 +- 完整解读里的年运段(Step 9)以前还在用 Muntha 主星当年主、从年主起排 Mudda,现在与数据卡、年运报告同一套。 +- Sanjay Rath 版 Narayana:起运宫按第五轮 7 级通则重做,计都 / 土星在起运宫的例外、子运起点也按裁定实现。原书三张样表对上两张;Indira 那张通则选出摩羯(原书巨蟹),按约定不上线、不做校正试算,已列入下轮问占星师(BUG-1218)。页面上的 Narayana 仍是旧算法,标注不变。 +- 生时校正:打分用到的文件没有改动,分数不变、算法版本不变,v5 77 例改前改后逐项相同。名人生平回测因本机无模型凭据未跑(见 BLOCKED)。Skill 版本不变;不改数据库结构。新生成的报告和数据卡才有这些变化,旧报告内容不变。 + ## 2026-10-03 — 占星师口径第二批:五大人格 D9 落陷只算减弱、年主按 Panchadhikari 选、Narayana 标明旧算法 - 五大人格(Ruchaka、Bhadra、Hamsa、Malavya、Sasa):主星在 D9(九分盘)落陷时格局照常列出,附「D9 落陷,兑现减弱」,不再判不成立;只有命宫角宫 + 入庙/入旺这一条不满足才不成立。以前这条 D9 检查实际从未执行,现在卡片、报告都会按经度算 D9(BUG-1213)。9 位公开名人盘结论不变。 diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index 8d76e450..452048b7 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -16389,3 +16389,63 @@ - 相关记录:BUG-1211(`narayana_dasha` 双主星不动)。 - 复发自:无 - 修复版本:待发布(标注部分) + +## BUG-1216 | 年内 Mudda Dasha 从年主起排,年主一变全年月份分段跟着变;占星师裁定应从出生月宿推算 + +- 状态:resolved(分支 `codex/astrologer-rulings-batch3-20261003`,未推送;待验收) +- 首次发现 / 最近更新:2026-10-03 / 2026-10-03 +- 来源:占星师第五轮裁定 2026-10-03 问 7(起运星 =(已满年数 + 出生月宿序号 1–27 − 2)mod 9,余 1 日、2 月、3 火、4 罗、5 木、6 土、7 水、8 计、0 金,与年主无关);任务书 `TASK-astrologer-rulings-batch3-20261003` T1。移植来源:上游 `yinduzhanxing` `c7117f92` `scripts/tajika.py:calc_mudda_with_dasha_balance`(原样)。 +- 影响面:`solar_return.solar_return_full_report`、`jyotish_engine.cmd_tajika`、全量解读 Step 9(`modules.tajika`)三个年运生产者;`annual_tajika_pack` 的 `mudda_dasha` / `monthly_windows`;咨询年运层 `annual_tajika.mudda_dasha`(数据卡);参考版报告「Mudda Dasha 年度阶段」表。 +- 现象:第二批改年主选法后,9 位公开名人里 6 位的年内各月分段跟着变(任务书实证)。按月宿起运后,9 位中 8 位的起运星与旧口径(从年主起)不同,只有小布什恰好都是月亮。 +- 根因:旧 `tajika.calc_mudda_dasha` 把年主当第一运;上游已有按出生月宿起运、带余额的实现但从未同步。 +- 修复:T1 提交(见进度记录)。`calc_mudda_with_dasha_balance` 原样移植(函数文本 sha256 钉在测试里,并与上游 `c7117f92` 逐字比对);新 `scripts/tajika_mudda.py:annual_mudda_dasha` 是唯一产品入口:余额取本命月亮(`moon_at_birth_time`),年长具名 `solar_year_365_25`(产品默认,与上游默认 365.25 一致)/ `savana_360`(仅研究),记录 `annual_start`、`annual_end`、`annual_duration_days`、`completed_years`、`natal_moon_longitude`、`natal_moon_nakshatra_number`、`balance_profile`、`independent_of_year_lord`;`periods` 裁到年度窗口内并带 `months` 供原有月份窗口使用,上游的 10 段原样留在 `periods_full`。`calc_solar_return_chart` 新增返回 `birth_moon_longitude`。`cmd_tajika` 与全量解读 Step 9 合用 `_tajika_annual_core`(Step 9 原来用 `calc_year_lord` 取 Muntha 主星当年主,也一并改为 Panchadhikari)。数据卡分段按引擎给的起止日期重新锚定到本次咨询的年度,并在下一次太阳返照处截断。旧 `calc_mudda_dasha` 不再被任何 `scripts/*.py` 调用。 +- 验证:`tests/test_tajika_mudda.py`(27 个月宿 × 6 个年数的起运公式;只改年主 Mudda 表逐项不变;两个生产者同表;数据卡分段来自引擎日期;无产品路径调用旧函数;移植函数逐字一致);`tests/test_tajika_panchadhikari_year_lord.py` 一条按三栏改写。9 位公开名人 2026 年年盘起运星与公式 9/9 一致(表见进度记录)。咨询 golden 用真实引擎重采。 +- 防复发:同上测试。 +- 相关记录:BUG-1214、BUG-1212。 +- 复发自:无 +- 修复版本:待发布 + +## BUG-1217 | 年主比强弱用的是 D1/D2/D3/D9/D12 庙旺近似分,不是 Tajika 正式五分力量 + +- 状态:resolved(分支 `codex/astrologer-rulings-batch3-20261003`,未推送;待验收) +- 首次发现 / 最近更新:2026-10-03 / 2026-10-03 +- 来源:占星师第五轮裁定 2026-10-03 问 5;任务书 T2。移植来源:上游 `yinduzhanxing` `c7117f92` `scripts/tajika.py:_calc_native_panchavargiya_bala` 及其依赖 `_tajika_relation`、`_panchavargiya_component`、`_hudda_lord`、`_tajika_drekkana_lord`、`_navamsha_sign_idx`、`_tajika_uchcha_bala`、`_round_half_up`(原样)。 +- 影响面:`tajika.calc_panchadhikari_year_lord`(候选比较)、`tajika_year_lord`(依据句与候选表)、卡片 `varshesha_basis`、报告两处「Selection basis」、英文版对照词表。 +- 现象:BUG-1214 接入的年主选法在拿不到 PyJHora 时退回 `native_proxy`(五张分盘庙旺分),依据句注明「Panchavargiya 为本地近似计算」。 +- 根因:上游正式五分法(Kshetra/graha 30、Uchcha 20、Hadda 15、Drekkana 10、Navamsa 5,Tajika 友敌按年盘宫距 3/5/9/11 友、2/6/8/12 中、1/4/7/10 敌;原始满分 80,score = 原始 / 4,满分 20;规则 `references/tajika_panchavargiya_rules.json`)存在但年主选法没有调用(上游同样没调用,见 BUG-1219);第二批没有移植这组函数。 +- 修复:T2 提交。原样移植上述函数;`calc_panchadhikari_year_lord` 一次算出 7 星五分力量,候选 `panchavargiya_engine: tajika_native_five_fold`,另带 `panchavargiya_raw_total`;`native_proxy` 不再参与选年主——年盘缺星时返回 blocked(由 `select_annual_year_lord` 记为 Muntha 主星 fallback 并写明原因),不再退回近似分。依据句标注改为「(按 Tajika 五分力量)」/「(by Tajika five-fold strength)」,英文版词表同步。研究开关 `JYOTISH_YEAR_LORD_PYJHORA_REFERENCE=1` 行为不变。 +- 验证:`tests/test_tajika_five_fold_panchavargiya.py`(手算一例:太阳白羊 5° 分量 22.5 / 19.44 / 11.25 / 7.5 / 2.5、原始 63.19、score 15.80;300 张随机盘各分量不超上限、原始 ≤ 80、score = 原始 / 4;候选分数即五分法;近似函数被调用即失败;缺星 blocked;8 个函数与上游逐字一致);`tests/test_year_lord_basis_label.py` 两处、`tests/test_tajika_panchadhikari_year_lord.py` 两处按三栏改写;`tests/test_report_english_dictionary.py` 通过。9 位公开名人 2026 年年主变 3/9(泰勒 水星→火星、梦露 月亮→火星、卡罗 土星→月亮),Mudda 不受影响(BUG-1216)。 +- 未改:年运强度层 `calc_tajika_strength_layers`(报告「Harsha / Panchavargiya」强度表)仍用庙旺近似,不在本单范围,列入进度记录。 +- 防复发:同上测试。 +- 相关记录:BUG-1214、BUG-1219。 +- 复发自:无 +- 修复版本:待发布 + +## BUG-1218 | Sanjay Rath 版 Narayana 起运宫按第五轮 7 级通则重做:Table 15 / 17 复现,Table 18(Indira)通则在第 5 级判摩羯,与原书巨蟹不符 + +- 状态:investigating(规则已按裁定实现并有测试;Table 18 未复现 → 任务书红线 3:不接任何用户可见面、不做 T4 并列展示与 T5 v5 试算) +- 首次发现 / 最近更新:2026-10-03 / 2026-10-03 +- 来源:占星师第五轮裁定 2026-10-03 问 1–4(Rath《Narayana Dasa》p.35–36、p.48、p.50 说明 2、p.51、p.53 Table 12、p.54 Table 14、p.63、p.65–66);产品负责人裁定土星与计都同在起运宫时计都优先(PyJHora 做法)。任务书 T3(T4、T5 未做)。移植来源:上游 `yinduzhanxing` `c7117f92` `scripts/narayana_dasha.py`(`select_narayana_seed_sign(strength_profile="rath_p36_role_conjunction_v1")` 的一、二级计数,`build_narayana_sign_sequence` 的 `rath_ketu_table12_v1` 分支,`_RATH_CLASSICAL_MOOLATRIKONA_SIGNS`);上游测试 `test_rath_role_strength.py` 的 p36 用例、`test_varsha_narayana_native.py` 的土星起运宫用例(大运部分)。 +- 影响面:`scripts/narayana_rath.py`(研究用,未被任何脚本导入)。冻结身份文件 `narayana_dasha.py` 未改。 +- 现象:第二批的起运宫判定只有前两级、且第二级不数同宫,Table 17 选出处女、Table 18 平局。 +- 根因:上游按原书写好的分级函数没有同步,第二批从零重写,规则缺级。 +- 修复:T3 提交。`compare_signs` 七级通则(① 占据星数,数实际星体含罗计;② 木星 / 水星 / 宫主三角色同宫或星座相位,每角色一次、不按星体去重;③ 占据星最高尊贵 旺 3 > Moolatrikona 2 > 本宫 1,再比有尊贵的星数;④ 双体 > 固定 > 活动;⑤ 宫主星座内度数,罗计取 30 − 度数;⑥ 宫主落在与所主星座奇偶相反的星座;⑦ 大运年数长者强),上一级分出即停,输出 `strength_level_decided`;Indira 特例 `book_example_exception: "rath_p66_indira_ak"`(含 8 星制 AK 的宫)只在七级全平且调用方显式允许时可用并标明;计都在起运宫按 Table 10 方向反转、保留步进(`table12_ketu_reversed`),土星在起运宫 Table 11 顺行,二者同在计都优先、`method_note`「PyJHora 兼容:计都优先」;子运比较大运星座与第 7 宫,取强者,从其宫主(双主按 `jaimini_dual_lord_source_v1`)所在星座起,12 等分,Table 13 / 11 / 14 由大运星座里的土星 / 计都决定,记录 `antardasha_start_rule`。输出 `profile`、`seed_sign`、`seed_basis`、`strength_level_decided`、`direction`、`exception_applied`、`dual_lord_rule`、`mahadasha`、`antardasha_start_rule`、`source`(页码)、`status`。 +- 样表:Table 15 巨蟹(第 1 级)✓;Table 17 双鱼(第 2 级,双鱼得木星 + 宫主木星两角色、处女只得木星相位)✓;Table 18:巨蟹(土星)与摩羯(月亮)前四级全平,第 5 级巨蟹宫主月亮 5.6° < 摩羯宫主土星 21.8°,通则判摩羯;书内 AK 特例只在七级全平时可用,够不着。给定原书起运宫时三张样表 36 行大运星座与年数全对(不变)。 +- 验证:`tests/test_narayana_rath_rules.py`(7 级每级一张构造盘且前几级相等;第 4 级用白羊对双子——对冲宫星座性质永远相同,Lagna / 第 7 宫比较里第 4 级不会起作用;全平盘只有显式允许时走 AK 特例;特例不覆盖通则;计都反转保留步进、不等于倒读;土星顺行、土计同宫计都优先;一、二级与上游函数 400 张随机盘逐项相同;上游 p36 与 Varsha 土星用例);`tests/test_narayana_rath_book_tables.py` 两条按三栏改写(现状钉住 Table 18 判摩羯),「没有脚本导入 narayana_rath」保留。 +- 旁证(另一会话只读审计 `docs/research/shared_engine_reuse_audit_2026_10_03.md`,`da95d92d`,本单未独立复核):原书 Indira 手算例的结论句以「土星是 AK、度数最高」取巨蟹,但土星落巨蟹、主摩羯,第 5、6 条字面都指向摩羯;原书 Table 27 对同一命主的软件裁决也是摩羯。Table 18 是原书内部不一致,通则不复现属预期。审计另以原书 5 张软件裁决表核 `compare_signs`:30 对宫 28/30、双主星 8/10;Table 25 子运 36 行 24/36(双子段因强弱判定不同 0/12)。 +- 未解决:Table 18 验收口径(红线 3 是否改由协调方交产品负责人)、Wadiyar 两对、子运方向,见进度记录「下轮问占星师」。答复前 Rath 版不接用户可见面、不进打分,T4 / T5 不做。 +- 防复发:同上测试。 +- 相关记录:BUG-1215、BUG-1211。 +- 复发自:无 +- 修复版本:—(未接产品面) + +## BUG-1219 | 上游两处年主缺陷:选年主没用正式五分法;Panchadhikari 的 Muntha 候选用年盘上升推 + +- 状态:upstream(只记录,不改上游;本仓已各自处理) +- 首次发现 / 最近更新:2026-10-03 / 2026-10-03 +- 来源:占星师第五轮裁定 2026-10-03 问 5、问 6(确认是上游 bug);任务书 T6。上游 `yinduzhanxing` `c7117f92`。 +- 现象:① 上游 `calc_panchadhikari_year_lord` 经 `_resolve_year_lord_panchavargiya_score` 比强弱,拿不到 PyJHora 时退回 `_calc_panchavargiya_bala_for_planet`(D1/D2/D3/D9/D12 庙旺近似),同文件里的正式五分法 `_calc_native_panchavargiya_bala` 只被年运强度层用。② 上游 Muntha 候选 = 年盘上升 + 年数,而 Muntha 应为本命上升 + 已满年数(第三轮定、第五轮问 6 维持)。 +- 本仓处理:① BUG-1217 改用正式五分法;② BUG-1214 起生产调用方传 `muntha_sign_idx`(本命上升 + 已满年数),不传时与上游一致。 +- 相关记录:BUG-1214、BUG-1217。 +- 复发自:无 +- 修复版本:—(上游) diff --git a/docs/research/narayana_rath_rectification_trial_2026_10_03.md b/docs/research/narayana_rath_rectification_trial_2026_10_03.md index 5a1f2b88..0a265f92 100644 --- a/docs/research/narayana_rath_rectification_trial_2026_10_03.md +++ b/docs/research/narayana_rath_rectification_trial_2026_10_03.md @@ -1,5 +1,21 @@ # Narayana Rath 版替换校正试算(任务书 T5)— 2026-10-03 +## 第三批更新(`TASK-astrologer-rulings-batch3-20261003`) + +**仍未做。** 第五轮裁定后起运宫改为 7 级通则(BUG-1218),三张样表里 Table 15、Table 17 复现,**Table 18(Indira)不复现**:通则在第 5 级(宫主星座内度数)判摩羯,原书是巨蟹。任务书红线 3 只允许 Table 18 走「书内特例」(含 AK 的宫),而特例只在七级全平时可用,此盘第 5 级就分出了强弱,够不着。所以没有开研究分支 `codex/narayana-rath-rectification-trial-20261003`,没有加试算开关,没跑 R1 / R2,校正打分文件一个字节都没动。 + +| 样表 | 原书起运宫 | 7 级通则选出 | 由第几级决定 | 给定原书起运宫:大运顺序 / 年数 | +| --- | --- | --- | --- | --- | +| Table 15(Sri Aurobindo 1872) | 巨蟹 | 巨蟹 ✓ | 第 1 级(巨蟹 2 星:火、木;摩羯 0 星) | 12/12 ✓ / 12/12 ✓ | +| Table 17(书中标准盘 1963) | 双鱼 | 双鱼 ✓ | 第 2 级(双鱼:木星 + 宫主木星两角色;处女:木星相位一角色) | 12/12 ✓ / 12/12 ✓ | +| Table 18(Indira Gandhi 1917) | 巨蟹 | 摩羯 ✗ | 第 5 级(前四级全平;巨蟹宫主月亮 5.6° < 摩羯宫主土星 21.8°) | 12/12 ✓(土星在巨蟹,Table 11)/ 12/12 ✓ | + +Table 18 第 1–7 级的值(巨蟹 / 摩羯):占据星 1 / 1;三角色 2 / 2(两边都得木星、水星的星座相位,宫主互在对宫、活动宫不互照);尊贵 0 / 0;都是活动宫;宫主度数 5.59 / 21.79;宫主奇偶 否 / 否;年数 6 / 6。也就是说**只要第 5 级不在 AK 之前**,原书的巨蟹就到不了。另一会话的只读审计(`docs/research/shared_engine_reuse_audit_2026_10_03.md` §N1)指出原书 Table 27 对同一命主的软件裁决本身就是摩羯,Table 18 的巨蟹与原书规则、原书软件表不一致;是否改红线 3 的验收口径待产品负责人决定。下轮问占星师见 `docs/tasks/PROGRESS-astrologer-rulings-batch3-20261003.md`。 + +--- + +## 第二批记录(保留) + ## 结论 **未做。** 任务书红线 2:Rath 版若不能复现原书三张样表的起运宫与大运顺序,就停在 T3、T5 不做。实测起运宫三张里只对一张,所以没有加试算开关,没有跑 v5 77 例的 R1 / R2 变体,生时校正打分文件一个字节都没动。 diff --git a/docs/tasks/PROGRESS-astrologer-rulings-batch3-20261003.md b/docs/tasks/PROGRESS-astrologer-rulings-batch3-20261003.md new file mode 100644 index 00000000..5a26e728 --- /dev/null +++ b/docs/tasks/PROGRESS-astrologer-rulings-batch3-20261003.md @@ -0,0 +1,183 @@ +# PROGRESS:占星师口径第三批(Mudda、正式 Panchavargiya、Rath 版 Narayana)— 2026-10-03 + +- 任务书:`docs/tasks/TASK-astrologer-rulings-batch3-20261003.md`。执行方:Claude 子代理(产品负责人要求直接执行)。 +- 分支 `codex/astrologer-rulings-batch3-20261003`,工作树 `.worktrees/astrologer-rulings-batch3-20261003`,基线 `origin/staging` = `ac588172`。**未推送**。 +- 上游:`/workspace/yinduzhanxing` `origin/main` = `c7117f92`(与任务书一致;只读,未提交、未推送)。 +- BUG 编号:开工时最大号 BUG-1215;本单 BUG-1216~1219。 + +## 结论 + +| 任务 | 结果 | +| --- | --- | +| T1 Mudda 改出生月宿起排 | 完成(BUG-1216)。9 盘起运星与公式 9/9 一致;只改年主 Mudda 表不变(测试) | +| T2 年主改 Tajika 五分法 | 完成(BUG-1217)。9 盘年主变 3/9 | +| T3 Rath 版 Narayana 重做 | 规则按第五轮裁定实现并有测试(BUG-1218);**原书样表 2/3**:Table 15、17 复现,**Table 18 不复现**(通则第 5 级判摩羯,原书巨蟹;书内 AK 特例只在七级全平时可用,够不着)→ **按红线 3 停在 T3** | +| T4 并列展示 | **未做**(红线 3) | +| T5 v5 试算 | **未做**(红线 3 / 让步顺序);研究分支未开;研究记录写明原因 | +| T6 记录 | BUG-1216~1219、CHANGELOG、本文件、任务索引、BLOCKED、T5 研究记录 | +| 生时校正 | 冻结身份文件零改动(含 `narayana_dasha.py`),无需按 ERR-110 重新冻结,确认门测试路径不用改;v5 77 例改前改后逐项相同;不升打分版本 | + +## 环境 + +| 项 | 实际 | +| --- | --- | +| Python | 无 `.venv`,全部用系统 `python3`(3.13.5) | +| Node | `/exec-daemon/node` v22.14.0(scratchpad 临时 bin 软链);`frontend/node_modules` 软链到同 lockfile 的 `.worktrees/consult-career-yoga-functional-20261002/frontend/node_modules` | +| 磁盘 | 开工 45G 可用;大评测前 44G | +| 预检 | `pre_work_check.py` exit 0 | +| 模型 key | 无 → 名人生平回测未跑(BLOCKED) | +| `next build` | 未跑(node_modules 为软链,Turbopack 拒绝;本单不改页面与路由) | +| 一次性工作树 | `.worktrees/batch3-baseline-ac588172`(基线:npm test、v5)、`.worktrees/batch3-eval-ecc76274`(改后 v5),均 `--detach` 新建,用完删除;未切换任何别人的工作树 | + +## 提交与任务对应 + +| 任务 | 提交 | BUG | +| --- | --- | --- | +| T1 | `547cf5f1`、`4956978d`(改写断言补三栏注释) | BUG-1216 | +| T2 | `c6aca9bf` | BUG-1217 | +| T3 | `b526be47` | BUG-1218 | +| golden 重采 | `ecc76274` | BUG-1216 / 1217 | +| T6 记录(BUG 历史含 BUG-1219、CHANGELOG、本文件、任务索引、BLOCKED、T5 研究记录) | 最后一个 docs 提交 | — | + +## T1 Mudda(BUG-1216) + +- 原样移植上游 `calc_mudda_with_dasha_balance`(函数文本 sha256 钉在 `tests/test_tajika_mudda.py`,本机有上游时逐字比对)。 +- 新 `scripts/tajika_mudda.py:annual_mudda_dasha` 是唯一产品入口:余额 `moon_at_birth_time`(本命月亮);年长具名 `solar_year_365_25`(产品默认 = 上游默认 365.25)与 `savana_360`(360 天年,仅研究,分开标注);记录 `annual_start`、`annual_end`、`annual_duration_days`、`year_length_basis`、`completed_years`、`natal_moon_longitude`、`natal_moon_nakshatra_number`、`balance_profile`、`balance_fraction_remaining`、`starting_lord`、`independent_of_year_lord: true`。 +- 上游输出 10 段(第一段是出生月宿余额、最后一段是同一星的下一轮,跨出年度)。产品 `periods` 裁到 [年度起点, 年度终点),每段带 `months`(占 12 个月的份额)供原有 `monthly_windows`、报告「Mudda Dasha 年度阶段」表使用;上游原 10 段留在 `periods_full`。上游的子运(`antardasha_periods`)不带出(没有产品面显示)。 +- `calc_solar_return_chart` 新增返回 `birth_moon_longitude`。三个年运生产者都改:`solar_return_full_report`、`cmd_tajika`、全量解读 Step 9(后两者合用 `jyotish_engine._tajika_annual_core`)。**Step 9 以前还用 `calc_year_lord`(Muntha 主星)当年主、从年主起 Mudda**——第二批漏改的第三个生产者,本单一并改为 Panchadhikari 年主与新 Mudda。 +- 数据卡 `annual_tajika.mudda_dasha`:按引擎给的起止日期,以太阳返照时刻为原点重新锚到本次咨询年度,在下一次太阳返照处截断(`consultation_native_layers._mudda_segments`);`monthly_windows` 多带 `start` / `end`。 +- 旧 `calc_mudda_dasha` 不再被任何 `scripts/*.py` 调用(测试锁住)。 + +### 9 位公开名人 2026 年年盘:Mudda 起运星核对(raman 岁差,与 golden 同设置) + +| 名人 | 出生月宿序号 | 已满年数 | (年数+月宿−2) mod 9 | 公式起运星 | 引擎起运星 | 旧起运星(从年主) | 年内前三段 | +|---|---|---|---|---|---|---|---| +| 乔布斯 | 26 | 71 | 5 | 木星 | 木星 ✓ | 金星 | 木星、土星、水星 | +| 奥巴马 | 4 | 65 | 4 | 罗睺 | 罗睺 ✓ | 水星 | 罗睺、木星、土星 | +| 泰勒 | 16 | 94 | 0 | 金星 | 金星 ✓ | 火星 | 金星、太阳、月亮 | +| 梦露 | 23 | 100 | 4 | 罗睺 | 罗睺 ✓ | 火星 | 罗睺、木星、土星 | +| 嘉兰 | 19 | 104 | 4 | 罗睺 | 罗睺 ✓ | 火星 | 罗睺、木星、土星 | +| 皮雅芙 | 3 | 111 | 4 | 罗睺 | 罗睺 ✓ | 火星 | 罗睺、木星、土星 | +| 卡罗 | 3 | 119 | 3 | 火星 | 火星 ✓ | 月亮 | 火星、罗睺、木星 | +| 小布什 | 14 | 80 | 2 | 月亮 | 月亮 ✓ | 月亮 | 月亮、火星、罗睺 | +| 齐达内 | 16 | 54 | 5 | 木星 | 木星 ✓ | 火星 | 木星、土星、水星 | + +- 9/9 与公式一致;8/9 与旧口径(第二批年主起排)不同。「旧起运星」列取 T1 前的产品年主(第二批庙旺近似选出)。 +- T2 改年主后 9 盘 Mudda 起运、顺序与起止时间逐项不变(脚本对比 T1 后 / T2 后两次输出)。每盘裁后 12 个月合计 12.0。 +- 乔布斯 2026 年第一段木星只剩 2 天(出生月宿余额几乎走完),是公式结果,不是截断错误。 + +## T2 Tajika 五分法(BUG-1217) + +- 原样移植 `_calc_native_panchavargiya_bala` 与 7 个依赖(8 个函数文本 sha256 钉在 `tests/test_tajika_five_fold_panchavargiya.py`,本机有上游时逐字比对)。规则 JSON 第二批已入库(blob 与上游一致)。 +- `calc_panchadhikari_year_lord` 一次算 7 星五分力量;候选 `panchavargiya_engine: tajika_native_five_fold`、`panchavargiya_score`(= 原始 / 4,满分 20)、`panchavargiya_raw_total`(满分 80)、`panchavargiya_components`(graha / uchcha / hudda / drekkana / navamsha)。庙旺近似不再参与选年主;年盘缺星 → blocked → `select_annual_year_lord` 写成 Muntha 主星 fallback 并带原因(不是静默退回近似分)。 +- 依据句标注「(按 Tajika 五分力量)」/「(by Tajika five-fold strength)」,`pl9_reader_english_terms` 加对照;`tests/test_report_english_dictionary.py` 单独跑通过。 +- 不改:研究开关 `JYOTISH_YEAR_LORD_PYJHORA_REFERENCE=1`(仍走上游 PyJHora 查询);年运强度层 `calc_tajika_strength_layers`(报告强度表的 Panchavargiya 列仍是庙旺近似,上游那里已用五分法)——不在本单范围,列为下轮问题。 + +### 9 位公开名人 2026 年年主:改前 / 改后 + +| 名人 | 改前年主(庙旺近似) | 改后年主(Tajika 五分法) | 变化 | 候选分数 改前 → 改后 | +|---|---|---|---|---| +| 乔布斯 | 金星(凶相位最强) | 金星(凶相位最强) | — | 金星 15.5→11.64;水星 14.0→7.93;太阳 14.0→11.26;火星 12.5→10.48 | +| 奥巴马 | 水星(唯一吉相位) | 水星(唯一吉相位) | — | 月亮 12.0→12.08;土星 14.0→9.22;水星 12.5→8.91 | +| 泰勒 | 水星(吉相位最强) | 火星(吉相位最强) | **变** | 水星 14.0→9.18;火星 14.0→11.38;木星 16.5→15.91;土星 12.5→8.02 | +| 梦露 | 月亮(吉相位最强) | 火星(吉相位最强) | **变** | 木星 25.0→11.47;月亮 14.0→10.43;火星 13.5→15.28;土星 15.0→11.16 | +| 嘉兰 | 火星(唯一吉相位) | 火星(唯一吉相位) | — | 火星 16.0→15.72;水星 14.0→15.18;土星 14.0→10.83;木星 22.5→8.7 | +| 皮雅芙 | 火星(唯一吉相位) | 火星(唯一吉相位) | — | 火星 15.0→9.53;土星 12.5→8.47;水星 10.5→9.23 | +| 卡罗 | 土星(吉相位最强) | 月亮(吉相位最强) | **变** | 木星 20.0→13.96;太阳 15.0→11.74;月亮 13.5→14.88;土星 14.0→12.35;火星 12.0→9.89 | +| 小布什 | 月亮(凶相位最强) | 月亮(凶相位最强) | — | 水星 12.5→13.59;月亮 17.0→13.58;木星 20.0→13.96;土星 14.0→12.35 | +| 齐达内 | 火星(唯一凶相位) | 火星(唯一凶相位) | — | 金星 12.5→5.63;火星 10.5→13.59;土星 14.0→12.37;木星 20.0→10.91 | + +- 变 3/9(泰勒、梦露、卡罗),都发生在「多个候选以吉相位照年盘上升、比 Panchavargiya」的分支;「唯一吉 / 凶相位」分支不受分数影响。泰勒改前是水星、火星 14.0 平分按候选顺序取水星。 +- 咨询 golden 三张盘里泰勒的年主随之从水星变火星(重采 `ecc76274`)。 + +## T3 Rath 版 Narayana(BUG-1218,未接) + +`scripts/narayana_rath.py` 整体按第五轮裁定重写(冻结的 `narayana_dasha.py` 不动,只复用其 Table 10/11/13/14、`_rasi_aspects`、年数与双主星函数): + +- 起运宫 `compare_signs`:7 级通则,上一级分出即停、不加权,输出 `strength_level_decided` 与每级的值。我方取的细节(裁定没写死,已列入下轮问题):第 1 级数 9 颗星(含罗计);第 2 级「宫主」对天蝎 / 水瓶用 `jaimini_dual_lord_source_v1` 选出的那一颗;第 3 级先比占据星中最高的尊贵(旺 3 > Moolatrikona 2 > 本宫 1,整宫口径,罗计不计),再比有尊贵的星数;第 5 级罗计宫主取 30 − 度数。 +- 一、二级就是上游 `select_narayana_seed_sign(strength_profile="rath_p36_role_conjunction_v1")` 的计数(`_role_candidate`),测试用上游函数在 400 张随机盘上逐项比对(主宫主、9 星口径下)。 +- Indira 特例:`book_example_exception: "rath_p66_indira_ak"`(含 8 星制 AK 的宫),只有七级全平、且调用方传 `allow_book_example=True` 才走,结果 `status: book_example_exception` 并标明。 +- 大运顺序:Table 10;土星在起运宫 Table 11 顺行;计都在起运宫按 Table 10 方向反转、保留固定 / 双体步进(上游 `rath_ketu_table12_v1` 原样);土计同在计都优先,`method_note`「PyJHora 兼容:计都优先」。 +- 子运:比较大运星座与第 7 宫(同 7 级),取强者,从其宫主(双主同上)所在星座起,12 等分;顺序 Table 13,大运星座有土星 → Table 11、有计都 → Table 14(同在计都优先);记录 `antardasha_start_rule`(比较的两宫、强者、第几级、宫主、起点、表)。 +- 输出:`profile: sanjay_rath`、`seed_sign`、`seed_basis`、`strength_level_decided`、`direction`、`exception_applied`、`dual_lord_rule`、`mahadasha`、`antardasha_start_rule`、`source`(页码)、`status`、`method_note`、`book_example_exception`。 + +### 三张原书样表复现 + +| 样表 | 原书起运宫 | 7 级通则选出 | 由第几级决定 | 给定原书起运宫:顺序 / 年数 | 是否复现 | +| --- | --- | --- | --- | --- | --- | +| Table 15(Sri Aurobindo 1872) | 巨蟹 | 巨蟹 | 第 1 级:巨蟹 2 星(火、木)对摩羯 0 星 | 12/12 / 12/12 | ✓ | +| Table 17(书中标准盘 1963) | 双鱼 | 双鱼 | 第 2 级:双鱼得木星(同宫)+ 宫主木星(同宫)两角色;处女只得木星相位一角色(第 1 级 1:1) | 12/12 / 12/12 | ✓ | +| Table 18(Indira Gandhi 1917) | 巨蟹 | **摩羯** | 第 5 级:前四级全平(1:1、2:2、尊贵 0:0、都是活动宫);巨蟹宫主月亮在摩羯 5.59° < 摩羯宫主土星在巨蟹 21.79°。第 6、7 级也平(否:否、6 年:6 年) | 12/12(土星在巨蟹 → Table 11)/ 12/12 | ✗ | + +- Table 18 若第 5 级不起作用,七级全平,AK(土星 21.79°,8 星制第一)在巨蟹,书内特例给出巨蟹——也就是说原书在 AK 那一步就定了,没有走到「宫主度数」。按任务书,特例只能在通则全平后使用,所以判不过。红线 3:不接任何用户可见面,T4、T5 不做。 +- **旁证(另一会话的只读审计,`origin/staging` `da95d92d`:`docs/research/shared_engine_reuse_audit_2026_10_03.md` §N1,本单未独立复核)**:原书 Indira 手算例(审计记为 Page 62;占星师引 p.65–66)的次序是 (2) → 第二来源 → (3) → (4) → (7) → 「(5) 与 (6)」,结论句「Saturn is the Atmakaraka and has gained the highest longitude. Hence, we can take Cancer」;但土星**落**巨蟹、**主**摩羯,按第 5、6 条字面(看宫主)两条都指向摩羯;同一命主的原书 Table 27 软件裁决也是**摩羯强于巨蟹**。即 Table 18 是原书手算例与原书规则、原书软件表三方不一致,按 7 级通则不复现是预期结果,本单不为它改通则。是否改红线 3 的验收口径由协调方提交产品负责人。 +- **审计里的附加证据(同上,本单未独立复核)**:原书 5 张出生盘软件裁决表(Table 22 / 23 / 24 / 25 / 27)共 30 对宫,`compare_signs` 对上 28/30(两处不符都在 Table 25 Wadiyar:双子/射手、处女/双鱼,书取双子、处女,通则第 5 级以水星 1.3° 对木星 10.0° 取射手、双鱼;对交点与岁差设置不敏感);双主星 8/10(Table 23 书取水瓶土星、我们罗睺;Table 25 书取天蝎计都、我们火星)。原书 Table 25 子运 36 行:巨蟹、金牛(土星在内)两段 12/12,双子段 0/12——因为第 1 处不符让子运比较取射手、从木星所在巨蟹起;子运方向按「起点星座」查 Table 13 与 Table 25 一致,但与原书 p.47 正文(按大运星座奇偶)不一致,第五轮问 4 没有裁方向。 +- 新增测试覆盖 7 级每一级(构造盘);第 4 级(星座性质)在 Lagna / 第 7 宫、大运宫 / 第 7 宫的比较里**永远不会起作用**——对冲两宫性质相同,测试用白羊对双子演示比较器本身。 + +## 改动的既有断言(原值 / 新值 / 原因) + +| 文件 / 测试 | 原值 | 新值 | 原因 | +| --- | --- | --- | --- | +| `tests/test_tajika_panchadhikari_year_lord.py::test_both_annual_producers_select_the_same_year_lord` | `pack["mudda_dasha"]["data"]["varsha_lord"] == 年主` | `independent_of_year_lord is True`,起运依据为月宿公式 | BUG-1216(问 7) | +| 同文件 `test_every_basis_has_a_sentence` | engine `native_proxy`,句尾「(Panchavargiya 为本地近似计算)」/「(… local approximation)」 | engine `tajika_native_five_fold`,句尾「(按 Tajika 五分力量)」/「(by Tajika five-fold strength)」 | BUG-1217(问 5) | +| 同文件 生产者一致性用例的 engine 集合 | `{"native_proxy"}` | `{"tajika_native_five_fold"}` | BUG-1217 | +| `tests/test_year_lord_basis_label.py::test_report_shows_the_basis_in_both_editions` | 中文含「Panchavargiya 为本地近似计算」,英文含「local approximation」 | 中文含「按 Tajika 五分力量」,英文含「Tajika five-fold strength」 | BUG-1217 | +| 同文件 `test_consultation_annual_card_carries_the_basis` | `varshesha_basis` 以「(Panchavargiya 为本地近似计算)」结尾 | 以「(按 Tajika 五分力量)」结尾 | BUG-1217 | +| `tests/test_narayana_rath_book_tables.py::test_start_sign_selection_current_state` | 改名前:Table 17 选处女、Table 18 平局(只有前两级) | `test_start_sign_by_the_seven_level_rule`:15 巨蟹(1 级)、17 双鱼(2 级)、18 摩羯(5 级,与原书不符),特例够不着 | BUG-1218(问 1、2) | +| 同文件 `test_antardasha_is_twelve_equal_parts_from_the_md_sign` | 子运从大运星座起(巨蟹 → 巨蟹、双子、金牛) | `test_antardasha_starts_from_the_lord_of_the_stronger_of_md_and_seventh`:Table 15 巨蟹大运从射手起(月亮所在);Table 18 巨蟹大运取摩羯、从土星所在巨蟹起、Table 11 | BUG-1218(问 4) | + +前端断言未改。 + +## 测试 + +| 项 | 结果 | +| --- | --- | +| 新增 Python 测试 | `test_tajika_mudda.py`(170)、`test_tajika_five_fold_panchavargiya.py`(14)、`test_narayana_rath_rules.py`(16);`test_narayana_rath_book_tables.py` 仍 10 条(两条改写) | +| 定向回归(年运包、咨询原生层、Tajika、年主选法、年主依据、读者版、CLI 冒烟、Tajika 对账、报告密度、Narayana 标注、英文版词典、隐私、冻结完整性 / 新鲜度) | 全过 | +| `tests/test_report_english_dictionary.py`(单独跑) | 通过 | +| `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) | 开工基线(`ac588172`,一次性工作树)4929 项 / pass 4864 / fail 24 / cancelled 0 / skipped 41;收尾 4929 / 4864 / 24 / 0 / 41,**失败名单按测试名逐条相同**(24 条均为 DB / Docker / 部署类)。确认门 `rectification-confirmation-gate.test.ts` 通过(本单未重新冻结,读取路径不用改) | + +## 生时校正评测(v5 77 例) + +- 命令:`python3 scripts/research/holdout_v5_baseline.py --dataset v5 --out-dir