"""Python skill services (docs/05 §1–2, ADR-0001). Every skill is typed (generated pydantic contracts in ``vpp_contracts``), versioned (``SKILL_VERSIONS``) and stateless. No module here may import or call an LLM: skills are deterministic numeric services and sit on the control path (CLAUDE.md hard rule 2). """ SKILL_VERSIONS: dict[str, str] = { "load-forecast": "1.0.0", "pv-forecast": "1.0.0", "price-forecast": "1.0.0", "bid-optimization-milp": "1.0.0", "report-generator": "1.0.0", "potential-assessment": "1.0.0", "dispatch-optimization": "1.0.0", }