Files
bare/docs/decisions/017-limits.md
T
mayatnikovandClaude Fable 5 a898347005 Закрыть открытые вопросы: ADR-015…022, бриф айдентики
Регистрация открытая (015), контакты и приглашения по нику с
закреплением ключа и блокировкой (016), лимиты (017), идентификация
устройства через случайный deviceId в IndexedDB и серверный fan-out
(018), отказ от серверного перца (019), смена пароля не в v1 (020),
интерфейс ru/en (021), айдентика «Скобы» по turn 2 канваса (022).

Архитектура, модель угроз и README обновлены. В открытых вопросах
остались два: моногарнитура с кириллицей (Fragment Mono её не
содержит) и удаление аккаунта.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R2pCJkWyG2aYu48u1Vp1A1
2026-08-20 22:42:20 +03:00

3.3 KiB
Raw Blame History

ADR-017: Лимиты

Закрывает открытый вопрос о лимитах и антиспаме.

Контекст

Открытая регистрация (ADR-015) и реле с очередями (ADR-008) требуют потолков: на размер сообщения, на частоту действий, на объём хранимого. Сервер не видит содержимого, поэтому антиспам может быть только структурным и количественным — фильтрации по тексту не существует.

Решение

Размеры.

  • Сообщение — до 4 096 символов плейнтекста; проверяет клиент до шифрования.
  • Тело любого запроса к серверу — до 32 КиБ. Это единственная проверка размера на сервере.
  • Ник — 3–32 символа: латиница в нижнем регистре, цифры, _, -. Регистр не различается.

Частота. Token bucket в памяти сервера, без внешних хранилищ. Превышение — 429 с Retry-After.

  • Отправка сообщений: 60 в минуту на аккаунт.
  • Запросы контакта: 20 в сутки на аккаунт.
  • Регистрация: 5 в час с одного IP.
  • Вход: 10 попыток за 15 минут на ник, 30 — с одного IP. Argon2 дорогой; это защита процессора сервера в той же мере, что и аккаунтов.
  • Прочие запросы: 120 в минуту на аккаунт.

Объёмы.

  • Очередь устройства — до 10 000 сообщений; при переполнении старейшие удаляются. Плюс 30-дневный TTL из ADR-008.
  • Контактов у аккаунта — до 500. Участников в комнате — до 100. Устройств у аккаунта — до 10.

Антиспам. Сводится к трём вещам: писать можно только взаимным контактам (ADR-016), блокировка ника (ADR-016), лимиты выше. Жалоб и модерации нет: серверу нечего модерировать.

Следствия

  • Все числа — константы в одном файле сервера. Клиент дублирует только длину сообщения и формат ника — для подсказок до отправки. Конфигурации нет: поменять лимит — поменять константу и пересобрать.
  • Перезапуск сервера сбрасывает счётчики. Для маленького инструмента это приемлемо.
  • Лимит по IP не различает людей за одним NAT. Осознанная грубость: цифры взяты с запасом.
  • Переполнение очереди теряет сообщения, как и TTL. Устройство, не выходившее на связь, получает не всё — это уже зафиксировано в ADR-008.