Files
obsidian-vault/personal/projects/balda/execution-broker.md
T

38 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Execution Broker — текущий локальный контур
Проверено: 2026-10-12, 23:58 Бишкек. Репозиторий: `/Users/admin/Developer/execution-broker`.
## Состояние приёмки
Исходники перенесены fast-forward и запушены в `main`, HEAD и origin/main — `9d406cb` (удалённый SHA проверен). Единственный рабочий checkout находится на main и чистый. Broker развёрнут из того же коммита как `execution-broker:production-9d406cb`, `/healthz` возвращает `0.1.0-rc.23+9d406cb`. Полный `make check` и Callee adapter checks прошли. Все четыре macOS bootstrap и действующие Linux worker-образы обновлены, включая Runner. Зарегистрирован один чистый worktree; два старых review-checkout удалены с явного подтверждения владельца, их коммиты уже находились в main.
Сквозной прогон: `run-67217720024e5b07e1b504d56c4389f7`, Story `eb-bae3eaa3bfcaeb17678c1bc7`: Claude на disposable macOS 27 VM, новый локальный Go CLI. План доставлен одним Telegram-сообщением (message_id 10), без автоматического вложения; state=waiting_human. Успех, публикация кода и закрытие Story пока не подтверждены. Прогон `run-3a21ab05f78f688abc923d0946728233` прошёл компиляцию и тесты, но был отклонён quality gate из-за отсутствующего контекста одобрения/detached checkout и неполной проверки README; эти требования исправлены в authored workflow. Реальная доставка причины ошибки и отдельного cleanup=done подтверждена в [исходном Mattermost-треде](https://mm.qentra.top/qentra/pl/akh5doko4frrmq9ea93ys9ay5y).
## Конфигурация и перезапуск
- Действующий Compose-файл: `/Users/admin/Developer/execution-broker/state/deploy/compose.production.json` (приватный, не коммитить). Это полный снимок действующей конфигурации вместо цепочки временных override.
- Broker config: `state/deploy/broker.json`; worker config: `state/deploy/worker.json`; bootstrap assets: `state/deploy/assets`.
- Контейнеры Broker/gateway/Prism: `execution-broker-broker-1`, `execution-broker-worker-1`, `execution-broker-prism-1`. Balda: `balda-mm-mac`.
- Применение выбранного образа: `docker-compose -f state/deploy/compose.production.json -p execution-broker up -d --no-deps broker` из каталога репозитория. Изменение Git само по себе ничего не разворачивает.
- Перед изменением активной конфигурации сохранять образ, config и согласованный Broker backup; не прерывать чужие задачи.
## Одобрения
`telegram_approvals.enabled=true` и выбранная исходная сессия: запрос только в `@balda_approval_bot`; при выключенном Telegram — в исходном канале Balda. Результат, причина сбоя и очистка приходят в исходный Mattermost-тред. Original `execution_respond` сохранён для восстановления. Токены находятся только в приватных secret-файлах.
Бот отправляет одно читаемое сообщение с кнопками. Длинный план явно помечен как preview; полный файл отправляется только по кнопке «Полный план». Просмотр не одобряет задачу. Reply на сообщение с кнопками передаёт замечания к плану: до трёх доработок в том же run с повторным одобрением. Обычное сообщение или Reply на вложение не считается ответом. Для ACP permission нужно выбрать предложенный вариант, для остановки — «Отменить задачу».
Это одобрения Broker workflows и worker ACP. Прямые ACP-запросы хостовых агентов Balda и operator grants для существующих папок/managed hosts — отдельные механизмы. Контекстный субагент для autoapproval остаётся плановой работой.
## Автоматическое окружение и качество
Новые Broker-managed проекты не требуют ручного allowlist в каждой VM: Broker выводит guest config для своей Git namespace, а run-bound Git capability ограничивает доступ конкретным проектом. Digest пакета и версии workflow проверяются до запуска.
Go `1.26.9` Darwin ARM64 автоматически загружается Broker, проверяется по SHA256, кешируется и устанавливается только в disposable VM. Golden image и пользовательский Mac не меняются. SDK wrapper задаёт правильный GOROOT и доступные права каталогов.
Detached HEAD — штатный checkout закреплённой ревизии; локальные коммиты сохраняются в `commits.bundle`. Одобрение — факт workflow journal, переданный subsequent roles, а не файл в репозитории. Quality gate требует выполненных проверок и отсутствия нерешённых findings. `exit_code` должен совпадать с `expected_exit_code` (по умолчанию 0); ожидаемая ошибка CLI допустима только с явным ожиданием и evidence. Сборка/test suites ожидают 0.
`execution_diagnostics` проверяет checksum артефактов и извлекает bounded причину Callee или Runner из `callee.log`, даже без `quality.json`. Отдельным тестом воспроизведён прежний отказ журнала для длинного Human: теперь вопрос до 256 КиБ сохраняется целиком, Human event ограничен 512 КиБ, остальные события — 32 КиБ. Конкретная ошибка обработки события сохраняется в редактированном логе Runner. Cleanup, завершившийся во время отложенной доставки terminal, получает отдельное уведомление; более поздний receipt не скрывает его.
Подробные контракты: `docs/telegram-approvals.md`, `docs/operations.md`, `docs/protocol.md`, `docs/testing.md`. Будущие host permissions, SSH command catalog, iPad и прочие миграционные задачи — отдельные планы в `docs/work-plan.md`; они не объявлены реализованными этой приёмкой.