Исторический материал для чтения. Оригинал на английском: benchmark/agent/beforeafter/README.md, ревизия репозитория 61e75e9aa9a8719dfb480bf1f5226553b3a21d70 (2026-10-04). Перевод сохраняет методику, даты, измерения и статус, зафиксированные в этой ревизии. Исторические результаты относятся к описанным запускам; они не описывают текущий продукт и не служат рекомендацией запускать агентов сегодня.
Это отдельный эксперимент с агентом, не связанный с основным пилотным сравнением репозитория и OKF. При go test ./... модель не вызывается. Команда go run ./benchmark/agent/beforeafter/cmd/okf-before-after run отказывается работать с исправленной рабочей копией, если в ней есть незакоммиченные изменения, и записывает план до первого вызова модели. Команда analyze заново рассчитывает учёт всех ожидаемых наблюдений по плану и сохранённым строкам. Текущий набор содержит четыре вопроса по спецификации дат из задачи 005 и один вопрос о поддержке временных меток из задачи 004. Два повтора дают 20 ожидаемых строк и 18 возможных вызовов модели: каждая строка старого варианта 004 получает revision_unsupported и не передаётся модели. Поэтому сравнение по задаче 005 содержит восемь пар ответов старого и нового вариантов.
Во всех пяти случаях обе группы получают одинаковые байты источника и один и тот же вопрос. Тестовый набор foreign-68ce7a0 включает элемент журнала с переносами строк, заголовок и вводный текст корневого документа, корневое поле upkeep: enforced и встроенную ссылку на сноску. Каждый эталонный ответ обоснован независимой цитатой из источника. Исправленный вариант явно выбирает date-3fcbb9f; исторический исполняемый файл не имеет флага временного профиля и использует свой контракт дат по умолчанию. Случай с временными метками использует instant-0b87c52 только в новом варианте. Результат старого варианта здесь показывает отсутствие поддержки новой редакции, а не дефект спецификации дат или фактическую ошибку модели.
Оба исполняемых файла CLI находятся вне управляющей Go-программы эксперимента. Соберите старый файл из ed7ddc28cd127682023bd150ee377906b817e099 через git archive, а новый — из чистого исправленного коммита. Запишите полные идентификаторы обоих коммитов и SHA-256 исполняемых файлов. Также зафиксируйте SHA-256 адаптера и среды запуска модели. Команда запуска отклоняет любое несовпадение хешей. Связь SHA с исходным Git-коммитом по-прежнему зависит от описанной процедуры сборки: программа не выводит коммит из непрозрачных байтов исполняемого файла. SHA и версия среды запуска модели фиксируют локальный исполняемый файл; адаптер не может независимо проверить снимок модели на сервере. В plan.json сохраняются полная строка go version, идентификатор модели, версия среды запуска, настройки, хеши набора источников и тестовых файлов, хеш промпта, фиксированные часы для дат и временных меток, порядок групп и бюджеты. Адаптер запускает новый процесс модели для каждого испытания. Порядок групп чередуется по случаю и повтору; текст источника служит свидетельством, а не правилами управляющей программы.
Для каждой строки программа копирует зафиксированные тестовые файлы в изолированный временный набор, вызывает validate --json и parse --json выбранным исполняемым файлом, записывает код завершения, хеши команды, stdout и stderr, длительность. Затем она передаёт модели исходные материалы и их JSON-представления из CLI. В этих представлениях временные пути нормализуются. Корректный JSON-отчёт проверки при коде завершения 1 сохраняется. Зафиксированный старый тестовый набор 005 даёт 12 таких диагностик: одну для корневого вводного текста, одну для неизвестного корневого поля и десять для элементов журнала с переносами строк. Каждая классифицируется по неизменённой спецификации дат; новая или неклассифицированная диагностика останавливает испытание до обращения к модели. Неожиданные сбои процесса, вывод не в JSON и ошибки проверки исправленного варианта получают operational_failure и учитываются отдельно от фактических ответов. Модель должна ссылаться на идентификатор исходного материала: одних диагностик CLI недостаточно для оценки ответа как правильного. Ответы оценивает существующая Go-программа проверки точного ответа.
Перед любым платным запуском отдельно согласуйте адресата передачи, данные, модель, максимум 18 вызовов, ограничения времени, токенов и стоимости, а также состояние вне рабочего каталога. Программа жёстко ограничивает число вызовов и общее время; наблюдаемые токены или USD проверяются после каждого вызова, поэтому предел может быть превышен на один вызов. Используйте -unpriced только когда стоимость отдельного вызова неизвестна. Результат analyze нельзя считать измеренным эффектом, пока не получены все запланированные строки и не использован настоящий адаптер.
Предварительная проверка без обращения к модели после сборки обоих исполняемых файлов:
OKF_BAF_OLD_BIN=/absolute/old-okf \
OKF_BAF_NEW_BIN=/absolute/new-okf \
go test ./benchmark/agent/beforeafter -run TestPinnedCLIIntegration -v
Для run обязательны -old-bin, -new-bin, -old-bin-sha256, -new-bin-sha256, -adapter, -adapter-sha256, -model-runtime, -model-runtime-version, -model-runtime-sha256, -new-commit, -run-id, -model, -model-version, -settings, -plan, -rows и флаги ограниченного бюджета запуска. При стандартном наборе и двух повторах -max-model-calls должен быть не меньше 18. Ни один аргумент CLI сам по себе не разрешает вызов модели.