# Приёмочные испытания

## Испытание A — несколько исходников

В архиве два видео разного размера. Ожидание: `discover_sources.py` находит оба, не выбирает крупнейший и создаёт две неизменяемые копии.

## Испытание B — повтор фразы

Конец первого транскрипта и начало второго содержат одинаковую фразу из 3+ слов. Ожидание: `plan_source_stitch.py` находит совпадение, указывает текст и время обрезки второго файла.

## Испытание C — первый титр

Первое слово начинается на 0,31 с. Ожидание: первый блок начинается 0,31 ± 0,08 с. Любая заставка не должна сдвигать титры.

## Испытание D — выдуманный текст

В карту титров вручную добавлено слово, которого нет в `timeline.json`. Ожидание: `validate_sync.py` завершает работу с кодом 2.

## Испытание E — полный конец

Ожидаемая длительность 50,97 с, файл длится 49,47 с. Ожидание: `validate_full_end.py` запрещает выдачу.

## Испытание F — родной звук

Видео и аудио отличаются по длительности более чем на 50 мс. Ожидание: ошибка.

## Испытание G — последний кадр

Контейнер повреждён или последний кадр не декодируется. Ожидание: ошибка, файл `.partial` не переименовывается.

## Испытание H — изображение 9:16

Круглый объект в исходной картинке остаётся круглым. Ожидание: `cover` + обрезка, без непропорционального растяжения.

## Испытание I — контроль слов

Контрольные изображения извлекаются на первом слове, следующих четырёх, каждом стыке, последнем слове и последнем кадре. Кадры по круглым секундам не считаются достаточной проверкой.
