◂ Этап ReviewRYA.AEVersion Review · Was → Now — ревью версии: было → стало, что исправленоревью · 3 окт 2026 · комната — 11 окт
Этап Review трека AI Editing — между готовой версией фильма и её сдачей. Замечания Романа и клиента ложатся не в файл, а в указания листа с «почему»; версия vN+1 пересобирается кодом из снимка кода через очередь и проходит чек-лист целостности; Роман получает одну страницу «было → стало»: на каждое замечание пара роликов, слова с подчёркнутыми обрывами и повторами, что сделано, чем проверено, в конце — вопросы Роману. Роман 03.10.2026: «ревью надо добавить в AI Editing отдельно — там из процессов только публикация одинаковое». Образец — YTEVO02, правки клиента к v5 → v7.
📌 С 11.10.2026 круги правок идут в комнате ревью: правка на кадре, черновики 720p, 4K — один раз после «ок по сути»; эта страница — сравнение версий «было → стало» кодом. Правило. Замечание — к месту листа, а не к файлу: у каждого адрес в указаниях и «почему», версия пересобирается кодом, в плеере не режут. Показ — парами «было → стало» на одной странице; ролик «было» режется из файла, который смотрел клиент. Сдача — только по слову Романа.
Одним взглядом
7полей
у каждого замечания
таймкод · слова · было · стало · сделано · проверено · где
2оси
времени в сводке и в карточке
11:55 в v5 (клиент) — это 11:01 в v7
10 из 10
замечаний клиента внесено
YTEVO02 v5 → v7 · 36 роликов 720p парами
+8
находок сверх замечаний
экраны S10, S13 после ужатий → v8
1Схема2Машина и монтажёр3v5 → v84Макет страницы5Запись замечания6Что пересобирается7Как отвечают8Проверки9Что обновляет базу знаний10Ошибки и грабли11Команды · где лежит12Есть · надо

20.1 · 1Схема: от версии vN к принятой версии

📥 Вход
Версия vN4K · qc_<tag>.json · лёгкая копия
+
Отчёт приёмки0 красных строк — иначе не показывать
+
ЗамечанияРоман и клиент: голос, текст, ссылка
📝 Указания
Замечание → местотаймкод клиента → кусок листа k…
→
Пробы краяprobe · strips · audition до рендера
→
Указание с «почему»directives: edges · trims · _vN_why
🧱 Сборка vN+1
run_vN.shснимок кода, через render_queue.py
→
звук → экраны → частишаги audio · hf · conform · deliver
→
Приёмка по чек-листуqc.py: кадры, LUFS, синхрон, склейки
🔍 Показ
Страница было → сталоcompare_page.py · пары · вопросы
→
Роман и клиент«ок» · правка · вопрос с номером
→
Сдача по слову Романалёгкие копии · показ → архив Drive
📦 Дальше
light.py1080p клиенту и в Loom, 4K лайт
→
site_archive.py pushстраница версии → Archive:yt.rya.ae
→
Shorts и Publishшортсы — из чистого мастера принятой
машиначеловек решает или смотритагент Claudeитог дорожки

Снимок кода — код этапа не меняется, пока собирается версия (в YTEVO02 run_vN.sh зовёт этап 0510_autocut как есть, в сессии он не правился). Любая правка — новая версия в имени, прежняя остаётся рядом.

20.1 · 2Чем ревью машины отличается от ревью монтажёра

Роман 03.10.2026: «там из процессов только публикация одинаковое».

Трек Premiere — ревью ката монтажёра

  • Кат присылает монтажёр; правит он же, в Premiere.
  • Замечания — ТЗ монтажёру: «таймкод ▸ пункт», опечатки «было → стало», крупные кадры.
  • Поверхности: шесть слоёв поверх ката, вкладка дока, таблица, бриф в телефон — из одного pravki.
  • Машина стадий — review.py, скилл /review.

Трек AI Editing — ревью версии кодом

  • Версию собрал код; правка — указание листа с «почему» (directives_v4.json), не правка файла.
  • Пересборка — run_vN.sh через очередь; приёмка — чек-лист числами (qc_<tag>.json).
  • Показ — одна страница «было → стало»: пары роликов, слова, что сделано, чем проверено; вопросы Роману в конце.
  • Ответ Романа — «ок» или новая версия; клиенту — лёгкая копия. Монтажёра и Premiere в цепочке нет.

Общее у треков — только Publish. Страница версии до рендера — план экранов с той же механикой «# ссылка», «ок / править»; здесь — её продолжение после рендера: не «что будет», а «что стало».

20.1 · 3Образец YTEVO02: от v5 к v8

Правки клиента к v5 — по версиям: что пошло не так и что стало правилом.

v5
Клиент смотрит лёгкую копию1080p в Loom, 16:04,64; 10 замечаний вернулись голосом и текстом
v6
Правки — указаниями листапрогон со звуком v5: 12 экранов заново; «всего» — выдача остановлена
v7
Наезд ×1,15 — отдельной версиейпервая выдача −35 мс при допуске 20 → qcfail_sync; v6 цел
v7
Страница «было → стало»15:11,84, приёмка зелёная; внесено 10 из 10, сверх 8, вопросов 5
v8
Сверх-находки: экраны после ужатийS10, S13: 5,28 и 6,92 с → 11,48 и 10,76; звук тот же, 22 796 кадров

Правила из этих версий: звук раньше экранов; край слова — по собранному звуку; экраны сверять после ужатий. На 03.10 сборка v8 ждёт очередь, файлов v8 ещё нет.

20.1 · 4Макет страницы «было → стало»

Образец — YTEVO02, правки клиента к v5, показанные на v7 (страница v3, 03.10.2026). Живой образец с роликами — на диске: /Volumes/T7-Beige-RYA/YTEVO/YTEVO-Projects/YTEVO02_evolution_manifesto/00_Setup/05_Review/v7_compare/YTEVO02_v7_vs_v5.html; на сайте его нет — в кадрах клиент.

Шапка и четыре счётчика
Шапка и четыре счётчика
Версия страницы v3 · файл фильма с кнопкой «копировать» · «15:11,84 · 4K · приёмка зелёная». Жёлтым — «при этой сверке нашёл своё» (сверх-находки → v8). Счётчики-ссылки: внесено 10 из 10 · сверх замечаний 8 · наезд ×1,15 · вопросов 5.
шапкапредупреждениесчётчики
compare_page.py
Сводка одной таблицей
Сводка одной таблицей
№ · таймкод v5 (ось клиента, ссылка на карточку) · слова клиента · было · стало · таймкод v7. Две оси в двух колонках: 11:55 в v5 — это 11:01 в v7.
сводкадве оси времени
SUMMARY в compare_page.py
Карточка замечания: пара «было / стало»
Карточка замечания: пара «было / стало»
Номер, таймкод, слова клиента дословно. Слева ролик из v5, справа из v7, заставка — кадр на месте правки. Под роликами речь: обрыв, вырезанное и вставленное подчёркнуты, «пауза 1,4 с» и «э-э» названы словами. Ниже «Что сделано», «Чем проверено», ⚠ где код не проверил.
ролики 720pdel / insчто сделано · чем проверено
compare_v5_v7.py clips → TEXT в compare_page.py
Вопросы к Роману и подвал
Вопросы к Роману и подвал
Нумерованный список открытого: что послушать самому, что оставить, что сверить с клиентом. Подвал — приёмка v7 числами, откуда ролики и тексты, длина v5 16:04,64 → v7 15:11,84, скрипт сборки.
вопросыприёмка числами
compare_page.py --check → compare_page.py

Если менялся кадр — на странице версии раздел «Кадрирование по замеру» (образец YTCG37 v4): правило кадра, что вышло числами, все планы парами v3 → v4 с ← → ↑ px; в генераторе этапа такого раздела пока нет — надо построить.

Разделы страницы — что в каждом и зачем
1Шапка
  • Версия, дата, файл, длина, «приёмка зелёная» — и сразу правки, без вводных (правило Романа к странице фидбека).
2Предупреждение сверху
  • «Нашёл своё»: что найдено сверх замечаний, в какую версию уйдёт, что не трогается.
3Счётчики
  • Четыре числа-ссылки: внесено · сверх · отдельная тема · вопросов.
4Сводка
  • Одна таблица на все замечания, обе оси времени; номер строки = номер карточки.
5Карточки «было и стало»
  • Пара роликов; речь с del/ins; «Что сделано», «Чем проверено», ⚠. Сверх-находки — те же карточки, свёрнуты.
6Тема · вопросы · подвал
  • Тема вне замечаний (наезд ×1,15) — своей карточкой с кадрами; вопросы Роману нумерованы; подвал — приёмка числами.

20.1 · 5Как записать замечание: семь полей, две оси времени, сверх-находки

Так замечание лежит в compare_points.py (места и окна) и в directives_v4.json (поле _vN_why). Пример — замечание № 9.

ПолеОткуда берётсяПример (№ 9)
Таймкод клиентаось той версии, которую он смотрел (v5), не текущей11:55
Слова клиентадословно, без пересказа«обрыв окончания»
Былорасшифровка прошлого файла и пробы источника; обрыв назван словами«…родится именно здесь» — слово обрезано; распознавание слышит «в этом»
Сталорасшифровка звука новой версии тем же способом«…родится именно здесь.»
Что сделанодействие над листом в единицах листаконец куска k40 продлён на 0,80 с
Чем провереноинструмент и число, не «послушал»расшифровка: v5 — «именно в этом», v7 — «именно здесь»
Где в указанияхключ directives_v4.json (edges, trims, screens_time) и строка в _v6_why«k40 конец до „здесь“ целиком (+0,80 с)»

Окно ролика — с запасом в несколько секунд до и после: правку надо слышать в потоке речи, а не обрубком (в образце 6–49 с на пару).

Замечание № 9: было → стало
былоv5 · 11:55 — ось клиента
11:55
таймкод в v5
  • «…родится именно здесь» — слово обрезано
  • распознавание слышит «в этом»
сталоv7 · 11:01 — новая ось
+0,80с
конец куска k40
11:01
таймкод в v7
  • «…родится именно здесь.»
  • edges: «k40 конец до „здесь“ целиком»
  • проверено расшифровкой: v7 — «именно здесь»

Слова клиента дословно — «обрыв окончания». Ролик «было» режется из YTEVO02_v5_light.mp4, который он смотрел; окно — с запасом до и после.

Правило двух осей времени
1Клиент живёт в прошлой версии
  • Его 11:55 — ось v5; после ужатий та же фраза в v7 на 11:01. В сводке обе колонки, в карточке обе метки.
2Лист живёт в старой оси
  • trims и edges пишутся в старой оси; probe.py печатает все три времени: фильм v5, старая ось, источник.
3Ролик «было» — из файла клиента
  • Режется из YTEVO02_v5_light.mp4, который смотрел клиент, а не из листа: иначе он не узнает место.
Сверх замечаний: что нашлось рядом
1Проверяя правку, смотрят соседей
  • Каждый край — огибающей и распознаванием собранной речи, рядом — соседние края и экраны. В образце 8 мест сверх 10 замечаний: «Ра-ботая», «целостность», «не хватает», «К нам» → «Нам».
2Находки — отдельной строкой
  • Список EXTRA с теми же полями, свёрнутый раздел и предупреждение сверху — не молча. v7 → v8: экраны S10 и S13 стояли 5,28 и 6,92 с вместо 11,48 и 10,76; слоги «ЭВА · Ц» → «ЭВО · ЦИ».
3Что не трогать
  • Звук, монтаж и таймкоды принятой версии: v8 собирается шагами hf conform screens deliver qc light — звук не пересобирается, длина та же, 22 796 кадров (на 03.10 сборка ждёт очередь, файлов v8 ещё нет).

20.1 · 6Что пересобирается после правки

Таблица этапа Cut (правка → что пересоберётся) глазами ревью.

ЗамечаниеКуда в указанияхЧто пересобирается
обрыв слова, лишний звук на краюedges — сдвиг края кускалист → звук → экраны (моменты по dialogue.wav нового листа) → задетые куски → выдача → приёмка
запинка, повтор, паузаtrims — ужатие внутри кускато же; стык прячется ракурсом второй камеры или в окне экрана
убрать реплику или спикера целикомtrims на весь кусок + screens_offлист, звук, экраны; на старой оси остаётся дыра — края экранов рядом задавать screens_time
на экране не топлан экрана (lesson_plan) или factsтолько этот экран (шаг hf) и выдача; звук не трогается
экран стоит мало или многоscreens_timeэтот экран и выдача
крупность, «много места над головой»zoom / framingкуски этого чанка и выдача — отдельной версией: v7 рядом с v6, v6 цел; показ — раздел «Кадрирование по замеру»: правило, что вышло, все планы v3 → v4 числами ← → ↑ px и парами кадров (образец YTCG37 v4, 03.10)

Звук раньше экранов: screens2.py ставит экраны по словам dialogue.wav текущего листа; первый прогон v6 шёл со звуком v5 — 12 экранов перерисовали вторым проходом. Версии — в имени, ничего не затирать: лист перед правкой — в _bak_vN_дата/, прежний файл остаётся в 03_Exports/.

Что пересобирается — одним взглядом
Замечание · куда в указанияхЛистЗвукЭкраныКускиВыдача
Речь: обрыв, запинка, лишняя реплика · edges, trims✓✓✓!✓
Экран: не то или не столько · lesson_plan, facts, screens_time··!·✓
Кадр: крупность, место над головой · zoom, framing···!✓
✓пересобирается!только задетое·не трогается

По таблице выше и README этапа 0510_autocut. Реплика целиком — trims на весь кусок + screens_off. После любой пересборки — приёмка qc.py; крупность — отдельной версией, прежняя цела.

20.1 · 7Как Роман и клиент отвечают

1Роман — по странице
  • «ок» по версии, правка по номеру карточки или ответ на вопрос из списка в конце — номер и есть адрес.
  • Что код не проверил, помечено ⚠ «послушать самому» (пара № 7: подъём 20 мс, рез между словами без паузы). Роман 03.10: «сделай таблицы сравнения до и после исправления (чтобы я проверил, что всё ок)».
2Клиент — лёгкая копия
  • Клиент смотрит лёгкую копию 1080p (light.py): v5 ушла ему в Loom (главы и расшифровку для Loom готовит сессия); замечания вернулись Роману голосом и текстом, он переслал их сессии.
  • Наружу ничего без слова Романа: Drive проекта видит клиент, Loom, YouTube, Trello.
3Без ответа — отдельная версия, так и подписать
  • На отчёт по v6 Роман ответил «продолжай», явного «да» по наезду не было — v7 собран отдельной версией по рекомендации сессии, v6 цел; так и написано на странице и в хэндоффе.
  • Неясное у клиента не угадывать: экран S15 с пятью направлениями оставлен (спикер сама называет пять), вопрос — в список.
4Решает Романоткрыто
  • Срок ответа по странице и умолчание без ответа (на плане экранов — объявленное умолчание).
  • Показывать ли клиенту страницу целиком — с роликами и вопросами Роману — или только лёгкую копию.
  • Убирать ли первую выдачу v7 с рассинхроном (_qcfail_sync) — лежит до его слова.

20.1 · 8Проверки

ЧтоКогдаНормаОткуда взялась
У каждого замечания — пара и адресcompare_page.py --check перед записью«роликов не хватает: 0»; у карточки id, в сводке ссылкаворота «у каждого замечания пара»
Тексты «было / стало» — по расшифровке обоих файловcompare_v5_v7.py hear до вёрсткиоба окна одним способом (mlx-whisper, слова с временем); обрыв и повтор названы словамираспознавание дописывает: «здесь» → «в этом», «не хватает» → «актуально»
Ролик «было» — из файла клиентапри нарезке пар (clips)«было» = лёгкая копия, которую смотрел клиент; «стало» — готовый файл новой версиииначе клиент не узнаёт место
Приёмка vN+1 — числами в подвалепосле qc.py новой версиивсе ворота зелёные: кадры по плану, −14 LUFS, синхрон в допуске 20 мс, склейки по плану, чёрного нетчек-лист; первая выдача v7 легла с −35 мс
Собранная речь — до рендера и послеaudition.py --only до сборки, --film по файлувсе слова на месте, метки резов ┃ между словами; двойное слово — узким окном (win)Whisper «дописал» «всего» — выдача v6 остановлена
Сверх-находки свереныперед предупреждением сверхуу каждой — пара, адрес, что сделановорота «каждая находка сверена»

Ухом фильм не слушал никто — звук проверен распознаванием, огибающими и замерами; так и пишется в подвале. Что код не проверил, помечено ⚠ и отдано Роману на слух.

20.1 · 9Что обновляет базу знаний

ФайлЧто хранитКто пишет
directives_v4.json → _v6_why, _v7_why, _v8_whyчто и зачем по каждому месту; _edges_why, _screens_time_why — почему край стоит таксессия, при каждой правке
compare_points.pyзамечания дословно, окна обеих осей, точки правки; сверх-находки EXTRAсессия
_v6_tools/README.md«три вещи, которые стоили времени»: Whisper дописывает, две сетки кадров, дыра в листесессия после приёмки
00_Handoff/HANDOFF_…замечание → что сделано → vN, приёмка числами, открытое для Романасессия в конце
чек-лист целостностиновая строка из ошибки, которую нашёл клиент: обрыв слова в файле, экран после ужатийсессия, после «ок» Романа
журнал переделокчто переделывали из-за порядка шагов (звук после экранов)сессия

20.1 · 10Ошибки и грабли

Whisper дописывает обрезанное слово«здесь» на 11:55 распалось на два острова речи, ни один словом не распознаётся; «всего» распознался как запинка «бу-» — выдача v6 остановлена и пересобрана. Край проверять по собранному звуку (audition.py), внутри источника — отрезками порознь (probe.py --hear)._v6_tools/README.md · хэндофф v6, раздел 6
Две сетки кадровНачало части камеры A считается floor(v_in·25+0,5), длина — по старой оси; при разном числе кадров уезжает и конец: k50 при +0,28 терял 40 мс речи. Сдвиг брать так, чтобы оба квантования дали одно число (+0,285), швы сверять встык._v6_tools/README.md · _edges_why
Дыра в листеКусок, ужатый целиком (k06, k32), оставляет на старой оси дыру; время в дыре отдаёт последний сегмент — экран тянется до конца фильма. Край экрана у дыры задавать screens_time (S05: 106,38)._v6_tools/README.md · _screens_time_why
Экраны до звукаПервый прогон v6 шёл со звуком v5 — 12 экранов встали не на свои слова, перерисованы вторым проходом. В run_vN.sh шаг audio первый.хэндофф v6, раздел 6
Ракурс второй камеры на кадр раньше звукаВ хвосте k50 ракурс B стоял −35 мс при допуске 20 — qc.py красный. Первая выдача v7 оставлена как YTEVO02_v7_4K_qcfail_sync.mp4, не удалена; там теперь общий план камеры A.хэндофф v6, раздел 8
Ужал запинки — экран стал нечитаемымS10 и S13 стояли 5,28 и 6,92 с вместо 11,48 и 10,76: четыре строки и три карточки не прочитать. Нашлось только при сверке «было → стало» — отсюда v8.хэндофф v6, раздел 10

20.1 · 11Команды и где лежит

Версия и показ (образец YTEVO02)
P=/Volumes/T7-Beige-RYA/YTEVO/YTEVO-Projects/YTEVO02_evolution_manifesto
T=$P/00_Setup/02_Assembly/autocut_v4/_v6_tools
V=~/YTAI/environment/.venv_transcribe/bin/python
$V ~/YTAI/scripts/05_editing/0510_autocut/plan.py --project $P build --check  # ворота листа: дыры, нахлёсты, экраны
zsh $T/run_v6.sh  # v6: audio hf conform screens deliver qc — тяжёлые шаги через render_queue.py --idle-pass 240
zsh $T/run_v7.sh  # v7: то же + light; --jobs 1, RENDERQ_MAX_SWAP_GB=14, RENDERQ_MAX_PRESSURE=2
zsh $T/run_v8.sh conform screens deliver qc light  # v8: только экраны и выдача, звук не трогается
python3 $T/compare_page.py --check  # сколько роликов не хватает; версию страницы не растит
python3 $T/compare_page.py  # → 05_Review/v7_compare/YTEVO02_v7_vs_v5.html + version.json
$V ~/YTAI/scripts/05_editing/0510_autocut/light.py $P/03_Exports/YTEVO02_v7_4K.mp4 --kinds 1080 --name YTEVO02_v7  # лёгкая копия 1080p клиенту; через очередь
python3 scripts/site/site_archive.py push --apply  # показ → Shared Drive «Archive», папка yt.rya.ae/ (без --apply сухо)

Образец сделан под один проект: пути и версии зашиты в скриптах _v6_tools. run_vN.sh — имя по версии: run_v6.sh, run_v7.sh, run_v8.sh.

Пробы: откуда берутся «было» и «стало»
$V $T/probe.py k16 --pad 2.5  # место по исходному звуку: слова с временем, паузы, три оси времени
$V $T/strips.py --only k13,k38  # края кусков по 10 мс в трёх полосах с линейкой кадров
$V $T/edge_cards.py  # карточка на каждый звуковой край листа
$V $T/audition.py --dir $P/00_Setup/02_Assembly/autocut_v4/directives_v4.json --only k16,k17  # собранная речь куска с метками резов — до рендера
$V $T/audition.py --film $P/03_Exports/YTEVO02_v7_4K.mp4 --all  # то же по звуку готового файла — приёмка
$V $T/compare_v5_v7.py hear  # оба окна каждого места → probes/compare_hear.{txt,json}
$V $T/compare_v5_v7.py clips --out $P/00_Setup/05_Review/v7_compare  # пары роликов 1280×720 аппаратным кодеком, по одному

Модели — через общий замок MLX, по одной; ролики — аппаратным кодеком по одному.

Где лежит
{проект}/00_Setup/05_Review/v7_compare/
YTEVO02_v7_vs_v5.html · version.jsonстраница «было → стало», с диска; версия растёт на каждой сборке
clips/ · img/36 роликов 720p (10 замечаний + 8 сверх); заставки, кадры экранов
{проект}/00_Setup/02_Assembly/autocut_v4/
directives_v4.json · _bak_vN_дата/указания листа с _v6_why · _v7_why · _v8_why; лист перед каждой правкой
_v6_tools/ · _v6_tools/probes/скрипты проб и сравнения, run_v6.sh · run_v7.sh · run_v8.sh, README.md; выводы проб
qc/qc_YTEVO02_v7_4K.json · qc/v6/ · qc/v7/отчёты приёмки и кадры
{проект}/03_Exports/
YTEVO02_v5_light.mp4файл, который смотрел клиент — источник роликов «было»
YTEVO02_v6_4K.mp4 · YTEVO02_v7_4K.mp4 · *_light.mp4версии рядом; v7_4K_qcfail_sync.mp4 — первая выдача v7
00_Setup/00_Handoff/HANDOFF_2026-10-02d_YTEVO02_v6_mikhail_edits.mdзамечания → что сделано → vN, приёмка, правила
~/YTAI/scripts/ · ~/RYA/yt-rya-ae/scripts/site/
05_editing/0510_autocut/light.py · qc.py · plan.py · composite.pyлёгкие копии, приёмка, лист, выдача
999_extra/render_queue.pyочередь рендера: --idle-pass, RENDERQ_MAX_SWAP_GB, RENDERQ_MAX_PRESSURE
site_archive.py · gen_screen_plan.pyпоказ в архив Drive; образец генератора страницы версии

20.1 · 12Есть сегодня и надо построить

1Есть сегодня — в проекте YTEVO02есть
  • Страница «было → стало» v3: 10 замечаний + 8 сверх, 36 роликов, сводка, вопросы Роману.
  • Пробы и сравнение — _v6_tools/; тексты «было / стало» и «что сделано» написаны руками по расшифровкам.
  • Это проектные скрипты, не этап ~/YTAI/scripts: пути, версии и места зашиты в коде.
2Надо построить — общий генератор этапанадо построить
  • План сравнения JSON (замечания, окна обеих осей, тексты, что сделано, чем проверено) → страница на yt.rya.ae по образцу gen_screen_plan.py: «# ссылка», «ок / править», «Скопировать решения».
  • Пары роликов автоматически по адресам указаний: правка edges/trims куска → окно в прошлой и новой версии, без ручного compare_points.py.
  • Страница под паролем на сайте вместо файла с диска; после сдачи — site_archive.py push. Приёмка и счётчики — из qc_<tag>.json.
3💬 Моё мнениене решено
  • Клиенту — лёгкую копию и короткую сводку «что внесено», без вопросов Роману и сверх-находок: вопросы — внутренняя кухня, а «нашёл своё» клиент прочтёт как «ещё не готово».
  • «Чем проверено» держать обязательным: без него пара роликов — просто два видео, и Роману снова слушать всё самому.
  • Пока генератора нет, семь полей compare_points.py вести как формат — его генератор потом и прочитает.
Ревью версии · сверено 03.10.2026 · примеры: YTEVO02 v5 → v7 (10 замечаний клиента, 8 сверх), v8 в работе (экраны после ужатий)