The OpenAI adapter's redactedError had no GoString, so %#v printed its fields, including the raw API key. Add GoString returning the redacted text, matching the Anthropic adapter; redactedJoin inherits it. Add TestRedactedErrorsFormatWithoutKey to both adapters, formatting redactedError, redactedJoin and transportFailure with %v, %+v and %#v. llm.ProviderError and llm.RateLimitedError keep no secret and are already covered by TestTypedErrorsDoNotKeepSecret. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>