diff --git a/scripts/vedastro_service_adapter.py b/scripts/vedastro_service_adapter.py index d69669d7..052a6ecf 100644 --- a/scripts/vedastro_service_adapter.py +++ b/scripts/vedastro_service_adapter.py @@ -90,6 +90,20 @@ OFFICIAL_SEARCH_EVENTS_PROFILE_VERSION = "official_builder_search_events_v1" OFFICIAL_FULL_SNAPSHOT_PROFILE_VERSION = "official_full_snapshot_v1" OFFICIAL_METHOD_CATALOG_URL = "https://vedastro.org/Complete-List-VedAstro-API-Methods-Calculators.html" OFFICIAL_FULL_SNAPSHOT_METHODS = [ + { + "section": "events_overview", + "endpoint_path": OFFICIAL_SEARCH_EVENTS_ENDPOINT_PATH, + "calculator_name": "SearchEvents", + "role": "life_event_raw_evidence", + "description": "Official event radar using SearchEvents for career, marriage and wealth tags.", + }, + { + "section": "dasha_all", + "endpoint_path": "/Calculate/DasaAtRange", + "calculator_name": "DasaAtRange", + "role": "all_dasha_raw_evidence", + "description": "Official dasha timeline snapshot where available.", + }, { "section": "chart_core", "endpoint_path": "/Calculate/AllPlanetData", @@ -106,20 +120,6 @@ OFFICIAL_FULL_SNAPSHOT_METHODS = [ "description": "Official house data snapshot when supported by the official service.", "fanout": "houseName", }, - { - "section": "dasha_all", - "endpoint_path": "/Calculate/DasaAtRange", - "calculator_name": "DasaAtRange", - "role": "all_dasha_raw_evidence", - "description": "Official dasha timeline snapshot where available.", - }, - { - "section": "events_overview", - "endpoint_path": OFFICIAL_SEARCH_EVENTS_ENDPOINT_PATH, - "calculator_name": "SearchEvents", - "role": "life_event_raw_evidence", - "description": "Official event radar using SearchEvents for career, marriage and wealth tags.", - }, ] OFFICIAL_FULL_SNAPSHOT_BACKLOG_SECTIONS = [ { diff --git a/tests/test_vedastro_official_full_snapshot.py b/tests/test_vedastro_official_full_snapshot.py index 0f9f55de..526f26fa 100644 --- a/tests/test_vedastro_official_full_snapshot.py +++ b/tests/test_vedastro_official_full_snapshot.py @@ -116,6 +116,34 @@ def test_official_full_snapshot_dasha_request_uses_official_range_contract(monke assert "time" not in body +def test_official_full_snapshot_prioritizes_timing_sections_before_heavy_fanout(monkeypatch) -> None: + from scripts import vedastro_service_adapter as adapter + + monkeypatch.delenv("VEDASTRO_API_ENDPOINT", raising=False) + monkeypatch.delenv("VEDASTRO_ENABLE_NETWORK", raising=False) + + report = adapter.run_official_full_snapshot_for_case( + { + "year": REDACTED_YEAR, + "month": 4, + "day": 17, + "hour": 14, + "minute": 49, + "lat": 36.42, + "lon": 114.2, + "tz": 8, + "reference_date": "2026-06-29", + }, + case_id="unit_timing_first", + ) + + order = [item["section"] for item in report["request_manifest"]["requests"]] + + assert order[:2] == ["events_overview", "dasha_all"] + assert order.index("events_overview") < order.index("chart_core") + assert order.index("dasha_all") < order.index("house_core") + + def test_official_full_snapshot_marks_semantic_rate_limit_payloads(monkeypatch) -> None: from scripts import vedastro_service_adapter as adapter