Исторический материал для чтения. Оригинал на английском: benchmark/agent/upkeeplive/README.md, ревизия репозитория 61e75e9aa9a8719dfb480bf1f5226553b3a21d70 (2026-10-04). Перевод сохраняет методику, даты, измерения и статус, зафиксированные в этой ревизии. Исторические результаты относятся к описанным запускам; они не описывают текущий продукт и не служат рекомендацией запускать агентов сегодня.
upkeep-live — управляющая Go-программа для зафиксированного плана UpkeepStudy. Сама она не вызывает модель. Исполняемый адаптер получает один JSON Request через stdin и возвращает один JSON Response через stdout. Адаптер обязан начинать новую сессию модели для каждого вызова, включая повторную редактуру при включённой проверке. Программа отклоняет повторяющиеся идентификаторы сессий. До запуска соберите и зафиксируйте исполняемые файлы адаптера и управляющей программы, идентификаторы и настройки моделей, промпты, коммит исходников, план и набор случаев.
go build -o /absolute/path/to/upkeep-live ./benchmark/agent/upkeeplive/cmd/upkeep-live
go build -o /absolute/path/to/codex-upkeep-adapter ./benchmark/agent/upkeeplive/cmd/codex-upkeep-adapter
/absolute/path/to/codex-upkeep-adapter --print-prompt-sha256
# Use those two hashes when preparing the frozen UpkeepStudy plan. Set its
# checker_sha256 to the SHA-256 of the built upkeep-live binary, because the
# checker is linked into that binary; the CLI verifies equality before calls.
# Pin OKF_UPKEEP_CODEX_RUNTIME, OKF_UPKEEP_CODEX_VERSION,
# OKF_UPKEEP_CODEX_SHA256, OKF_UPKEEP_WRITER_MODEL,
# OKF_UPKEEP_CONSUMER_MODEL and OKF_UPKEEP_REASONING_EFFORT in the environment.
/absolute/path/to/upkeep-live \
-plan /absolute/path/to/frozen-plan.json \
-rows /absolute/path/to/new-rows.json \
-audit /absolute/path/to/new-audit.json \
-adapter /absolute/path/to/codex-upkeep-adapter \
-max-calls 12 -max-seconds 600 -max-tokens 150000 -call-seconds 45
go run ./benchmark/agent/upkeepstudy analyze \
-plan /absolute/path/to/frozen-plan.json \
-rows /absolute/path/to/new-rows.json
План читается до обращения к модели; файлы строк и аудита создаются только как новые. Запуск завершён лишь при наличии AUDIT.complete, чьи rows_sha256 и audit_sha256 совпадают с двумя файлами; отсутствие маркера означает, что сбой процесса или записи оставил неполные результаты. Маркер выявляет неполные файлы, но не гарантирует атомарность при потере питания, поскольку метаданные каталога не синхронизируются через fsync. Файл аудита хранит хеши плана, адаптера и управляющего исполняемого файла, время начала в UTC, версию Go, число вызовов и токенов, состояния проверки, хеши итоговых наборов и коды завершения Go CLI. Программа жёстко ограничивает число вызовов, время каждого вызова и всего запуска. Лимит токенов проверяется после каждого ответа адаптера, поэтому один вызов может его превысить. Если данные об использовании отсутствуют или транспорт адаптера завершается с ошибкой, предпринятая попытка сохраняется как сбой выполнения и дальнейшие вызовы прекращаются; unknown_usage_calls показывает, что соблюдение лимита токенов подтвердить нельзя. Лимита стоимости и данных о ценах модели нет. Прерванный процесс может оставить пустые выходные файлы; сохраняйте такие сбои и не выдавайте их за завершённые наблюдения.
Команда требует -call-seconds не менее 45: встроенный адаптер Codex имеет внутренний срок 38 секунд, оставляя время на передачу ответа и очистку до внешнего тайм-аута.
Перед любым вызовом адаптера предварительный запуск применяет точный целевой код каждого случая во временном Git-репозитории и требует предупреждения needs_review от встроенной Go-проверки upkeep. Каждая фактическая группа получает новый временный Git-репозиторий и одинаковое закоммиченное исходное состояние. Программа записывает фактические байты целевого кода, итоговые файлы OKF и результат проверки Go CLI. Автор в группе без проверки видит задачу изменения кода и исходный набор. Автор в группе с проверкой также видит зарегистрированное напоминание, после первого черновика — настоящий результат needs_review, затем получает одну попытку редактирования. Если понятие изменилось, программа отправляет решение updated с путями изменённых документов; результат reviewed_updated подтверждает только изменение файлов, а не истинность нового утверждения. Независимый читатель получает только итоговый набор и вопрос: без названия группы, задачи по коду, результата проверки, диалога автора или эталонного ответа.
Запрос адаптера содержит role (writer, writer_revision, consumer), repeat, зафиксированную модель и хеш промпта, а также ровно одно поле writer или consumer. Только запросы автора при включённой проверке содержат reminder; лишь writer_revision содержит draft и checker_initial. Ответ содержит уникальный session_id, счётчики использования, необязательный failure и либо draft (final_code, final_bundle), либо observation (answer, evidence и т. п.). Все материалы передаются полными объектами {id,path,content}. Программа допускает только безопасные относительные пути и требует точного совпадения итогового кода с TargetCode плана. Через эту границу подпроцесса нельзя независимо подтвердить сессии адаптера и реальные настройки модели; сохраняйте журналы вызовов самого адаптера и сверяйте зафиксированные модели и промпты при проверке. Исполняемый BYOT-адаптер — доверенный локальный код с правами процесса на машине; одна фиксация SHA не ограничивает его доступ чтением.
Встроенный cmd/codex-upkeep-adapter запускает на каждый запрос одну одноразовую сессию Codex CLI в песочнице только для чтения и проверяет модель, промпт, версию среды запуска и SHA. В качестве идентификатора сессии он сохраняет thread_id, выданный Codex. JSON, видимый модели-читателю, содержит только question и artifacts; идентификатор случая и повтор остаются в управляющей программе. SHA-256 промпта автора — хеш константы writerPrompt этой команды; аналогично для consumerPrompt.
Поле плана checker_sha256 должно равняться SHA-256 исполняемого файла управляющей программы: так фиксируется Go-пакет upkeep, встроенный в этот файл, а не внешний исполняемый файл okf-upkeep. Также запишите коммит исходников. Воздействие в группе с проверкой объединяет напоминание, результат проверки и дополнительный вызов редактирования; его результат не позволяет выделить причинный эффект самой проверки.
go test ./benchmark/agent/upkeeplive/... использует детерминированный тестовый адаптер. Он проверяет настоящие снимки Git, переходы состояний проверки, проверку наборов Go CLI, разделение сессий, состав данных по ролям, поведение лимитов и строки, совместимые с анализатором. Эти тесты не являются результатом работы модели.