Enrich external event signal evidence

This commit is contained in:
732642856
2026-06-28 17:18:46 +08:00
parent e15fe3a545
commit 838f5d97b7
6 changed files with 112 additions and 8 deletions
+4 -1
View File
@@ -1342,7 +1342,10 @@ def _build_life_event_graph(route: str, strict: Dict[str, Any]) -> Dict[str, Any
nodes.append(
{
"kind": "external_window",
"label": event.get("event_id"),
"label": event.get("signal_label") or event.get("event_id"),
"event_id": event.get("event_id"),
"signal_key": event.get("signal_key"),
"signal_family": event.get("signal_family"),
"score": event.get("score"),
"start": event.get("start"),
"end": event.get("end"),
+5 -1
View File
@@ -900,7 +900,11 @@ def _build_technique_audit_table(functional_layer, oracle_progress, modules):
'technique': 'Functional Benefic/Malefic',
'status': functional_layer.get('status', 'blocked'),
'source': 'scripts/yoga_engine.py::YogaContext',
'note': functional_layer.get('effect_on_confidence', '高严谨模式缺少功能性吉凶星判定。'),
'note': (
f"关键功能吉星={functional_layer.get('functional_benefics', [])}; "
f"关键功能凶星={functional_layer.get('functional_malefics', [])}; "
f"{functional_layer.get('effect_on_confidence', '高严谨模式缺少功能性吉凶星判定。')}"
),
},
{
'technique': 'External Oracle Progress',
+80
View File
@@ -90,6 +90,79 @@ RANGE_SCAN_EVENT_ALLOWLIST = {
"tags": {"career", "profession", "work", "transit"},
},
}
RANGE_SCAN_SIGNAL_METADATA = {
"marriage": {
"GocharJupiterIn7th": {
"signal_key": "gochar_jupiter_7th_marriage",
"signal_label": "Jupiter in 7th marriage window",
"signal_family": "marriage_trigger",
},
"GocharJupiterAspect7th": {
"signal_key": "gochar_jupiter_aspect_7th_marriage",
"signal_label": "Jupiter aspecting 7th marriage window",
"signal_family": "marriage_trigger",
},
"GocharSaturnAspect7th": {
"signal_key": "gochar_saturn_aspect_7th_relationship_pressure",
"signal_label": "Saturn aspecting 7th relationship window",
"signal_family": "relationship_pressure",
},
"JupiterSupportsMarriageAxis": {
"signal_key": "jupiter_supports_marriage_axis",
"signal_label": "Jupiter supports marriage axis",
"signal_family": "marriage_trigger",
},
},
"wealth": {
"GocharJupiterIn2nd": {
"signal_key": "gochar_jupiter_2nd_wealth",
"signal_label": "Jupiter in 2nd wealth window",
"signal_family": "wealth_trigger",
},
"GocharJupiterIn11th": {
"signal_key": "gochar_jupiter_11th_gains",
"signal_label": "Jupiter in 11th gains window",
"signal_family": "gains_trigger",
},
"GocharJupiterAspect2nd": {
"signal_key": "gochar_jupiter_aspect_2nd_wealth",
"signal_label": "Jupiter aspecting 2nd wealth window",
"signal_family": "wealth_trigger",
},
"GocharJupiterAspect11th": {
"signal_key": "gochar_jupiter_aspect_11th_gains",
"signal_label": "Jupiter aspecting 11th gains window",
"signal_family": "gains_trigger",
},
"WealthExpansionWindow": {
"signal_key": "wealth_expansion_window",
"signal_label": "Wealth expansion window",
"signal_family": "wealth_trigger",
},
},
"career": {
"GocharJupiterIn10th": {
"signal_key": "gochar_jupiter_10th_career",
"signal_label": "Jupiter in 10th career window",
"signal_family": "career_trigger",
},
"GocharSaturnIn10th": {
"signal_key": "gochar_saturn_10th_career",
"signal_label": "Saturn in 10th career window",
"signal_family": "career_pressure",
},
"GocharJupiterAspect10th": {
"signal_key": "gochar_jupiter_aspect_10th_career",
"signal_label": "Jupiter aspecting 10th career window",
"signal_family": "career_trigger",
},
"CareerExpansionWindow": {
"signal_key": "career_expansion_window",
"signal_label": "Career expansion window",
"signal_family": "career_trigger",
},
},
}
DEFAULT_TIMEOUT_SECONDS = 8
TIMEOUT_ENV = "VEDASTRO_TIMEOUT_SECONDS"
RETRY_POLICY = {
@@ -276,12 +349,16 @@ def _normalize_range_scan_success(
tag_set = {str(tag) for tag in tags}
if event_id not in allowed_ids and tag_set.isdisjoint(allowed_tags):
continue
signal_metadata = RANGE_SCAN_SIGNAL_METADATA.get(domain, {}).get(event_id, {})
evidence_ledger.append(
{
"source": "vedastro_service_adapter_candidate",
"operation": "range_scan",
"domain": domain,
"event_id": event_id,
"signal_key": signal_metadata.get("signal_key"),
"signal_label": signal_metadata.get("signal_label") or event.get("name") or event_id,
"signal_family": signal_metadata.get("signal_family"),
"start": event.get("start") or event.get("start_time") or event.get("start_date"),
"end": event.get("end") or event.get("end_time") or event.get("end_date"),
"score": event.get("score") if event.get("score") is not None else event.get("strength"),
@@ -298,6 +375,9 @@ def _normalize_range_scan_success(
)
top_event = {
"event_id": top.get("event_id"),
"signal_key": top.get("signal_key"),
"signal_label": top.get("signal_label"),
"signal_family": top.get("signal_family"),
"score": top.get("score"),
"start": top.get("start"),
"end": top.get("end"),
+2
View File
@@ -283,6 +283,8 @@ def test_full_reading_reports_ayanamsa_metadata_and_ai_prompt_pack() -> None:
assert functional_rows
assert functional_rows[0]["status"] == "used"
assert "高严谨" in functional_rows[0]["note"]
assert "关键功能吉星=" in functional_rows[0]["note"]
assert "关键功能凶星=" in functional_rows[0]["note"]
dasha_rows = [row for row in audit_table if row["technique"] == "Vimshottari + Narayana Cross-check"]
assert dasha_rows
assert dasha_rows[0]["status"] == "used"
+12 -3
View File
@@ -39,7 +39,10 @@ def test_life_event_graph_folds_strict_evidence_and_vedastro_top_event() -> None
"signals": ["vedastro_range_scan"],
"events": [
{
"event_id": "jupiter_7h_window",
"event_id": "GocharJupiterIn7th",
"signal_key": "gochar_jupiter_7th_marriage",
"signal_label": "Jupiter in 7th marriage window",
"signal_family": "marriage_trigger",
"score": 72,
"start": "2026-05-01",
"end": "2026-06-01",
@@ -86,7 +89,10 @@ def test_life_event_graph_folds_strict_evidence_and_vedastro_top_event() -> None
}
assert graph["event_nodes"][4] == {
"kind": "external_window",
"label": "jupiter_7h_window",
"label": "Jupiter in 7th marriage window",
"event_id": "GocharJupiterIn7th",
"signal_key": "gochar_jupiter_7th_marriage",
"signal_family": "marriage_trigger",
"score": 72,
"start": "2026-05-01",
"end": "2026-06-01",
@@ -118,7 +124,10 @@ def test_life_event_graph_is_returned_from_strict_relationship_evidence() -> Non
"source": "vedastro_service_adapter_candidate",
"operation": "range_scan",
"domain": "marriage",
"event_id": "jupiter_7h_window",
"event_id": "GocharJupiterIn7th",
"signal_key": "gochar_jupiter_7th_marriage",
"signal_label": "Jupiter in 7th marriage window",
"signal_family": "marriage_trigger",
"score": 72,
"start": "2026-05-01",
"end": "2026-06-01",
@@ -220,7 +220,7 @@ def test_vedastro_service_adapter_can_normalize_mock_range_scan_response() -> No
response = {
"events": [
{
"id": "jupiter_7h_window",
"id": "GocharJupiterIn7th",
"name": "Jupiter supports marriage axis",
"start": "2026-05-01",
"end": "2026-06-01",
@@ -284,13 +284,19 @@ def test_vedastro_service_adapter_can_normalize_mock_range_scan_response() -> No
assert report["domain"] == "marriage"
assert report["event_count"] == 1
assert report["top_event"] == {
"event_id": "jupiter_7h_window",
"event_id": "GocharJupiterIn7th",
"signal_key": "gochar_jupiter_7th_marriage",
"signal_label": "Jupiter in 7th marriage window",
"signal_family": "marriage_trigger",
"score": 72,
"start": "2026-05-01",
"end": "2026-06-01",
"tags": ["marriage", "transit"],
}
assert report["evidence_ledger"][0]["event_id"] == "jupiter_7h_window"
assert report["evidence_ledger"][0]["event_id"] == "GocharJupiterIn7th"
assert report["evidence_ledger"][0]["signal_key"] == "gochar_jupiter_7th_marriage"
assert report["evidence_ledger"][0]["signal_label"] == "Jupiter in 7th marriage window"
assert report["evidence_ledger"][0]["signal_family"] == "marriage_trigger"
assert report["evidence_ledger"][0]["domain"] == "marriage"
assert report["evidence_ledger"][0]["score"] == 72
assert report["evidence_ledger"][0]["raw"]["name"] == "Jupiter supports marriage axis"