Append the requested derived columns to a raw weather frame (fail-safe).
A thin, deterministic orchestrator over :func:heating_degree_hours, :func:cooling_degree_hours, :func:dew_point, and :func:apparent_temperature. The original columns are preserved; the requested derived columns are appended in the fixed order of :data:DERIVED_FEATURE_KEYS (stable column ordering). The default wind_speed_unit is "kmh" to match the Open-Meteo payload consumed by :func:spotforecast2_safe.weather.get_weather_features.