ProblemJson
The Json used to convert typed extension payloads when the caller supplies none. That covers the values passed to extensions(…) and extension(name, …), and the types read back by extensionsAs.
This does not govern the problem document itself. ProblemSerializer encodes through whatever Json the caller is using, so an application's own formatting settings already apply on the wire.
Override it per call, with problem(json = myJson) { … } or extensionsAs<T>(json = myJson), whenever the payload depends on how the application configures kotlinx.serialization. That includes a serializersModule holding contextual or polymorphic serializers, where the default instance fails outright, or a namingStrategy, or a classDiscriminator. Passing an instance from a DI container is the intended use. Nothing here is global or mutable.
ignoreUnknownKeys gets re-applied on top of a caller's instance. §3.2 requires that "consumers MUST ignore extension members they don't recognize", the rule that lets a problem type gain members without breaking clients written against the older shape. encodeDefaults departs from kotlinx's own default so a payload's defaulted properties still reach the wire.