# PREREG — гейт на УСТОЙЧИВОСТИ НАКЛОНА (форма, а не прогресс) Составлено до реализации. Основание — два измерения этой линии: 1. `FINDINGS_prestep_gate.md`: гейт по **прогрессу скобки** обваливает ремонты (77.5 % → 15.9 %) и впервые берёт цель ITP на CHA (**2851 ≤ 2857**), но APS дорожает 2806 → **4449**, потому что прогресс скобки — **неверная валюта отказа**: секущий шаг обрушивает ошибку, почти не двигая скобку (в проекте это уже измерено: **150 против 86**). 2. `FINDINGS_logarithmic.md` §3: Chandrupatla отказывает не по прогрессу, а по **форме конфигурации** (`ξ`, `φ` — безразмерные отношения; полоса есть окрестность линейного случая), и его отказ стоит **ноль** вызовов. **Гипотеза:** нужный признак отказа — не «сколько обещает шаг», а «установилась ли модель, которой шаг доверяет». Наш шаг доверяет **локальному наклону**, значит вопрос доверия — **устойчивость наклона**. --- ## 1. Признак, выведенный для НАШЕГО шага (и без единой константы) Метод оценивает наклон на каждом шаге (`derived` — по двум последним точкам, `derived3` — по трём). Две последовательные оценки `slope_prev` и `slope` дают безразмерное сравнение. Объявленный признак отказа — **несогласие знака**: > если `slope_prev` и `slope` оба не нули и **их знаки различны**, локальная модель не установилась > (функция локально даже не монотонна в одном направлении) ⇒ шаг заменяется делением пополам. Почему это беспараметрично: сравнивается **знак**, а не величина; порога нет, множителя нет, сравнения с выбранным числом нет. Почему это форма, а не прогресс: признак читается из конфигурации данных (две оценки наклона), а не из обещанной длины шага. **Почему ожидается инертность на каноническом наборе** (то, чего не хватило прошлой попытке): у простого корня гладкой функции знак наклона устойчив, значит гейт молчит и APS не дорожает. Срабатывать он должен в плоских областях широких скобок, где оценки наклона мелкие и болтаются. **Чего НЕ делаем:** не вводим порог на отношение величин наклонов (`|s1|/|s2| < k` — это константа `k`); не переносим полосу `1−√(1−ξ) < φ < √ξ` (выведена для обратной квадратичной интерполяции). **Режим:** `prestep="slope"`; `"none"` остаётся по умолчанию и побитово прежним; `"progress"` остаётся в коде как **измеренный отрицательный результат**, помеченный в докстринге. ## 2. Предсказания и фальсификаторы | # | Предсказание | ФАЛЬСИФИКАТОР → вывод | |---|---|---| | **S1** | APS-154 **не дорожает**: по-наборный лучший ≤ **2806** | >2806 → шестая попытка тем же трейдом; признак «форма» тоже не спасает, линия закрывается | | **S2** | CHA-45 дешевеет против x-пространства: по-наборный лучший < **4516** | не дешевеет → гейт инертен всюду, гипотеза о наклоне неверна | | **S3** | доля ремонтов сторожем падает против 77.5 % | не падает → гейт не бьёт в механизм | | **S4** | гарантия `2⌈log₂(w/xtol)⌉+3` цела: `over2x = 0` | нарушена → закрытие немедленно | | **S5** | качество пробы на CHA растёт против 1.422 | не растёт → отказ не улучшает пробу, только переставляет расходы | **Правило остановки:** S1 или S4 ложны ⇒ режим не принимается. S1 верна и S2 верна ⇒ **это первый режим линии, который берёт широкие скобки, не продавая узкие**, и тогда следующий шаг — свип по всей сетке и проверка, попадает ли лучшая конфигурация в цель <6026 на двух наборах. ## 3. Протокол и гейты реализации Протокол статьи: 154 APS + 45 CHA, цена — вызовы `f`, провал = полный бюджет, граница `2×` на каждом решённом прогоне, конфигурация фиксируется выводом до рейтинга, числа только с **Linux**, свип пишется в свой `sweep_slope.json`. | # | Условие реализации | Проверка тестом | |---|---|---| | **T1** | `prestep="none"` побитово как раньше | равенство кортежей возврата на наборе задач и сторожей | | **T2** | в гейте нет ни одной константы | греп по коду гейта (без комментариев): допустимы только `0.0` и `0.5` | | **T3** | гейт инертен там, где знак наклона устойчив | на гладкой монотонной задаче число вызовов совпадает с `prestep="none"` | | **T4** | гейт срабатывает там, где знак наклона меняется | на задаче с немонотонностью `stats['pre_refused'] ≥ 1` | | **T5** | отказ не добавляет вызова | `pre_refused ≤ nfev − 2` | **Дисциплина:** аудит после правки и до запуска; смоук ×2 локально; свип на сервере с замороженной копией; числа немедленно.