# Ворота качества 2.1

## G0 — источники

- [ ] архив полностью распакован;
- [ ] перечислены все видео;
- [ ] нет автоматического выбора только по размеру;
- [ ] каждый кандидат просмотрен и расшифрован;
- [ ] SHA-256 записаны.

## G1 — речь

- [ ] используется многоязычный Whisper/Faster-Whisper;
- [ ] есть метки каждого слова;
- [ ] фактический текст сохранён;
- [ ] первые/последние слова проверены;
- [ ] нет фраз из сценария, отсутствующих в аудио.

## G2 — стыки

- [ ] порядок исходников подтверждён;
- [ ] повторяющаяся фраза найдена по словам;
- [ ] видео и звук режутся по одной карте;
- [ ] стык просмотрен до/после;
- [ ] нет повторов или пропуска слов.

## G3 — субтитры

- [ ] покрытие слов ≥ 97%;
- [ ] первый блок начинается вместе с первым словом ±80 мс;
- [ ] средняя ошибка границы ≤100 мс;
- [ ] нет выдуманных слов;
- [ ] титры видны в безопасной зоне;
- [ ] один слой.

## G4 — б-роллы

- [ ] каждый б-ролл привязан к словам/фразе;
- [ ] изображения не растянуты;
- [ ] движение плавное, 2–6%;
- [ ] нет дешёвой вибрации;
- [ ] б-ролл не перекрывает важную мимику без причины.

## G5 — HyperFrames

- [ ] `doctor` прошёл;
- [ ] `lint --json` без ошибок;
- [ ] `inspect --json` показывает ожидаемую длительность;
- [ ] GSAP-таймлайн не короче композиции;
- [ ] последний кадр проверен клавишей End/покадрово.

## G6 — звук

- [ ] родной голос не сдвинут;
- [ ] длительность аудио и видео отличается ≤50 мс;
- [ ] музыка приглушается под речь;
- [ ] финальное слово не обрезано;
- [ ] последний аудиопакет присутствует.

## G7 — файл

- [ ] длительность совпадает с `timeline.expected_duration` ±100 мс;
- [ ] последний кадр декодируется;
- [ ] файл не `.partial`;
- [ ] имя уникальное;
- [ ] приложены отчёты начала, стыков и окончания.

Провал любых ворот запрещает фразу «готово».
