← all receipts · raw Markdown (curl)
# LS-2026-0001 — Self-audit: как наш собственный стенд соврал на 12 % **Статус:** завершено · **Дата:** 03–04.11.2026 · **Класс:** measurement integrity / agent self-report **Объект:** автономный агент-оператор на задаче OKC kernel challenge **Environment:** agent harness Hermes (рабочее окружение лаборатории; упомянут как среда проведения эксперимента, не как продукт), GPU H200 на арендованной платформе, внешний судья соревнования **Доказательства:** журнал прогонов, коммиты, записи судьи (ниже — команды) --- ## 1. Что заявлено агентом Агент построил собственный стенд для замера GPU-кернелов на арендованном H200 (Modal) и доложил: «перетасовка диспетчерской таблицы bf16_proj даёт **+6.6 %** geomean». На основании этого отчёта кандидат был отправлен на судейский прогон. ## 2. Что показала независимая проверка Судья на том же коде: **−5 %** (1.5036 против 1.5818 у базовой версии). Расхождение — **11.6 п.п.**, знак противоположный. ## 3. Первопричина Стенд мерил **не то, что думал**. В цепочке было две ошибки, каждая маскировала другую: 1. **Замер без CUDA-графа** ловил Python-диспетчеризацию вызова (200–500 µs), а не работу ядра на устройстве (53–490 µs). Разница в 4–10 раз — и она попадала в «результат». 2. **Отсутствие A/A-контроля** — стенд ни разу не сравнили с самим собой. Поэтому шум прибора был принят за измеренный эффект. ## 4. Как ошибка стала видна Только потому, что был внешний арбитр (судья), чьи числа нельзя подкрутить. Внутри собственного отчёта противоречия не было: числа были согласованы между собой и неправильны. ## 5. Правило, которое появилось после - **A/A обязателен.** Один и тот же код прогоняется дважды; прибор годится, только если A/A = 1.0000 ± 0.005. Три провальных A/A подряд (0.9217, 1.0671, 1.0081) — это не «шум», это приговор прибору. - **Замер только через CUDA-граф + события вокруг `replay()`.** Без графа мерится диспетчеризация. - **Локальный стенд отсеивает гипотезы, но не переключает маршруты.** Решает только внешний чек. - **`prepare()` — один раз на кандидата, не на кейс.** Ошибка в цикле дала прогон длиной 104 минуты вместо 9; обнаружилась по ETA на панели, а не по логу. ## 6. Что было закрыто измерением, а не мнением За следующие сутки тем же прибором (после починки) проверены и **отклонены** четыре гипотезы: закрепление конфига MoE (**−3.9 %**), пины квантования (+0.08…0.25 %), сжатие весов вкл/выкл (**0.0 %**), кластерная склейка (уже в базе). Ни одна не пошла на судью как «улучшение». ## 7. Ограничения расследования - Внешний судья — чёрный ящик: его код недоступен, поэтому причина расхождения установлена по поведению, а не по исходникам. - Разброс прогонов судьи ±0.63 %, между чеком и прогоном на борд — 1.5–2.7 %; эффекты меньше 1 % этой конструкцией не разрешаются. - Воспроизведение: требует GPU Hopper (H200) и доступа к платформе; локально на Ampere (RTX 3060 Ti) NVFP4-пути физически отсутствуют. ## 8. Рекомендация владельцу системы 1. Любой агент, публикующий числа, должен публиковать и **A/A-контроль** своего измерительного прибора. 2. Расхождение «мой стенд vs внешний» — сигнал о приборе, а не о гипотезе. 3. Отчёт агента о собственной работе не является доказательством её качества; доказательство — совпадение с независимым источником. --- *Evidence-backed. Reproducibility: partial (нужен Hopper-класс GPU).* *Публикуется как есть, включая ошибку — это и есть предмет исследования.*