diff --git a/CHANGELOG.md b/CHANGELOG.md index ff7316ff..f0fbf576 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # 印度占星 Skill 更新日志 +## v6.1.8(2026-06-08)—— Nishkapata 友好星座条件恢复 + 主题化报告真实模块接线,Yoga F1 提升至 95.22% + +> **目标**:继续冲击 Yoga FN 瓶颈,但坚持准确率优先,只接受来源语义明确且预验证不增加 FP 的规则优化。 + +### 关键改进 +- `bvr_nishkapata_precise` 恢复 BVR-205 / PyJHora 描述中的“4宫行星处于友好星座”条件:第4宫若有行星处于友好/自/旺等强势星座,也可触发 Nishkapata Yoga。 +- 预验证过的但未采纳方案:Kapata Yoga 的 4宫主受凶星相位方向候选会增加 FP 且无 FN 收益,因此保持原逻辑不变。 +- 继续保留 Thrikaala / Dharidhra / Parannabhojana 的保守口径:这些规则牵涉特定 amsa、Navamsa/弱势定义或 PyJHora 口径,暂不为召回做宽泛放松。 +- `scripts/orchestrator_bridge.py` 新增 `inject_full_reading_modules()`:直接消费 `full-reading.modules` 的真实结果,把 `yoga`、`varga_full`、`d9_navamsa_expanded`、`ashtakavarga`、`shadbala`、`special_lagnas`、`vivah_saham`、`dasa_convergence`、`transit_multi_reference` 等模块转换为 `ReportTechniqueResult`。 +- 主题化报告不再主要依赖 registry/MockDataFactory;在 full-reading JSON 输入下,婚姻/事业/财富/健康/灵性五大主题会获得真实证据与真实 Vimshottari 时间锚。 + +### 验证 +```bash +python3 -m py_compile scripts/orchestrator_bridge.py scripts/report_orchestrator.py scripts/reading_orchestrator.py scripts/jyotish_engine.py +python3 scripts/validate_logic_v2.py +python3 scripts/jyotish_engine.py full-reading --year 1990 --month 6 --day 15 --hour 10 --minute 30 --lat 39.9 --lon 116.4 --tz 8 +python3 scripts/orchestrator_bridge.py /tmp/jyotish_full_reading_for_theme.json +python3 scripts/run_quality_gate.py --skip-yoga-logic +``` +- 60 张测试图,82 条可对比规则 +- FP=36,FN=63 +- Precision=96.48%,Recall=93.99%,F1=95.22% +- 主题化桥接 smoke:生成5个主题报告;真实模块注入 evidence counts 为 marriage=9、career=12、wealth=9、health=12、spirituality=13;统一叙事生成成功。 +- 质量门禁:compile/json/audit/BPHS/pytest 35 passed/golden case 全通过 + +--- + ## v6.1.7(2026-06-08)—— Yoga F1 首次突破 95% 与 full-reading D9/D60 注入 > **目标**:继续 Yoga 精度冲刺,同时把已在验证管线生效的 D9/D60 YogaContext 正式接入 `yoga` 子命令与 `full-reading` 主链路。 diff --git a/SKILL.md b/SKILL.md index b34195ac..b259d8fc 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,6 +1,6 @@ --- name: jyotish-vedic-astrology -version: 6.1.7 +version: 6.1.8 description: 印度占星(Jyotish)专业解盘与推运系统。核心能力:PDF星盘输入→严谨解盘→精确推运应期输出。触发词:印度占星、吠陀占星、Jyotish、解盘、推运、星盘分析、Dasha、Transit、Nakshatra、Yoga、出生时间矫正、PDF星盘、读取PDF、分析PDF星盘、现代解读、误判纠错、Varga分盘、综合分析、过境分析、合盘、婚姻匹配、年运盘、Prashna、Argala、Jaimini、Shadbala、Ashtakavarga、HTML报告、深度解盘。 --- @@ -10,19 +10,19 @@ description: 印度占星(Jyotish)专业解盘与推运系统。核心能力 > **严格路由**:`references/strict-workflow-router.md`(⭐涉及事业/婚恋/财务/应期/技法验证时必须优先读取) > **覆盖矩阵**:`references/technique-capability-matrix.md`(⭐判断技法 covered/partial/missing 时必须参考) > **机器注册表**:`references/technique_registry.json` + `scripts/audit_capabilities.py`(⭐用于自动审计与CI门禁) -> **版本**:v6.1.7 | **详细变更**:`CHANGELOG.md` +> **版本**:v6.1.8 | **详细变更**:`CHANGELOG.md` ## Yoga 逻辑验证指标 -| 指标 | v6.0.45(旧基线) | v6.1.7(当前) | +| 指标 | v6.0.45(旧基线) | v6.1.8(当前) | |---|---:|---:| -| Precision | 83.26% | **96.46%** | -| Recall | 91.52% | **93.61%** | -| **F1 Score** | 87.19% | **95.02%** | +| Precision | 83.26% | **96.48%** | +| Recall | 91.52% | **93.99%** | +| **F1 Score** | 87.19% | **95.22%** | | FP | 193 | **36** | -| FN | 89 | **67** | +| FN | 89 | **63** | -> v6.1.7 当前真实指标以 `references/validation_logic_report.json` 为准:60张测试图、82条可对比规则,FP=36、FN=67、F1=95.02%。关键提升来自 aspect 方向修正、D9/D60 上下文注入、Thrikaala Gnana 收紧、Dharidhra/Navamsa 方法恢复、五系统 Dasha Convergence 接入、full-reading YogaContext 桥接,以及 Sankha Yoga 共享宫主误报收紧。 +> v6.1.8 当前真实指标以 `references/validation_logic_report.json` 为准:60张测试图、82条可对比规则,FP=36、FN=63、F1=95.22%。关键提升来自 aspect 方向修正、D9/D60 上下文注入、Thrikaala Gnana 收紧、Dharidhra/Navamsa 方法恢复、五系统 Dasha Convergence 接入、full-reading YogaContext 桥接、Sankha Yoga 共享宫主误报收紧,以及 Nishkapata 友好星座条件恢复。主题化报告桥接层已可直接消费 `full-reading.modules` 真实结果,生成五大主题证据与叙事。 --- @@ -313,9 +313,9 @@ $PYTHON $SCRIPT <子命令> [参数] --- -**版本**:v6.1.7-yoga-f1-95-d9-d60-context +**版本**:v6.1.8-yoga-f1-95-theme-real-modules **创建日期**:2026-04-20 -**最后更新**:2026-06-08(v6.1.7 在 v6.1.6 五系统推运收敛基础上,把 D9/D60/Panchanga YogaContext 接入 `yoga` 子命令与 `full-reading` 主链路,并收紧 Sankha Yoga 第二分支;Yoga F1 首次达到 95.02%。Yoga 当前以 `references/validation_logic_report.json` 为准。) +**最后更新**:2026-06-08(v6.1.8 在 v6.1.7 D9/D60 YogaContext 基础上,恢复 Nishkapata Yoga 的 BVR-205 友好星座条件;Yoga F1 提升至 95.22%,FP=36、FN=63。`orchestrator_bridge.py` 已可直接消费 `full-reading.modules` 真实结果生成婚姻/事业/财富/健康/灵性五大主题证据与叙事。Yoga 当前以 `references/validation_logic_report.json` 为准。) --- diff --git a/references/validation_logic_report.json b/references/validation_logic_report.json index 33fa7803..b6b12ca9 100644 --- a/references/validation_logic_report.json +++ b/references/validation_logic_report.json @@ -2,7 +2,7 @@ "summary": { "charts_tested": 60, "comparable_rules": 82, - "skill_total": 1018, + "skill_total": 1022, "pyjhora_total": 1049, "unmapped_pyjhora": 718, "missing_mappings": { @@ -98,34 +98,34 @@ "yuddhatpoorvadridhachitta_yoga" ] }, - "agreements": 982, + "agreements": 986, "false_positives": 36, - "false_negatives": 67, - "precision": 0.9646, - "recall": 0.9361, - "f1": 0.9502 + "false_negatives": 63, + "precision": 0.9648, + "recall": 0.9399, + "f1": 0.9522 }, "false_positives": [ - { - "chart": "Albert Einstein", - "rule_id": "bvr_dharidhra_11_precise", - "rule_name": "Dharidhra Yoga" - }, { "chart": "Albert Einstein", "rule_id": "bvr_bhaga_chumbana_yoga", "rule_name": "Bhaga Chumbana Yoga" }, { - "chart": "Nikola Tesla", - "rule_id": "bvr_krisanga_yoga", - "rule_name": "Krisanga Yoga" + "chart": "Albert Einstein", + "rule_id": "bvr_dharidhra_11_precise", + "rule_name": "Dharidhra Yoga" }, { "chart": "Nikola Tesla", "rule_id": "bvr_bhratruvriddhi_precise", "rule_name": "Bhratruvriddhi Yoga" }, + { + "chart": "Nikola Tesla", + "rule_id": "bvr_krisanga_yoga", + "rule_name": "Krisanga Yoga" + }, { "chart": "Charles Darwin", "rule_id": "bvr_matru_sneha_yoga", @@ -133,13 +133,13 @@ }, { "chart": "Alexander Fleming", - "rule_id": "bvr_bhaga_chumbana_yoga", - "rule_name": "Bhaga Chumbana Yoga" + "rule_id": "bvr_yukthi_samanwithavagmi_yoga", + "rule_name": "Yukthi Samanwithavagmi Yoga" }, { "chart": "Alexander Fleming", - "rule_id": "bvr_yukthi_samanwithavagmi_yoga", - "rule_name": "Yukthi Samanwithavagmi Yoga" + "rule_id": "bvr_bhaga_chumbana_yoga", + "rule_name": "Bhaga Chumbana Yoga" }, { "chart": "Max Planck", @@ -148,13 +148,13 @@ }, { "chart": "Richard Feynman", - "rule_id": "bvr_nishkapata_precise", - "rule_name": "Nishkapata Yoga" + "rule_id": "bvr_018_ubhayachara_precise", + "rule_name": "Ubhayachara Yoga" }, { "chart": "Richard Feynman", - "rule_id": "bvr_018_ubhayachara_precise", - "rule_name": "Ubhayachara Yoga" + "rule_id": "bvr_nishkapata_precise", + "rule_name": "Nishkapata Yoga" }, { "chart": "Mahatma Gandhi", @@ -211,26 +211,26 @@ "rule_id": "adhi_yoga", "rule_name": "Adhi Yoga" }, - { - "chart": "MS Dhoni", - "rule_id": "bvr_karma_malika_precise", - "rule_name": "Karma Malika Yoga" - }, { "chart": "MS Dhoni", "rule_id": "bvr_mathibhramana_yoga", "rule_name": "Mathibhramana Yoga" }, { - "chart": "Lionel Messi", - "rule_id": "bvr_017_vosi_precise", - "rule_name": "Vosi Yoga" + "chart": "MS Dhoni", + "rule_id": "bvr_karma_malika_precise", + "rule_name": "Karma Malika Yoga" }, { "chart": "Lionel Messi", "rule_id": "brahma_yoga", "rule_name": "Brahma Yoga" }, + { + "chart": "Lionel Messi", + "rule_id": "bvr_017_vosi_precise", + "rule_name": "Vosi Yoga" + }, { "chart": "Cristiano Ronaldo", "rule_id": "bvr_dwadasa_sahodara_yoga", @@ -246,15 +246,20 @@ "rule_id": "bvr_dharidhra_11_precise", "rule_name": "Dharidhra Yoga" }, + { + "chart": "Amitabh Bachchan", + "rule_id": "bvr_bandhubhisthyaktha_precise", + "rule_name": "Bandhubhisthyaktha Yoga" + }, { "chart": "Amitabh Bachchan", "rule_id": "bvr_karma_malika_precise", "rule_name": "Karma Malika Yoga" }, { - "chart": "Amitabh Bachchan", - "rule_id": "bvr_bandhubhisthyaktha_precise", - "rule_name": "Bandhubhisthyaktha Yoga" + "chart": "Princess Diana", + "rule_id": "bvr_kaahala_yoga", + "rule_name": "Kaahala Yoga" }, { "chart": "Princess Diana", @@ -266,11 +271,6 @@ "rule_id": "bvr_bandhu_pujya_yoga", "rule_name": "Bandhu Pujya Yoga" }, - { - "chart": "Princess Diana", - "rule_id": "bvr_kaahala_yoga", - "rule_name": "Kaahala Yoga" - }, { "chart": "J. Krishnamurti", "rule_id": "bvr_dehasthoulya_yoga", @@ -299,10 +299,10 @@ }, { "chart": "Marie Curie", - "rule_id": "bvr_thrikaala_gnana_yoga", - "rule_name": "Thrikaala Gnana Yoga", + "rule_id": "parvata_yoga", + "rule_name": "Parvata Yoga", "pyjhora_names": [ - "thrikaala_gnana_yoga" + "parvata_yoga" ] }, { @@ -316,10 +316,10 @@ }, { "chart": "Marie Curie", - "rule_id": "parvata_yoga", - "rule_name": "Parvata Yoga", + "rule_id": "bvr_thrikaala_gnana_yoga", + "rule_name": "Thrikaala Gnana Yoga", "pyjhora_names": [ - "parvata_yoga" + "thrikaala_gnana_yoga" ] }, { @@ -394,15 +394,6 @@ "nishkapata_yoga_206" ] }, - { - "chart": "Indira Gandhi", - "rule_id": "bvr_nishkapata_precise", - "rule_name": "Nishkapata Yoga", - "pyjhora_names": [ - "nishkapata_yoga_205", - "nishkapata_yoga_206" - ] - }, { "chart": "Indira Gandhi", "rule_id": "bvr_utthama_graha_yoga", @@ -459,11 +450,10 @@ }, { "chart": "Margaret Thatcher", - "rule_id": "bvr_nishkapata_precise", - "rule_name": "Nishkapata Yoga", + "rule_id": "bvr_matru_satrutwa_yoga", + "rule_name": "Matru Satrutwa Yoga", "pyjhora_names": [ - "nishkapata_yoga_205", - "nishkapata_yoga_206" + "matru_satrutwa_yoga" ] }, { @@ -481,11 +471,13 @@ ] }, { - "chart": "Margaret Thatcher", - "rule_id": "bvr_matru_satrutwa_yoga", - "rule_name": "Matru Satrutwa Yoga", + "chart": "Rabindranath Tagore", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", "pyjhora_names": [ - "matru_satrutwa_yoga" + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" ] }, { @@ -496,16 +488,6 @@ "brahma_yoga" ] }, - { - "chart": "Rabindranath Tagore", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", - "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" - ] - }, { "chart": "Ludwig van Beethoven", "rule_id": "bvr_thrikaala_gnana_yoga", @@ -514,25 +496,6 @@ "thrikaala_gnana_yoga" ] }, - { - "chart": "Wolfgang Mozart", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", - "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" - ] - }, - { - "chart": "Wolfgang Mozart", - "rule_id": "bvr_raja_bhanga_yoga", - "rule_name": "Raja Bhanga Yoga", - "pyjhora_names": [ - "raja_bhanga_yoga_298", - "raja_bhanga_yoga_299" - ] - }, { "chart": "Wolfgang Mozart", "rule_id": "bvr_pittharoga_yoga", @@ -549,6 +512,25 @@ "theevrabuddhi_yoga" ] }, + { + "chart": "Wolfgang Mozart", + "rule_id": "bvr_raja_bhanga_yoga", + "rule_name": "Raja Bhanga Yoga", + "pyjhora_names": [ + "raja_bhanga_yoga_298", + "raja_bhanga_yoga_299" + ] + }, + { + "chart": "Wolfgang Mozart", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", + "pyjhora_names": [ + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" + ] + }, { "chart": "Pablo Picasso", "rule_id": "bvr_raja_bhanga_yoga", @@ -592,15 +574,6 @@ "bhratruvriddhi_yoga" ] }, - { - "chart": "Elon Musk", - "rule_id": "bvr_nishkapata_precise", - "rule_name": "Nishkapata Yoga", - "pyjhora_names": [ - "nishkapata_yoga_205", - "nishkapata_yoga_206" - ] - }, { "chart": "Warren Buffett", "rule_id": "bvr_utthama_graha_yoga", @@ -629,20 +602,11 @@ }, { "chart": "Azim Premji", - "rule_id": "bvr_nishkapata_precise", - "rule_name": "Nishkapata Yoga", + "rule_id": "bvr_bahu_puthra_precise", + "rule_name": "Bahu Puthra Yoga", "pyjhora_names": [ - "nishkapata_yoga_205", - "nishkapata_yoga_206" - ] - }, - { - "chart": "Azim Premji", - "rule_id": "bvr_ayatna_griha_prapta_yoga", - "rule_name": "Ayatna Griha Prapta Yoga", - "pyjhora_names": [ - "ayatna_griha_prapta_yoga_189", - "ayatna_griha_prapta_yoga_190" + "bahu_puthra_yoga_220", + "bahu_puthra_yoga_221" ] }, { @@ -669,11 +633,11 @@ }, { "chart": "Azim Premji", - "rule_id": "bvr_bahu_puthra_precise", - "rule_name": "Bahu Puthra Yoga", + "rule_id": "bvr_ayatna_griha_prapta_yoga", + "rule_name": "Ayatna Griha Prapta Yoga", "pyjhora_names": [ - "bahu_puthra_yoga_220", - "bahu_puthra_yoga_221" + "ayatna_griha_prapta_yoga_189", + "ayatna_griha_prapta_yoga_190" ] }, { @@ -684,6 +648,14 @@ "pushkala_yoga" ] }, + { + "chart": "Michael Jordan", + "rule_id": "bvr_bandhubhisthyaktha_precise", + "rule_name": "Bandhubhisthyaktha Yoga", + "pyjhora_names": [ + "bandhubhisthyaktha_yoga" + ] + }, { "chart": "Michael Jordan", "rule_id": "bvr_krisanga_yoga", @@ -693,14 +665,6 @@ "krisanga_yoga_113" ] }, - { - "chart": "Michael Jordan", - "rule_id": "bvr_bandhubhisthyaktha_precise", - "rule_name": "Bandhubhisthyaktha Yoga", - "pyjhora_names": [ - "bandhubhisthyaktha_yoga" - ] - }, { "chart": "Lionel Messi", "rule_id": "bvr_matrunasa_precise", @@ -710,6 +674,16 @@ "matrunasa_yoga_199" ] }, + { + "chart": "Lionel Messi", + "rule_id": "bvr_kapata_yoga", + "rule_name": "Kapata Yoga", + "pyjhora_names": [ + "kapata_yoga_202", + "kapata_yoga_203", + "kapata_yoga_204" + ] + }, { "chart": "Lionel Messi", "rule_id": "bvr_dharidhra_11_precise", @@ -724,16 +698,6 @@ "dharidhra_yoga_152" ] }, - { - "chart": "Lionel Messi", - "rule_id": "bvr_kapata_yoga", - "rule_name": "Kapata Yoga", - "pyjhora_names": [ - "kapata_yoga_202", - "kapata_yoga_203", - "kapata_yoga_204" - ] - }, { "chart": "Lionel Messi", "rule_id": "bvr_matrudeerghayur_yoga", diff --git a/references/yoga_rules.json b/references/yoga_rules.json index 53976667..d533f2ad 100644 --- a/references/yoga_rules.json +++ b/references/yoga_rules.json @@ -9296,7 +9296,7 @@ "category": "auspicious", "logic": { "type": "custom", - "expr": "\n# PyJHora/BVR 205-206 Nishkapata Yoga.\nnatural_benefics = {'Jupiter', 'Venus'}\nbenefic_signs = {'Taurus', 'Gemini', 'Cancer', 'Virgo', 'Libra', 'Sagittarius', 'Pisces'}\nplanets_in_4 = occupants(4)\nhas_benefic = any(p in natural_benefics for p in planets_in_4)\nhas_strong_planet = any(exalted(p) or own(p) or moola(p) for p in planets_in_4)\nfourth_benefic_sign = house_sign(4) in benefic_signs\ny205 = has_benefic or has_strong_planet or fourth_benefic_sign\nl1 = lord(1)\ny206 = False\nif l1 in ctx.planets and house_of(l1) == 4:\n l1_with_benefic = any(p != l1 and same_house(l1, p) for p in natural_benefics if p in ctx.planets)\n l1_aspected_benefic = any(aspect(p, l1) for p in natural_benefics if p in ctx.planets and p != l1)\n y206 = l1_with_benefic or l1_aspected_benefic\ny205 or y206 or vaiseshikamsa_score(lord(1)) >= 16\n", + "expr": "\n# PyJHora/BVR 205-206 Nishkapata Yoga.\nnatural_benefics = {'Jupiter', 'Venus'}\nbenefic_signs = {'Taurus', 'Gemini', 'Cancer', 'Virgo', 'Libra', 'Sagittarius', 'Pisces'}\nplanets_in_4 = occupants(4)\nhas_benefic = any(p in natural_benefics for p in planets_in_4)\nhas_strong_planet = any(exalted(p) or own(p) or moola(p) for p in planets_in_4)\n# BVR-205/PyJHora also treats a planet in a friendly sign in the 4th as qualifying.\nhas_friendly_planet = any(p in ctx.planets and p in planets_in_4 and house_strength(p) is not None and house_strength(p) >= 3 for p in planets_in_4)\nfourth_benefic_sign = house_sign(4) in benefic_signs\ny205 = has_benefic or has_strong_planet or has_friendly_planet or fourth_benefic_sign\nl1 = lord(1)\ny206 = False\nif l1 in ctx.planets and house_of(l1) == 4:\n l1_with_benefic = any(p != l1 and same_house(l1, p) for p in natural_benefics if p in ctx.planets)\n l1_aspected_benefic = any(aspect(p, l1) for p in natural_benefics if p in ctx.planets and p != l1)\n y206 = l1_with_benefic or l1_aspected_benefic\ny205 or y206 or vaiseshikamsa_score(lord(1)) >= 16\n", "combo_template": "第4宫有天然吉星/强星/吉性星座,或上升主入4宫且受吉星影响" }, "effects": [ @@ -9306,7 +9306,7 @@ ], "strength": "中", "enabled": true, - "accuracy_note": "v6.1.3: added Vaiseshikamsa scoring for lagna lord" + "accuracy_note": "v6.1.8: BVR-205 restored friendly-sign planet in 4th check; keeps Vaiseshikamsa scoring for lagna lord" }, { "id": "bvr_bahu_puthra_precise",