docs: archive 4024стр NOTES_LEVEL, единый источник TOTAL README, runbook AGENTS, 3-шаг план
- handoff/NOTES_LEVEL.md 4413→397 (голова 24mm5+), хвост → handoff/archive/NOTES_LEVEL_2026-08-18_2026-08-23.md - handoff/NOTES_LEVEL_INDEX.md NEW навигатор, handoff/archive/ whitelist .gitignore - SESSION_HANDOFF/summary → archive + редиректы, NOTES_TWIN/NOTES_CAPTURE сжаты - README.md:13 единственный источник TOTAL 1.594/dual 0.193, AGENTS runbook, BITEXACT_PLAN 9→3 шага (каскад 9-19/k-маппинг/Δ)
This commit is contained in:
@@ -1,34 +1,8 @@
|
||||
# AGENTS.md — guide for AI agents working in this repo
|
||||
# AGENTS.md — runbook for AI agents working in this repo
|
||||
|
||||
Bit-exact реверс DSP-ядра oeksound soothe2 (VST3) → транскрипция на C++18 в `dsp/`.
|
||||
Полное журналирование — в `handoff/NOTES_LEVEL.md`, `handoff/NOTES_TWIN.md`,
|
||||
`handoff/NOTES_CAPTURE.md`, `roadmap.md`.
|
||||
|
||||
> **Текущая фаза (2026-08-27, v1.0):** ПРИМЕНЕНИЕ ДЕКОДИРОВАНО ФОРМУЛАМИ:
|
||||
> аудио = побиновое умножение кадра на вещественную маску `10^(−cut_D/20)`,
|
||||
> `cut_D = α·ln1p(lvl_raw/β)+c` (+Δ у вторых пиков). VLAW параметризация по (fc, q, sens):
|
||||
> - res (fc=300-700, q=1.0): α=5.0, β=0.3
|
||||
> - t1kq (fc=800-1200, q<1.0): α=4.0, β=0.4
|
||||
> - t1k (q≥0.99, fc<1200): α=4.0, β=0.5
|
||||
> - t1k (q≥0.99, fc≥1200): α=4.5, β=0.4
|
||||
> - dual (fc=500, q=0.1-10.0): α=3.2193, β=0.4927, c=0.54, Δ=6.92
|
||||
> - al (sens<12): α=3.5, β=0.3; (sens≥24): α=4.5, β=0.4
|
||||
>
|
||||
> **Результаты v1.0: TOTAL 0.870 dB** (bridge baseline 1.594 dB). Структурная цепь
|
||||
> лучше bridge для t1k, res, dual, comb. Добавлен detector cascade 529c60 (Haar smoothing,
|
||||
> magnitude, peak processing). Реализован exact ln/exp2 (log2_ln.hpp/cpp).
|
||||
> Реализован real RFFT (fft.hpp/cpp), но FIR construction с real RFFT даёт 10.377 dB
|
||||
> (плагин использует нестандартные twiddle операции).
|
||||
>
|
||||
> Ключевые факты: q НЕ влияет на закон (доказано 24kk); sens линейно через
|
||||
> lvl_raw; далёкий контент не влияет — смешение шаблонно-локальное (24ll);
|
||||
> аудио = exp(deepest-scratch)+const; буфер FIR@540668 = мин.-фазовое
|
||||
> представление (exp(s−iH(s))) — не для транскрипции. Тела bigkernel'ов:
|
||||
> 1803a06a0/180296c80/180323f20/1802dc0e0 (x87 exp-семейство, 24jj).
|
||||
>
|
||||
> ОСТАТОК: reverse-engineer plugin's exact twiddle operations (th1a90/th2180)
|
||||
> для bit-exact FIR construction. Журнал: NOTES_LEVEL 24j–24kk2;
|
||||
> карта метода: handoff/BLOCKMAP_529fe0.md. ЭТОТ ФАЙЛ ЧИТАЙ ПЕРВЫМ.
|
||||
> **Статус → `README.md:13` (единственный источник TOTAL).** Этот файл — только runbook: сборка, метрика, env-флаги, tooling hazard.
|
||||
> Полный журнал — `handoff/NOTES_LEVEL_INDEX.md` → `handoff/NOTES_LEVEL.md` (живая голова) + `handoff/archive/`.
|
||||
> Карта метода — `handoff/BLOCKMAP_529fe0.md`. ЭТОТ ФАЙЛ ЧИТАЙ ПЕРВЫМ.
|
||||
|
||||
## Золотое правило (обязательно)
|
||||
1. **Цель — bit-exact реверс кода**, НЕ эмпирическая подгонка кривых. Каждый параметр
|
||||
@@ -88,77 +62,21 @@ err = db(ta(out,1000)/ta(ref,1000)) # err в dB, цель <0.1
|
||||
Тестовый корпус (`/home/m/soothe-bt/`, вне git): `tone1kq.wav`(вход),
|
||||
`t1kq_b1f_<fc>.wav` (рефы), `comb.wav`/`comb_ref.wav` (мультиполосный).
|
||||
|
||||
## Текущее состояние (2026-08-21, P4)
|
||||
|
||||
**ДВА канона в `dsp/framed_model.cpp`:**
|
||||
|
||||
1. **BRIDGE** (эмпирическая погона, путь framed_test 44.1k, NOTES:147):
|
||||
```
|
||||
am_k: smoothed amp (2|X|/wsum, att~11ms/trel~80ms)
|
||||
xv = log10(am_k / res_k) res_k = |2B/A| twin (min@band centre)
|
||||
C = G·LUT(xv) + W·warp(f_k)^A G/W/A = 0.9963/0.3335/0.9807 (fit)
|
||||
gain_k = (1−C) · res_k^rp(Q) rp(Q) = 0.0275·Q^0.2159
|
||||
LUT = monotone cubic (Fritsch–Carlson) через joint-fit узлы (al_* + B.11 anchors)
|
||||
```
|
||||
2. **СТРУКТУРНАЯ цепь FUN_180529fe0** (`process_band_structural`, внутренняя сетка
|
||||
48000/4096 через `dsp/build/render48k`, NOTES_LEVEL:820-840 + апдейты 20j–21c):
|
||||
```
|
||||
scale → LUT level-domain (t^γ·MULT, γ=0.344 decomp / MULT=4.2 placeholder)
|
||||
→ IIR1 → IIR2 → mirror → blend(0.8)/exp2(−lvl) → combine(acc-update, без консюмера)
|
||||
→ dual-warp(kBand768·kWarp·res^rp) → IIR3 bidirectional ×2 → dry/wet(identity)
|
||||
```
|
||||
- **METRIC CRITICAL**: рефы 24-bit НЕЛЬЗЯ читать 16-bit кодеком (даёт phantom −53 dB);
|
||||
`render_parity.load` (sw handling) + окно 3.5s — канон. dual honest ref = −10.2 dB FLAT.
|
||||
- **Broadband-hypothesis ОПРОВЕРГНУТА** (NOTES:2026-08-20s): редукция per-bin.
|
||||
- **Честные результаты**: bridge корпус mean 1.594 (comb 10.15 сломан); структурная цепь:
|
||||
comb **6.12** и res **0.44** — лучше bridge; t1kq 0.77 / t1k 2.11 / al 0.99 / dual 3.26 — хуже.
|
||||
Полная таблица: BITEXACT_PLAN §0 / NOTES_LEVEL:21c.
|
||||
- **ГЛАВНЫЙ ОТКРЫТЫЙ РАЗРЫВ**: насыщение кривой редукции — реальная упирается в C_max≈0.70,
|
||||
exp2(−lvl) не ограничен (dual@500: константный −6.7 dB при всех q). Лечится Шагом 7
|
||||
(live-захват A/B/γ) или статическим hunt'ом clamp'а в level-пути. Слепая подкрутка
|
||||
γ/MULT исчерпана (свип 21c).
|
||||
- **21d — закон редукции найден, канон НЕ сменён**: эффективное ослабление аффинно
|
||||
в dB(lvl) (маска ≈ 0.8·lvl^−0.354; al-свееп ±0.13 dB). Scalar-семейство (X0,S,floor,
|
||||
CMAX) не закрывает тон+шум одновременно → res/dual регресс у любой точки; ищем
|
||||
контент-зависимый механизм. Инструментарий RT_DUMP_BIN / RT_DUMP_ALL в коде (opt-in).
|
||||
|
||||
### Открытые пробелы (после 22z; детали — NOTES_LEVEL 22s–22z)
|
||||
1. **Семантика входов `bands[]` в FUN_180529fe0** — главный вопрос. Отвергнуто:
|
||||
lvl=f(am,res^α) с единым законом [22x, теорема], форма-постобработка маски [22w],
|
||||
спрединг IDFT→окно→DFT [22z]. Живой захват: кривая редукции R=1/mask @слот
|
||||
0x5407f8 (пик следует за fc полосы), acc/f6f8 нули в стационаре.
|
||||
Пути: (а) декод тел conv 0x1802a24c0 + complex-op шагов с буферами
|
||||
0x540548/550/598; (б) синхронная трасса буферов в аудио-колбеке.
|
||||
2. dual-таблица по q (22x): cut@центра константен при любом q, Δcut скайрта ≈
|
||||
линейно по −ln res с b≈2.25 — геометрия twin-шаблона на сетке 0.25 Гц.
|
||||
3. FFT-conv: последовательность вызовов декодирована (BLOCKMAP/22z), тело
|
||||
0x1802a24c0 (AVX2) и complex-op шаги — не расшифрованы.
|
||||
4. Бит-экзактный exp2 (0x26b820); бит-точная DSP-FFT (P3); стерео M8 (P5) — отложены.
|
||||
5. Источник констант RT_LAWAFFINE A/S в декомпе не найден (помечено EMPIRICAL).
|
||||
|
||||
## Структура ключевых файлов
|
||||
- `dsp/framed_model.{cpp,hpp}` — C++ порт mask-apply цепи: bridge-канон + структурная
|
||||
`process_band_structural` (ГЛАВНЫЙ активный файл).
|
||||
- `dsp/render48k.cpp` — пайплайн внутренней сетки 48000/4096 (resample → структурная цепь → resample).
|
||||
- `dsp/framed_test.cpp` — CLI bridge-рендер входа (метрика см. выше).
|
||||
- `scripts/corpus.py` — корпусный харнесс bridge + guard `--compare baseline_bridge.json`.
|
||||
- `scripts/corpus_structural.py` — тот же корпус через render48k + режим `--vs-bridge`.
|
||||
- `dsp/{twin,levelpath,freqpath,fftconv,vlog,leveltrack,fn529fe0}.cpp` — расшифрованные модули.
|
||||
- `dsp/rt_mask_tables.{hpp,cpp}`, `rt_weights.{hpp,cpp}` — live-таблицы.
|
||||
- `handoff/NOTES_LEVEL.md` — полный журнал уровня/маски (самый актуальный).
|
||||
- `handoff/nls_dasm/` — 134 дизассембла декомпа.
|
||||
- `/tmp/consumers_out.txt` — полный decomp `FUN_180529fe0` (уникален, вне git).
|
||||
- `/tmp/snap_rt.bin` — live-снимок (ctx 0x2370040, SR 48000).
|
||||
- `handoff/BLOCKMAP_529fe0.md` — полная блок-карта FUN_180529fe0 по raw asm (22v).
|
||||
- `scripts/lawfit22r.py` — офлайн реплей-сим пайплайна (~2 c корпус), фиты законов.
|
||||
- `scripts/resalpha.py` — сбор трактов + теорема об отсутствии α (22x).
|
||||
- `scripts/dualtrace.py` + `play_loop.lua` — живой захват ctx при realtime-playback (22y).
|
||||
- `dsp/framed_model.{cpp,hpp}` — C++ порт mask-apply цепи (ГЛАВНЫЙ файл).
|
||||
- `dsp/render48k.cpp` — пайплайн 48000/4096 (resample → chain → resample).
|
||||
- `dsp/twin.{cpp,hpp}` — twin FUN_180535880 (float-parity).
|
||||
- `scripts/corpus.py` / `corpus_structural.py` — харнессы + guard `--compare`.
|
||||
- `handoff/NOTES_LEVEL.md` — живой журнал (голова 24mm5+, хвост → `archive/`).
|
||||
- `handoff/NOTES_LEVEL_INDEX.md` — оглавление журнала.
|
||||
- `handoff/BLOCKMAP_529fe0.md` — блок-карта FUN_180529fe0.
|
||||
- `handoff/nls_dasm/` — 134 дизассембла.
|
||||
|
||||
## Env-флаги экспериментов (24j–24kk2)
|
||||
## Env-флаги экспериментов (актуальные)
|
||||
|
||||
| флаг | действие |
|
||||
|------|----------|
|
||||
| `RT_VLAW=1` | закон применённой стадии: mask=10^(−(α·ln1p(lvl/β)+c)/20) |
|
||||
| `RT_VLAW=1` | закон применённой стадии: `mask=10^(−(α·ln1p(lvl/β)+c)/20)` |
|
||||
| `RT_SYN=1` | STFT БЕЗ синтез-окна (найденный слой плагина) |
|
||||
| `RT_WIN=0/1/2` | окно анализа: sym-hann / periodic / rect |
|
||||
| `RT_NOWARP=1` | отключить warp-модуляцию маски |
|
||||
@@ -166,26 +84,26 @@ scale → LUT level-domain (t^γ·MULT, γ=0.344 decomp / MULT=4.2 placeholder)
|
||||
| `RT_IIR12=0` | отключить частотные IIR1/2 (КРИТИЧНО с RT_VLAW — иначе размывают дипы) |
|
||||
| `RT_DUMP_BIN=<f>` (+`RT_DUMP_FRAME=N`) | дамп тракта бина N: am/res/lvl_raw/band_level/prewarp/w |
|
||||
| `RT_VDBG=1` | stderr-печать vlaw-вычислений |
|
||||
| `RT_FAITHFUL=1` | faithful-цепь `dsp/fnfaith.cpp` (детекторный каскад) |
|
||||
| `RT_FIRCONV=1/3` | FIR-применение (1=complex-mul, 3=`1.019·mask^1.8345`) |
|
||||
|
||||
Полный набор dual-решения: `RT_VLAW=1 RT_SYN=1 RT_NOWARP=1 RT_NOIIR3=1 RT_IIR12=0`.
|
||||
|
||||
## Инструменты сессии 24j–24kk2
|
||||
## Инструменты
|
||||
|
||||
| скрипт | назначение |
|
||||
|--------|-----------|
|
||||
| `scripts/rendersnap2.py <rpp> [cap] [outdir]` | мягкий STOP-снаппер: слоты FIR/scratch/bands/R + скалярный банк + t_snap; НЕ убивает reaper; RENDER_FILE из rpp (не удалять чужие рефы!) |
|
||||
| `scripts/campaign.py <base> <fc> <q> <sens> <in_prefix> <drives> <out>` | ячейка параметризации: клоны rpp+рефы (~8 мин) |
|
||||
| `scripts/disasm_func.py <VA> [len]` | capstone-дизасм с инлайн-резолвом RIP-констант |
|
||||
| `scripts/iat_name.py` | рантайм-резолв импортов bigkernel'ов через PE-экспорты (SIGSTOP!) |
|
||||
| `scripts/probe_states.py` / `probe_mem.py` / `dump_dispatch.py` | живые state-заголовки / память / таблицы диспатча |
|
||||
| `scripts/hunt2.py` | перебор всех ctx-инстансов |
|
||||
| `scripts/scan_pairs.py`, `scan_lutsub.py` | диагностика памяти по сигнатурам float-пар |
|
||||
| `scripts/rendersnap2.py <rpp> [cap] [outdir]` | мягкий STOP-снаппер (RENDER_FILE из rpp!) |
|
||||
| `scripts/campaign.py <base> <fc> <q> <sens> <in> <drives> <out>` | ячейка параметризации (~8 мин) |
|
||||
| `scripts/disasm_func.py <VA> [len]` | capstone-дизасм с RIP-константами |
|
||||
| `scripts/iat_name.py` | рантайм-резолв импортов (SIGSTOP!) |
|
||||
| `scripts/probe_states.py` / `probe_mem.py` / `dump_dispatch.py` | live state/память/таблицы |
|
||||
| `scripts/hunt2.py` | перебор ctx-инстансов |
|
||||
| `scripts/scan_pairs.py`, `scan_lutsub.py` | диагностика памяти |
|
||||
|
||||
Датасеты кампании: `/tmp/opencode/sc_{q,sens,qmap,k,f,d}*` + `tract_*` +
|
||||
`{level_pairs,f_series,q_series,k_series}.pkl/.npz` (см. NOTES 24bb–24kk2).
|
||||
Датасеты: `/tmp/opencode/sc_{q,sens,qmap,k,f,d}*` + `tract_*` + `*.pkl/.npz` (см. `NOTES_LEVEL_INDEX.md`).
|
||||
Открытые пробелы → `BITEXACT_PLAN.md`.
|
||||
|
||||
## Чистая работа
|
||||
- Не коммитить: `*.bin`(дампы 112М), `*.wav/rpp`, `*.log`, `dsp/build/`, `ghidra-proj/`,
|
||||
`dl/lib/bin/include/`, `regions*/`. См. `.gitignore`.
|
||||
- После правки C++ — собрать (`cmake --build dsp/build --target framed_test`) и обновить
|
||||
`handoff/NOTES_LEVEL.md`. Fasta метрику держать честной (тримнутая длина).
|
||||
- Не коммитить: `*.bin`, `*.wav/rpp`, `*.log`, `dsp/build/`, `ghidra-proj/`, `dl/lib/bin/include/`, `regions*/`. См. `.gitignore`.
|
||||
- После правки C++ — `touch` исходника + `cmake --build dsp/build --target framed_test` (hazard `AGENTS.md:66`) + `python3 scripts/corpus.py --compare scripts/baseline_bridge.json --tol 0.25`.
|
||||
|
||||
Reference in New Issue
Block a user