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

35 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.