%#v prints struct field names, so a key that spells one (for example
"body" on ProviderError) leaked even though Error() was redacted.
- llm.ProviderError and llm.RateLimitedError gain GoString returning
their already-redacted Error text.
- Both adapters' transportFailure now holds its fully redacted text and
gains GoString.
- The redact backstop now wraps every non-nil error when a key is set,
so the returned error and every unwrapped layer print through
redactedError.GoString, never a raw struct such as fmt.wrapError.
- redactedError.As also refuses a match whose %#v form holds the key.
- Contract test in both adapters: field-name keys (body, status, text,
RetryAfter, msg, err, key, kind) on HTTP 500 "down" and 429, checking
%#v of the returned error, every unwrapped layer and errors.As results.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>