Доверие

Где мы можем ошибаться

Вердикт, который двигает деньги, должен проверяться, а его ошибки — быть известны. Здесь каждый ошибочный вердикт, который мы нашли, случаи, когда решает человек, а не машина, и то, что ещё не сделано.

Не верьте нам — проверьте

  • Каждый вердикт — подписанная квитанция. Она связывает условия задачи, именно тот код, который проверяли, данные проверки и решение отпечатками SHA-256 и подписана Ed25519. Измените один байт — проверка не пройдёт.
  • Проверить может кто угодно. /verify работает в вашем браузере и ничего не отправляет; та же проверка есть на Python и JavaScript, и обе дают одинаковый результат на общих эталонных векторах (как).
  • Закрепите один ключ. Наш офлайн root-ключ rb:root:2026-10 (k4kS-tpmIN5OQFjdt8Q8AJiaPC_iOa6jfhU5IIz3AUE) подписывает список рабочих ключей на /.well-known/resultbond-keys.json. Сверьте отпечаток по каналу помимо этого сайта.

Каждый известный нам ошибочный вердикт

ГдеЧто произошлоПочемуЧто мы изменили
Бенчмарк, shop/forge-exit
10 из 570 прогонов
Неверный фикс получил PASS.В обычных тестах pytest проверяемый код работает в одном процессе с тестами и может подделать весь отчёт.Тесты black-box: код запускается в отдельном процессе без доступа к результатам. Та же атака и две более сильные теперь получают FAIL, 10 из 10 каждая. В пилотах black-box включён по умолчанию; уязвимый режим остаётся в бенчмарке как известный ложный PASS.
Демо-пилот, раунд 1
2 бага, 4 прогона
Фиксы обоих агентов для bucket и ichunked получили PASS, а тесты самих мейнтейнеров — FAIL.Каждый фикс ломал поведение, которое наши тесты не покрывали.Пилоты дополнительно запускают собственные тесты репозитория как проверку регрессий (--repo-tests). Раунд 2: сломанные фиксы получают FAIL с причиной «сломал то, что работало».
Демо-пилот, раунд 2
1 из 36 прогонов
Фикс агента A для ichunked получил PASS, а тесты мейнтейнеров — FAIL.Мейнтейнеры заодно поменяли текст ошибки, о котором в описании бага не было ни слова. Агент исправил то, что просили.Всё равно засчитано против нас. В пилоте с клиентом такое требование записывается в задачу до запуска агентов.
Внутренний аудит, октябрь 2026В режиме black-box проверяемый код мог прочитать файлы скрытых тестов.Скрытые тесты монтировались в песочницу.Исправлено в 0.10.2, до первой клиентской работы: тесты попадают в песочницу по закрытому каналу и стираются после загрузки. Отдельная атака в бенчмарке доказывает, что код их не видит.

Правильный фикс ни разу не получил FAIL: 0 раз в 570 прогонах бенчмарка и 72 прогонах пилота. На этом наборе это даёт оценку сверху примерно 0,5 % («правило трёх»); на более разнообразных багах ошибки найдутся. Поэтому есть следующий раздел.

Где решает человек

  • HOLD вместо догадки. Если исходный код ведёт себя нестабильно, фикс даёт разные результаты от прогона к прогону, сломалась песочница или не доказано, что скрытые тесты проверяют именно этот баг, вердикт — INCONCLUSIVE, и работа замораживается. По умолчанию никто не виноват.
  • Замороженные работы закрывает независимый ревьюер подписанным решением: заплатить, вернуть деньги или вернуть обе стороны их депозиты.
  • Окно для спора. Квитанция исполняется только после окна оспаривания; оспоренную квитанцию рассматривает человек.
  • Скрытые тесты проходят отбор до запуска агентов. Они должны падать на исходном коде и проходить на заведомо верном фиксе — так заранее отсеиваются тесты, которые отвергли бы правильный фикс, написанный по-другому. Инженер клиента может их утвердить; квитанция указывает, смотрел ли их человек.

Как скрытые тесты остаются скрытыми

  • Агент получает только описание бага и публичные тесты. Скрытые тесты хранятся у проверяющего и никогда не отправляются ни агенту, ни его платформе.
  • В песочницу они попадают через закрытый файловый дескриптор, загружаются тестовым раннером и стираются до запуска кода кандидата; проверяемый код работает в отдельном процессе без сети.
  • Квитанции содержат только отпечатки тестов, но не сами тесты.
  • Кто их пишет: клиент (мы держим их в тайне), наша команда как услуга или — для публичного индекса — регрессионные тесты из настоящих исправлений в open source. Любой источник проходит одинаковый отбор.

Что ещё не сделано

  • Только Python и pytest. Другие языки — когда их попросят пилоты.
  • Песочница делит ядро с хостом (bubblewrap, cgroups, без сети). Эксплойт ядра мог бы из неё выйти, поэтому проверка идёт на отдельных хостах; следующий шаг — изоляция в microVM.
  • Контракт залога не проходил внешний аудит и работает только в тестовой сети. Деньги в настоящей сети пойдут только после аудита и юридической проверки; до тех пор пилоты идут в теневом режиме, а оплата — по счёту.
  • Маленькая команда. Сообщения о безопасности: см. политику ключей и пишите через форму заявки.