fix(functional): yogakaraka needs a kendra among 4/7/10 and a trikona among 5/9; grouping unchanged (BUG-1158 partial)

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-02 09:06:29 +08:00
co-authored by Claude Opus 5.5
parent 81f6e5130a
commit ffafa28b79
6 changed files with 58 additions and 9 deletions
+12 -2
View File
@@ -26,7 +26,16 @@ SIGN_LORDS = {
"Pisces": "Jupiter",
}
PLANETS = ("Sun", "Moon", "Mars", "Mercury", "Jupiter", "Venus", "Saturn")
SOURCE = "strict_functional_benefic_malefic_v1"
# v2 (2026-10-02, BUG-1158 partial, product decision on
# TASK-consult-career-yoga-functional-20261002 T1): a yogakaraka must own one
# kendra among 4 / 7 / 10 AND one trikona among 5 / 9 (BPHS ch.34 v13); the
# 1st house no longer counts for this test, so a lagna lord is not a
# yogakaraka by owning the 1st. The benefic / malefic / neutral grouping is
# unchanged from v1. The full per-lagna BPHS ch.34 table waits for an
# astrology consultant on branch codex/consult-career-yoga-functional-t1-20261002.
SOURCE = "strict_functional_benefic_malefic_v2"
YOGAKARAKA_KENDRAS = frozenset({4, 7, 10})
YOGAKARAKA_TRIKONAS = frozenset({5, 9})
def normalize_sign(value: Any) -> str | None:
@@ -80,7 +89,8 @@ def derive_functional_benefic_malefic(ascendant: Any) -> dict[str, Any]:
owns_challenge = any(house in challenging for house in houses)
if owns_trine and owns_kendra and planet not in {"Sun", "Moon"}:
yogakarakas.add(planet)
if YOGAKARAKA_KENDRAS & set(houses) and YOGAKARAKA_TRIKONAS & set(houses):
yogakarakas.add(planet)
benefics.add(planet)
elif owns_trine:
benefics.add(planet)