feat(mera/b2c): бесплатный лимит анонима — 5 расчётов в месяц
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
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 4m33s

Решение владельца при разборе PR #2546 (16.08.2026): в первой редакции
стояло 3. Пять проб — больше шансов, что человек дойдёт до ценности и
купит платный отчёт, ценой чуть более высокого потолка злоупотребления.

Значение переопределяется переменной окружения ANON_ESTIMATE_QUOTA_LIMIT
без выкатки кода, так что пересмотр не требует релиза.

Тесты берут лимит из настроек, а не из литерала, поэтому правка их не
трогает. Единственное место с числом — _ANON_DEFAULT в тесте передачи
произвольного default; там 3 оставлено намеренно и снабжено пояснением,
что число специально не совпадает ни с одной настройкой.
This commit is contained in:
bot-backend 2026-08-17 10:44:03 +03:00
parent ddcd526284
commit bfe58f9160
2 changed files with 11 additions and 2 deletions

View file

@ -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

View file

@ -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: