Apps layer configuration: defaults, then an environment file, then command-line overrides. A shallow {**a, **b} replaces whole nested sections. You need a deep merge.
Implement deep_merge(base, override), returning a new dict:
None deletes the key.