[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:
1 parent
9602b78f83
commit
17d743fc63
3 files changed
+13
-14
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# Balda — актуальный обзор
|
||||
|
||||
Проверено: **2026-10-15**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **два инстанса на Mac, Mattermost, Codex ACP**: `balda-mm-mac` и `balda-mm-eagle`. Оба работают на source `046cc9c9` (upstream `d13035ab` с исправлением контекста канала); Eagle имеет те же основные MCP и дополнительный Asana readonly. Точные версии и проверенные границы продолжений — в карточке запуска.
|
||||
Проверено: **2026-10-15**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **два инстанса на Mac, Mattermost, Codex ACP**: `balda-mm-mac` и `balda-mm-eagle`. Оба работают на source `6238856b` (upstream `6621b189` с исправлением контекста канала); Eagle имеет те же основные MCP и дополнительный Asana readonly. Точные версии и проверенные границы продолжений — в карточке запуска.
|
||||
|
||||
## Источники текущего состояния
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
| 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]] |
|
||||
| Оба Balda | Source `6238856b`: upstream `6621b189` + исправление контекста канала; image `balda-balda:upstream-6621b189-channel-fix`; подробности в [[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 проверены |
|
||||
|
||||
@@ -37,18 +37,18 @@ Generic webhook в текущем Balda запускает изолирован
|
||||
|
||||
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 проверены на развёрнутом Balda. Реальный conversational smoke прошёл: модель использовала исходные Story/Task, подтвердила observer/recovery waits, дождалась фактического Telegram-ответа владельца и получила `succeeded`, `cleanup=done`. Все шесть артефактов скачаны с проверкой SHA256; единственный итоговый ответ подтверждён через Mattermost API в исходной беседе, оставшиеся waits отменены. Приватные доказательства: `state/balda-channel-context-20261015/`. Отдельный outage/restart в ходе реальной модельной беседы ещё не проверен. Существующие сессии принимают новый capability snapshot через обычный `/reset`; обновление само их не сбрасывает.
|
||||
Managed lifecycle и native wait restart проверены на развёрнутом Balda. Реальный conversational smoke прошёл: модель использовала исходные Story/Task, подтвердила observer/recovery waits, дождалась фактического Telegram-ответа владельца и получила `succeeded`, `cleanup=done`. Все шесть артефактов скачаны с проверкой SHA256; единственный итоговый ответ подтверждён через Mattermost API в исходной беседе, оставшиеся waits отменены. Приватные доказательства: `state/balda-channel-context-20261015/`. Outage/restart реальной модельной беседы также прошёл: Balda получила HTTP 502, затем Broker/Prism/Balda были перезапущены; сохранились тот же run/Story, provider thread и исходный deadline. После фактического Telegram approval подтверждены `succeeded`, шесть скачанных SHA256-проверенных артефактов, `cleanup=done`, закрытие Story/Task и единственное сообщение о завершении restart-приёмки в исходном Mattermost. Native waits отменены, duplicate admission и остаточных worker container/volume нет. Существующие сессии принимают новый 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-контекстом.
|
||||
- Развёрнутый Balda source `6238856b`: полный race, lint, architecture gate и govulncheck (0 reachable); 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 закрыты.
|
||||
- Реальная Balda-сессия: исправленный Mattermost-контекст → durable waits → Broker smoke → фактический Telegram approval → шесть скачанных артефактов с проверенными SHA256 → `cleanup=done` → итог в исходной Mattermost-беседе. Доставка и отсутствие дубликата подтверждены readonly API.
|
||||
- Настоящая 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 не проверен.
|
||||
- Runtime archives: Darwin ARM64, Linux ARM64 и Linux AMD64 — native. Linux AMD64 проверен на физическом x86_64-хосте: семь binaries, MCP/auth rejection, vault import/revoke и SQLite backup. Darwin AMD64 — emulated; native gate ожидает доступный Intel Mac.
|
||||
|
||||
Сервисные fixtures не подтверждают выбор tools и доставку результата моделью в настоящей беседе.
|
||||
|
||||
@@ -56,9 +56,8 @@ Managed lifecycle и native wait restart проверены на развёрн
|
||||
|
||||
| Область | Что остаётся |
|
||||
| --- | --- |
|
||||
| Balda boundary | Conversational Human → artifacts → cleanup → исходная беседа подтверждён; остаётся отдельный outage/restart внутри реальной модельной беседы |
|
||||
| Платформы | Native AMD64 acceptance; штатная Linux AMD64 эмуляция остаётся непринятой, отдельный QEMU не заменяет native gate |
|
||||
| Recovery | Потеря хоста/Keychain не проверена; подтверждён только drained backup/restore на том же хосте |
|
||||
| Платформы | Native Darwin AMD64 acceptance: нужен доступный Intel Mac. Linux AMD64 native gate прошёл |
|
||||
| Recovery | Production recovery после потери хоста/Keychain не принято. Native перенос тестового vault с отдельным escrow key и fresh enrollment проверен; рабочие master keys не экспортировались |
|
||||
|
||||
Источник требований — `docs/work-plan.md`. iPad, прикладные UI/PR workflows и права Obsidian принадлежат вызывающему проекту или Balda.
|
||||
|
||||
@@ -74,8 +73,8 @@ docker-compose -f state/deploy/compose.production.json -p execution-broker up -d
|
||||
|
||||
До смены комплекта завершить 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 отсутствуют. Это подтверждение восстановления на том же хосте.
|
||||
Backup перед текущим обновлением: `state/backups/20261015-before-rc32`. Проверены SHA256, 31 SQLite database и inert restore шести компонентов, включая encrypted credential vault. Все три credential identity были освобождены и checkpointed. Restore не запускал сервисы; master keys Keychain в backup отсутствуют. Это подтверждение восстановления production snapshot на том же хосте. Отдельная native-проверка перенесла синтетический encrypted vault с macOS ARM64 на физический Linux AMD64: отсутствие и подмена ключа отклоняются без перезаписи ciphertext, отдельный escrow key восстанавливает запись, revoke работает, fresh enrollment в новый vault с новым ключом проходит. Production credentials и Keychain keys в этом тесте не использовались. Он не заменяет escrow или повторную авторизацию реальных аккаунтов после потери хоста.
|
||||
|
||||
Отдельные 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.
|
||||
Актуальные согласованные state/config backups обоих Balda, exact image/binary hashes и доказательства restart/native/off-host fixture проверок: `state/balda-upstream-hooks-20261015/`. Более ранние 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`.
|
||||
@@ -11,8 +11,8 @@
|
||||
| Хост / контейнер | Mac / `balda-mm-mac` |
|
||||
| Канал | Mattermost |
|
||||
| Provider | `codex`, type `codex_acp`, reasoning effort `medium` |
|
||||
| Образ обоих инстансов | `balda-balda:channel-context-046cc9c9`, image ID `sha256:59acd17a994526d5122a115da57ab5829f5ff16f4ecfc10ee0a69ba0ee9be469` |
|
||||
| Balda source | `046cc9c90960d57e2964110710192d7b97a6692c`: upstream `d13035ab` + закоммиченное исправление контекста канала; Linux ARM64 binary SHA256 `4636dccfcc2d32a8bae8d693af42f5638a7bc775e4062f04323a9e52d4f08e75` |
|
||||
| Образ обоих инстансов | `balda-balda:upstream-6621b189-channel-fix`, image ID `sha256:e68ecaed4ceed2040c4592e9d4f8cd053d0b65d8086fa67ef1c99c8d10f42db1` |
|
||||
| Balda source | `6238856b5189f34f6e2a244e146cb6342e948623`: upstream `6621b189` + закоммиченное исправление контекста канала; Linux ARM64 binary SHA256 `94827ac2b57456c7f30bfd7a02fecd2d3ddb4e52a51af702f3f830720b56bf8d` |
|
||||
| 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` |
|
||||
@@ -31,11 +31,11 @@ Eagle работает на том же Mac в `balda-mm-eagle`; Compose, config
|
||||
|
||||
## Продолжение задач
|
||||
|
||||
Тип канала берётся из канонической привязки сессии. Для Mattermost он остаётся `mattermost`, включая native waits и возврат результата; `human.delivery_channel=telegram` меняет только доставку одобрения. SQLite/PostgreSQL migration исправляет прежний сгенерированный Telegram-заголовок в сохранённых ACP instructions без `/reset`, сохраняя provider thread, capability snapshot и историю. На основном инстансе исправлены семь Mattermost-контекстов, все 1943 прежних события сохранены; у Eagle сохранённых сессий не было. Linux SQLite snapshots обоих инстансов прошли integrity/foreign-key checks. Backup и отчёты: `state/balda-channel-context-20261015/`.
|
||||
Тип канала берётся из канонической привязки сессии. Для Mattermost он остаётся `mattermost`, включая native waits и возврат результата; `human.delivery_channel=telegram` меняет только доставку одобрения. SQLite/PostgreSQL migration исправляет прежний сгенерированный Telegram-заголовок в сохранённых ACP instructions без `/reset`, сохраняя provider thread, capability snapshot и историю. Согласованные Linux SQLite snapshots обоих инстансов прошли integrity/foreign-key checks; последнее обновление сохранило все 2072 прежних события основного инстанса, locator, capability snapshots, provider threads и auth. Плагин rc32 совместим с текущей Balda и не требовал переустановки; immutable revisions сохранены. Актуальный backup и отчёты: `state/balda-upstream-hooks-20261015/`; backup миграции контекста также сохранён в `state/balda-channel-context-20261015/`.
|
||||
|
||||
В этой версии generic webhooks выполняют изолированные задания. Они не продолжают исходную сессию. Старые `routes.*.path`, `envelope.target`, `key_from_body`, `mode` и `fallback_to` удалены из конфигурации; listener задаётся через `balda.http`. Сейчас он слушает loopback `127.0.0.1:8095`.
|
||||
|
||||
Плагин rc32 использует `balda.state` и штатный `balda.session.wait`: наблюдатель вооружается до Start/retry и возвращается в исходную сессию. Managed lifecycle и restart-контракт проверены. Реальный conversational smoke с моделью, фактическим Telegram Human ответом, шестью проверенными артефактами, `cleanup=done` и единственным итоговым сообщением в исходной Mattermost-беседе прошёл; Story/Task закрыты и waits отменены. Отдельный outage/restart внутри реальной модельной беседы ещё не проверен. Старые callbacks Broker на `:8090` приостановлены, недоставленные cursors сохранены. Native wait acceptance не является подтверждением доставки сообщения провайдером.
|
||||
Плагин rc32 использует `balda.state` и штатный `balda.session.wait`: наблюдатель вооружается до Start/retry и возвращается в исходную сессию. Managed lifecycle и restart-контракт проверены. Реальный conversational smoke с моделью, фактическим Telegram Human ответом, шестью проверенными артефактами, `cleanup=done` и единственным итоговым сообщением в исходной Mattermost-беседе прошёл; Story/Task закрыты и waits отменены. Реальная беседа прошла также HTTP 502 и restart Broker/Prism/Balda во время Human pause: тот же run/Story, provider thread и deadline восстановились, фактический Telegram approval принят, шесть артефактов проверены, `cleanup=done`. Story/Task закрыты, waits отменены, сообщение о завершении restart-приёмки подтверждено через Mattermost API. Старые callbacks Broker на `:8090` приостановлены, недоставленные cursors сохранены. Native wait acceptance не является подтверждением доставки сообщения провайдером.
|
||||
|
||||
Оба инстанса имеют также одинаковые пять глобальных Codex skills и одинаковую Codex tool policy; различий не найдено. Обновление плагина выполнено штатной переустановкой из нового operator source с сохранением `plugin-data/execution-broker`, старых revisions/catalog snapshots и содержимого прежнего marketplace. Существующие сессии не сбрасывались.
|
||||
|
||||
|
||||
Reference in new issue
Block a user