81 lines
14 KiB
Markdown
81 lines
14 KiB
Markdown
# Execution Broker — эксплуатация
|
||
|
||
Проверено: **2026-10-15** по исходникам, работающим контейнерам и реальным запускам. Полная release-ready приёмка ещё не завершена.
|
||
|
||
## Развёрнутый комплект
|
||
|
||
| Компонент | Текущее состояние |
|
||
| --- | --- |
|
||
| Репозиторий | `/Users/admin/Developer/execution-broker`, `codex/production-readiness`; основной комплект `fee5409`, Broker hotfix `1b09e0f` |
|
||
| Broker | `execution-broker:1b09e0f`, версия `0.1.0-rc.32+approval30.1b09e0f`, 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 | Source `046cc9c9`: upstream `d13035ab` + исправление контекста канала; image `balda-balda:channel-context-046cc9c9`; подробности в [[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: models endpoint отвечает HTTP 200 у обоих инстансов. У @balda дополнительно проверена реальная генерация в ephemeral read-only сессии: `AUTH_OK`, `turn.completed`, exit 0. Исходный аккаунт сохранён; Balda перечитал credentials после обычного перезапуска.
|
||
|
||
## Инструменты и артефакты
|
||
|
||
`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 запускает изолированное задание. Канонический канал исходной сессии остаётся Mattermost; Telegram approval не меняет её locator. Продолжение исходной сессии использует `balda.state` и `balda.session.wait`; попытка и наблюдатель сохраняются до Start/retry. Потерянный admission восстанавливается через `execution_lookup`, отмена закрывает и поздний идентичный запрос. Прежние callback routes Broker приостановлены; недоставленные cursors сохранены.
|
||
|
||
Telegram approval bot получает вопрос только для явно выбранных сессий; иначе вопрос принадлежит исходной беседе. В текущем контуре `telegram_approvals.timeout_seconds=1800`: окно ответа — 30 минут. `min_run_ttl_seconds=3600` требует для новых запусков выбранных сессий общий TTL не меньше часа; более короткий запрос получает `approval_window_too_short` до admission. TTL включает очередь, планирование, ожидание ответа и исполнение; исходный deadline остаётся жёсткой границей и при появлении вопроса не продлевается. Сообщение сначала отправляется без кнопок, 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 работает; отдельный ephemeral запрос подтверждает генерацию модели, но не доставку результата в Mattermost. Существующие сессии принимают новый capability snapshot через обычный `/reset`; обновление само их не сбрасывает.
|
||
|
||
## Проверки
|
||
|
||
- Полные race/vet Broker на macOS ARM64 и Linux ARM64; Callee adapter, source/binary govulncheck — 0 reachable vulnerabilities, secret scan — без находок.
|
||
- Развёрнутый Balda source `046cc9c9`: полный race, lint и architecture gate; SQLite/PostgreSQL migration regressions, оба migration validators, managed plugin lifecycle и native wait restart. Существующий Codex thread продолжился с исправленным Mattermost-контекстом.
|
||
- 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 | Подтвердить 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-файлах.
|
||
|
||
После выбора согласованного проверенного комплекта применять из репозитория:
|
||
|
||
```bash
|
||
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-timeout-20261015/`, включая консистентный `broker.before.db` с успешными integrity/foreign-key checks и сохранённый Compose для отката. Hotfix прошёл полный `make check`, Linux ARM64 race для Broker/config/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`.
|