The default codec: JSON via kotlinx-serialization, configured leniently so a new-version producer does not break an old-version consumer mid-rolling-deploy: unknown keys are ignored, defaults are encoded.