# 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).*
*Публикуется как есть, включая ошибку — это и есть предмет исследования.*
