[2026-10-15] eagle: personal/projects/balda/balda.md personal/projects/balda/execution-broker.md personal/projects/balda/setup.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-15 02:44:57 +06:00
1 parent 51738b096d
commit 549effc753
3 files changed
+49 -37

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
# Balda — актуальный обзор
Проверено: **2026-10-15**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **два инстанса на Mac, Mattermost, Codex ACP**: `balda-mm-mac` и `balda-mm-eagle`. Оба работают на upstream `2eed2ce8`; Eagle имеет те же основные MCP и дополнительный Asana readonly. Точные версии и проверенные границы продолжений — в карточке запуска.
Проверено: **2026-10-15**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **два инстанса на Mac, Mattermost, Codex ACP**: `balda-mm-mac` и `balda-mm-eagle`. Оба работают на upstream `ee312646`; Eagle имеет те же основные MCP и дополнительный Asana readonly. Точные версии и проверенные границы продолжений — в карточке запуска.
## Источники текущего состояния
+44 -32
View File
@@ -1,66 +1,78 @@
# Execution Broker — эксплуатация
Проверено: **2026-10-15** по исходникам, работающим контейнерам и локальным проверкам. Полная release-ready приёмка ещё не завершена.
Проверено: **2026-10-15** по исходникам, работающим контейнерам и реальным запускам. Полная release-ready приёмка ещё не завершена.
## Развёрнутый комплект
| Компонент | Текущее состояние |
| --- | --- |
| Репозиторий | `/Users/admin/Developer/execution-broker`, `codex/production-readiness`, HEAD `18b224a`; исходники закоммичены |
| Broker | `execution-broker:a260a9a` |
| Gateway | `execution-broker-gateway:a260a9a` |
| Prism | `execution-prism-adapter:a260a9a` |
| Smoke worker | `execution-broker-worker:a260a9a`; один immutable image pin в Broker и gateway |
| OpenCode worker | `execution-broker-executors:rc27-go1269`; один immutable image pin в Broker и gateway; Go SDK 1.26.9 |
| macOS bootstrap | Четыре пакета `*-a260a9a.tar.gz`; актуальные Runner/Callee, workflow присутствует, digest совпадает с конфигурацией |
| Оба Balda | Upstream `2eed2ce8`, image `balda-balda:upstream-2eed2ce8`; подробности в [[personal/projects/balda/setup]] |
| Release candidate | `0.1.0-rc.27`, исходники архивов `18b224a`; четыре платформенных архива и plugin в `dist/` |
| Репозиторий | `/Users/admin/Developer/execution-broker`, `codex/production-readiness`; код работающего комплекта — `dcb6eba` |
| Broker | `execution-broker:dcb6eba`, версия `0.1.0-rc.30` |
| Gateway | `execution-broker-gateway:dcb6eba`, версия `0.1.0-rc.30` |
| Prism | `execution-prism-adapter:dcb6eba`, версия `0.1.0-rc.30` |
| Smoke worker | `execution-broker-worker:dcb6eba`; один SHA256 image pin в Broker и gateway |
| OpenCode worker | `execution-broker-executors:dcb6eba`; один SHA256 image pin в Broker и gateway, Go SDK 1.26.9 |
| macOS bootstrap | Четыре пакета `*-dcb6eba.tar.gz` с Runner/Callee этого комплекта |
| Оба Balda | Upstream `ee312646`, image `balda-balda:upstream-ee312646-b1`; подробности в [[personal/projects/balda/setup]] |
| Managed plugin | rc30 у обоих, Enabled=true, Drifted=false; прежние plugin data, revisions и marketplace сохранены |
| Release archives | `0.1.0-rc.30`, source `dcb6eba`; четыре платформенных архива и plugin в `dist/`, SHA256 проверены |
Docker socket и daemon group удалены из всех coding worker profiles. Docker administrative access остаётся только у gateway. Прежние несовпадения image pins устранены; перед обновлением незавершённых runs не было.
Docker socket и daemon group отсутствуют у coding workers. Административный доступ к Docker остаётся у gateway. Основные модели, авторизации и история обоих Balda сохранены; сессии не сбрасывались.
## Инструменты и артефакты
`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`.
Artifact inputs реализованы и развёрнуты через `execution/v2`: до восьми файлов, суммарно до 1 GiB, точные source run/name/SHA256 и исходная сессия. Source run должен быть терминальным с `cleanup=done`; transactional retention holds защищают принятые зависимости. Передача возобновляется до начала исполнения.
## Продолжения и одобрения
В текущем upstream Balda generic webhook запускает изолированное задание и не продолжает исходную сессию. Старые callback routes Broker приостановлены; недоставленные cursors и история сохранены, доставкой они не считаются.
Generic webhook в текущем Balda запускает изолированное задание. Продолжение исходной сессии использует `balda.state` и `balda.session.wait`; попытка и наблюдатель сохраняются до Start/retry. Потерянный admission восстанавливается через `execution_lookup`, отмена закрывает и поздний идентичный запрос. Прежние callback routes Broker приостановлены; недоставленные cursors сохранены.
Новый плагин rc27 использует `balda.state` и `balda.session.wait`: состояние попытки и возврат в исходную сессию сохраняются до Start/retry. Broker поддерживает `execution_lookup` и атомарное закрытие потерянного admission, включая поздний Start/retry. Функциональные race/restart-тесты прошли. **rc27 активирован у обоих Balda, Enabled=true, Drifted=false. Официальная переустановка сохранила plugin data, старые revisions/catalog snapshots и прежний marketplace. Существующие сессии не сбрасывались. Conversational delivery нового контура ещё не принята.**
Telegram approval bot получает вопрос только для явно выбранных сессий; иначе вопрос принадлежит исходной беседе. Ответ владельца передаётся через bound `execution_respond`; модель не подменяет его. `execution_retry` сохраняет точный task, Story, revision, executor и действительное одобрение; новый scope требует нового решения.
Настроенный Telegram approval bot получает вопрос исключительно в выбранных исходных сессиях; в остальных вопрос принадлежит исходной беседе. Модель не отвечает за владельца. Подлинный ответ передаётся через bound `execution_respond`; cancellation через `execution_cancel`. Повтор coding task — `execution_retry` с исходным run_id и новым ключом: Broker сохраняет точный task, Story, revision, executor и действительное прежнее одобрение. Изменение scope требует нового решения.
Managed lifecycle и native wait restart проверены на актуальном upstream. Реальный conversational run с моделью и доставкой в исходную беседу остаётся отдельным незавершённым gate. Существующие сессии принимают новый capability snapshot через обычный `/reset`; обновление само их не сбрасывает.
## Проверки
- macOS ARM64 и Linux ARM64: полный race/vet; Callee adapter и security checks.
- В обновлённом production-комплекте service run `run-edb2779a58d36fa10be2ebc6346b20bb`: Human → restart Broker/Prism → resume → пять артефактов с проверенными SHA256 → `succeeded`, `cleanup=done`; Task и Story закрыты через Prism.
- Реальный Beads/Dolt: Story projection и replay.
- Managed plugin lifecycle и native one-shot wait: исходная сессия, restart, новая generation без потери следующего wait.
- Source/binary govulncheck: reachable vulnerabilities — 0; история gitleaks чистая.
- Runtime checks rc27: Darwin ARM64 и Linux ARM64 — native; Darwin AMD64 — emulated. Linux AMD64 под эмуляцией показал непостоянный startup-сбой и исследуется. Native AMD64 не проверен.
- Полные 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 → `succeeded`, `cleanup=done`; Task и Story закрыты.
- Настоящая macOS VM: verified Go archive через scoped tunnel, `tooling.json`, один XCTest без ошибок и сохранённый xcresult; семь артефактов с проверенными SHA256, VM cleanup подтверждён.
- Реальные Make/C, Python, Node и JVM проекты на macOS и Linux; Docker builder/Runner/Callee cache hit и изменение Node SDK; отдельная проверка реального `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 под эмуляцией нестабилен: два сбоя на 20 запусков; полный gate не принят. Native AMD64 не проверен.
Это раздельные свидетельства. Сервисный fixture не доказывает, что модель в реальной беседе правильно выберет tools и доставит результат.
Сервисные fixtures не подтверждают выбор tools и доставку результата моделью в настоящей беседе.
## Незавершённый объём
| Область | Что остаётся |
| --- | --- |
| Balda boundary | Завершить plugin upgrade, принять реальный conversational run и outage/restart с видимым результатом |
| Универсальные стеки | Декларативные Linux/macOS tooling profiles, версии и approved sources, probes, безопасное восстановимое изменение окружения |
| Caches | Общие immutable tooling/Git caches; существующий Go SDK cache их не заменяет |
| Артефакты между runs | Digest-bound inputs и retention holds |
| Платформы и recovery | Native AMD64, устранение/классификация AMD64 emulation failure; off-host/Keychain loss recovery не подтверждён |
| Balda boundary | Реальный conversational run и outage/restart с видимым результатом в исходной беседе |
| Runtime tooling | Ограниченное durable изменение окружения посреди исполнения с безопасным checkpoint/resume |
| Git cache | Отдельный общий immutable object cache по repository/commit; существующие managed mirrors его не заменяют |
| Платформы | Native AMD64 acceptance и классификация нестабильности Linux AMD64 под эмуляцией |
| Recovery | Потеря хоста/Keychain не проверена; подтверждён только drained backup/restore на том же хосте |
Источник требований — `docs/work-plan.md`. iPad, прикладные UI/PR workflows и права Obsidian относятся к вызывающему проекту или Balda.
Источник требований — `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-файлах.
Приватный 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
```
Git commit сам по себе deployment не меняет. До обновления завершить runs/cleanup и сохранить согласованные state/config/image pins.
До смены комплекта завершить runs/cleanup, сохранить state/config/image pins и исходные immutable assets. Сам Git commit deployment не меняет.
Backup перед этим обновлением: `state/backups/20261014-before-rc27`. Проверены SHA256, 30 SQLite databases и inert restore шести компонентов, включая зашифрованный credential vault. Все три identity были освобождены и checkpointed. Master keys Keychain в backup отсутствуют; это проверка восстановления на том же хосте, не после его потери.
Backup перед текущим обновлением: `state/backups/20261015-before-rc30`. Проверены SHA256, 31 SQLite database и inert restore шести компонентов, включая encrypted credential vault. Все три credential identity были освобождены и checkpointed. Restore не запускал сервисы; master keys Keychain в backup отсутствуют. Это подтверждение восстановления на том же хосте.
Контракты и процедуры: `docs/protocol.md`, `docs/operations.md`, `docs/telegram-approvals.md`, `docs/recovery.md`, `docs/testing.md`. Существующие Balda сессии сохраняют capability snapshot; новая беседа принимает обновлённый плагин без изменения старой истории.
Отдельные state/home backups обоих Balda: `state/balda-upstream-rollout-20261015/`. Рабочие account/config hashes после обновления совпали с исходными. Приватные отчёты проверок Broker: `state/broker-rc30-rollout-20261015/`; они не входят в release archives.
Контракты и процедуры: `docs/protocol.md`, `docs/tooling.md`, `docs/operations.md`, `docs/telegram-approvals.md`, `docs/recovery.md`, `docs/testing.md`.
+4 -4
View File
@@ -11,8 +11,8 @@
| Хост / контейнер | Mac / `balda-mm-mac` |
| Канал | Mattermost |
| Provider | `codex`, type `codex_acp`, reasoning effort `medium` |
| Образ обоих инстансов | `balda-balda:upstream-2eed2ce8`, image ID `sha256:32f76bce909d7688f54cabc194b31ae85718bc958639671ce6147402b650d37d` |
| Balda source | `2eed2ce880591ccc2b9dbe15c1ac3ade7874cf8f`; Linux ARM64 binary SHA256 `f9a420e1bad17bc37f2087736f7530f40cddb6e50db9bccc51764be9bdb5ecc1` |
| Образ обоих инстансов | `balda-balda:upstream-ee312646-b1`, image ID `sha256:2f2294dd0ae3061f5e1f74f15d002f10a3c4075aaf57d6bcf97b57c9f6b95a4f` |
| Balda source | `ee3126460a8f6e2667e9941f4ef68c5f5872b216`; Linux ARM64 binary SHA256 `945763163b29cd6190d21775c4ee46c7c54d1a98cea59f7109c30dbe5b6f460c` |
| Compose | `/Users/admin/Docker/balda-mm-mac/docker-compose.yml` |
| Активный конфиг | `/Users/admin/Docker/balda-mm-mac/config/config.yaml` |
| State / plugins | `/Users/admin/Docker/balda-mm-mac/state` |
@@ -25,7 +25,7 @@ Config bind-mounted в `/workspace/.config/balda` read-only для контей
Eagle работает на том же Mac в `balda-mm-eagle`; Compose, config, state и work находятся в `/Users/admin/Docker/balda-mm-eagle/`, service — `eagle`, отдельный home volume — `balda_eagle-home`. Образы обоих инстансов одинаковы. Авторизации Codex раздельные; при обновлении они сохранены.
У обоих включены одинаковые Obsidian, Execution Broker и Prism MCP, одинаковые права runtime и managed plugin `execution-broker` rc.27. Проверены реальные initialize/tools-list: Obsidian — 15, Broker — 24, Prism — 5 инструментов; списки совпадают. Eagle дополнительно имеет `asana-readonly`, URL `http://asana-readonly:3100/mcp` в приватной Docker-сети. Отдельный контейнер `balda-eagle-asana-readonly` не публикует порт на хост. Реальное чтение Asana прошло; все пять операций изменения и запись заметок в файл отклоняются сервером.
У обоих включены одинаковые Obsidian, Execution Broker и Prism MCP, одинаковые права runtime и managed plugin `execution-broker` rc.30. Проверены реальные initialize/tools-list: Obsidian — 15, Broker — 24, Prism — 5 инструментов; списки совпадают. Eagle дополнительно имеет `asana-readonly`, URL `http://asana-readonly:3100/mcp` в приватной Docker-сети. Отдельный контейнер `balda-eagle-asana-readonly` не публикует порт на хост. Реальное чтение Asana прошло; все пять операций изменения и запись заметок в файл отклоняются сервером.
В обоих конфигурациях provider `codex_acp`, reasoning `medium`, явный model отсутствует. Последние записи Codex подтверждают `gpt-6.1-sol` у обоих. При выравнивании инструментов настройки основной модели не менялись. `balda.nats.max_store` у обоих — `16gb`.
@@ -33,7 +33,7 @@ Eagle работает на том же Mac в `balda-mm-eagle`; Compose, config
В этой версии generic webhooks выполняют изолированные задания. Они не продолжают исходную сессию. Старые `routes.*.path`, `envelope.target`, `key_from_body`, `mode` и `fallback_to` удалены из конфигурации; listener задаётся через `balda.http`. Сейчас он слушает loopback `127.0.0.1:8095`.
Плагин rc27 использует `balda.state` и штатный `balda.session.wait`: наблюдатель вооружается до Start/retry и возвращается в исходную сессию. Managed lifecycle и restart-контракт проверены; conversational acceptance с реальной моделью ещё открыт. Старые callbacks Broker на `:8090` приостановлены, недоставленные cursors сохранены. Native wait acceptance не является подтверждением доставки сообщения провайдером.
Плагин rc30 использует `balda.state` и штатный `balda.session.wait`: наблюдатель вооружается до Start/retry и возвращается в исходную сессию. Managed lifecycle и restart-контракт проверены; conversational acceptance с реальной моделью ещё открыт. Старые callbacks Broker на `:8090` приостановлены, недоставленные cursors сохранены. Native wait acceptance не является подтверждением доставки сообщения провайдером.
Оба инстанса имеют также одинаковые пять глобальных Codex skills и одинаковую Codex tool policy; различий не найдено. Обновление плагина выполнено штатной переустановкой из нового operator source с сохранением `plugin-data/execution-broker`, старых revisions/catalog snapshots и содержимого прежнего marketplace. Существующие сессии не сбрасывались.