83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
from scripts.skill_experience import (
|
|
build_rectification_questionnaire,
|
|
build_skill_doctor,
|
|
build_skill_onboarding,
|
|
score_rectification_answers,
|
|
summarize_execution_status,
|
|
)
|
|
|
|
|
|
def test_onboarding_requests_only_missing_birth_fields():
|
|
packet = build_skill_onboarding({"year": 1993, "month": 4, "day": 17})
|
|
|
|
assert packet["status"] == "needs_birth_data"
|
|
assert packet["entry_mode"] == "pending"
|
|
assert packet["missing_fields"] == ["hour", "minute", "lat", "lon"]
|
|
assert packet["next_action"] == "collect_birth_data"
|
|
|
|
|
|
def test_onboarding_selects_rectification_for_uncertain_time():
|
|
packet = build_skill_onboarding({
|
|
"year": 1993,
|
|
"month": 4,
|
|
"day": 17,
|
|
"hour": 14,
|
|
"minute": 49,
|
|
"lat": 36.68,
|
|
"lon": 114.35,
|
|
"time_uncertainty_minutes": 20,
|
|
})
|
|
|
|
assert packet["status"] == "ready"
|
|
assert packet["entry_mode"] == "rectification"
|
|
assert packet["next_action"] == "run_rectification_questionnaire"
|
|
assert packet["first_question"]
|
|
|
|
|
|
def test_execution_status_makes_official_fallback_machine_readable():
|
|
status = summarize_execution_status({
|
|
"fallback_reason": "VedAstro official snapshot blocked: official_snapshot_budget_exhausted",
|
|
"external_engine_cross_validation": {
|
|
"engines": {"VedAstro": {"status": "local_fallback"}}
|
|
},
|
|
})
|
|
|
|
assert status["official_evidence_status"] == "official_blocked"
|
|
assert status["calculation_source"] == "local_fallback"
|
|
assert status["fallback_reason"] == "VedAstro official snapshot blocked: official_snapshot_budget_exhausted"
|
|
assert "official_verified" in status["allowed_claims"]
|
|
|
|
|
|
def test_doctor_has_machine_readable_core_and_adapter_state():
|
|
packet = build_skill_doctor()
|
|
|
|
assert packet["scope"] == "skill_doctor"
|
|
assert "core_assets" in packet
|
|
assert "external_engine_adapters" in packet
|
|
assert packet["status"] in {"ready", "degraded"}
|
|
|
|
|
|
def test_mcp_exposes_skill_experience_tools():
|
|
import mcp_server
|
|
|
|
onboarding = mcp_server.skill_onboarding({})
|
|
doctor = mcp_server.skill_doctor()
|
|
|
|
assert onboarding["scope"] == "skill_onboarding"
|
|
assert doctor["scope"] == "skill_doctor"
|
|
|
|
|
|
def test_rectification_contract_generates_and_scores_choice_answers():
|
|
questionnaire = build_rectification_questionnaire({
|
|
"year": 1993, "month": 4, "day": 17, "hour": 14, "minute": 49,
|
|
"time_uncertainty_minutes": 20,
|
|
})
|
|
scored = score_rectification_answers(questionnaire, {
|
|
"education_environment_shift": "A",
|
|
"health_crisis_or_low_period": "C",
|
|
})
|
|
|
|
assert questionnaire["scope"] == "active_birth_time_rectification_questionnaire"
|
|
assert scored["scope"] == "active_birth_time_rectification_scoring"
|
|
assert scored["candidate_cluster_rankings"]
|