docs: full documentation refresh post-24kk2 — README status (application decoded to formulas, dual 0.193), AGENTS phase header + env-flags/tools tables, NEXT_PROMPT rewrite (cascade simulator + campaign recipes), PLAN/roadmap gate=BIT EXACT decision recorded
This commit is contained in:
+66
-50
@@ -1,58 +1,74 @@
|
||||
# PROMPT FOR NEXT SESSION (2026-08-24, после 24d)
|
||||
# PROMPT FOR NEXT SESSION (2026-08-25, после 24kk2)
|
||||
|
||||
Продолжаем bit-exact реверс soothe2 в /home/m/re-tools (ветка main, HEAD 135f0e9).
|
||||
Продолжаем bit-exact реверс soothe2 в /home/m/re-tools (ветка main).
|
||||
ГЕЙТ СМЕНЫ КАНОНА = BIT EXACT (решение пользователя): все параметры
|
||||
прослежены до декомпа + корпус в шумовом пол. До тех пор канон не трогаем.
|
||||
|
||||
ПРОЧИТАТЬ ПЕРВЫМ: AGENTS.md → handoff/NOTES_LEVEL.md обновления 23d–24d
|
||||
(прорыв и смена парадигмы) → BLOCKMAP_529fe0.md + приложение 23b.
|
||||
Не опираться на roadmap-разделы про Шаги 7/9 и на вывод 23k «build-once» —
|
||||
он ОТЗЫВАН в 24c.
|
||||
ПРОЧИТАТЬ ПЕРВЫМ: AGENTS.md (фаза-заголовок 24kk2 + env-флаги + инструменты)
|
||||
→ handoff/NOTES_LEVEL.md обновления 24j–24kk2 → BLOCKMAP_529fe0.md
|
||||
(дополнения 23b/24l/24hh/24ii).
|
||||
|
||||
СОСТОЯНИЕ КАНОНА: не тронут — голая цепь 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).
|
||||
ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ДО ФОРМУЛ:
|
||||
```
|
||||
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 — потребитель кернела и источник ×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.40–1.45 c жизни хоста)
|
||||
при ГАРАНТИРОВАННО свежем рендере (render_fresh в логе обязателен!).
|
||||
ОТЗЫВАНО И НЕ ВОЗВРАЩАТЬСЯ: ×1.805-свёртка [23e], OLA-нормировка [24i],
|
||||
двухстадийный γ₀ как множитель закона [24m — это артефакт двух тонов],
|
||||
клампы параметров [24dd], B∝am [24bb], axpy-семантика th2000 [24ii — это
|
||||
array-multiply], «acc_i += bands[i]» шага 12 [24gg — это COPY].
|
||||
|
||||
ИНСТРУМЕНТЫ: 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.
|
||||
## ЗАДАЧА №1: каскадный симулятор шагов 9–19 (оп-за-опом)
|
||||
|
||||
СРЕДА (грабли, всё проверено болью):
|
||||
- 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 (выравнивание сегментов обязательно).
|
||||
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).
|
||||
|
||||
КОНТРОЛЬНЫЕ ЧИСЛА 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+).
|
||||
Метод проверки: собрать симулятор в 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+).
|
||||
|
||||
Reference in New Issue
Block a user