feat(narayana-rath): flag Wadiyar pairs as book_software_rule8_exception (BUG-1226)

Round-6 ruling Q6b: Table 25 Gemini/Sagittarius and Virgo/Pisces are the
book software's seventh-level Rule 8 special case; keep the general result
(Sagittarius, Pisces at level 5), every Rath output carries the note
(known_book_differences), test pins the two pairs.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-10-04 07:35:37 +08:00
co-authored by Claude Opus 5.5
parent 57ef4560ce
commit 1dd8e11bff
2 changed files with 43 additions and 1 deletions
+21
View File
@@ -96,6 +96,26 @@ BOOK_EXAMPLES = {
"stronger than Cancer. Audit docs/research/shared_engine_reuse_audit_2026_10_03.md N1."),
},
}
# Book software verdicts the general rule does not follow (round-6 ruling
# Q6b, BUG-1226): Table 25 (Krishnaraja Wadiyar IV) takes Gemini over
# Sagittarius and Virgo over Pisces; the seven general levels decide
# Sagittarius / Pisces at level 5 (Mercury 1.3 deg vs Jupiter 10.0 deg). Only
# the book software's Rule 8 at the seventh level separates them that way — a
# software special case. The general result is kept and every output carries
# this note.
BOOK_SOFTWARE_RULE8 = "book_software_rule8_exception"
BOOK_SOFTWARE_DIFFERENCES = {
BOOK_SOFTWARE_RULE8: {
"book_table": "Table 25",
"pairs": [{"book": "Gemini", "general_rule": "Sagittarius", "general_level": 5},
{"book": "Virgo", "general_rule": "Pisces", "general_level": 5}],
"kept": "general_rule",
"note": "原书软件判定差异:原书软件用第 7 级 Rule 8 取双子、处女;通则第 5 级取射手、双鱼,保持通则",
"note_en": ("Book software verdict differs: the book's software used Rule 8 at the seventh level to take "
"Gemini and Virgo; the general rule takes Sagittarius and Pisces at level 5 and is kept"),
"ruling": "astrologer round 6, 2026-10-04, Q6b (p.36, p.95)",
},
}
KETU_FIRST_NOTE = "PyJHora 兼容:计都优先"
KETU_FIRST_NOTE_EN = "PyJHora-compatible: Ketu takes precedence"
SOURCE = {
@@ -461,6 +481,7 @@ def calc_narayana_rath(lagna_sign_idx: int, planet_lons: Dict[str, float],
"source": SOURCE,
"lagna_sign": SIGNS[lagna_sign_idx],
"antardasha_start_rule": "stronger_of_md_sign_and_seventh_then_its_lord_sign (p.48, p.50 note 2)",
"known_book_differences": BOOK_SOFTWARE_DIFFERENCES,
}
if seed_sign_idx is not None:
selection = {"status": "explicit", "selected_sign_idx": seed_sign_idx,