feat(MM-69): configuration system — relay.toml parsing
Implement the Config struct in the common crate with TOML parsing via
serde+toml, EZPDS_* environment variable overrides, and --config CLI
arg support (with EZPDS_CONFIG fallback) via clap in the relay binary.
- common: Config struct with v0.1 fields (bind_address, port, data_dir,
database_url, public_url) and stub sections [blobs], [oauth], [iroh]
- Functional Core (config.rs): pure validate_and_build and
apply_env_overrides; tests use controlled HashMap to avoid env leakage
- Imperative Shell (config_loader.rs): load_config reads file + real env;
load_config_with_env is pub(crate) for deterministic test isolation
- relay: clap Cli with --config/EZPDS_CONFIG, fail-fast on bad config,
RUST_LOG-aware tracing via EnvFilter
- 13 unit tests covering TOML parsing, env overrides, missing required
fields, I/O errors, and parse errors