fix(consult): run the local skill's full technique spectrum on the web path
Web answers were thinner than a local Agent calling yinduzhanxing-skill: theme-subset vargas, no visible audit table, and a prompt that dropped the invocation contract. Bind the commercial method, compute D1–D60 plus Western layers, and deliver the same Full-Spectrum checklist. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -110,6 +110,36 @@ def test_local_consultation_layers_supply_d10_a10_and_narayana_without_vedastro(
|
||||
assert packet['sections']['narayana_dasha']['status'] == 'used'
|
||||
assert packet['sections']['ashtakavarga']['status'] == 'used'
|
||||
assert packet['sections']['KP_cusp']['status'] == 'used'
|
||||
assert packet['sections']['D11']['status'] == 'used'
|
||||
assert packet['sections']['D60']['status'] == 'used'
|
||||
assert packet['sections']['varga_spectrum']['status'] == 'used'
|
||||
assert modules['functional_benefic_malefic']['status'] == 'used'
|
||||
assert modules['functional_benefic_malefic']['functional_benefics']
|
||||
assert modules['shadbala']
|
||||
assert modules['kakshya']['status'] == 'observation_only'
|
||||
assert 'functional_benefic_malefic' in chart['local_consultation_layers']['available']
|
||||
assert 'shadbala' in chart['local_consultation_layers']['available']
|
||||
assert 'kakshya' in chart['local_consultation_layers']['available']
|
||||
|
||||
|
||||
def test_consultation_computes_formal_and_research_varga_spectrum() -> None:
|
||||
chart = _attach_local_consultation_layers(
|
||||
_handler(),
|
||||
_base_chart(),
|
||||
dict(_BIRTH),
|
||||
{'current_date': _REFERENCE_DATE},
|
||||
)
|
||||
|
||||
spectrum = chart['modules']['varga_spectrum']
|
||||
assert spectrum['counts']['formal'] == 20
|
||||
assert spectrum['counts']['research_dn'] == 40
|
||||
assert 'D9' in spectrum['formal']
|
||||
assert spectrum['formal']['D9']['lagna']
|
||||
assert 'D60' in spectrum['formal']
|
||||
assert 'D13' in spectrum['research_dn']
|
||||
assert spectrum['research_dn']['D13']['boundary']
|
||||
assert spectrum['blocked'] == []
|
||||
assert 'varga_spectrum' in chart['local_consultation_layers']['available']
|
||||
|
||||
|
||||
def test_sub_period_boundaries_are_cut_out_of_the_periods_the_packet_shows() -> None:
|
||||
@@ -409,8 +439,14 @@ def _sections(**overrides: str) -> dict:
|
||||
'D1': 'used',
|
||||
'D2': 'used',
|
||||
'D4': 'used',
|
||||
'D6': 'used',
|
||||
'D7': 'used',
|
||||
'D8': 'used',
|
||||
'D9': 'used',
|
||||
'D10': 'used',
|
||||
'D11': 'used',
|
||||
'D12': 'used',
|
||||
'D24': 'used',
|
||||
'A7': 'used',
|
||||
'A10': 'used',
|
||||
'UL': 'used',
|
||||
@@ -478,8 +514,8 @@ def test_evidence_gate_is_never_weaker_than_the_layers_the_product_promises() ->
|
||||
"""Whatever the frontend tells the user it will use must actually gate the answer.
|
||||
|
||||
Only entries naming a real evidence section are compared. The registry also carries human-facing
|
||||
labels ('7th house/lord', 'negative holdout gate') and D11, which the engine never builds; those
|
||||
cannot be requirements, and demanding them would pin every route to `degraded`.
|
||||
labels ('7th house/lord', 'negative holdout gate') which cannot be requirements. Formal Vargas
|
||||
the engine now materializes are required wherever the product already promises them.
|
||||
"""
|
||||
|
||||
declared = _frontend_declared_layers()
|
||||
|
||||
@@ -41,7 +41,7 @@ def timing_body(**overrides):
|
||||
"requested_domains": ["timing"],
|
||||
"timing_horizon": "next_12_months",
|
||||
"precision_boundary": "precise_timing_blocked",
|
||||
"required_evidence_categories": ["natal_foundation", "timing", "validation"],
|
||||
"required_evidence_categories": ["natal_foundation", "domain", "timing", "validation"],
|
||||
}
|
||||
body.update(overrides)
|
||||
return body
|
||||
@@ -60,7 +60,7 @@ def test_versioned_plan_is_validated_against_server_route_allowlist():
|
||||
"plan_depth": "standard",
|
||||
"requested_domains": ["timing"],
|
||||
"timing_horizon": "next_12_months",
|
||||
"required_evidence_categories": ["natal_foundation", "timing", "validation"],
|
||||
"required_evidence_categories": ["natal_foundation", "domain", "timing", "validation"],
|
||||
"required_layers": ["Vimshottari", "Narayana", "Transit", "Varga", "negative holdout gate"],
|
||||
"claim_boundary": "candidate_day_month_window_only_until_holdout_passes",
|
||||
"precision_boundary": "precise_timing_blocked",
|
||||
@@ -113,35 +113,35 @@ def test_versioned_plan_rejects_theme_and_resolved_route_mismatch():
|
||||
"health",
|
||||
["D1", "D6", "D8", "6th/8th houses", "Dasha", "non-medical boundary"],
|
||||
"wellbeing_pressure_patterns_not_medical_diagnosis",
|
||||
["natal_foundation", "domain"],
|
||||
["natal_foundation", "domain", "timing", "validation"],
|
||||
None,
|
||||
),
|
||||
(
|
||||
"education",
|
||||
["D1", "D24", "5th/9th houses", "Mercury/Jupiter", "Dasha"],
|
||||
"learning_pattern_and_broad_timing_only",
|
||||
["natal_foundation", "domain"],
|
||||
["natal_foundation", "domain", "timing", "validation"],
|
||||
None,
|
||||
),
|
||||
(
|
||||
"migration",
|
||||
["D1", "D4", "D12", "4th/12th houses", "Dasha", "Narayana"],
|
||||
"migration_and_home_direction_broad_window_only",
|
||||
["natal_foundation", "domain"],
|
||||
["natal_foundation", "domain", "timing", "validation"],
|
||||
None,
|
||||
),
|
||||
(
|
||||
"family",
|
||||
["D1", "D7", "D12", "4th/5th/9th houses", "Dasha"],
|
||||
"family_pattern_not_deterministic_event_claim",
|
||||
["natal_foundation", "domain"],
|
||||
["natal_foundation", "domain", "timing", "validation"],
|
||||
None,
|
||||
),
|
||||
(
|
||||
"annual",
|
||||
["D1", "Annual chart boundary", "Dasha", "Transit", "Tajika candidate"],
|
||||
"annual_report_broad_periods_only",
|
||||
["natal_foundation", "timing", "validation"],
|
||||
["natal_foundation", "domain", "timing", "validation"],
|
||||
"next_12_months",
|
||||
),
|
||||
],
|
||||
|
||||
@@ -76,16 +76,11 @@ def test_workflow_does_not_auto_attach_natal_western_data_to_prashna() -> None:
|
||||
assert packet is None
|
||||
|
||||
|
||||
def test_workflow_adds_only_explicit_western_timing_layers() -> None:
|
||||
def test_workflow_auto_attaches_implemented_western_timing_layers() -> None:
|
||||
packet = _western_evidence_packet_from_body(
|
||||
{
|
||||
"entry_mode": "direct_chart",
|
||||
"western_timing": {
|
||||
"transit_date": "2026-07-09",
|
||||
"solar_return_year": 2026,
|
||||
"secondary_progression_date": "2026-07-09",
|
||||
"solar_arc_date": "2026-07-09",
|
||||
},
|
||||
"current_date": "2026-07-09",
|
||||
},
|
||||
{"primary_theme": "career"},
|
||||
birth_payload={
|
||||
@@ -94,10 +89,14 @@ def test_workflow_adds_only_explicit_western_timing_layers() -> None:
|
||||
},
|
||||
)
|
||||
|
||||
assert packet is not None
|
||||
assert set(packet["timing_techniques"]) == {
|
||||
"transits", "solar_return", "secondary_progressions", "solar_arc_directions",
|
||||
"converse_secondary_progressions", "converse_solar_arc_directions",
|
||||
"midpoints", "lunar_return", "transit_duration_scan", "parans",
|
||||
}
|
||||
assert packet["sections"]["timing_techniques"]["status"] == "used"
|
||||
assert "daily_hits" not in packet["timing_techniques"]["transit_duration_scan"]
|
||||
|
||||
|
||||
def test_release_editions_include_native_western_calculator() -> None:
|
||||
|
||||
Reference in New Issue
Block a user