{
  "at": "2026-09-14T12:34:49.371798+00:00",
  "schema": "adfactory.feedback-integration/v1",
  "researchSource": {
    "path": "runs/targ-dna-audit-b614aa3b3e/rules-v02.json",
    "sha256": "f0dd6c69a11e9b23c2632271a72c1f823f6a6065f37c793276d7bc26dceff5fb"
  },
  "rules": [
    {
      "id": "R01",
      "title": "Разделить источник истории, продукт и эталон вкуса",
      "phase": "source-preparation",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "SHA каждого файла совпадает; бренд прочитан с кадра; неизвестный генератор/провайдер CustomTarasFinal остаётся unknown."
    },
    {
      "id": "R02",
      "title": "Планировать длительность до песни по смысловым блокам",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Проверить фактический LYRICS, семантическую полноту и комфортный спетый дубль. Нельзя исправлять потерю мысли только уменьшением длины."
    },
    {
      "id": "R03",
      "title": "Развести мысль, спетую фразу и карточку титров",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Фраза произносится и поётся целиком с понятным адресатом и сказуемым; ASR служит указателем, слух разрешает спор."
    },
    {
      "id": "R04",
      "title": "Создавать дыхание и музыкальные развороты до фиксации песни",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Слушающий критик подтверждает реальный отдых, не отсутствие оценки высоты тона. Кадр несёт функцию и во время паузы."
    },
    {
      "id": "R05",
      "title": "Паспортировать вокальную драматургию, а не только BPM",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Полный трек и локальные A/B-фрагменты слушаются отдельно от технической оценки. Pitch spread и RMS не доказывают эмоцию."
    },
    {
      "id": "R06",
      "title": "Отделить похожесть музыки от художественной состоятельности",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Гармонический алгоритм не определяет генератор и не отвергает песню автоматически. Новый музыкальный target — отдельное проверяемое решение."
    },
    {
      "id": "R07",
      "title": "Сохранять разговорную цель фразы и проверять ударения в пении",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Понятный смысл сохраняется после песенной редактуры; стресс подтверждён в контексте полной фразы, а не только текстовым знаком."
    },
    {
      "id": "R08",
      "title": "Сжимать формулировку без удаления причины и последствия",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Ни один protected causal event не исчезает; визуальная компенсация не считается сохранённым спетым фактом без явного решения."
    },
    {
      "id": "R09",
      "title": "Сохранить мгновенный полный вокальный хук",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Слух и waveform вместе подтверждают вход; длительность тишины не равна доказательству целого слова."
    },
    {
      "id": "R10",
      "title": "Делать отдельное покрытие для взгляда и ответной реакции",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "На мобильном размере понятно, кто увидел что и что изменилось. Не навязывать всегда три плана или лимит 4.5 секунды."
    },
    {
      "id": "R11",
      "title": "Задать видимую траекторию взгляда на новую проблемную зону",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "В экспортном фрагменте взгляд имеет правильного адресата и последовательность; отдельный crop зоны доступен для проверки."
    },
    {
      "id": "R12",
      "title": "Паспортировать читаемость проблемы в кадре телефона",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Независимый просмотр узнаёт заданную проблему без подписи. Факт видимости шеи сам по себе не считается читаемостью заломов."
    },
    {
      "id": "R13",
      "title": "Согласовать одежду и причёску с показом результата",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "В каждом утверждении результата зона реально открыта; скрытое состояние имеет объяснение и отдельное видимое доказательство в нужном beat."
    },
    {
      "id": "R14",
      "title": "Состояния должны сохраняться между всеми появлениями",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Нет преждевременного результата до действия продукта; окончание полностью решает утверждённую проблему в рамках допустимого косметического результата."
    },
    {
      "id": "R15",
      "title": "Сохранить одну визуальную систему между лицом и крупным планом кожи",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Before/result остаются тем же человеком и тем же визуальным миром. Красивое молодое лицо не считается успешной косметической трансформацией."
    },
    {
      "id": "R16",
      "title": "Назвать физический поворот эмоции внутри каждого значимого действия",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Без титров различим нужный речевой акт: жалость, обида, любопытство, признание. Камера и движение рта не заменяют реакцию."
    },
    {
      "id": "R17",
      "title": "Заканчивать действие и оставлять осмысленное удержание",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Нет обрезанного жеста или необъяснённого зависания; замедление не превращает действие в неподвижный постер."
    },
    {
      "id": "R18",
      "title": "Ритм оценивать по событиям, а не по одному среднему плану",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Только очищенные интервалы идут в статистику; необычный долгий кадр получает просмотр по содержанию, не автоматический fail."
    },
    {
      "id": "R19",
      "title": "Передавать в FILM фактический паспорт принятой песни",
      "phase": "song-to-film-handoff",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Паспорт размечен по финальному принятому master, а не по черновику/таймкодам оригинала. Все ссылки и диапазоны входят в этот файл; предполагаемые паузы отделены от услышанных. При другой версии песни прежний handoff недействителен. После picture assembly проверяется неизменность принятого soundtrack и выбранные смысловые смещения."
    },
    {
      "id": "R20",
      "title": "Сохранить state-fades, но проверять наложенные лица",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Чистые before/result читаются отдельно; в середине нет непреднамеренного гибрида лиц. Длительность выбирается по фактическому материалу."
    },
    {
      "id": "R21",
      "title": "Паспортировать изменение упаковки как изменение действия",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Предмет не телепортируется, анатомия и направление движения правдоподобны. Бренд и факты относятся к текущему goPure SKU."
    },
    {
      "id": "R22",
      "title": "Проверять читаемую этикетку и экранное доказательство продукта",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Бренд читается на экспортном телефоном кадре и совпадает с утверждённой упаковкой; мелкие надписи не выдумываются."
    },
    {
      "id": "R23",
      "title": "Титр поддерживает фразу и не скрывает лицо, шею или руку",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Все слова читаются и соответствуют звуку; лицо/зона/действие остаются доступны; численный reading-rate только диагностический до проверки человеком/моделью."
    },
    {
      "id": "R24",
      "title": "CTA завершает историю в своём ритме",
      "phase": "music-before-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Конец слушается как естественная кода; последняя фраза и карточка не обрываются. Проверить всю информацию и фактический срок чтения."
    },
    {
      "id": "R25",
      "title": "Сохранять продуктовую правду и локализацию при переносе мастерства",
      "phase": "source-preparation",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Никаких неподдерживаемых гарантий, чужой формулы, вывода гражданства по внешности или удаления защищённых требований. Текущую формулу проверяют до новой генерации."
    },
    {
      "id": "R26",
      "title": "Не превращать один исходный план в обязательный один заказ",
      "phase": "film-after-lock",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Все исходные события сохранены независимо от числа заказов. Никаких 43/217 как универсальных констант для следующего оригинала."
    },
    {
      "id": "R27",
      "title": "Сначала проверять измерительный инструмент",
      "phase": "all-phases",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Некорректные данные дают unknown, а не pass/fail. Research-утилита dna_measurement_integrity.py уже воспроизводит найденную ошибку; production gate пока предложен."
    },
    {
      "id": "R28",
      "title": "Проверять улучшения в порядке «песня → lock → видео»",
      "phase": "ordered-validation",
      "contract": "references/music-first-execution.md",
      "implementationStatus": "contract-integrated; output-pending",
      "newOutputEvidence": [],
      "requiredCheck": "Результат не объявляется 10/10 по среднему баллу. Ошибка/неизвестный POST сохраняются, одинаковая покупка не повторяется."
    }
  ]
}
