ДВА ПОСЛЕДСТВИЯ #3436, обнаруженные на прогоне против прода.
1. ДЕПЛОЙ МЕРЫ БЫЛ ЗАБЛОКИРОВАН. В #3436 политика конфиденциальности получила
раздел про cookie, то есть новую редакцию, и `PRIVACY_APPROVAL` во фронте
стал «№ 2 от 10 сентября 2026 г.». Бэкендовая `_CONSENT_POLICY_VERSION`
осталась на «2026-08-13», а между ними стоит гейт
`test_consent_text_frontend_sync.py` — он и упал. Job `test` в
deploy-tradein.yml падает → `deploy` пропускается по своему
`needs.test.result != 'failure'` → прод остался на старом образе фронта,
при том что Caddy обновился отдельным пайплайном. Внешне это выглядело как
«задеплоилось наполовину»: UTM на редиректе со слэшем починился, а noindex
и robots.txt — нет.
Гейт сработал ровно как задуман: версия согласия обязана указывать на ту
редакцию документа, которую человек реально видел, иначе снимок согласия
в trade_in_leads.consent_policy_version подписан не тем документом. Правим
версию, а не тест. Согласия, собранные до 10.09, остаются с "2026-08-13" —
в этом и смысл хранить версию per-row.
2. СМОУК ЖДАЛ 404 ТАМ, ГДЕ ПРОД ОТВЕЧАЕТ 401. Проверка «карта сайта МЕРЫ не
просачивается через B2B-домен» ожидала 404 от allowlist'а site-блока, но
корень gendsgn.ru закрыт пилотным basic_auth, и гейт отвечает 401 РАНЬШЕ,
чем запрос доходит до allowlist'а. Проверка была написана без прогона
против прода — это честно отмечено в её же комментарии — и упала на первом
же запуске.
Заведён `check_any`: PASS на любом из перечисленных кодов. Здесь допустимы
401 и 404 — оба означают проверяемое («наружу этого адреса нет»), а какой
рубеж ответил первым, к предмету проверки отношения не имеет. Жёсткое
ожидание к тому же сломалось бы при снятии пилотного гейта. Красная строка
осталась там, где ей место: 200 означал бы реальную течь.
Проверено: `pytest tests/test_consent_text_frontend_sync.py` — 6 passed;
полный сьют бэкенда МЕРЫ локально 5737 passed; `bash -n` на смоуке чист;
`check_any` прогнан против живого gendsgn.ru — PASS на фактическом 401.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CiUFZ3rmTNpp3DRajUo8KQ