При выносе общих стилей правила для сводки потерялись: подпись слипалась
со значением, и строки шли столбиком вместо ряда.
Длительность у задач, обработанных до 0.21.0, оставалась нулевой. Значение
есть в сохранённом результате, поэтому история чинится при открытии базы.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Длительность в списке всегда была нулевой: при загрузке файл ещё не
декодирован, и mark_done её не записывал.
Кнопка копирования кладёт в буфер и разметку, и простой текст: Word берёт
первое и сохраняет полужирные имена говорящих, простые редакторы - второе.
Срок хранения поднят с 3 суток до 336 часов, после чистки выполняется
VACUUM: SQLite помечает страницы свободными, но файл не уменьшает.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
GET /v1/jobs/view - список последних задач со ссылками на разбор. Токен
подставляется в ссылки, иначе по каждой пришлось бы дописывать его руками.
Отдельный тест следит, чтобы маршрут не перехватывался /v1/jobs/{job_id}.
build/compare_reference.py считает WER относительно эталона, выписанного
на слух. Косвенные метрики ловят крупные сдвиги и слепы к систематическим
мелким потерям - так и пропустили обрыв концов фраз.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Результаты, обработанные до 0.14.0, не содержат массива sentences. Пустой
блок разметки выглядел бы поломкой страницы - теперь он говорит, что нужно
отправить запись заново.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
По одному JSON не понять, чья ошибка: распознавание склеило реплики или
LLM неверно расставила роли. Страница показывает обе стороны и принимает
ответ модели, чтобы диалог собрался на глазах.
GET /v1/jobs/{id}/view - токен заголовком либо ссылкой ?token=ЗНАЧЕНИЕ.
Страница самодостаточна: ни одного внешнего запроса.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>