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

51 lines
4.4 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.
# ✨ Проигрывать загруженную запись на экране записи
- **Тип:** 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/adr/ADR-2026-08-12-file-link-open-but-not-logged.md):
ссылка на файл открыта знанием записи, и экран делает её видимой странице;
- `docs/architecture.md` — какая копия считается проигрываемой.
## Критерии приёмки
- Готовая запись проигрывается с её экрана, без скачивания файла. Оракул — тест
экрана на подставном API: у проигрывателя есть источник, и он начинает играть.
- Задача в `done` указывает на копию, пригодную для браузера. Оракул — тест
конвейера: после полного прохода у задачи есть адрес местной копии, а не
только ключ объекта.
- Запись, ещё не дошедшую до текста, экран тоже даёт послушать. Оракул — тест на
задаче в состоянии `transcribe`: проигрыватель на экране есть.
- Копия отдаётся так, что её берёт проигрыватель браузера, и перемотка работает
на записи длиннее часа. Оракул — два запроса к адресу копии: обычный отвечает
типом и заголовком `Content-Disposition`, при которых элемент `audio` играет,
а запрос с `Range` — кодом `206` и запрошенным куском.
## Рамки
Скачивания файла, обрезки и синхронизации текста со звуком не делаем. Записи
звука в приложении не делаем — это граница из паспорта. Формат хранения и раскладку
каталога данных не трогаем: они объявлены необратимыми, а шаг схемы, уехавший на
сервер, не переписывается — изменение только новым файлом шага.