# ✨ Отклонять на приёме запись сверх потолка - **Тип:** feature - **Категория:** Очередь — Отклонять сверх потолка можно, когда потолок замерен. - **Зачем:** Запись сверх потолка принимается молча и висит в конвейере до истечения часового захвата, а человек всё это время ждёт текста. Запись длиннее потолка отклоняется на приёме понятным текстом, а не отказом через час. Потолок задаётся конфигурацией, а не зашивается в код: числа приходят из разведок `intake-limits-measure` и `speechkit-limits`, и меняются они без сборки. ## Затрагивает - `TranscribeService.createRecord` — проверка длительности и веса до записи файла в хранилище; - контракт `POST /app/audiorecords`: код и тело ответа на запись сверх потолка; - `GET /app/config` — потолок длительности рядом с потолком размера, чтобы экран отклонял такую запись до отправки; - секция конфигурации: потолок длительности и потолок веса; - `docs/database.md` — настройки с числовым значением. ## Критерии приёмки - Запись длиннее потолка отклоняется на приёме: аудиозапись не заводится, файл в хранилище не остаётся. Оракул — тест приёма на записи сверх потолка: записей ноль, каталог хранения пуст. - Отправитель видит человекочитаемый текст с названным пределом, а не код ошибки. Оракул — тест: в теле ответа предел числом, текста внутренней ошибки нет. - Запись в пределах потолка принимается по-прежнему. Оракул — существующие тесты приёма по HTTP. - Потолок меняется конфигурацией без пересборки. Оракул — тест разбора конфигурации с двумя разными значениями. ## Рамки Берётся после `intake-limits-measure`: до неё потолок брать неоткуда. Длительность известна из `ffprobe` — значит, проверка идёт после чтения метаданных, но до записи в базу. Предел размера на стороне сервера уже есть — `entity.MaxRecordSize` стоит и у поля файла, и у тела запроса приёма, — и он не отменяется, а дополняется потолком длительности.