ADFACTORY / SONG / ITERATION 3 · LET IT BREATHE17.09.2026 · 08f0d414c5

Тот же goPure · тот же Targ как вдохновение · новая песня, которая дышит

Итерация 3 песни goPure Україна — «пусть песня дышит»

План изменений и гипотез с гейтами и предсказанным трендом; публикуется до первой покупки. Ниже — как каждая фраза владельца стала метрикой, гейтом и строкой кода; измеренное состояние v0 → v1 → v2 против Targ; девять гипотез с рисками и fallback; точные правки кода; эскизы трёх вариантов; таблица gates с предсказанным трендом; план покупок.

Статус: план опубликован до первой покупки. Генерация начинается после публикации, если владелец не прокомментирует план. Оценка владельца здесь никем не присваивается.

01 / Слова → измеримые требования

Как я понял задачу

Каждая фраза из §0–§2 брифа переведена в метрику, гейт и место в коде. Главный сдвиг: Targ больше не часы и не таблица целей — он вдохновение и доказательство; гейты меряют дыхание (паузы между мыслями), бюджет информации, форму с возвратами и контур, а инварианты владельца (ударения, настоящее пение, все факты заказа, первое спетое слово, запрет фрагментации) остаются P0.

Слова владельцаМетрикаГейтГде в коде
locked to its clock and density, the Ukrainian song could not breatheRests ≥ 0,6 с на границах мыслей (доля), медианная пауза между словами, слог/с по секциямrestBoundaryShare ≥ 0,80 (P0); maxSectionRate ≤ 3,2 (P0); sungRate ≤ 2,8 (P0-гипотеза)tools/song_breathing.py (новые строки), formPlan.restAfter в плане, protectedThoughtMap только как карта смысла (sourceAudioRange информативно)
We did not separate concepts with pausesПауза после каждой завершённой мысли: план помечает границы мыслей, измерение считает паузу ≥ 0,6 с именно тамrestBoundaryShare (P0), restMedian ≥ 0,8 с (P1), «пауза только на границе, не после каждой строки» → fragmentation-строка (P0)music_first.validate_form_plan: thoughtBoundary/restAfter на каждой фразе; song_breathing.rests_at_boundaries
especially at the end we stuffed many words and facts into a short timeКода: один факт на фразу, пауза ≥ 0,5 с после каждого из шести фактов (бренд, форма, осмотр, оплата после, 60 дней, ссылка)codaFactsRested = 6/6 (P0); codaRate информативноformPlan.codaLayout (factId ↔ phraseId ↔ restAfter), song_breathing.coda_facts; директива [Outro] с half-time
sounded like narration, not like a songСлепой вердикт «song, not narration» (P0), возвраты хука ≥ 3 (P0), подъём припева ≥ 2 полутона (P1), доля фраз без высоты ≤ 10 % (P1), долгие ноты на ключевых словах разрешеныblindSongVerdict (P0), hookReturns ≥ 3 (P0), chorusLift (P1), lowPitchedPhraseShare (P1); строки sustained05/heldNonFocus сняты с гейтовformPlan.hookLine + sections.kind; review_round.py: явные вопросы рецензентам; targets v01 с priority=info для старых строк
clear pauses between thoughts, so it is obvious when the melody goes up and when it comes downПлан контура по секциям и фразам (up/down/same, кульминация) и его измерение медианами высоты фраз после дубляcontourStepMatch ≥ 0,6 (P1), climaxPlacement (P1), codaSettles (P1)formPlan.contour (section shape + phrase step), song_breathing.contour_rows на строках phrases[].medianMidi/p90Midi/endSlope из song_gates
absolute freedom over timing, tempo, key, form, length, arrangement, section order and deliveryТемп/тональность/форма/длительность — параметры варианта, не гейты; длительность информативноduration → info; songGateTargets (Targ-relative) → info; seed как вдохновение: audioWeight 0,35–0,60 вместо 0,88pipeline.json: songFormPlanRequired, songBreathingTargets, retiredSongGateRows; formPlan.tempoBpm/key/seedDecision; cover-env AW/SW/WC на вариант
check the trend of improvement before spending creditsПредсказание каждой breathing-строки из текста и плана до POST; таблица v0 → v1 → v2 → предсказание → измереноpurchase only if every breathing row moves in the wanted direction and no invariant regresses (кроме контрольного варианта — объявленное исключение)preparation/predict_v3.py (из design JSON), trend-таблица в плане и отчёте; director-purchase-vNN.json ссылается на предсказание
natural Ukrainian, correct word stress on every word … real singing throughoutLedger ударений 100 % до POST; ASR-совпадение строк ≥ 95 %; слепой вердикт «спето»stressLedger (P0, до покупки), asrLineMatch ≥ 0,95 (P0), blindSongVerdict (P0)без изменений: tools/song_stress.py, scripts/lines_check.py; новый rubric в панели текста
no telegraphic fragments, no [Instrumental answer] after every line, no gaps for their own sakeДоля фраз ≤ 2 слов ≤ 10 %; инструментальных промежутков ≥ 1 с не больше числа границ секций + 2; паузы ≥ 1 с не более чем после 35 % фразnoFragmentation (P0)song_breathing.fragmentation; validate_form_plan: fillAfter только на границах секций (≤ sections+1)

02 / Где мы — измерено, не почувствовано

Targ · v0 · v1 · v2 на планируемых строках

Word clocks only: Targ from the canonical Video DNA raw ASR words (faster-whisper on the original); Ukrainian versions from the accepted performed-song passports (ASR word spans on the master clock, ±0.25 s). Phrases = lyric lines (Ukrainian) or punctuation/segment splits of the ASR (Targ). Rest = gap between consecutive words ≥ 0.6 s. Section rate = syllables ÷ summed phrase durations inside the section (sung span). Pitch/arrangement rows are measured separately on audio.

СтрокаTargv0v1v2 (принята)gate
Длительность, с194,49197,73203,24197,10info
Слогов (спетых)576714701665info
Фраз (строк)94466059info
Спетый интервал, с (сумма фраз)176,92184,98193,63184,29info
Слог/с по спетому интервалу3,263,863,623,61sungRate
Самая плотная секция, слог/с3,644,704,134,61maxSectionRate
Пауз ≥ 0,6 с между словами9563restCount
Доля границ фраз с паузой ≥ 0,6 с0,100,000,100,03restBoundaryShare
Медианная пауза между словами, с0,000,000,000,00info
Возвраты хук-строки (≥ 4 слова, ≥ 3 позиции, ≥ 20 с)0000hookReturns
Фактов коды с паузой ≥ 0,5 с после0/00/60/60/6codaFactsRested
CV скорости по фразам0,330,210,270,24phraseRateCV
Доля фраз ≤ 2 слов0,220,020,020,02noFragmentation
Инструментальных промежутков ≥ 1 с (аудио)054info
Нот ≥ 0,5 с (аудио; больше не гейт)82011info
Разброс регистра фраз, полутона (аудио)12,007,2011,80info
Вокал − музыка, худший блок, dB (аудио)-1,00-4,400,70vocMinusMusicWorst
Плотность по секциям (слог/с по спетому интервалу): версия 2 против Targ. Вторая половина версии 2 (Лариса, банка, зміна) не отдыхает; Targ везде ниже 3,7, а кода — 1,8.
12345цель ≤ 3,2 (P0)вся песня ≤ 2,8targ: setup 3.33,3v2: setup 3.643,64завязкаtarg: store 3.643,64v2: store 3.193,19крамницяtarg: mentor 3.33,3v2: mentor 4.614,61Ларисаtarg: care 3.623,62v2: care 3.913,91банкаtarg: change 3.133,13v2: change 3.923,92змінаtarg: return 2.822,82v2: return 3.593,59червеньtarg: selfworth 2.762,76v2: selfworth 2.922,92свояtarg: cta 1.781,78v2: cta 3.333,33кодаTargверсия 2
Паузы ≥ 0,6 с между словами на шкале времени: у Targ 9, у версий 0/1/2 — 5/6/3. Дыхание Targ происходит «под голосом» (drops), но и слов у него меньше на секунду.
Targtarg: пауза на 19.2 сtarg: пауза на 61.66 сtarg: пауза на 70.48 сtarg: пауза на 79.74 сtarg: пауза на 91.98 сtarg: пауза на 116.14 сtarg: пауза на 135.32 сtarg: пауза на 163.14 сtarg: пауза на 165.54 с9 паузv0v0: пауза на 3.33 сv0: пауза на 16.5 сv0: пауза на 72.81 сv0: пауза на 139.53 сv0: пауза на 173.26 с5 паузv1v1: пауза на 4.04 сv1: пауза на 21.62 сv1: пауза на 39.64 сv1: пауза на 86.12 сv1: пауза на 91.24 сv1: пауза на 126.32 с6 паузv2v2: пауза на 75.2 сv2: пауза на 173.64 сv2: пауза на 187.92 с3 пауз0 с30 с60 с90 с120 с150 с180 с

Послушать рядом

English Targ · 10/10 владельца3:14.5 · 128 kbps · постоянный gain, без ретайминга
UA версия 2 · принята агентом3:17.1 · 128 kbps · постоянный gain, без ретайминга

Громкость выровнена постоянным gain; без ретайминга.

Что уже принуждает к копированию Targ и снимается для новой песни
  • pipeline.json songGateTargets (17 строк, измеренных на Targ) как acceptance → становятся информативными (priority info), acceptance — новая таблица дыхания;
  • protectedThoughtMap.sourceRange как часы → только карта смысла: каждая из 39 мыслей должна быть спета, её время свободно;
  • 103 BPM и «no intro, speech-shaped patter» в design/style → темп, жанр и стиль — параметры варианта;
  • строка duration ≤ 205 с → информативно;
  • sustained05 и heldNonFocus (наказывали пение) → информативно; остаётся только проверка ударения «нет мелизмы на безударном последнем слоге»;
  • композиционный обзор «близость к источнику» → обзор песенности: кандидаты против друг друга и против v2.

03 / Гипотезы

H1–H9: изменение · где живёт · гейт · предсказание · риск · fallback

H1

Форма песни

Возвращающийся материал: куплет / предприпев / припев (A) или короткий рефрен-вопрос (B); хук-строка возвращается ≥ 3 раз с изменённым концом; рифма и стабильный размер внутри секции; нарративные строки переписаны в спетые, не проговорены.

Где живёт
song/design-<variant>.json → formPlan.sections[].kind, hookLine, hookPhraseIds; music_first.validate_form_plan; теги [Verse]/[Pre-Chorus]/[Chorus]/[Bridge]/[Outro] в lyrics; style-промпт
Гейт
hookReturns ≥ 3 (P0); chorusLift ≥ 2 st (P1); blindSongVerdict (P0)
Предсказание
A: 3 возврата («Я дивлюсь у дзеркало»), B: 3 («Дивлюсь на себе — і що я бачу?»), C: 0 (контроль)
Риск
Suno может спеть припев на той же высоте, что куплет (chorusLift < 2) или изменить слова хука; рефрен в B может прозвучать как повтор без развития.
Fallback
Изменённый конец хука защищает от механического повтора; если лифта нет — вариант A2 с явной директивой [Chorus — higher, full voice] и SW ↑.
H2

Информационный бюджет

Одна мысль — одна музыкальная фраза (39 мыслей → 44–50 фраз включая хук и коду); пауза после каждой завершённой мысли; слогов 520–560 (A), 480–520 (B) вместо 665; кода — один факт на фразу с паузой после каждого.

Где живёт
design.phrases[].thoughtBoundary/restAfter; formPlan.syllableBudget по секциям; validate_form_plan отвергает секцию > бюджета + 10 %; song_breathing.rests_at_boundaries / section_rates / coda_facts
Гейт
restBoundaryShare ≥ 0,80 (P0); maxSectionRate ≤ 3,2 (P0); sungRate ≤ 2,8 (P0-гипотеза); codaFactsRested 6/6 (P0)
Предсказание
A: 0,86 / 3,3 / 2,95; B: 0,84 / 3,4 / 3,05; C: 0,80 / 4,3 / 3,5. Честно: ≤ 2,8 по всей песне при 550 слогах требует ~200 с спетого интервала, т. е. ~230–240 с песни; cover наследует длину сида (194 с) — это тестируется в раунде 1.
Риск
Cover Suno может ужать 550 слогов в 195 с (тогда rate ≈ 3,3) или проигнорировать паузы; ≤ 2,8 может оказаться недостижимым без сокращения до ~470 слогов.
Fallback
Раунд 2: (а) вариант A-lean ≈ 470 слогов (слияние t02+t03, t05+t06, t20, t28, t30, t36+t37; список ингредиентов → два спетых + два визуальных) — гипотеза со сбросом факта в визуальный канал, дефолтный вариант A сохраняет все факты; (б) пересмотр цели с доказательством (слепой вердикт «дышит» при 3,0).
H3

Контур

Письменный план up/down для каждой секции и фразы: где мелодия поднимается, где садится, где кульминация; паузы как шарниры. Заменяет таблицу регистров Targ как авторитет регистра.

Где живёт
formPlan.contour: sections[].shape (rise|arch|level|fall|peak) + climaxPhraseId; phrases[].contourStep (up|down|same); измерение: song_gates phrases[].medianMidi/p90Midi/endSlope → song_breathing.contour_rows
Гейт
contourStepMatch ≥ 0,6 (P1); climaxPlacement = планируемая секция (P1); codaSettles: медиана коды ≤ медиана припева − 2 st (P1); chorusLift (P1)
Предсказание
A: кульминация в припеве 3 на «свою»; лифт припева +3…+5 st; кода −3 st. B: кульминация в третьем рефрене; C: без припева — контур как у v2 (registerSpread 11,8) → climaxPlacement неопределён.
Риск
Медианы фраз на стемах Demucs ± 1 полутон; Suno не читает стрелки — контур управляется структурными тегами и словами директив.
Fallback
Строки контура — P1: не блокируют, но входят в отчёт и в выбор между дублями.
H4

Пение

Долгие ноты на ключевых словах разрешены и желательны; строки sustained05 и heldNonFocus сняты с гейтов (информативно); «нет мелизмы на безударном последнем слоге» остаётся проверкой ударения.

Где живёт
references/song-breathing-targets-v01.json (priority info для sustained05/sustainedTimeShare/heldNonFocus); stressLedger + слепые вопросы о слышимом ударении; performancePlan.syllableEconomy.holdAllowed — по слову на фразу остаётся
Гейт
stressLedger 100 % (P0, до POST); lowPitchedPhraseShare ≤ 0,10 (P1); blindSongVerdict (P0)
Предсказание
Нот ≥ 0,5 с вырастет с 11 до 20–35 — это желаемо; heldNonFocus не считается.
Риск
Долгие ноты на безударных окончаниях (-ла/-ого) — реальная ловушка украинского; ловится слепым вопросом «які слова розтягнуті» и правилом holdAllowed.
Fallback
Раунд-правка директив: hold только на фокусных словах фразы (уже в performancePlan).
H5

Аранжировка дышит

Паузы, drops, филлы и инструментальные ответы только там, где форма просит: между секциями, перед припевом, перед брендом; никогда после каждой строки.

Где живёт
formPlan.sections[].fillAfter (bool) — validate_form_plan: fillAfter ≤ число секций; performancePlan.arrangementEvents 1–6 при наличии formPlan (stop|thin|air-before|fill); song_breathing.fragmentation (instrumentalSpans ≤ sections+2; доля фраз с паузой ≥ 1 с ≤ 35 %)
Гейт
noFragmentation (P0); airBeforeBrand ≥ 1,2 с (P1, сохранено); instrumentalSpans информативно
Предсказание
A: 6 филлов (после V1? нет — после PreCh, Ch1, V4, Ch2, Bridge, перед Outro) ≈ 6 промежутков ≥ 1 с; B: 4; C: 5.
Риск
Suno добавляет длинные проигрыши (в раунде 3 версии 2 тег [Instrumental] дал 9,6 с) → длительность растёт и доля спетого падает.
Fallback
Филлы описаны словами «one bar», без тега [Instrumental]; при проигрыше > 4 с — same-take edit (cut-before-brand уже есть в mix_candidate).
H6

Свобода музыки

Темп, тональность, жанр и сид свободны. A: баллада 90 BPM с настоящим припевом; B: фолк-поп 112 BPM с рефреном; C: v2-текст на 96 BPM. Сид: cover на точном оригинале Targ (packet без изменений), но audioWeight 0,35 (A) / 0,40 (B) / 0,60 (C) вместо 0,88–0,90; styleWeight 0,75 / 0,70 / 0,55.

Где живёт
song/cover-<variant>-environment.json (AW/SW/WC, STYLE, NEG, DUR); formPlan.tempoBpm/key/seedDecision; reference-packet без изменений (excerpt travels as inspiration evidence)
Гейт
Измерение темпа дубля (librosa beat) и длительности — информативно; решение по сиду подтверждается тем, что темп/длина дубля перестают совпадать с Targ (103,4 BPM, 192–203 с)
Предсказание
Все v0–v2 при AW 0,88–0,90 вышли ровно на 103,4 BPM и 192–203 с — сид был часами. При AW ≤ 0,40 ожидаем 88–96 BPM (A) и 108–116 (B); длина 195–230 с.
Риск
При низком AW cover может потерять жанровую опору оригинала (уходит в другой жанр); при высоком — снова часы Targ. «Без сида» невозможно в gen2.py и противоречит правилу «фрагмент оригинала едет в каждом запросе».
Fallback
Сетка AW 0,35 → 0,50 в раунде 2 по измеренному темпу; STYLE несёт явный BPM и жанр.
H7

Генерация текста

Панель текста заново вокруг рубрики песенности: singability, rhyme, refrain, breath (одна мысль — одна фраза), stress naturalness, information budget; лирики → судьи → опровергатели; композиционный обзор сравнивает кандидатов друг с другом и с текстом v2, не с таймингом источника.

Где живёт
preparation/panel/ (промпты и ответы, workflow-агенты), song/design-<variant>-drafts.json, design-verdicts; reviews/composition-v01 (Gemini: полный источник как аудио + текст кандидатов; вопросы о песенности, не о близости часов)
Гейт
Композиционный обзор accepted-by-agent (validate_plan); stressLedger 100 %; предсказанные строки (H9) до POST
Предсказание
Панель даёт 2 черновика на вариант + черновик режиссёра; судьи выбирают/склеивают по рубрике; опровергатели ловят ударения, референты, ложные claims.
Риск
Панель может «улучшить» текст в сторону поэзии в ущерб продаже (advertorial) — судьи проверяют карту 39 мыслей.
Fallback
Карта мыслей t01–t39 обязательна в каждой фразе (meaningIds); validate_plan не пропустит непокрытую мысль.
H8

Гейты

Новая таблица «дыхания» измеряется расширением tools/song_gates.py (--form план → строки rests/density/hook/contour/coda/fragmentation/pitch); P0 = инварианты §2 + breathing-строки; старые Targ-относительные строки — информативно.

Где живёт
tools/song_breathing.py (новый модуль, вызывается из song_gates при --form), references/song-breathing-targets-v01.json (priority P0/P1/info, targets с основанием), tests/test_song_breathing.py
Гейт
см. таблицу gates ниже
Предсказание
Риск
ASR-часы ± 0,25 с влияют на подсчёт пауз 0,6 с (порог близок к неопределённости); стем-VAD подтверждает паузы независимо от ASR.
Fallback
Пауза засчитывается, если её подтверждают и ASR-часы, и вокальный стем (VAD < −32 dB); при расхождении — значение из стема.
H9

Тренд до покупки

Из текста и плана предсказать каждую строку (слоги по секциям, запланированные паузы, возвраты хука, контур, длительность при заданном темпе) и положить рядом с измеренными v0 → v1 → v2 и Targ; покупать только когда каждая breathing-строка движется в нужную сторону и ни один инвариант не регрессирует; после каждого раунда добавлять измеренное в ту же таблицу.

Где живёт
preparation/predict_v3.py → analysis/predicted-<variant>-vNN.json; таблица тренда в плане (/plan/) и отчёте (/); director-purchase-vNN.json.prediction
Гейт
Условие покупки (см. §7); контрольный вариант C — объявленное исключение: плотность не движется по построению
Предсказание
A и B: все breathing-строки движутся (rests 3 → ~38–40, доля границ 0,03 → 0,85, плотнейшая 4,6 → 3,3, хук 0 → 3, кода 0/6 → 6/6); длительность 197 → 215–235 с (свободная переменная).
Риск
Предсказание — модель «слоги на такт при темпе»; провайдер может не подчиниться. Поэтому раунд 1 — по одному запросу (два дубля) на вариант, затем измерение до следующего POST.
Fallback
Если после раунда 1 измеренная строка не движется — версия решения режиссёра с конкретным рычагом (текст/директивы/параметры), не повтор.

04 / Код и пайплайн

Точные файлы

ФайлИзменениеЧто даётЧто снимает
tools/song_breathing.py (новый)Функции измерения: rests_at_boundaries (ASR-часы + стем-VAD), section_rates по formPlan.sections, hook_returns по hookLine, coda_facts (факт ↔ фраза ↔ пауза после), fragmentation, contour_rows (chorusLift, climaxPlacement, contourStepMatch, codaSettles), low_pitched_share; собирает строки с priority/target из references/song-breathing-targets-v01.jsonИзмеримое «дыхание» и «песенность» на каждом дубле до прослушиванияНичего; чистое расширение
tools/song_gates.pyАргумент --form <song-plan v3>: добавляет breathing-строки к таблице; --targets может помечать строки priority=info (не считаются в passed/p0Failed); блоки берутся из formPlan.sections, а не из BLOCK_STARTSОдин gates.json на дубль с обеими таблицами (новая P0/P1 + старая информативная)BLOCK_STARTS как единственный источник границ; duration ≤ 205 как P0
tools/music_first.pyvalidate_form_plan(plan): sections[].kind/phraseIds/contour/fillAfter/syllableBudget; hookLine ≥ 4 слов, hookPhraseIds ≥ 3 в разных секциях; phrases[].thoughtBoundary/restAfter (restAfter на ≥ 80 % границ мыслей); codaLayout: шесть factId ↔ phraseId с restAfter; tempoBpm 60–160; seedDecision{mode:cover, audioWeight ≤ 0,6, rationale}; contour steps; проверка бюджета слогов по тексту фраз. Схема adfactory.song-plan/v3 = v2 + formPlan; validate_plan(new_purchase=True) требует v3 при pipeline.songFormPlanRequired; validate_performance_plan при formPlan допускает 1–6 arrangementEvents с kinds stop|thin|air-before|fillgen2.py отказывает в покупке без плана формы и дыхания«ровно 1–3 события» как жёсткое правило (при formPlan); registerPlan остаётся, но не как таблица Targ
references/song-breathing-targets-v01.json (новый) + references/song-breathing-contract.md (новый)Таблица строк: id, label, target, direction, priority (P0/P1/info), basis (владелец 2026-09-17 H2/H8 и измеренные v0–v2/Targ); контракт с определениями измерений и правилом пересмотра цели с доказательствомЦели с происхождением; старые Targ-строки читаемы как inforuns/targ-delta-…/gate-targets-targ.json как acceptance (остаётся info)
pipeline.jsonsongFormPlanRequired: true; songBreathingTargets; songBreathingContract; retiredSongGateRows [sustained05, sustainedTimeShare, heldNonFocus, duration]; songGateTargetsPolicy: «Targ-relative rows informational since 2026-09-17»; ownerDecision 2026-09-17Политика читается gen2/music_first
.agents/skills/song-clone-ua/SKILL.md, references/music-first-execution.md §9, generation_contracts.mdРаздел «Уточнение владельца 2026-09-17: пусть песня дышит»: форма, бюджет, паузы, контур, сид как вдохновение, снятые строки, отклонённый эксперимент остаётся запретом. После правки SKILL.md — обновить canonicalRequirements.songCloningSkill.sha256 в манифесте run (иначе gen2.py откажет)Правила действуют в следующих сессиях103 BPM / «no intro, speech-shaped patter» как обязательный стиль
runs/targ-song-v3-08f0d414c5-v01/preparation/*.py (адаптированы из runs/targ-ten-c06fb16085-v01/preparation/)build_v3.py VARIANT (design → lyrics/ledger/plan v3 с formPlan+performancePlan+предсказанием); predict_v3.py; preflight_v3.py review/close/env; purchase_round.py (тег = вариант+раунд, measure_take с --form); measure_take.py; mix_candidate.py (блоки из formPlan); review_round.py (вопросы: песня или нарратив, паузы между мыслями, разборчивость коды, где мелодия вверх/вниз, кто дышит лучше; вложения: Targ (по контракту), v2, кандидаты); finalize_v3.py (passport v2 + measured gates на вариант); build_delivery.py; tools/build_song_v3_report.py (план /plan/, отчёт /); tools/verify_song_v3_report.pyТот же измеряемый цикл покупки с новыми гейтами и несколькими вариантамиprepare_roundN скрипты, привязанные к тексту v2
tests/test_form_plan.py, tests/test_song_breathing.py (новые)Валидатор формы (валидный план, мало возвратов хука, паузы < 80 %, факт коды без паузы, бюджет слогов, filler после каждой строки); метрики на синтетических часах (паузы, секции, хук, кода, фрагментация, контур)Регрессия при правках
Не удаляется: старые таблицы целей, планы v2, квитанции и отчёты версий 1 и 2 остаются читаемыми; они больше не гейты для этой итерации.

05 / Эскиз песни по вариантам

Секции, мысли, паузы, контур, бюджет, хук, кода, темп, сид, стиль

Эскизы фраз — черновик режиссёра для бюджета и формы; финальный текст пишет панель (лирики → судьи → опровергатели) по рубрике песенности с картой 39 мыслей и ledger ударений. Числа в скобках — слоги. Честная арифметика: при ≤ 2,8 слог/с эскиз A на 545 слогов даёт 4:20 — поэтому панели задан бюджет 480 (A) и 460 (B) слогов, а секция «Лариса» (диалог) — главный риск для строки «самая плотная секция ≤ 3,2».

Вариант A

Балада з приспівом

Темп / тональность
88–92 BPM, 4/4 · D-dur / h-moll (по выбору модели; в STYLE — «D major»)
Жанр
украинская акустическая баллада: гитара, фортепиано, лёгкие струнные, мягкие щётки
Форма
V1 · PreCh · V2 · Ch1 · V3 · V4(slow) · V5 · Ch2 · Bridge · Ch3(climax) · Outro(half-time)
Хук
«Я дивлюсь у дзеркало — і бачу …» ×3 с изменённым концом (колишню / не вірю / свою ціную)
Текст
новый текст панели по бюджету H2; все шесть фактов коды и четыре ингредиента спеты
Сид
cover на точном Targ, AW 0,35 · SW 0,75 · WC 0,15
STYLE (Suno)
Ukrainian acoustic ballad with a real chorus, 90 BPM, 4/4, D major. Intimate female lead sung on a clear melody from the very first word, no instrumental intro. Verses tell the story in complete sentences; after every finished thought the voice rests for a beat while the band keeps time. The chorus «Я дивлюсь у дзеркало» lifts higher, full voice, and returns three times with a changed last line. Long notes on key words. Band answers only between sections. One bar of guitar before the brand; then a half-tempo outro: one fact per phrase, a rest after each, every word sung.
Negative tags
spoken word, narration, rap, recitation, instrumental intro, rushed lyrics, fast patter, mumbling, choir, heavy drums, EDM, autotune, reverb wash, fade-in
Зачем
проверить H1+H2+H3 одновременно: настоящий припев, паузы, контур
СекцияЭскиз фраз (слоги)СлоговКонтур (вверх / вниз / кульминация)Паузыслог/с прогноз
[Verse 1]
Зустріч · t01, t02, t03, t04, t05, t06, t07, t08
Зустріла дружину колишнього. (10)
Їй тридцять чотири. В очах — жаль. (9)
Був березень. (4)
Шістнадцять років — і він пішов до колеги. (13)
Банально, я знаю. (6)
Гарна — час її ще не торкнувся. (10)
А я за пів року — старша на п’ять літ. (11)
63level-low → up на «жаль» → пауза → аside низко «Був березень» → подъём на «шістнадцять» → спад на «колеги» → низко «Банально» → спад до «п’ять літ»rests 7/7 (после каждой фразы)3,00
[Pre-Chorus]
Слід (причинная ячейка) · t09
Стрес лишає слід. (5)
Сльози лишають слід. (6)
Тримати дітей — це теж лишає слід. (11)
22три ступени вверх: каждая ячейка на ступень выше, «слід» падает; после третьей — пауза-шарнирrests 1/3 (ячейка — одна мысль; пауза после третьей) · филл после2,44
[Verse 2]
Крамниця · t10, t11, t12, t13, t14, t15
У суботу в крамниці — лосини, пучок, без косметики. (17)
Знов крем. Я пробувала все. (8)
І голос її — з сусіднього ряду. (11)
Вийшла. Погляд по шиї — дві секунди. (11)
Не злість. Гірше. Жалість. (6)
Наче я — та, кого він любив колись. (11)
64mid ровно (список) → спад «все» → подъём на «голос» → задержка на «дві секунди» → пауза → низко-сухо «Жалість» → спад «колись»rests 6/63,00
[Chorus]
Дзеркало I · t16, t17, t18, t19
П’ятнадцять хвилин у машині. (9)
Злилась не на неї — на себе. (9)
Я дивлюсь у дзеркало — і бачу колишню. (13)
На шиї — смуги, заломи, сухість. (10)
І світло в мені згасло. (7)
48high: подъём на «машині» → «на себе» вершина припева → хук на верхней плоскости, «колишню» садится → перечисление ниже → «згасло» самая низкая нота секции, долгаяrests 5/5; хук #1 · филл после2,44
[Verse 3]
Лариса · t20, t21, t22, t23, t24
Того тижня чекала доньку з танців. (11)
Лариса там щодня: п’ятдесят п’ять — а шия гладенька. (16)
Питаю: «Чим ти користуєшся?» (10)
Сміється: «А ти що наносиш?» (9)
«Кислоти, сироватки, креми — все підряд». (12)
«Стій. Не все підряд. Доглядай щодня». (10)
68низкая подводка → mid факт → вопрос вверх (мелодическая игра, hold на -ту́-) → Лариса ниже и суше → список mid быстро → «Стій» stop-event, совет ровноrests 6/6; stop на «Стій» · филл после3,38
[Verse 4 — slower]
Банка · t25, t26, t27
Назавтра дала мені банку — крем, якого я не знала. (17)
Купуасу, гіалурон, оливні ліпіди, кофеїн. (17)
На чисту шию — тонко, вгору, щовечора. Не міняй. (16)
Без печіння, без лущення. Комфортно. (11)
61спокойно low-mid; ингредиенты чётко на ступенях; ритуал ровно; «Комфортно» — тёплая долгая нотаrests 4/4 · филл после2,63
[Verse 5]
Три тижні · t28, t29
Три тижні — і біля дзеркала: смуги менш помітні. (15)
Донька каже: «Мамо, ти інакша. Світліша». (13)
28mid → дочь светлее и выше; пауза перед припевомrests 2/2; fill перед припевом · филл после3,00
[Chorus]
Дзеркало II · t30, t31
А за шість — я дивлюсь у дзеркало — не вірю. (13)
Шия гладенька. Ні смуг, ні заломів. (11)
Десять років такою не була. (10)
І з відкритою шиєю — на люди. (11)
45high: хук #2 на той же плоскости, «не вірю» вверх; «гладенька» держится; спад к «на люди» с открытым звукомrests 4/4; хук #2 · филл после2,44
[Bridge]
Червень · t32, t33, t34, t35
У червні — концерт доньчиного класу. (11)
Дружина Андрія сіла неподалік. (12)
Знов той погляд: не жалість — розгубленість. (11)
Після концерту: «Ти гарно виглядаєш… до речі». (15)
Та сама, через яку я сиділа в машині. (14)
63mid, стаккато отрицаний; «до речі» брошено низко после паузы; «в машині» — спад и пауза-шарнир перед кульминациейrests 5/5 · филл после3,00
[Chorus — climax]
Дзеркало III · t36, t37
Я сказала «дякую» — і справді так відчувала. (15)
Не тому, що її думка важить — (10)
я дивлюсь у дзеркало — і свою ціную. (13)
38кульминация песни: подъём к «свою» (самая высокая и долгая нота), «ціную» садится и завершает кадансrests 3/3; хук #3 (климакс) · филл после2,44
[Outro — half-time]
Ґоу П’юр · t38, t39
Крем називається Ґоу П’юр. (9)
Ім’я і номер — у формі. (8)
На пошті оглянь — платиш потім. (9)
Повернення — шістдесят днів. (8)
Якщо потрібно — посилання внизу. (11)
45mid-low, ровно, каждый факт — падающий каданс с паузой ≥ 0,5 с; один такт гитары перед брендом; последняя строка тише, спетаrests 5/5 (после каждого факта)1,88

Итого эскиза: 545 слогов, 50 фраз, 48/50 границ с паузой; прогноз 2,69 слог/с по спетому, самая плотная секция 3,38, длительность 262,00 с. Бюджет панели: 480 слогов → Бюджет панели 480 слогов (эскиз режиссёра 545 — верхняя граница, сжать на 12 %): та же плотность на такт, короче спетый интервал; прогноз длительности при бюджете 237,80 с.

90 BPM; слогов на такт по типу секции: {'verse': 8.0, 'prechorus': 6.5, 'chorus': 6.5, 'bridge': 8.0, 'coda': 5.0, 'Лариса': 9.0, 'Банка': 7.0}; пауза 0.75 с на запланированной границе мысли; один такт филла на отмеченных границах; +2 с хвост

Вариант B

Фолк-поп з рефреном-запитанням

Темп / тональность
110–114 BPM, 4/4 · G-dur (в STYLE — «G major»)
Жанр
светлый фолк-поп: акустические гитары, мандолина, ручная перкуссия, тёплый бас
Форма
V1 · R1 · V2 · V3 · R2 · V4 · V5(softer) · V6 · R3 · Bridge(climax) · Outro(half-time)
Хук
«Дивлюсь на себе — і що я бачу?» ×3 с ответом в одно слово (слід / Колишню / Себе): мелодическая игра вопрос-ответ
Текст
новый текст панели, короче A (≈ 500 слогов); гипотеза H2b: спеты купуасу и гіалурон, оливні ліпіди и кофеїн — визуальный канал (fallback: строка A)
Сид
cover на точном Targ, AW 0,40 · SW 0,70 · WC 0,20
STYLE (Suno)
Ukrainian folk-pop, 112 BPM, bright acoustic guitars, mandolin, hand percussion, warm bass. Female lead sung from beat one, no intro. Every thought is one complete sung phrase followed by a short rest; a playful refrain question «Дивлюсь на себе — і що я бачу?» returns three times with a new one-word answer, the melody rising on the question and settling on the answer. Instrumental fills only at scene changes, never after every line. Half-time outro: the brand and each ordering condition on its own phrase with a rest between them, all sung.
Negative tags
spoken word, narration, rap, recitation, instrumental intro, rushed lyrics, fast patter, mumbling, choir, EDM, autotune, reverb wash, fade-in
Зачем
музыкально другой ответ на тот же бюджет: быстрее, рефрен вместо припева, игра вопрос-ответ
СекцияЭскиз фраз (слоги)СлоговКонтур (вверх / вниз / кульминация)Паузыслог/с прогноз
[Verse 1]
Зустріч · t01, t02, t03, t04, t05, t06, t07, t08
Зустріла дружину колишнього — їй тридцять чотири. (16)
Глянула так, наче їй мене жаль. (10)
Був березень. (4)
Шістнадцять років шлюбу — і він пішов до колеги. (15)
Банально, знаю. Гарна, бо час її не торкнувся. (15)
А я за пів року — на п’ять літ старша. (11)
71ровный пульс, фразы по 2 такта; подъём на «жаль»; аside низко; спад к «старша»rests 6/63,03
[Refrain]
Рефрен I · t09
Дивлюсь на себе — і що я бачу? (10)
Стрес, сльози, діти — все лишає слід. (10)
20вопрос вверх (игра), ответ падает; хук #1rests 2/2 · филл после2,10
[Verse 2]
Крамниця · t10, t11, t12, t13, t14, t15
Субота, крамниця, лосини, пучок, без косметики. (16)
Знов крем — я пробувала все. (8)
Її голос — із сусіднього ряду. (11)
Вийшла. Погляд по шиї, дві секунди — усмішка. (14)
Не злість. Ще гірше — жалість. (7)
Наче я — та, кого він любив колись. (11)
67mid → спад → подъём «голос» → задержка → низко «жалість» → спадrests 6/63,03
[Verse 3]
Машина · t16, t17, t18, t19
П’ятнадцять хвилин у машині. (9)
Злилась не на неї — на себе в дзеркалі. (12)
На шиї — смуги, заломи, сухість. (10)
І світло в мені згасло. (7)
38сжато к низу; «згасло» долгая низкаяrests 4/4 · филл после3,03
[Refrain]
Рефрен II · хук
Дивлюсь на себе — і що я бачу? (10)
Колишню. (3)
13вопрос вверх, ответ одно слово низко; хук #2rests 2/2; fill · филл после2,10
[Verse 4]
Лариса · t20, t21, t22, t23, t24
Того тижня чекала доньку з танців. (11)
Лариса — п’ятдесят п’ять, а шия гладенька. (13)
Питаю: «Чим ти користуєшся?» (10)
Сміється: «А ти що наносиш?» (9)
«Кислоти, сироватки, креми — все підряд». (12)
«Стій. Не все підряд. Доглядай щодня». (10)
65подводка low → вопрос вверх → Лариса ниже → список → «Стій» stoprests 6/6; stop · филл после3,50
[Verse 5 — softer]
Банка · t25, t26, t27
Назавтра — банка. Крем, якого я не знала. (13)
Купуасу й гіалурон — тонко, вгору, щовечора. (16)
Без печіння, без лущення. Комфортно. (11)
40low-mid спокойно; «Комфортно» долгая; гипотеза H2b: оливні ліпіди й кофеїн — визуальный канал (fallback: строка варианта A)rests 3/3 · филл после2,80
[Verse 6]
Зміна · t28, t29, t30, t31
Три тижні — біля дзеркала: смуги менш помітні. (14)
Донька: «Мамо, ти інакша. Світліша». (11)
А за шість — не вірю: шия гладенька, ні смуг, ні заломів. (17)
Десять років такою не була — і з відкритою шиєю на люди. (21)
63подъём по фразам к «на люди»; пауза перед рефреномrests 4/4; fill · филл после3,03
[Refrain]
Рефрен III · хук
Дивлюсь на себе — і що я бачу? (10)
Себе. (2)
12вопрос вверх, ответ тёплый выше, чем «Колишню»; хук #3rests 2/2 · филл после2,10
[Bridge]
Червень · t32, t33, t34, t35, t36, t37
У червні — концерт доньчиного класу; дружина Андрія — неподалік. (21)
Знов той погляд: не жалість — розгубленість. (11)
Після концерту: «Ти гарно виглядаєш… до речі». (15)
Та сама, через яку я сиділа в машині. (14)
Я сказала «дякую» — і справді так відчувала. (15)
Не тому, що її думка важить — а тому, що свою ціную. (19)
95стаккато отрицаний → «до речі» брошено низко → кульминация на «свою» (высшая нота песни) → спад «ціную»rests 6/6; climax · филл после3,03
[Outro — half-time]
Ґоу П’юр · t38, t39
Крем — Ґоу П’юр. (4)
Залиш ім’я і номер у формі. (10)
Оглянь на пошті — оплата потім. (10)
Шістдесят днів на повернення. (9)
Посилання внизу — якщо тобі потрібно. (13)
46half-time; каждый факт — падающий каданс с паузой; бренд ещё раз последним словом? — нет: бренд один раз, «посилання» последнееrests 5/51,87

Итого эскиза: 530 слогов, 46 фраз, 46/46 границ с паузой; прогноз 2,80 слог/с по спетому, самая плотная секция 3,50, длительность 240,40 с. Бюджет панели: 460 слогов → Бюджет панели 460 слогов (эскиз режиссёра 530 — верхняя граница, сжать на 13 %): та же плотность на такт, короче спетый интервал; прогноз длительности при бюджете 208,90 с.

112 BPM; слогов на такт по типу секции: {'verse': 6.5, 'refrain': 4.5, 'bridge': 6.5, 'coda': 4.0, 'Лариса': 7.5, 'Банка': 6.0}; пауза 0.7 с на запланированной границе мысли; один такт филла на отмеченных границах; +2 с хвост

Вариант C

Контроль: текст v2 в дышащей форме

Темп / тональность
96 BPM · как выберет модель
Жанр
акустический фолк-поп, ближе к сиду
Форма
девять секций v2 с тегами [Verse]/[Bridge]/[Outro], без припева; паузы после каждой строки-мысли; филлы только между секциями
Хук
нет (по построению)
Текст
текст v2 дословно (665 слогов, 59 фраз, тот же ledger ударений слов; изменены только директивы в скобках)
Сид
cover на точном Targ, AW 0,60 · SW 0,55 · WC 0,10
STYLE (Suno)
Ukrainian acoustic folk-pop, 96 BPM, no intro, female lead sung on a clear melody throughout. Unhurried: after every sentence the voice rests for a beat; instrumental fills only between scenes. Full-voice sung dialogue, list and order block; half-time outro with a rest after each fact.
Negative tags
spoken word, narration, rap, recitation, instrumental intro, instrumental answers after every line, melisma on word endings, reverb wash, choir
Зачем
отделить эффект музыки/аранжировки от эффекта текста: тот же текст, что v2, только форма и темп

Контроль: 665 слогов, 59 фраз (текст версии 2 дословно); прогноз 3,45 слог/с, самая плотная секция 4,30, длительность 221,80 с, доля границ с паузой 0,50.

96 BPM с текстом v2 (665 слогов): v2 пела 9,3 слога на такт при 103 BPM; при 96 BPM и той же плотности слов ожидаем ≈ 3,45 слог/с; паузы заложены после каждой строки, но текст не оставляет места — предсказана половина границ; пять филлов по такту; секция «Лариса» v2 предсказана 4,3

06 / Матрица вариантов

Два музыкально разных варианта и контроль

A · балада з приспівомB · фолк-поп з рефреномC · контроль (текст v2)
Темп88–92 BPM, 4/4110–114 BPM, 4/496 BPM
ТональностьD-dur / h-moll (по выбору модели; в STYLE — «D major»)G-dur (в STYLE — «G major»)как выберет модель
Жанрукраинская акустическая баллада: гитара, фортепиано, лёгкие струнные, мягкие щёткисветлый фолк-поп: акустические гитары, мандолина, ручная перкуссия, тёплый басакустический фолк-поп, ближе к сиду
ФормаV1 · PreCh · V2 · Ch1 · V3 · V4(slow) · V5 · Ch2 · Bridge · Ch3(climax) · Outro(half-time)V1 · R1 · V2 · V3 · R2 · V4 · V5(softer) · V6 · R3 · Bridge(climax) · Outro(half-time)девять секций v2 с тегами [Verse]/[Bridge]/[Outro], без припева; паузы после каждой строки-мысли; филлы только между секциями
Хук«Я дивлюсь у дзеркало — і бачу …» ×3 с изменённым концом (колишню / не вірю / свою ціную)«Дивлюсь на себе — і що я бачу?» ×3 с ответом в одно слово (слід / Колишню / Себе): мелодическая игра вопрос-ответнет (по построению)
Текстновый текст панели по бюджету H2; все шесть фактов коды и четыре ингредиента спетыновый текст панели, короче A (≈ 500 слогов); гипотеза H2b: спеты купуасу и гіалурон, оливні ліпіди и кофеїн — визуальный канал (fallback: строка A)текст v2 дословно (665 слогов, 59 фраз, тот же ledger ударений слов; изменены только директивы в скобках)
Сид и весаcover на точном Targ, AW 0,35 · SW 0,75 · WC 0,15cover на точном Targ, AW 0,40 · SW 0,70 · WC 0,20cover на точном Targ, AW 0,60 · SW 0,55 · WC 0,10
Зачемпроверить H1+H2+H3 одновременно: настоящий припев, паузы, контурмузыкально другой ответ на тот же бюджет: быстрее, рефрен вместо припева, игра вопрос-ответотделить эффект музыки/аранжировки от эффекта текста: тот же текст, что v2, только форма и темп

Контроль C держит текст версии 2 дословно и меняет только форму, темп и паузы, чтобы после раунда 1 отделить эффект музыки от эффекта текста: если C дышит, а плотность не падает — дело в тексте; если A/B дышат лучше C при равной аранжировке — дело в бюджете и форме.

07 / Gates и предсказанный тренд

P0 / P1 / info: Targ · v0 · v1 · v2 · прогноз A / B / C

P0 блокируют слепые прослушивания и владельца; P1 входят в выбор между дублями и в отчёт; info — читается, не судит. Цели ≤ 2,8 и ≤ 3,2 — стартовые гипотезы владельца: подтверждаются, уточняются или заменяются с доказательством после раунда 1.

СтрокаПриоритетЦельTargv0v1v2прогноз Aпрогноз Bпрогноз CОснование
Слепой вердикт: песня, не нарратив; спето насквозьP0«sung throughout» и «song, not narration» у всех рецензентовsungsungsungsung (rounds 3–4 recited)sungsungsung§2 владельца; измеряется слепым Gemini-обзором
Ledger ударений: все слова разрешены до POSTP0100 %100 %100 %100 %100 %100 %100 % (ledger v2)§2; tools/song_stress.py
ASR: доля совпавших строкP0≥ 0,950,98≥ 0,95≥ 0,95≥ 0,95§2 разборчивость; scripts/lines_check.py
Доля границ мыслей с паузой ≥ 0,6 сP0≥ 0,800,100,000,100,030,961,000,50H2; для базовых версий граница = конец строки текста
Пауз ≥ 0,6 с (между словами, до последнего слова)P1≥ 0,8 × запланированных9563484658H2
Самая плотная секция, слог/с по спетому интервалуP0≤ 3,23,644,704,134,613,383,504,30H2 (сейчас 4,6–5,1 в зависимости от сегментации)
Вся песня, слог/с по спетому интервалуP0 (гипотеза, пересмотр с доказательством)≤ 2,83,263,863,623,612,692,803,45H2; предсказание A/B 2,9–3,05 — движение в нужную сторону, цель ≤ 2,8 проверяется на дублях
Возвраты хук-строки (≥ 4 слова, ≥ 3 позиции ≥ 20 с)P0≥ 30000330H1; C — контроль без хука
Факты коды спеты, каждый с паузой ≥ 0,5 с послеP06/62/3 (brand, link, if-you-need)0/60/60/66/66/66/6§2 условия заказа; H2 кода
Без фрагментации: фраз ≤ 2 слов ≤ 10 %; промежутков ≥ 1 с ≤ секций + 2; пауза ≥ 1 с не более чем после 35 % фразP0все три0,22 / 0 / —0,02 / — / —0,02 / 5 / —0,02 / 4 / —0,00 / ≤ 8 / ≤ 0,20,04 (ответы рефрена) / ≤ 6 / ≤ 0,20,02 / ≤ 7 / ≤ 0,3§2 отклонённый эксперимент 2026-09-15
Первое слышимое событие — спетое слово хука (после обрезки затакта)P0вокал ≤ 0,3 с от начала мастера0,00,00,00,00,00,00,0§2; master_candidate trim
Медиана высоты припева/рефрена − медиана куплетов, полутонаP1≥ 2— (нет припева)+3…+5+2…+4 (вопрос)H3
Фраза с наивысшим p90 — в запланированной секции кульминацииP1да«sympathetic/first» (V2) и «use?»«свою» (план) — измерено p90 72 на «опора»Ch3 «свою»Bridge «свою»selfworth «свою»H3
Доля запланированных шагов up/down/same, совпавших с медианами фраз (± 1 st)P1≥ 0,6≥ 0,6≥ 0,6H3
Медиана коды ≤ медиана припева − 2 stP1дада (кода 1,8 слог/с, низко)дадаH3/H2
Медианная пауза на границах мыслей, сP1≥ 0,80,781,061,111,140,8–1,20,7–1,00,7H2
CV скорости подачи по фразам (разнообразие темпа речи)P1≥ 0,350,330,210,270,24≥ 0,35≥ 0,350,3из дельта-анализа; медленные payoff против быстрых списков
Доля фраз с pitched-share < 0,15 (прокси речитатива)P1≤ 0,100,15≤ 0,10≤ 0,10≤ 0,15H4; метрика на стемах — только прокси, вердикт даёт слепой обзор
Вокал − музыка, худший блок кроме коды, dBP1≥ −1-1,00-4,400,70≥ −1 (remix при нужде)≥ −1≥ −1микс из дельта-анализа; same-take remix доступен
Воздух без слов перед брендом, сP1≥ 1,22,300,002,27≥ 1,2 (один такт)≥ 1,2≥ 1,2H5
Длительность, с (свободная переменная)info194,49197,73203,24197,10237,80208,90221,80§0 свобода; cover наследует длину сида — измерить
Слоговinfo576714701665480460665бюджет H2
Нот ≥ 0,5 с (снято с гейтов; долгие ноты желательны)info8201120–3515–2512–20H4
Разброс медиан фраз (10–90 перц.), полутона (info)info12,007,2011,80≥ 10≥ 10~11бывшая P0-строка Targ
Темп дубля, BPM (info: проверка сида как вдохновения)info103,40103,40103,40103,4088–92110–11494–100H6
Правило тренда (H9). Покупка варианта разрешена, когда каждая breathing-строка (restBoundaryShare, maxSectionRate, sungRate, hookReturns, codaFactsRested) движется от v2 в нужную сторону по предсказанию и ни один инвариант (stress, ASR, факты, первое событие, фрагментация) не регрессирует. Контрольный вариант C — объявленное исключение: плотность и хук не движутся по построению; он покупается один раз ради разделения эффектов текста и музыки.

Прогноз A/B — при бюджете панели (480/460 слогов) и модели «слогов на такт по типу секции»; C — по плотности v2 при 96 BPM. После каждого раунда измеренные значения добавляются в эту же таблицу в отчёте.

08 / План покупок и бюджет

Раунды, кредиты, стоп

Раунд 1
Три запроса cover V6 (A, B, C) по два дубля — 36 кредитов; все шесть дублей измеряются до прослушивания (lines_check + song_gates --form); слепой whole-обзор (Targ по контракту + v2 + до двух кандидатов) для дублей, прошедших P0, ~1 кредит на обзор.
Раунд 2+
На вариант — версия решения режиссёра с конкретным рычагом (текст-lean 470 слогов / директивы / AW-сетка / темп); не более трёх раундов на вариант (≤ 108 кредитов на вариант); same-take remix бесплатно для строк микса.
Прослушивания
Whole-обзор на кандидата + «кто дышит лучше» сравнение (кандидаты + v2) + локальные пары (Лариса, кода) — ≤ 15 кредитов.
Бюджет
Баланс на старте 121 140 кредитов; потолок сессии 400 кредитов (≈ 3 %); фактический расход ведётся в song/credits-ledger-v01.json.
Когда можно остановиться
Стоп (§6): хотя бы один кандидат спет насквозь по слепому обзору, паузы на запланированных границах ≥ 80 %, плотнейшая секция ≤ цели, хук возвращается, все факты коды разборчивы с паузой, ledger и ASR-строки, предпочтён v2 слепыми рецензентами по «song, not narration» и «breathes», без флагов фрагментации.

Что явно не меняется

Ссылки