"""YAML config loading with environment overrides (paths only; no secrets).""" from __future__ import annotations import os from pathlib import Path import yaml def load_config(path: str | Path) -> dict: cfg = yaml.safe_load(Path(path).read_text()) cfg.setdefault("paths", {}) cache = os.environ.get("WP41_CACHE", cfg["paths"].get("cache", "~/wp41-cache")) cfg["paths"]["cache"] = os.path.expanduser(cache) if cache.startswith("~") or cache.startswith("/") else str(Path(path).resolve().parent.parent / cache) cfg["paths"]["root"] = str(Path(path).resolve().parent.parent) return cfg def results_dir(cfg: dict, *parts: str) -> Path: p = Path(cfg["paths"]["root"]) / "results" / Path(*parts) p.mkdir(parents=True, exist_ok=True) return p