Files
soothe2-re/handoff/NEXT_PROMPT.md
T

4.9 KiB
Raw Blame History

PROMPT FOR NEXT SESSION (2026-08-24, после 24d)

Продолжаем bit-exact реверс soothe2 в /home/m/re-tools (ветка main, HEAD 135f0e9).

ПРОЧИТАТЬ ПЕРВЫМ: AGENTS.md → handoff/NOTES_LEVEL.md обновления 23d–24d (прорыв и смена парадигмы) → BLOCKMAP_529fe0.md + приложение 23b. Не опираться на roadmap-разделы про Шаги 7/9 и на вывод 23k «build-once» — он ОТЗЫВАН в 24c.

СОСТОЯНИЕ КАНОНА: не тронут — голая цепь 48k/4096 + RT_LAWAFFINE=7.4,1.85, TOTAL 1.931 (bridge-гейт 1.594 не пройден). Отвергнуто и НЕ возвращаться: скалярные законы A/S, двухфакторные quad/resrp, точечные lvl=f(am,res^α) [22x теорема], спрединг IDFT→окно→DFT как постобработка [22z], плоский IIR [22u], симметричная log-свёртка [23c].

ГЛАВНЫЙ ПРОРЫВ СЕРИИ (23d–23e, живые снапы rendersnap.py): bands[] = сырой спектр кадра → log(DESIGN 0x1802a24c0) → ops → scratch@540628 → FIR@540668 = exp(0.984·scratch) поточечно; окно = падающая половина периодического Hann(4096) на [n/2..n); применение = свёртка ×1.805 (EMPIRICAL, константа по всем 4 точкам ±0.5%). Центр не зависит от q живьём; Δскайрт сходится в 3%. q-серия снята (NOTES 23f).

ПРИОРИТЕТ №1 — потребитель кернела и источник ×1.805: Conv-движок опознан: объект ctx+0x540530 (inline-cfg {2,4096},{16384,8192}, {2,257}; векторы +0xb8..+0x130; методы dc30 cfg / fe00 resize / dd30 dtor — прямые вызовы из init 52e9b0). Его PROCESS-метод не найден: все 390 disp32- ссылок на таблицу слотов учтены, скрытых нет (23h). Пути: (а) отладить scan2.py (лежит в /tmp/opencode, НЕ закоммичен; баг: тот же алгоритм что rendersnap.py даёт пусто — сравнить пошагово); (б) декод аудио-клея 52exx–52fxx + поиск caller'ов vtbl+6 у соседнего экземпляра (гипотеза GUI/DSP-пары, 24c); (в) INT3-ловушка на тела дизайна в param-окно (~1.401.45 c жизни хоста) при ГАРАНТИРОВАННО свежем рендере (render_fresh в логе обязателен!).

ИНСТРУМЕНТЫ: scripts/rendersnap.py (рабочий канал наблюдения — STOP-семпл офлайн-рендера), qseries.py, amseries.py (нужен фикс стабильности фаз), ilt_resolve.py, fnexec.py (early-arm HW exec-bp), perfbp.py (только native), fnwatch4.py (дисциплина армирования: INTERRUPT→wait→arm→CONT каждому треду). Сборка: touch dsp/framed_model.cpp && cmake --build dsp/build --target render48k framed_test (TOOLING HAZARD — touch обязателен). Метрика только честная: render_parity.load (24-bit!), Гёрцель по последним 0.75 c.

СРЕДА (грабли, всё проверено болью):

  • HW-ловушки внутри wine НЕВОЗМОЖНЫ: wine держит BP-слоты (perf ENOSPC), ptrace-DR пишется в task_struct но не программируется в кремний [24a];
  • yabridge: сотни мёртвых сокет-директорий /run/user/1000/yabridge-* ломают спавн хоста — rm -rf перед серией; pkill -f самоубийственно для шелла;
  • kill reaper во время рендера оставляет ЧАСТИЧНЫЙ wav с полной шапкой (источник «флака»); realtime-playback мёртв (нет аудио-девайса);
  • выход рендера длиннее входа из-за LOOP=1 (выравнивание сегментов обязательно).

КОНТРОЛЬНЫЕ ЧИСЛА dual_b1q_0.5: cut@500=10.32 дБ (константен ∀q), cut@2000=11.82; Δcut скайрта ≈ линейно по −ln res (b≈2.25 дБ/e-fold). Цель раунда: опознать потребителя кернела → декодировать ×1.805 → начать RT_FIRCONV=1 (обработка покадровая — 24c; кернел перестраивается каждый кадр, ловушки на цепь молчат из-за wine-слотов, см. 24a). Корпус с гейтом --vs-bridge после любого изменения C++. Коммитить по подшагам; факты в NOTES_LEVEL (следующий номер UPDATE 24e+).