DaData на 403 возвращает "Feature CLEAN disabled for token '<действующий токен>'."
открытым текстом — body_preview копировал это в WARNING/ERROR лог как есть,
токен уезжал в docker logs (потенциальный breadcrumb в GlitchTip). Добавлен
scrub_body_secrets() в app/core/log_scrub.py: маскирует token '<value>' и любую
generic hex/base64-подобную последовательность 24+ символов — защита не зависит
от точной формулировки вендора.
Заодно найден и исправлен источник "--- Logging error ---" / ValueError: not
enough values to unpack (expected 5, got 0) из прод-логов tradein-backend:
QuerySecretFilter (#3154) при найденном секрете в query-строке схлопывал
record.args в (), а uvicorn.logging.AccessFormatter.formatMessage() распаковывает
record.args напрямую как 5-tuple в обход record.getMessage() — сама попытка
заскрабить секрет ронла форматирование access-лога. Фильтр переписан на
поэлементный скраб record.args (arity не трогается).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG