Версия согласия ПДн отстала от новой редакции политики — деплой МЕРЫ стоял, прод обновился наполовину #3437

Merged
lekss361 merged 1 commit from fix/mera-consent-version-and-smoke into main 2026-09-10 14:49:23 +00:00
Owner

Хвост к #3436, оба дефекта найдены прогоном против прода.

1. Деплой МЕРЫ был заблокирован

В #3436 политика конфиденциальности получила раздел про cookie, то есть новую редакцию, и PRIVACY_APPROVAL во фронте стал «№ 2 от 10 сентября 2026 г.». Бэкендовая _CONSENT_POLICY_VERSION осталась на 2026-08-13, а между ними стоит гейт test_consent_text_frontend_sync.py.

Цепочка последствий:

test (pytest МЕРЫ) = failure
  → deploy пропущен по своему `needs.test.result != 'failure'`
    → прод остался на старом образе фронта

Снаружи это выглядело как «задеплоилось наполовину»: UTM на редиректе со слэшем починился (Caddy едет отдельным пайплайном), а 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

🤖 Generated with Claude Code

https://claude.ai/code/session_01CiUFZ3rmTNpp3DRajUo8KQ

Хвост к #3436, оба дефекта найдены прогоном против прода. ## 1. Деплой МЕРЫ был заблокирован В #3436 политика конфиденциальности получила раздел про cookie, то есть **новую редакцию**, и `PRIVACY_APPROVAL` во фронте стал «№ 2 от 10 сентября 2026 г.». Бэкендовая `_CONSENT_POLICY_VERSION` осталась на `2026-08-13`, а между ними стоит гейт `test_consent_text_frontend_sync.py`. Цепочка последствий: ``` test (pytest МЕРЫ) = failure → deploy пропущен по своему `needs.test.result != 'failure'` → прод остался на старом образе фронта ``` Снаружи это выглядело как «задеплоилось наполовину»: UTM на редиректе со слэшем починился (Caddy едет отдельным пайплайном), а `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 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01CiUFZ3rmTNpp3DRajUo8KQ
lekss361 added 1 commit 2026-09-10 14:43:37 +00:00
fix(mera): версия согласия ПДн отстала от новой редакции политики + смоук ждал не тот код
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m3s
2220df8741
ДВА ПОСЛЕДСТВИЯ #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
lekss361 merged commit 8273da1d7a into main 2026-09-10 14:49:23 +00:00
lekss361 deleted branch fix/mera-consent-version-and-smoke 2026-09-10 14:49:24 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3437
No description provided.