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),按修订后的红线 3 通过:Table 15、17 通则自动复现;Table 18 显式指定巨蟹 12/12、标 book_example_exception,通则判摩羯照实输出;原书 5 张软件表 28/30(两处 Wadiyar 预期不符已写明);Table 25 子运 24/36(双子段注明) |
| T4 并列展示 |
完成(BUG-1218)。参考版报告与 timing / annual 数据卡并列显示 Rath 版,旧算法保留「旧算法」标注;打分与时间轴结论仍用旧算法;golden 真实引擎重采 |
| T5 v5 试算 |
完成(研究分支 codex/narayana-rath-rectification-trial-20261003,未合入、未推送)。R1、R2 都有档位降超过 1pt(R2 ±30 回放头名 −5.2pt,R1 ±60 覆盖 −2.6pt),按口径都算变差;R2 在 ±10、±60 明显变好(±60 六题回放头名 +10.4pt)。不是净提升,交产品决定 |
| T6 记录 |
BUG-1216~1219、CHANGELOG、本文件、任务索引、BLOCKED、T5 研究记录 |
| 生时校正 |
冻结身份文件零改动(含 narayana_dasha.py),无需按 ERR-110 重新冻结,确认门测试路径不用改;v5 77 例改前改后逐项相同(T1–T3 后、T4 后各一次);不升打分版本 |
决策记录(执行中收到)
- 2026-10-03 晚,产品负责人修改红线 3(协调方转达;任务书
59bb7da3 已同步修订,以其为准)。依据另一会话的只读审计 docs/research/shared_engine_reuse_audit_2026_10_03.md(da95d92d)§N1、§8:
- 原书 Indira 手算例(PDF Page 62;占星师引 p.65–66)的结论句以「土星是 AK、度数最高」取巨蟹,但土星落巨蟹、主摩羯,按第 5、6 条字面两条都指向摩羯;同一命主的原书 Table 27 软件裁决也是摩羯强于巨蟹。Table 18 是原书内部矛盾。
- 新验收口径:Table 15、17 通则自动选出原书起运宫且 12 个大运顺序与年数全对;Table 18 显式指定巨蟹后 12 个大运全对、输出带
book_example_exception,通则判摩羯照实输出、不改(不得为它写特例代码扭通则);原书 5 张 D1 软件表 30 对强弱写成测试、不少于 28/30,两处 Wadiyar 不符写明;Table 25 子运 36 行写成测试,断言现状 24/36 并注明。任一项低于现状即停。
- T4、T5 恢复执行。协调方另要求:
scripts/solar_return.py 只做本批必需的最小改动(返照时刻修复 TASK-annual-return-frame-20261003 在本批之后由另一会话执行)。
- 本单据此:T3 加显式起运宫 +
book_example 路径(BOOK_EXAMPLES["rath_p66_indira_ak"],带 book_internal_contradiction: true 与证据句)、软件表与 Table 25 测试(数据取自审计脚本与上游 chara_narayana_rath_wadiyar_table25_replay_2026_09_07.json,写在测试里,未新增 references 文件);继续 T4、T5。
环境
| 项 |
实际 |
| 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(T1–T3 后 v5)、.worktrees/batch3-eval-935e26fb(T4 后 v5,也是 T5 的对照),均 --detach 新建,用完删除;T5 研究分支工作树 .worktrees/narayana-rath-trial-20261003(保留,供验收复跑);未切换任何别人的工作树 |
提交与任务对应
| 任务 |
提交 |
BUG |
| T1 |
547cf5f1、4956978d(改写断言补三栏注释) |
BUG-1216 |
| T2 |
c6aca9bf |
BUG-1217 |
| T3 |
b526be47、ad1d65b1(红线 3 修订后:Table 18 显式起运宫路径、软件表与 Table 25 测试) |
BUG-1218 |
| golden 重采 |
ecc76274(T1/T2);T4 提交内再采一次(含 rath) |
BUG-1216 / 1217 / 1218 |
| T6 记录 |
0ca850ba(首版)+ 最后一个 docs 提交(T4 / T5 后更新) |
BUG-1216~1219 |
| T4 |
935e26fb |
BUG-1218 |
| T5(研究分支,未合入) |
codex/narayana-rath-rectification-trial-20261003 e3e9befc(基于 935e26fb) |
BUG-1218 |
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"。两条路:① 七级全平、且调用方传 allow_book_example=True 时由「含 8 星制 AK 的宫」裁出(原任务书要求,保留);② 红线 3 修订后的验收路:calc_narayana_rath(..., seed_sign_idx=巨蟹, book_example="rath_p66_indira_ak"),输出 status: book_example_exception、book_example(book_internal_contradiction: true 与证据句),并把通则自己的裁决原样放在 general_rule_selection(摩羯,第 5 级)。产品路径两条都不走。
- 大运顺序: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。
验收(修订后的红线 3)
| 项 |
要求 |
结果 |
| Table 15(Sri Aurobindo 1872) |
通则自动选出巨蟹,12 个大运顺序 / 年数全对 |
✓ 巨蟹,第 1 级(巨蟹 2 星:火、木;摩羯 0 星);12/12 / 12/12 |
| Table 17(书中标准盘 1963) |
通则自动选出双鱼,12/12 |
✓ 双鱼,第 2 级(双鱼:木星同宫 + 宫主木星同宫两角色;处女:木星相位一角色;第 1 级 1:1);12/12 / 12/12 |
| Table 18(Indira Gandhi 1917) |
显式指定巨蟹后 12/12、带 book_example_exception;通则结果照实输出 |
✓ 12/12(土星在巨蟹 → Table 11)/ 12/12;status: book_example_exception;general_rule_selection = 摩羯、第 5 级(前四级全平:1:1、2:2、尊贵 0:0、都是活动宫;巨蟹宫主月亮在摩羯 5.59° < 摩羯宫主土星在巨蟹 21.79°;第 6、7 级也平) |
| 原书 5 张 D1 软件裁决表(Table 22 / 23 / 24 / 25 / 27) |
≥ 28/30,两处 Wadiyar 不符写明 |
✓ 28/30。不符正是 Table 25 双子/射手、处女/双鱼(书取双子、处女;通则第 5 级以水星 1.3° 对木星 10.0° 取射手、双鱼),测试断言不符集合恰为这两对、且都在第 5 级。双主星 8/10(Table 23 水瓶书取土星、我们罗睺;Table 25 天蝎书取计都、我们火星),测试同样钉住 |
| Table 25 子运 36 行 |
断言现状 24/36 并注明 |
✓ 巨蟹段 12/12、金牛段(土星在内,Table 11)12/12、双子段 0/12:双子/射手比较取射手(第 5 级,同上不符),子运从木星所在巨蟹起,原书从水星所在金牛起 |
- 软件表与 Table 25 的数据:出生资料与裁决按审计脚本转录(审计会话 scratchpad
verdicts.py、t25.py),Table 25 子运行取自上游 c7117f92 references/oracle/chara_narayana_rath_wadiyar_table25_replay_2026_09_07.json,都写在 tests/test_narayana_rath_book_tables.py 里,没有新增 references 文件(避免 _en 对照义务与上游 blob 漂移)。本单在本工作树复跑审计脚本,结果与审计一致(28/30、8/10)。
- Indira 的书内矛盾(审计 §N1):原书手算例(PDF 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 软件裁决也是摩羯。按通则判摩羯是预期结果。
- 新增测试覆盖 7 级每一级(构造盘);第 4 级(星座性质)在 Lagna / 第 7 宫、大运宫 / 第 7 宫的比较里永远不会起作用——对冲两宫性质相同,测试用白羊对双子演示比较器本身。
T4 并列展示(BUG-1218)
- 引擎:
narayana_legacy_label.label_legacy_narayana 收到盘面时在旧结果下挂 rath(rath_narayana_view):algorithm_label「Sanjay Rath 版(并列参考,未进打分与时间轴结论)」及英文、used_for_scoring: false、seed_sign、seed_basis、strength_level_decided 与中英说明、direction 与中英说明、exception_applied、method_note、24 段大运(年龄与公历年)、当前大运 / 子运、当前大运的 12 段子运与 antardasha_start_rule。三个调用方传盘面:咨询 modules.narayana_dasha(jyotish_api_server.py 只改了这一行调用的参数,不增行)、全量解读 Step 4.13、narayana-dasha 命令行(多打印一段 Rath)。旧结果的每个字段不变(测试:带与不带 Rath 时去掉 rath 后逐项相同);Rath 计算出错只写 rath.status: blocked,不碰旧结果。
- 打分与时间轴结论:校正打分直接调冻结的
narayana_dasha,不经过展示层(测试:冻结清单与 scripts/rectification/ 都不导入 narayana_rath / narayana_legacy_label;narayana_rath 只被展示层导入)。咨询卡里旧 Narayana 仍叫 narayana、仍带「旧算法」标签。
- 参考版报告「Narayana Dasha 交叉时间轴」段:旧算法那行下面加「- 并列:Sanjay Rath 版(…):起运宫 X(第 N 级:…);当前大运 Y,宫主 Z」「- 顺序:…」、Rath 24 段大运表、当前大运的 12 段子运表与起点说明。英文词表补齐(测试:这些行经英文词表后无中文)。读者版不显示 Narayana(与第二批相同),未改。
- 咨询数据卡:
base.timing.narayana_rath(标签、起运宫、第几级、当前大运 sign / lord / years / 起止年龄),只上 timing / annual 两类卡。原因是字数:其余单领域卡最大 11,979 / 12,000(乔布斯婚恋),Rath 大运约 +174 字会超;timing / annual 卡按 BUG-1160/1161 口径是「契约 + 卡 ≤ 12,000、含清单 ≤ 18,000」,加上后最大 10,284 / 13,734。子运只进报告。其他领域卡要不要也放,需要产品决定(要放就得在卡上别处让出约 180 字)。
- golden:咨询卡 golden 与名人回测 golden 用真实引擎重采(
NARAYANA_KEEP 加 rath)。三张 golden 盘的 Rath 起运宫:乔布斯双鱼(第 1 级)、奥巴马摩羯(第 3 级,土星在内 → Table 11)、泰勒金牛(第 5 级)。
改动的既有断言(原值 / 新值 / 原因)
| 文件 / 测试 |
原值 |
新值 |
原因 |
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 级)照实输出;Table 18 另由 test_table18_only_with_the_explicit_cancer_seed_and_flagged 按显式起运宫 12/12 验收 |
BUG-1218(问 1、2;红线 3 修订) |
同文件 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) |
| 同文件 test_rath_profile_is_not_wired_into_any_product_path | 没有任何脚本导入 narayana_rath | 改名 test_rath_profile_is_display_only:只有展示层 narayana_legacy_label.py 导入;冻结打分文件与 scripts/rectification/ 不导入 narayana_rath / narayana_legacy_label | BUG-1218 T4(并列展示,打分仍旧算法) |
前端既有断言未改(新增 consult-narayana-rath-card-20261003.test.ts 两条)。
测试
| 项 |
结果 |
| 新增 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 → 13(三条改写、新增 Table 18 显式起运宫、软件表 28/30、Table 25 24/36);test_narayana_legacy_label.py 4 → 7 |
| 收尾定向合跑(新文件 + 年运包、咨询原生层、Tajika、年主、读者版、CLI 冒烟、Narayana 标注、英文词典 / 英文版、隐私、冻结完整性 / 新鲜度、API 增长合同) |
467 passed,exit 0 |
| 定向回归(年运包、咨询原生层、Tajika、年主选法、年主依据、读者版、CLI 冒烟、Tajika 对账、报告密度、Narayana 标注、英文版词典、隐私、冻结完整性 / 新鲜度) |
全过 |
tests/test_report_english_dictionary.py(单独跑) |
通过 |
run_quality_gate.py --profile quick --skip-frontend-runtime(系统 python3) |
T3 后与 T4 后各跑一次,都 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,与第二批同数;T4 后复跑同) |
npm test(Node 22.14) |
开工基线(ac588172,一次性工作树)4929 项 / pass 4864 / fail 24 / cancelled 0 / skipped 41;T3 后 4929 / 4864 / 24 / 0 / 41;T4 后(收尾)4931 / 4866 / 24 / 0 / 41(+2 为新增卡片测试),两次失败名单都与基线按测试名逐条相同(24 条均为 DB / Docker / 部署类)。确认门 rectification-confirmation-gate.test.ts 通过(本单未重新冻结,读取路径不用改) |
生时校正评测(v5 77 例)
- 命令:
python3 scripts/research/holdout_v5_baseline.py --dataset v5 --out-dir <dir> --json-out <dir>/summary.json,PYTHONHASHSEED=0、JYOTISH_API_CHART_CACHE_TTL_SECONDS=0;改前 ac588172、改后 ecc76274(T1–T3 与 golden 之后)与 935e26fb(T4 之后,引擎代码终版),各在一次性 --detach 工作树。
- 本分支没有试算开关(开关只在 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 |
ecc76274:四个输出文件(sweep、cluster_width、合并 summary、v5_all 汇总)去掉耗时与路径字段后 逐项相同(IDENTICAL ×4);935e26fb:sweep、cluster_width、合并 summary 三个文件 逐项相同(IDENTICAL ×3;该次没有写 v5_all 汇总文件)。冻结身份文件零改动,test_rectification_validation_integrity_gate / test_sealed_holdout_contract_freshness 通过;ALGORITHM_VERSION 不变。
T5 Rath 版替换校正 Narayana 的 v5 试算(研究分支,不合入)
结论:R1(只换大运)与 R2(大运和子运都换)都有档位降超过 1pt,按任务书口径都算「变差」;不是净提升,不建议现在替换。 是否替换由产品决定。详表、开关做法、逐例变化最大的 5 例见 docs/research/narayana_rath_rectification_trial_2026_10_03.md。
| 指标(v5 77 例,百分点变化) |
±10 R1 / R2 |
±30 R1 / R2 |
±60 R1 / R2 |
| 先验头名 |
+1.3 / 0 |
0 / +1.3 |
0 / +1.3 |
| 六题回放头名 |
0 / +3.9 |
+1.3 / −1.3 |
+5.2 / +10.4 |
| 线上区间回放头名 |
0 / +2.6 |
−1.3 / −5.2 |
+2.6 / +2.6 |
| 覆盖(回放) |
0 / 0 |
0 / −1.3 |
−2.6 / 0 |
| 中位宽度(分钟,基线 13 / 33 / 65) |
11 / 13 |
37 / 35 |
73 / 69 |
| futile 真值在区间(基线 76 / 75 / 76) |
76 / 76 |
75 / 74 |
73 / 76 |
- 77 例里 74(R1)/ 73(R2)例至少一档有变化:替换对打分影响大、方向不一致。
- 开关:研究脚本运行时替换打分用到的
narayana_dasha 两个模块属性,冻结文件字节不变;两档都只算第一周期(与旧打分同口径);起运宫全平、子运平局的退回各 0 次。
- 研究分支
codex/narayana-rath-rectification-trial-20261003 e3e9befc(工作树 .worktrees/narayana-rath-trial-20261003 保留供复跑),不合入、未推送。
名人生平回测
卡片年运段变了(Mudda 分段、依据句、泰勒年主),timing / annual 卡多了 Rath 版大运。本机无模型 key,未跑,写入 BLOCKED.md。
下轮问占星师
- Table 18(Indira)请确认按「书内例外」处理:7 级通则下巨蟹(土星)与摩羯(月亮)前四级全平,第 5 级「宫主星座内度数」(巨蟹宫主月亮 5°36′、摩羯宫主土星 21°48′)判摩羯;原书手算例以「土星是 AK、度数最高」取巨蟹,但土星落巨蟹、主摩羯,原书 Table 27 软件裁决也判摩羯。产品已决定:通则出摩羯照实显示,原书巨蟹只在指定起运宫时复现并标「书内例外」。请确认,或指出我们读错的地方。
- 第 3 级「占据星尊贵」怎么比:我们先比两宫中最高的一档(旺 > Moolatrikona > 本宫),再比有尊贵的星数。对吗?罗睺、计都的尊贵算不算?
- 第 2 级里天蝎 / 水瓶的「宫主」:用双主规则选出的一颗(我们现在的做法),还是两颗都算一个角色?
- 第 1 级占据星:罗睺、计都算不算「星」?(我们按「实际星体」算了。)
- Mudda 细节:年长用 365.25 天(太阳年,现做法)还是 360 天?余额按出生时月亮(现做法)还是年盘月亮(上游另有一种)?
- Wadiyar 两对(审计证据):原书 Table 25 软件裁决取双子(对射手)、处女(对双鱼),7 级通则在第 5 级以水星 1.3° 对木星 10.0° 取射手、双鱼。是否有漏掉的规则?另,双主星两处:Table 23 水瓶书取土星(我们罗睺)、Table 25 天蝎书取计都(我们火星)。
- 子运方向:原书 p.47 正文「依大运星座奇偶」;J.S. 2.4.31-32「大运星座为奇或其宫主落奇宫则顺行」;原书 Table 25 三段都跟起点星座奇偶(我们现在的做法)。取哪一种?
- 第 5 级保不保留:原书 p.32 正文说 Narayana 用 (2)(3)(4)(6) 和 (7) 或 (8),脚注 27 说只用 (2)(3)(4) 加第二来源。审计按 5 张软件表核:保留宫主度数 28/30,去掉 27/30(且 Indira 变平局)。请确认保留。
- (产品)其他领域数据卡要不要也放 Rath 大运:现在只上年运 / 时运卡;婚恋、事业等卡已在 11,979 / 12,000 字,放进去要在卡上别处让出约 180 字。
- 年运强度表:报告里年运「Harsha / Panchavargiya 强度」表仍是庙旺近似分,是否也统一为 Tajika 五分法?(产品决定,不是口径问题。)
其他观察(不在本单范围,未改)
- 全量解读 Step 9 的年主此前一直是 Muntha 主星(第二批漏掉的第三个生产者),本单因 Mudda 一并改了;Step 9 输出进
timing_and_predictive_systems.tajika。
scripts/solar_return.py 本单只改两处:calc_solar_return_chart 多返回 birth_moon_longitude(2 行)、solar_return_full_report 第 7 步 Mudda 改调 tajika_mudda。协调方说明的返照时刻偏 3–7 分钟另有任务书 TASK-annual-return-frame-20261003(排在本批之后、同改此文件),本单未碰返照时刻;那张单落地后 Mudda 的 annual_start 会随之变。
- 前端测试夹具
report-density-fictional-engine.json / -reader.json 是早期引擎快照,里面的年运段仍是旧口径;它们只用于报告渲染测试,本单未重采。
Claude 验收(2026-10-03)
- 推送前已 rebase 到
origin/staging(59bb7da3)。docs/tasks/README.md 的冲突是两边各加了一行,合并后都保留:本批状态行、TASK-annual-return-frame-20261003 行。
- 快速门通过。英文对照、隐私以及 rath / mudda / year_lord / panchavargiya 定向测试全部通过。冻结清单(
production_scoring_files)里的文件与 staging 无差异。
- 前端:
tsc 0 错;lint 0 error / 126 warning;npm test 4931 项、fail 24,失败名单与第二批逐条相同,确认门测试通过。
- Mudda 起运星手算抽查 3 盘:JOB (71+26−2) mod 9 = 5 → 木;OBA 67 mod 9 = 4 → 罗;TAY 108 mod 9 = 0 → 金。与引擎结果一致。
- T5:R1 / R2 都有档位降幅超过 1pt(R1 线上区间 ±30 档 −1.3;R2 线上区间 ±30 档 −5.2、回放 ±30 档 −1.3),按口径判为变差。但 R2 的回放 ±60 档 +10.4,好坏混合,交产品决定。打分维持旧算法。