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

4.4 KiB

Проигрывать загруженную запись на экране записи

  • Тип: feature
  • Категория: Очередь — Проигрывание живёт на экране записи, которого до списка нет.
  • Зачем: Послушать загруженное приложение не даёт, а самой копии для этого у задачи нет: указатель на файл перезаписывается на каждом шаге конвейера и у готовой задачи ведёт на объект в Object Storage.

Запись слушается на её экране, а не скачивается файлом.

Заметка владельца от 2026-08-12. Копии на диске остаются все три — исходник, ogg после конвертации и запись об объекте, — но job.FileID на каждом шаге указывает на последнюю: у задачи в done он ведёт на объект Object Storage, а местные копии не связаны с задачей ничем. Значит, задача не только про экран: проигрываемую копию сперва нужно к записи привязать.

Берётся после records-list-screen — экран одной записи делает она.

Затрагивает

  • связь задачи с копией: сегодня transcribe_jobs.file — одно поле на одну копию, и шаг схемы придётся добавлять;
  • контракт HTTP API из json-api-for-spa — адрес проигрываемой копии в ответе о записи;
  • экран одной записи из records-list-screen;
  • отдачу файла хранилищем: /api/files/... отвечает на Range сам, но audio/ogg не входит в перечень типов, которые хранилище отдаёт с Content-Disposition: inline, — ogg-копия уходит вложением;
  • периметр из ADR-2026-08-12: ссылка на файл открыта знанием записи, и экран делает её видимой странице;
  • docs/architecture.md — какая копия считается проигрываемой.

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

  • Готовая запись проигрывается с её экрана, без скачивания файла. Оракул — тест экрана на подставном API: у проигрывателя есть источник, и он начинает играть.
  • Задача в done указывает на копию, пригодную для браузера. Оракул — тест конвейера: после полного прохода у задачи есть адрес местной копии, а не только ключ объекта.
  • Запись, ещё не дошедшую до текста, экран тоже даёт послушать. Оракул — тест на задаче в состоянии transcribe: проигрыватель на экране есть.
  • Копия отдаётся так, что её берёт проигрыватель браузера, и перемотка работает на записи длиннее часа. Оракул — два запроса к адресу копии: обычный отвечает типом и заголовком Content-Disposition, при которых элемент audio играет, а запрос с Range — кодом 206 и запрошенным куском.

Рамки

Скачивания файла, обрезки и синхронизации текста со звуком не делаем. Записи звука в приложении не делаем — это граница из паспорта. Формат хранения и раскладку каталога данных не трогаем: они объявлены необратимыми, а шаг схемы, уехавший на сервер, не переписывается — изменение только новым файлом шага.