Finishes the ConfigLoader.cpp domain split. ConfigLoader.cpp now holds only the cross-domain validateUnlocks pass and loadFromDirectory orchestrator, as intended — everything else lives in its own ConfigLoader<Domain>.cpp. Pure move; no logic change. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YHcUerKAZKWNvSKJxYKbnG