Weight deep Ashtakavarga support in finance scoring

This commit is contained in:
732642856
2026-06-28 16:22:02 +08:00
parent 2295593b92
commit 5b49967f65
3 changed files with 165 additions and 3 deletions
@@ -0,0 +1,43 @@
# Ashtakavarga Deep Support Weighting v1
Date: 2026-06-28
## Scope
This pass upgrades the newly bridged finance evidence layers from visibility-only into controlled low-weight score modifiers:
- `PAV / Prastara AV`
- `Sodhita AV`
- `Kakshya`
## Weighting
The v1 weights are intentionally small:
- `PAV supportive`: `+2`
- `Kakshya supportive`: `+2`
- `Sodhita obstructive`: `-2`
- `Kakshya obstructive`: `-2`
## Boundary
These weights are not allowed to directly mint or revoke:
- `dominant_label`
- `payout_label`
They only adjust the route score through the existing threshold system.
## Why This Matters
The project already computed these layers, but they were previously dead weight inside strict adjudication.
This pass keeps the scoring conservative while letting deeper Ashtakavarga and degree-trigger signals actually influence finance ranking.
## Still Open
- calibrating whether `PAV` should distinguish contributor identity more sharply
- deciding whether `Sodhita` should also have a positive support path
- tying `Kakshya` more directly to transit timing instead of route-average usage
- validating the weights against external oracle cases before claiming mature timing precision
+11 -3
View File
@@ -969,6 +969,17 @@ def _derive_event_judgement(route: str, present: Dict[str, Any], missing: List[s
score += 5
elif ashtakavarga_finance.get("level") == "obstructive":
score -= 5
pav_finance_support = present.get("pav_finance_support") or {}
if pav_finance_support.get("level") == "supportive":
score += 2
sodhita_finance_support = present.get("sodhita_finance_support") or {}
if sodhita_finance_support.get("level") == "obstructive":
score -= 2
kakshya_finance_support = present.get("kakshya_finance_support") or {}
if kakshya_finance_support.get("level") == "supportive":
score += 2
elif kakshya_finance_support.get("level") == "obstructive":
score -= 2
score += 20 if wealth_promise_level == "strong" else 10 if wealth_promise_level == "moderate" else 0
score += 5 if wealth_promise_diversity >= 2 else 0
score += max(
@@ -1026,13 +1037,10 @@ def _derive_event_judgement(route: str, present: Dict[str, Any], missing: List[s
shadbala_component_audit = present.get("shadbala_component_audit") or {}
if shadbala_component_audit.get("status") in {"blocked", "incomplete"}:
secondary_context.append("shadbala_component_gap")
pav_finance_support = present.get("pav_finance_support") or {}
if pav_finance_support.get("level") == "supportive":
secondary_context.append("pav_finance_support")
sodhita_finance_support = present.get("sodhita_finance_support") or {}
if sodhita_finance_support.get("level") == "obstructive":
secondary_context.append("sodhita_wealth_friction")
kakshya_finance_support = present.get("kakshya_finance_support") or {}
if kakshya_finance_support.get("level") == "supportive":
secondary_context.append("kakshya_finance_support")
elif kakshya_finance_support.get("level") == "obstructive":
+111
View File
@@ -144,6 +144,117 @@ def test_finance_source_diversity_adds_small_bump_without_changing_verdict_band(
assert high_diversity["score"] == low_diversity["score"] + 5
def test_finance_deep_ashtakavarga_supports_add_small_score_bump_without_label_override() -> None:
base = _derive_event_judgement(
"finance",
{
"wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"career_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"},
"narayana_current": {"sign": "Taurus", "lord": "Venus"},
"wealth_promise_strength": {
"level": "strong",
"primary_source": "dhana_yogas",
"supporting_sources": ["dhana", "lakshmi"],
"source_diversity": 2,
"count": 1,
},
},
[],
)
weighted = _derive_event_judgement(
"finance",
{
"wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"career_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"},
"narayana_current": {"sign": "Taurus", "lord": "Venus"},
"wealth_promise_strength": {
"level": "strong",
"primary_source": "dhana_yogas",
"supporting_sources": ["dhana", "lakshmi"],
"source_diversity": 2,
"count": 1,
},
"pav_finance_support": {
"level": "supportive",
"source": "ashtakavarga_pav_bridge_v1",
"signals": ["pav_finance_support"],
"top_planets": ["Venus"],
},
"kakshya_finance_support": {
"level": "supportive",
"source": "kakshya_finance_bridge_v1",
"signals": ["kakshya_finance_support"],
"average_strength": 6.8,
},
},
[],
)
assert base["dominant_label"] == "public_wealth_status"
assert weighted["dominant_label"] == "public_wealth_status"
assert weighted["score"] == base["score"] + 4
def test_finance_sodhita_and_kakshya_friction_reduce_score_without_forcing_label_swap() -> None:
base = _derive_event_judgement(
"finance",
{
"wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"career_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"},
"narayana_current": {"sign": "Taurus", "lord": "Venus"},
"wealth_promise_strength": {
"level": "strong",
"primary_source": "dhana_yogas",
"supporting_sources": ["dhana", "lakshmi"],
"source_diversity": 2,
"count": 1,
},
},
[],
)
weighted = _derive_event_judgement(
"finance",
{
"wealth_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"gains_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"career_convergence": {"convergence_level": "L1", "probability": "+15-20%"},
"vimshottari_current": {"mahadasha": "Venus", "antardasha": "Mercury"},
"narayana_current": {"sign": "Taurus", "lord": "Venus"},
"wealth_promise_strength": {
"level": "strong",
"primary_source": "dhana_yogas",
"supporting_sources": ["dhana", "lakshmi"],
"source_diversity": 2,
"count": 1,
},
"sodhita_finance_support": {
"level": "obstructive",
"source": "ashtakavarga_sodhita_bridge_v1",
"signals": ["sodhita_wealth_friction"],
"target_houses": [2, 11],
"raw_scores": {"2": 18, "11": 17},
},
"kakshya_finance_support": {
"level": "obstructive",
"source": "kakshya_finance_bridge_v1",
"signals": ["kakshya_finance_friction"],
"average_strength": 4.1,
},
},
[],
)
assert base["dominant_label"] == "public_wealth_status"
assert weighted["dominant_label"] == "public_wealth_status"
assert weighted["score"] == base["score"] - 4
def test_collect_strict_evidence_finance_derives_wealth_promise_from_dhana_yogas() -> None:
result = {
"modules": {