From 549effc753822c6eb5cc8c4e34efa3621492f493 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 15 Oct 2026 02:44:57 +0600 Subject: [PATCH] [2026-10-15] eagle: personal/projects/balda/balda.md personal/projects/balda/execution-broker.md personal/projects/balda/setup.md --- personal/projects/balda/balda.md | 2 +- personal/projects/balda/execution-broker.md | 76 ++++++++++++--------- personal/projects/balda/setup.md | 8 +-- 3 files changed, 49 insertions(+), 37 deletions(-) diff --git a/personal/projects/balda/balda.md b/personal/projects/balda/balda.md index fbe8a838..e645b316 100755 --- a/personal/projects/balda/balda.md +++ b/personal/projects/balda/balda.md @@ -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. Точные версии и проверенные границы продолжений — в карточке запуска. ## Источники текущего состояния diff --git a/personal/projects/balda/execution-broker.md b/personal/projects/balda/execution-broker.md index d8a8cc21..0f928ca4 100644 --- a/personal/projects/balda/execution-broker.md +++ b/personal/projects/balda/execution-broker.md @@ -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`. diff --git a/personal/projects/balda/setup.md b/personal/projects/balda/setup.md index 0ce61fd5..b8c6698d 100755 --- a/personal/projects/balda/setup.md +++ b/personal/projects/balda/setup.md @@ -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. Существующие сессии не сбрасывались.