package config import ( "fmt" "os" "gopkg.in/yaml.v3" ) // Load runs one orchestration or CLI step. // Signature: Load(path string) (Config, error). // Why: keeps behavior explicit so startup/shutdown workflows remain maintainable as services evolve. func Load(path string) (Config, error) { cfg := defaults() b, err := os.ReadFile(path) if err != nil { return Config{}, fmt.Errorf("read config %s: %w", path, err) } if err := yaml.Unmarshal(b, &cfg); err != nil { return Config{}, fmt.Errorf("decode config %s: %w", path, err) } cfg.applyDefaults() if err := cfg.Validate(); err != nil { return Config{}, err } return cfg, nil }