Thanks, this direction looks much safer.
One remaining consideration is that the decoder needs to know the KDF and its parameters before it can decrypt the authenticated payload. If those values exist only inside the AEAD plaintext, there is a bootstrapping problem; if they remain only in the human-readable wrapper, changing them could cause incorrect or unexpectedly expensive key derivation before authentication.
Perhaps a minimal outer header could contain the format version, KDF identifier, and bounded KDF parameters, with that exact header also supplied as AEAD associated data. The decoder could then select the derivation procedure while still detecting any header modification.
Also, an AEAD failure cannot by itself distinguish a wrong password from corrupted ciphertext. The pre-KDF checksum helps classify ordinary transcription errors, but it may be safest for the specification to describe the remaining result as “authentication failed” rather than guaranteeing “wrong password.”