Files
transcriber/tasks/items/reject-oversized-recording.md
T
av 5501384cdc tasks: упразднены цели и роадмап, объявлена стадия build
- 11 записей типа goal закрыты с причиной, называющей задачи-наследники;
  ROADMAP.md удалён, индекс остался один — BACKLOG.md;
- 33 записи переписаны: ссылка «Двигает пункты N «Завершения» цели» уступила
  место прямому утверждению — без целей номера пунктов вели в никуда;
- шапка BACKLOG.md размечена парой <!-- стадия -->, порядок строк теперь
  объявлен зависимостью, а не важностью.
2026-08-13 16:00:14 +03:00

2.9 KiB

Отклонять на приёме запись сверх потолка

  • Тип: feature
  • Категория: Очередь — Отклонять сверх потолка можно, когда потолок замерен.
  • Зачем: Запись сверх потолка принимается молча и висит в конвейере до истечения часового захвата, а человек всё это время ждёт текста.

Запись длиннее потолка отклоняется на приёме понятным текстом, а не отказом через час.

Потолок задаётся конфигурацией, а не зашивается в код: числа приходят из разведок intake-limits-measure и speechkit-limits, и меняются они без сборки.

Затрагивает

  • TranscribeService.createTranscribeJob — проверка длительности и веса до записи файла на диск;
  • контракт POST /api/audio: код и тело ответа на запись сверх потолка;
  • ответ бота на слишком длинную запись;
  • секция конфигурации: потолок длительности и потолок веса;
  • docs/database.md — настройки с числовым значением.

Критерии приёмки

  • Запись длиннее потолка отклоняется на приёме: задача не заводится, файл на диске не остаётся. Оракул — тест приёма на записи сверх потолка: задач ноль, каталог хранения пуст.
  • Отправитель видит человекочитаемый текст с названным пределом, а не код ошибки. Оракул — тест: в теле ответа предел числом, текста внутренней ошибки нет.
  • Запись в пределах потолка принимается по-прежнему. Оракул — существующие тесты приёма по HTTP.
  • Потолок меняется конфигурацией без пересборки. Оракул — тест разбора конфигурации с двумя разными значениями.

Рамки

Берётся после intake-limits-measure: до неё потолок брать неоткуда. Длительность известна из ffprobe — значит, проверка идёт после чтения метаданных, но до записи в базу. Предел веса на стороне сервера уже есть (router.MaxMultipartMemory), и он не отменяется, а дополняется.