- 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-маппинг/Δ)
9.0 KiB
BIT-EXACT PLAN — путь от dB-приближения к побайтовой парности
Статус: НЕ bit-exact. Канон — bridge framed_test 44.1k: TOTAL 1.594 dB (62 случая, trimmed 24-bit, scripts/baseline_bridge.json). Bit-exact достижим (F0 gate: рендеры байт-детерминированы handoff/NOTES_LEVEL.md:1020), но модель — погона. Читать вместе с AGENTS.md и handoff/NOTES_LEVEL_INDEX.md.
2026-08-28 (24mm14): применение декодировано до формул.
mask=10^(−cut_D/20),cut_D=α·ln1p(lvl/β)+c [+Δ]— три семейства, rms ≤0.016.dual0.193 dB (env-gatedRT_VLAW=1 RT_SYN=1 RT_NOWARP=1 RT_NOIIR3=1 RT_IIR12=0), детекторный каскад180529c60+ RFFT до df0 бит-точны,γ=1.760561из цепи. Гейт смены канона = bit-exact (решение24hh2). Остаток: 3 шага ниже.
Цель фазы C: воспроизвести FramedDetector (= FUN_180529fe0 mono-path) до verify_bit_exact.py побайтового совпадения (t1kq_*, dual_*, comb_*).
0. Текущее состояние — ЕДИНСТВЕННЫЙ ИСТОЧНИК README.md:13
Честная trimmed метрика 62 случая (bridge vs structural 48k/4096 corpus_structural.py):
| Группа | bridge mean | bridge max | structural mean | VLAW env-gated mean |
|---|---|---|---|---|
| t1kq (fc-scan) | 0.226 | 0.500 | 0.768 | 0.426–0.852* |
| t1k (loud) | 1.801 | 2.227 | 2.114 | 0.577–0.930* |
| al (level) | 0.638 | 1.596 | 0.986 | 0.090–0.804* |
| res | 0.628 | 1.535 | 0.437 | 0.395* |
| dual (q-sweep) | 0.726 | 2.252 | 3.264 | 0.193 (max 0.438) ✓ |
| comb (4-band) | 10.149 | 14.752 | 6.116 | 2.678–4.335* |
| TOTAL | 1.594 | 14.752 | 2.286 | 0.870–1.931* |
* зависит от калибровки VLAW α/β/c (семейство dual vs fc-зависимая AGENTS.md больше не хранит таблицу — см. README.md:13 и handoff/NOTES_LEVEL.md:3919).
Канон = bridge 1.594 (эмпирика C=G·LUT(xv)+W·warp^A, gain=(1−C)·res^rp). Structural 2.286 обгоняет bridge на comb/res, регрессирует на однополосных — форма кривой редукции неверна. VLAW закрывает dual (0.193) — применённый слой и каскад декодированы.
1. Порядок работ (3 шага, обязательный порядок; каждый валидируется отдельно)
Валидация:
cmake --build dsp/build --target framed_test+python3 scripts/corpus.py+python3 scripts/corpus.py --compare scripts/baseline_bridge.json --tol 0.25(фейлит при регрессе группы >tol). Структурная цепь валидируетсяscripts/corpus_structural.py --vs-bridge. Каждый под-шаг коммитить отдельно.
Шаг 1 — Каскадный симулятор шагов 9–19 FUN_180529fe0 (ПРИОРИТЕТ №1)
Dataflow декодирован handoff/BLOCKMAP_529fe0.md:22v + handoff/NOTES_LEVEL.md:4400:
bands[i] → LOG#1 (140980) → 52d650 (bidir #1) → vec698*= (1−[54087c]) → vec6f8+= [54087c]·0.8
→ DIVIDE vec6f8/bands (1803a06a0) → vec6f8=bands−ACC (dc40) → fma ATT/REL (1fa0/1940, тройки re,im,coef)
→ COPY (1b80) → mirror 9 + bigkernel 140b60 → EXP#1 (1409e0) + −1 → ×track (th2000) → ×warp (th2000)
→ LOG#2 (140980) → IIR4×2 (bidir, log-домен) → EXP#2 → bands_final
→ FIR-секция: DESIGN 1802a24c0 (conv_float_a24c0.dis) → copy → RFFT pair th2180/th1a90 (buf548/598)
→ FIR[1..n/2]*=2.0 → EXP 1803831c0 → WINfreq· → FIR[0]=1 → df0 track⊗FIR → mask
Тела bigkernel'ов резолвлены статически handoff/NOTES_LEVEL.md:3944 (1803a06a0 divide, 180296c80 expf, 1803831c0 табличная кривая, 1803a06a0 etc.; 24mm2 таблица). RFFT до df0 бит-точна 24mm11.
Делать: оп-за-оп транскрипция scripts/cascade_sim.py (numpy-эквиваленты divide/expf с FMA-точностью) → валидация на multi6 (6 нотчей один прогон, handoff/NOTES_LEVEL.md:3809) и sc_* дистанционной серии (rms сейчас 0.42 на угаданных формах). После структуры — C++ порт dsp/fn529fe0.cpp с точными полиномами.
Критерий: каскад воспроизводит B=exp(scratch) из multi6 на всех 6 пиках ±0.05 dB (сейчас rms 0.42), затем dual 0.193 сохраняется без per-семейной калибровки.
Шаг 2 — k-маппинг фронтенда (twin/am)
k = lvl_impl / lvl_ours (handoff/NOTES_LEVEL.md:3436): k(q≥2)=0.403 const, k(sens) экспонента (5.37 при s18, 22.0 при s24). При q=1.0 vs q=0.5 k идентичен — q НЕ влияет на закон (24kk), sens линейно через lvl_raw (24kk). Остаток — twin gain пол (res плагина ≥0.153 vs наш 0.0069) и амплитудная нормировка am (wsum/окно в dsp/spectral.cpp vs декомп FUN_180535880 tail-calls).
Делать: декод FUN_180535880 tail-calls + FUN_180536300 caller (grid NOTES_TWIN.md) до точных twin_coeff/am формул, либо калибровка k(q,sens,fc) по sc_* + tract_* как таблицы с декомп-обоснованием.
Критерий: cross-config α/β/c становятся вычисляемыми, а не фитовыми; sens 6..24 перестаёт требовать per-групповой α.
Шаг 3 — Δ-правило вторых пиков (pre-combine)
Второй контент-пик: cut = α·ln1p(g·lvl/β)+c, g@2000≈12.15 vs g@fc=1.0 (handoff/NOTES_LEVEL.md:3890), но g меняется между прогонами (12.15 vs 1.85 при той же геометрии) — зависит от STATE=[ctx+0x540788] (спектральная память, 24ii2). Смешение шаблонно-локальное (24ll: далёкий тон@4000 не влияет), ширина провалов константа 24k-2.
Делать: серия campaign.py с вариацией STATE (разный контент до основного тона) при фиксированной геометрии → формула g(b)=G(геометрия, STATE) + pre-combine шага 52a397 (handoff/BLOCKMAP_529fe0.md:43).
Критерий: d1500 серия 3.43→4.23 монотонна без отрицательных w(d) (24mm).
2. Что НЕ делать
- НЕ вводить эмпирию где есть декомп (золотое правило
AGENTS.md:33).LCPиMULTбез источника — помечатьEMPIRICAL. - НЕ делать combine в bridge-final-gain домене — F2 регресс 4.68/5.22
handoff/archive/NOTES_LEVEL_2026-08-18_2026-08-23.md:1064. - НЕ читать WAV наивно — только
render_parity.load(bext/junk, 24-bithandoff/NOTES_LEVEL.md:1462). - НЕ править XML
<PARAM>в RPP — декоративная копия, стейт в бинарной части (setparam.lua/patchparam.py). - НЕ свёртка/OLA поверх маски — опровергнуто
24j(A=1.019·V^1.8345= произведение экспонент, не свёртка).
3. Риски и время
- Доминирующий риск — каскад 9–19: 5700 строк AVX-512+FMA (
1803831c0), 10 ядер. Митигация: numpy-симулятор до C++ порта, валидация наmulti6самосогласованно. - Twin/am — multi-week (dispatch ядра 2/4/8, plan-gen
FUN_18002f980). Не блокирует Шаг 1. - Стерео M8 — отложен (все рендеры mono).
- Оценка: Шаг 1 — 1–2 недели, Шаг 2 — 1–2 недели, Шаг 3 — дни. До байтов — 1–2 месяца.
4. Точка входа
AGENTS.md→handoff/NOTES_LEVEL_INDEX.md(живая голова24mm5+) +handoff/BLOCKMAP_529fe0.md.touch dsp/framed_model.cpp && cmake --build dsp/build --target render48k framed_test(hazardAGENTS.md:66).- Бейзлайны:
python3 scripts/corpus.py --compare scripts/baseline_bridge.json --tol 0.25(TOTAL 1.594); VLAW dualRT_VLAW=1 RT_SYN=1 RT_NOWARP=1 RT_NOIIR3=1 RT_IIR12=0→ 0.193. - Инструменты:
scripts/cascade_sim.py(структурная фаза),scripts/rendersnap2.py,scripts/disasm_func.py,scripts/iat_name.py,scripts/campaign.py.