From bfe58f91608a7dc636035ad6da1637791c7e8f68 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Mon, 17 Aug 2026 10:44:03 +0300 Subject: [PATCH] =?UTF-8?q?feat(mera/b2c):=20=D0=B1=D0=B5=D1=81=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D0=BD=D1=8B=D0=B9=20=D0=BB=D0=B8=D0=BC=D0=B8?= =?UTF-8?q?=D1=82=20=D0=B0=D0=BD=D0=BE=D0=BD=D0=B8=D0=BC=D0=B0=20=E2=80=94?= =?UTF-8?q?=205=20=D1=80=D0=B0=D1=81=D1=87=D1=91=D1=82=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B2=20=D0=BC=D0=B5=D1=81=D1=8F=D1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Решение владельца при разборе PR #2546 (16.08.2026): в первой редакции стояло 3. Пять проб — больше шансов, что человек дойдёт до ценности и купит платный отчёт, ценой чуть более высокого потолка злоупотребления. Значение переопределяется переменной окружения ANON_ESTIMATE_QUOTA_LIMIT без выкатки кода, так что пересмотр не требует релиза. Тесты берут лимит из настроек, а не из литерала, поэтому правка их не трогает. Единственное место с числом — _ANON_DEFAULT в тесте передачи произвольного default; там 3 оставлено намеренно и снабжено пояснением, что число специально не совпадает ни с одной настройкой. --- tradein-mvp/backend/app/core/config.py | 8 +++++++- tradein-mvp/backend/tests/test_account_quota.py | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tradein-mvp/backend/app/core/config.py b/tradein-mvp/backend/app/core/config.py index f88a5570..820144bf 100644 --- a/tradein-mvp/backend/app/core/config.py +++ b/tradein-mvp/backend/app/core/config.py @@ -751,7 +751,13 @@ class Settings(BaseSettings): # чистка cookie обходит этот лимит — цель поднять стоимость злоупотребления, # а не сделать его невозможным (тот же принцип, что и account_estimate_usage # для пилотов). ENV: ANON_ESTIMATE_QUOTA_LIMIT. - anon_estimate_quota_limit: int = Field(default=3, validation_alias="ANON_ESTIMATE_QUOTA_LIMIT") + # + # Значение 5 выбрано владельцем 16.08.2026 при разборе PR #2546 (в первой + # редакции стояло 3). Компромисс продуктовый, а не технический: пять проб — + # это больше шансов, что человек дойдёт до ценности и купит платный отчёт за + # 150 ₽, ценой чуть более высокого потолка злоупотребления. Число легко + # пересматривается переменной окружения без выкатки кода. + anon_estimate_quota_limit: int = Field(default=5, validation_alias="ANON_ESTIMATE_QUOTA_LIMIT") # anon_session_secret: ключ HMAC-подписи анонимного session-cookie (см. # app/core/anon_session.py). Пусто (дефолт) → используется process-local diff --git a/tradein-mvp/backend/tests/test_account_quota.py b/tradein-mvp/backend/tests/test_account_quota.py index 292ed19f..083fe7dc 100644 --- a/tradein-mvp/backend/tests/test_account_quota.py +++ b/tradein-mvp/backend/tests/test_account_quota.py @@ -993,7 +993,10 @@ def test_estimate_real_result_still_increments_quota(estimate_app_ok: FastAPI) - _ANON_KEY = "anon:fake-session-id:203.0.113.7" -_ANON_DEFAULT = 3 # существенно строже MONTHLY_LIMIT (15) — см. settings.anon_estimate_quota_limit +# Произвольное число, намеренно НЕ равное ни MONTHLY_LIMIT (15), ни текущему +# settings.anon_estimate_quota_limit (5) — тест проверяет, что переданный +# default доходит до результата, а не что совпал с какой-то настройкой. +_ANON_DEFAULT = 3 def test_user_limit_anon_key_falls_back_to_custom_default() -> None: