`_suggest_geocode` брал вложенный словарь как
data = suggestions[0].get("data") or {}
`or {}` ловит только falsy. Истинное не-словарное значение (список, строка,
число — дрейф контракта) доходило до `.get` и поднимало AttributeError.
Летел он НАРУЖУ. В suggest попадают из clean_address по фолбэку 401/403
(«Feature CLEAN disabled» — реальный прод-инцидент 03.07, на него есть тест), и
этот вызов стоит УЖЕ ЗА пределами её try/except. У вызывающего гео-прохода
(objective_backfill._geocode, строка 864) обёртки нет вовсе. То есть один такой
ответ убил бы весь проход целиком, а не один адрес.
Непоследовательность видна в самом файле: `payload`, `suggestions[0]` и `item`
проверяются через isinstance, а `data` — нет. Защита пропала ровно на уровень
глубже.
Про масштаб честно: за 14 суток в логах бэкенда и воркера НЕТ ни одного
упоминания dadata_client — гео-проход ручной и не запускался. Но путь не
заблокирован ничем внешним, и я сам записал в #2929 критерий приёмки, который
требует этот проход запустить.
Тесты: три параметра (список / строка / число) красные на origin/main с
`AttributeError: 'list' object has no attribute 'get'`; контроль на правильную
форму зелёный с обеих сторон — иначе «починка» могла бы свестись к «всегда None».
pytest tests/services: 3078 passed, 14 skipped, rc=0