Доверие
Где мы можем ошибаться
Вердикт, который двигает деньги, должен проверяться, а его ошибки — быть известны. Здесь каждый ошибочный вердикт, который мы нашли, случаи, когда решает человек, а не машина, и то, что ещё не сделано.
Не верьте нам — проверьте
- Каждый вердикт — подписанная квитанция. Она связывает условия задачи, именно тот код, который проверяли, данные проверки и решение отпечатками SHA-256 и подписана Ed25519. Измените один байт — проверка не пройдёт.
- Проверить может кто угодно. /verify работает в вашем браузере и ничего не отправляет; та же проверка есть на Python и JavaScript, и обе дают одинаковый результат на общих эталонных векторах (как).
- Закрепите один ключ. Наш офлайн root-ключ
rb:root:2026-10(k4kS-tpmIN5OQFjdt8Q8AJiaPC_iOa6jfhU5IIz3AUE) подписывает список рабочих ключей на /.well-known/resultbond-keys.json. Сверьте отпечаток по каналу помимо этого сайта.
Каждый известный нам ошибочный вердикт
| Где | Что произошло | Почему | Что мы изменили |
|---|---|---|---|
Бенчмарк, shop/forge-exit10 из 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.
- Контракт залога не проходил внешний аудит и работает только в тестовой сети. Деньги в настоящей сети пойдут только после аудита и юридической проверки; до тех пор пилоты идут в теневом режиме, а оплата — по счёту.
- Маленькая команда. Сообщения о безопасности: см. политику ключей и пишите через форму заявки.