12 KiB
Execution Broker — эксплуатация
Проверено: 2026-10-15 по исходникам, работающим контейнерам и реальным запускам. Полная release-ready приёмка ещё не завершена.
Развёрнутый комплект
| Компонент | Текущее состояние |
|---|---|
| Репозиторий | /Users/admin/Developer/execution-broker, codex/production-readiness; основной комплект fee5409, Broker hotfix 8c9c872 |
| Broker | execution-broker:8c9c872, версия 0.1.0-rc.32+telegram.8c9c872, immutable SHA256 pin в Compose |
| Gateway | execution-broker-gateway:fee5409, версия 0.1.0-rc.32 |
| Prism | execution-prism-adapter:fee5409, версия 0.1.0-rc.32 |
| Smoke worker | execution-broker-worker:fee5409; один SHA256 image pin в Broker и gateway |
| OpenCode worker | execution-broker-executors:fee5409; один SHA256 image pin в Broker и gateway, Go SDK 1.26.9 |
| macOS bootstrap | Четыре пакета *-fee5409.tar.gz с Runner/Callee этого комплекта |
| Оба Balda | Upstream ee312646, image balda-balda:upstream-ee312646-b1; подробности в personal/projects/balda/setup |
| Managed plugin | rc32 у обоих, Enabled=true, Drifted=false; прежние plugin data, revisions и marketplace сохранены |
| Release archives | 0.1.0-rc.32, source fee5409; четыре платформенных архива и plugin в dist/, SHA256 проверены |
Docker socket и daemon group отсутствуют у coding workers. Административный доступ к Docker остаётся у gateway. Основные модели, home volumes и история обоих Balda сохранены; сессии не сбрасывались. Текущая проверка Codex auth: у @balda сервер возвращает 401 token_revoked, refresh отклонён как refresh_token_invalidated; требуется повторный вход владельца. У Eagle models endpoint отвечает HTTP 200.
Инструменты и артефакты
execution_profiles показывает разрешённые tooling profiles. Подготовка окружения задаётся декларативно: platform, версии, approved packages/archives, SHA256 и readiness probes. Новый стек требует подходящего operator profile; Makefile сам по себе не устанавливает зависимости.
В текущем контуре Go 1.26.9 задан стандартным profile для Linux OpenCode и четырёх macOS workers. Специального Go installer в Runner больше нет. Tooling cache хранит проверенные immutable archives, ограничен 4 GiB; фактические версии сохраняются в tooling.json. Временные build products выполняются внутри приватного каталога run; общий Linux /tmp остаётся noexec.
Отдельный Git cache хранит immutable bundles по repository/commit с лимитом 4 GiB, durable deadline holds и отдельными run-scoped токенами. Disposable checkouts не разделяют mutable worktree и upstream credentials. В production linux-smoke подключён к внутренней control-сети Broker; cache/inputs/tooling требуют рабочего маршрута к Broker, одного публичного HTTPS clone недостаточно.
Durable смена окружения использует явно заданный operator checkpoint: остановка Callee и credential fence → snapshot исходников с сохранением base ancestry → cleanup старого worker → execution_reconfigure → отдельный owner approval → новая immutable среда и фиксированный continuation. Task и исходный deadline сохраняются; максимум две замены, один admission на checkpoint, отмена охватывает цепочку. Ожидание approval не резервирует worker capacity. Это opt-in политика workflow; в стандартных coding packs checkpoints по умолчанию не включены. Произвольный live graph не сериализуется и не переигрывается. Требуется execution/v3.
Artifact inputs реализованы и развёрнуты через execution/v2: до восьми файлов, суммарно до 1 GiB, точные source run/name/SHA256 и исходная сессия. Source run должен быть терминальным с cleanup=done; transactional retention holds защищают принятые зависимости. Передача возобновляется до начала исполнения.
Продолжения и одобрения
Generic webhook в текущем Balda запускает изолированное задание. Продолжение исходной сессии использует balda.state и balda.session.wait; попытка и наблюдатель сохраняются до Start/retry. Потерянный admission восстанавливается через execution_lookup, отмена закрывает и поздний идентичный запрос. Прежние callback routes Broker приостановлены; недоставленные cursors сохранены.
Telegram approval bot получает вопрос только для явно выбранных сессий; иначе вопрос принадлежит исходной беседе. Сообщение сначала отправляется без кнопок, message ID сохраняется в state, затем публикуются controls. Рестарт завершает прерванную публикацию или renewal без повторного callback. Устаревшая копия очищается при callback до сохранения update cursor. Ответ владельца передаётся через bound execution_respond; модель не подменяет его. execution_retry сохраняет точный task, Story, revision, executor и действительное одобрение; новый scope требует нового решения. Для environment checkpoint используется execution_reconfigure; обычный retry таких runs запрещён.
Managed lifecycle и native wait restart проверены на актуальном upstream. Реальный conversational run с моделью и доставкой в исходную беседу остаётся незавершённым gate; сейчас он блокируется отозванной авторизацией Codex у @balda. Существующие сессии принимают новый capability snapshot через обычный /reset; обновление само их не сбрасывает.
Проверки
- Полные race/vet Broker на macOS ARM64 и Linux ARM64; Callee adapter, source/binary govulncheck — 0 reachable vulnerabilities, secret scan — без находок.
- Свежий Balda upstream: полный race, lint и architecture gate; managed plugin lifecycle и native wait restart.
- Production service acceptance: настоящий Callee Human → restart Broker/Prism → resume → шесть артефактов с проверенными SHA256 и provenance Git cache →
succeeded,cleanup=done; Task и Story закрыты. - Настоящая macOS VM: verified Go archive через scoped tunnel,
tooling.json, один XCTest без ошибок и сохранённый xcresult; восемь артефактов с проверенными SHA256, включаяrepository.json, VM cleanup подтверждён. - Реальные Make/C, Python, Node и JVM проекты на macOS и Linux; Docker builder/Runner/Callee cache hit и изменение Node SDK; durable смена окружения с двумя рестартами и одним выполнением внешнего действия; отдельная проверка реального
go runпри/tmp noexec. - Artifact input transfer/restart/cleanup и установка из Linux ARM64 release archive без исходников и Go прошли.
- Runtime archives: Darwin ARM64 и Linux ARM64 — native, Darwin AMD64 — emulated. Linux AMD64 прошёл полный emulated gate через отдельный QEMU. Штатная Linux AMD64 эмуляция на этом хосте ранее проявляла нестабильность и не считается принятой. Native AMD64 не проверен.
Сервисные fixtures не подтверждают выбор tools и доставку результата моделью в настоящей беседе.
Незавершённый объём
| Область | Что остаётся |
|---|---|
| Balda boundary | Восстановить Codex auth у @balda, затем подтвердить conversational run и outage/restart с видимым результатом в исходной беседе |
| Платформы | Native AMD64 acceptance; штатная Linux AMD64 эмуляция остаётся непринятой, отдельный QEMU не заменяет native gate |
| Recovery | Потеря хоста/Keychain не проверена; подтверждён только drained backup/restore на том же хосте |
Источник требований — docs/work-plan.md. iPad, прикладные UI/PR workflows и права Obsidian принадлежат вызывающему проекту или Balda.
Конфигурация и восстановление
Приватный Compose: state/deploy/compose.production.json; конфиги broker.json, worker.json, assets в state/deploy/assets. Токены находятся только в secret-файлах.
После выбора согласованного проверенного комплекта применять из репозитория:
docker-compose -f state/deploy/compose.production.json -p execution-broker up -d --no-build worker broker prism
До смены комплекта завершить runs/cleanup, сохранить state/config/image pins и исходные immutable assets. Сам Git commit deployment не меняет.
Backup перед текущим обновлением: state/backups/20261015-before-rc32. Проверены SHA256, 31 SQLite database и inert restore шести компонентов, включая encrypted credential vault. Все три credential identity были освобождены и checkpointed. Restore не запускал сервисы; master keys Keychain в backup отсутствуют. Это подтверждение восстановления на том же хосте.
Отдельные state/home backups обоих Balda: state/balda-upstream-rollout-20261015/. Рабочие account/config hashes после обновления совпали с исходными. Приватные отчёты проверок основного комплекта: state/broker-rc32-rollout-20261015/. Broker hotfix: state/telegram-recovery-20261015/, включая консистентный broker.before.db с успешными integrity/foreign-key checks и сохранённый Compose для отката. Hotfix прошёл полный make check, Linux ARM64 race для Broker/Telegram/store/HTTP API и govulncheck без достижимых уязвимостей. Release archives rc32 остаются неизменными и содержат исходный fee5409; hotfix развёрнут отдельным Broker image. Приватные отчёты не входят в release archives.
Контракты и процедуры: docs/protocol.md, docs/tooling.md, docs/environment-changes.md, docs/repository-cache.md, docs/operations.md, docs/telegram-approvals.md, docs/recovery.md, docs/testing.md.