# PROMPT FOR NEXT SESSION (2026-08-25, после 24kk2) Продолжаем bit-exact реверс soothe2 в /home/m/re-tools (ветка main). ГЕЙТ СМЕНЫ КАНОНА = BIT EXACT (решение пользователя): все параметры прослежены до декомпа + корпус в шумовом пол. До тех пор канон не трогаем. ПРОЧИТАТЬ ПЕРВЫМ: AGENTS.md (фаза-заголовок 24kk2 + env-флаги + инструменты) → handoff/NOTES_LEVEL.md обновления 24j–24kk2 → BLOCKMAP_529fe0.md (дополнения 23b/24l/24hh/24ii). ## СОСТОЯНИЕ ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ: ``` mask(b) = 10^(−cut_D(b)/20) вещественная, per-bin multiply кадра cut_D(b) = α·ln1p(lvl_raw(b)/β)+c [+Δ вторые пики] lvl_raw = am/res·scale наш фронтенд, float-parity ✓ слой = STFT БЕЗ синтез-окна RT_SYN=1 ``` Калибровки (rms ≤0.016 дБ): ``` dual fc500 q0.5 s12 ДВА тона : α=3.2193 β=0.4927 c=+0.54 fc1000 q0.5 s12 ОДИН тон : α=1.6151 β=0.3645 c=+0.48 fc500 q0.5 s12 ОДИН тон : α=1.1530 β=0.4038 c=+0.33 ``` Корпус: dual **0.193 max 0.438** с флагами `RT_VLAW=1 RT_SYN=1 RT_NOWARP=1 RT_NOIIR3=1 RT_IIR12=0`. Канон TOTAL 2.286 нетронут. ОТЗЫВАНО И НЕ ВОЗВРАЩАТЬСЯ: ×1.805-свёртка [23e], OLA-нормировка [24i], двухстадийный γ₀ как множитель закона [24m — это артефакт двух тонов], клампы параметров [24dd], B∝am [24bb], axpy-семантика th2000 [24ii — это array-multiply], «acc_i += bands[i]» шага 12 [24gg — это COPY]. ## ЗАДАЧА №1: каскадный симулятор шагов 9–19 (оп-за-опом) Dataflow декодирован (BLOCKMAP 24hh/24ii): ``` vec698 *= (xmm12−[54087c]) ; обнуление при дефолтах vec6f8 += 0.8 ; базовая линия bigkernel(vec6f8, bands_i, vec6f8) vec6f8 = bands_curve − ACC_i ; COMBINE (dc40: out=rdx−r10) f6f8_верх += ATT[k]·ACC[k]; низ += REL[k]·ACC[k] ; тройки re/im/coef COPY(...) ; шаг 12 = memcpy! bands += (−1.0); bigkernel in-place ; центрирование+нелинейность bands *= track_i; bands *= kWarp ; th2000 = array-multiply IIR4 ×2; финальные scale/op → bands[i] → design log → scratch → FIR → audio multiply exp(scratch) ``` Тела bigkernel'ов по рантайм-адресам: 1803a06a0/180296c80/180323f20/1802dc0e0 (x87 exp-семейство). Коэффициенты IIR-генератора 533340 исправлены (насыщающая форма arg=|c|·g/n; p=[54087c]=1, mult=360, C=1000). Метод проверки: собрать симулятор в Python (numpy), прогнать lvl_raw из tract_* через каскад, сравнить с deepest-scratch кривыми sc_* — rms < 0.05 дБ = замкнулось. Затем перенос в C++. ## ЗАДАЧА №2: параметризация α(контент)/fc α удваивается с числом тонов (частотное смешение шаблонно-локальное — далёкий тон не влияет, 24ll). Инструмент: scripts/campaign.py (ячейка ≈8 мин). Двухтональная дистанционная серия уже снята (sc_d*, инверсия не сошлась — нужен каскад из Задачи №1 сначала!). ## СРЕДА (грабли, всё проверено болью) - rendersnap2.py: RENDER_FILE брать ИЗ rpp (клоны наследуют путь — однажды перезаписали реф); каталоги снапов задавать уникальные (argv[3]). - touch+mtime перед каждым замером (same-second cmake hazard). - tone1k.wav громче dual.wav в 2.28× — при сравнении серий учитывать. - Свип НЕ годится для Y/X-отношения; только мультитон/мультиуровень. - Динамика V(t)↔g(t) на рампе не сходится — пары только из стационара. - HW-ловушки под wine невозможны (wine держит слоты); INT3 требует дисциплины fnwatch4 и ГАРАНТИРОВАННО свежего рендера. - Метрика только честная: render_parity.load / Гёрцель последних 0.75 c. - Коммитить подшагами; факты → NOTES_LEVEL (очередной номер 24ll+).