The unified-config-tab branch landed first and used UserDefaults as a
temporary bypass because the asr-aliyun-and-custom-whisper branch (which
extended the schema and added vault.asrProviderConfig helpers) hadn't
merged yet. Now both are merged, so route drafts through
vault.asrProviderConfig(for:) / setASRProviderConfig(_:for:) /
removeASRProvider(_:). DictationCoordinator's factory reads from vault,
so this closes the storage mismatch — saving an Aliyun apiKey in
the UI now actually reaches the provider at runtime.