{
 "steps": [
  {
   "n": 1,
   "name": "Идентификация источника",
   "input": "Оригинальный MP4 владельца; ожидаемый SHA-256 и длительность",
   "output": "source.json (хеш, потоки, кадры), транспортный прокси 360p с полным звуком + рецепт/хеш",
   "criterion": "SHA-256 совпадает; аудиопоток есть; длительность из файла",
   "status": "pass",
   "result": "SHA 708cb005…7ff6 совпал; 720×1280@30, 9767 кадров; AAC 44.1 kHz стерео; 325.681678 s. Прокси 14.1 MB (360×640@30, AAC 64k mono)."
  },
  {
   "n": 2,
   "name": "Локальные измерения",
   "input": "Оригинал",
   "output": "Покадровые оценки scdet (9767 кадров), 89 кандидатов склеек с PTS, плотный детектор, тишина (44 интервала при −35 dB), громкость (−14.4 LUFS, LRA 14.3), 753 слова с временем (faster-whisper large-v3-turbo)",
   "criterion": "Число кадров = кадрам контейнера; пороги записаны; ASR — клок, не доказательство смысла",
   "status": "pass",
   "result": "Все 9767 кадров оценены; распределение оценок разделяет склейки (≥8) и движение (<8) за исключением тёмных склеек и растворений."
  },
  {
   "n": 3,
   "name": "Адьюдикация мягких/тёмных переходов",
   "input": "Кандидаты + кадровые полосы 10 fps с впечатанным PTS",
   "output": "Вердикты по 31 кандидату; 1 жёсткая склейка (48.5), 8 затемнений, 11 растворений с измеренными границами; plan/joins.json (109 стыков)",
   "criterion": "У каждого кандидата вердикт; панорама записана как событие внутри плана",
   "status": "pass",
   "result": "Исправление в ходе проверки: 266.1 s — затемнение, а не растворение (SH096); панорама 145.6 s — не склейка."
  },
  {
   "n": 4,
   "name": "Проход видеомодели по всему фильму",
   "input": "Прокси (картинка+звук), промпт whole-film-structure.md",
   "output": "JSON: доступ/якоря, 66 реплик, 13 сцен, 115 планов, 12 надписей; сырой поток, квитанция",
   "criterion": "heard_audio; якоря в начале/середине/конце; транскрипт до финального предложения; дрейф клока измерен",
   "status": "partial",
   "result": "Содержание полное (до карточки предложения), но клок модели уехал до +195 s к концу — времена не используются, только содержание. 30 330 prompt tokens, 164 s."
  },
  {
   "n": 5,
   "name": "Окна сцен (нормальная скорость, со звуком)",
   "input": "15 окон 25–45 s с перекрытием; промпт scene-window.md",
   "output": "Реплики с реакциями слушателей, планы с первым/последним действием, события внутри планов, поток информации, звук",
   "criterion": "Каждое окно разобрано; отказы сохранены",
   "status": "pass",
   "result": "16/17 разобрано (W03 дважды вернул пустой ответ; заменён двумя половинами W03a/W03b). Покрытие 0–325.68 без дыр."
  },
  {
   "n": 6,
   "name": "Окна стыков (2× замедление, со звуком)",
   "input": "109 стыков ±2.5 s; промпт transition-window.md",
   "output": "Для каждого стыка: уходящий/входящий план, речь на стыке, состояние жеста, латентность реакции, связь звука, прочтение цели, проверка непрерывности",
   "criterion": "У каждого стыка есть прочтение; расхождение времени модели с измеренным фиксируется",
   "status": "pass",
   "result": "109/109 стыков с прочтением (2 повторены с другой конфигурацией). Времена модели — оценки; измеренные — из PTS."
  },
  {
   "n": 7,
   "name": "Микрособытия (4× замедление)",
   "input": "8 окон с конкретным вопросом (подсказки владельца + панорама, вздох, передача, «I'll try it», руки в финале)",
   "output": "Тонкая шкала лицо/руки/тело/предмет/речь и прямой ответ с началом/завершением",
   "criterion": "Начало/завершение привязаны к слову и к склейке",
   "status": "pass",
   "result": "8/8 разобрано (E05 повторён с узким окном). Подсказки владельца подтверждены и уточнены — см. раздел."
  },
  {
   "n": 8,
   "name": "Леджер",
   "input": "Стыки + слова + выходы модели",
   "output": "ledger.json: 110 планов с измеренными границами, словами, смещением первого слова, звуковыми мостами; прикреплены 109 прочтений стыков, 16 окон, 8 событий",
   "criterion": "Покрытие 0→длительность без необъяснённых разрывов; расхождения ASR/модели перечислены",
   "status": "pass",
   "result": "19 разрывов = измеренные мягкие переходы; 10 расхождений ASR/транскрипта модели (напр. Billy→Lily)."
  },
  {
   "n": 9,
   "name": "Медиа для отчёта",
   "input": "Леджер + оригинал",
   "output": "110 кадровых полос, 109 клипов ±2 s вокруг стыков, 110 постеров, 17 сценных фрагментов — всё из оригинала со звуком",
   "criterion": "По одной полосе на план, по клипу на стык",
   "status": "pass",
   "result": "Проверено verification.json."
  },
  {
   "n": 10,
   "name": "Карточки сцен, мета-функция, критерии",
   "input": "Леджер, полосы, окна, стыки, события, разбиение",
   "output": "16 карточек сцен (наблюдение/интерпретация/неопределённость раздельно, 426 наблюдений), мета-функция (20 инвариантов, 8 правил перехода, 5 прогонов, 6 контрпримеров), 39 критериев по 8 фазам, 13 из них с автоматической реализацией",
   "criterion": "Схемы schemas/*.json; каждое наблюдение со ссылкой; интерпретации помечены; критерии продукт-независимы с on_fail",
   "status": "partial",
   "result": "Частично. Карточки: 16/16 написаны, 8 прошли двойную состязательную проверку и правку, 8 остались черновиками (лимит сессии прервал прогон). Мета-функция и критерии выведены основной сессией и прогнаны на самом оригинале: после двух исправлений — 12 pass, 3 external, 1 unknown, 0 fail."
  },
  {
   "n": 11,
   "name": "Отчёт и публикация",
   "input": "Всё выше",
   "output": "delivery/original-atomic-analysis/index.html + публикация на Cloudflare Pages",
   "criterion": "Рендерит только существующее; HTTPS-воспроизведение со звуком, перемотка, мобильная вёрстка",
   "status": "pass",
   "result": "Отчёт собран и проверен в браузере (111 плееров, воспроизведение и перемотка стыка, desktop 1280×800 и mobile 390×844 без горизонтального переполнения). Публикация — см. раздел ссылок."
  },
  {
   "n": 12,
   "name": "Обратная связь для адаптации",
   "input": "Сгенерированный фильм, прогнанный тем же харнессом, + criteria.json",
   "output": "validation-result.json: measured автоматически, model — с приложенным оригинальным фрагментом, human — по списку",
   "criterion": "Ни один критерий не пропущен молча; провал называет единицу для перегенерации",
   "result": "Реализовано и проверено на самом оригинале (self-test). На сгенерированном материале не запускалось — адаптации в этой сессии не создавались.",
   "status": "partial"
  }
 ]
}