[2026-10-14] eagle: personal/projects/balda/execution-broker.md
This commit is contained in:
1 parent
d3fbf64b7b
commit
b233461552
1 file changed
+9
-5
@@ -1,14 +1,16 @@
|
||||
# Execution Broker — текущий локальный контур
|
||||
|
||||
Проверено: 2026-10-13, после развёртывания fd29974. Репозиторий: `/Users/admin/Developer/execution-broker`.
|
||||
Проверено: 2026-10-14. Репозиторий: `/Users/admin/Developer/execution-broker`.
|
||||
|
||||
## Состояние приёмки
|
||||
|
||||
Исходники запушены в `main`: HEAD и удалённый origin/main — `fd29974027b2121dcc5c3b52e1d3335a9db7845a`, SHA проверен. Единственный worktree `/Users/admin/Developer/execution-broker` находится на main и чистый. Broker развёрнут как `execution-broker:production-fd29974`; `/healthz` возвращает `0.1.0-rc.23+fd29974`. Полный `make check` прошёл для a16ba6d; финальное изменение диагностики прошло `go test -race ./internal/broker ./internal/httpapi`. Четыре macOS bootstrap пакета и Runner в действующих Linux worker-образах обновлены до a16ba6d. Новые циклы Claude/OpenCode активированы в macOS пакетах; Linux workflow-пакеты отдельно не обновлялись этим развёртыванием. Два старых review-checkout удалены с явного подтверждения владельца; оба их коммита уже находились в main.
|
||||
Main и origin/main — `a3594c3`; единственный worktree чистый. Broker `execution-broker:production-a3594c3`, Gateway `execution-broker-gateway:reauth-a3594c3`; четыре macOS пакета и Linux Runner/build contexts обновлены. Native Claude issuer также обновлён. Полный `make check` прошёл; проверки Callee engine прошли для неизменившегося после 4166542 адаптера. Новые PR не создавались.
|
||||
|
||||
Сквозной прогон `run-67217720024e5b07e1b504d56c4389f7`, Story `eb-bae3eaa3bfcaeb17678c1bc7`: план доставлен одним Telegram-сообщением (message_id 10), без автоматического вложения. Одобрение не поступило; исходный часовой deadline истёк 2026-10-12 в 18:45:07 UTC. State=expired, cleanup=done. После обновления реальный MCP `execution_diagnostics` возвращает `failure_detail: context deadline exceeded` из проверенного callee.log. Успешное завершение всей Go CLI задачи, публикация кода и закрытие Story не подтверждены. Четвёртый запуск `run-207e0e159b6bb53b2a383b130d70e49f` работал со старым Runner: точная причина обработки события не была записана и ретроспективно не установлена.
|
||||
Проверка продолжения: `run-0175c98134e42a9d912dcc2626264bcd` получил точный план из одобрения `human-1` запуска `run-3a21ab05f78f688abc923d0946728233` (SHA256 `994b9c5492136ff1710ace38aef33767658585fd597f553d74f85a3122f287dc`). Реальная macOS VM начала с implementer, без specify/design/breakdown и нового Human. Claude ответил `Authentication required`; конкретная ошибка доставлена в [Mattermost](https://mm.qentra.top/qentra/pl/s3q8k6uk8py1uqcz7ss55brpmr). Код не создан и не опубликован.
|
||||
|
||||
Прогон `run-3a21ab05f78f688abc923d0946728233` прошёл компиляцию и тесты, но был отклонён quality gate из-за отсутствующего контекста одобрения/detached checkout и неполной проверки README; эти требования исправлены в authored workflow. Реальная доставка причины ошибки и отдельного cleanup=done подтверждена в [исходном Mattermost-треде](https://mm.qentra.top/qentra/pl/akh5doko4frrmq9ea93ys9ay5y).
|
||||
Native CLI обнулил оба токена и expiresAt в private cache, из-за чего прежний checkpoint застрял. Восстановление распознаёт этот явный результат с привязкой к аккаунту/организации: сохраняет предыдущий зашифрованный cache, отмечает необходимость входа и разрешает cleanup остановленного worker. Реальный cleanup=done подтверждён; issuer не revoked, owner освобождён, reauthentication_required=true. Новая попытка `run-3fcbd9a52b55e9c750671ea4357b705a` в той же Story `eb-bae3eaa3bfcaeb17678c1bc7` ожидает browser authentication до выделения VM. Успешное завершение Go CLI, публикация и закрытие Story пока не подтверждены. Эфемерные login URL в документации не хранить.
|
||||
|
||||
Молчание по [команде владельца](https://mm.qentra.top/qentra/pl/ae7rzayekjf9iquwx1duzs1dew) подтверждено: 2026-10-14 06:24:56 UTC Mattermost принял post, NATS вернул 503 insufficient resources, после трёх попыток ingress прекратил dispatch без ответа. История BALDA_EVENTS заняла около 1.9 ГБ при account max_store=2gb. Локальный max_store повышен до 16gb, история сохранена, Balda перезапущен. Новая ошибка запуска после этого доставлена. Это восстановление ёмкости; долговременные ограничения отдельных streams и уведомление при исчерпании ingress retries в коде Balda этим изменением не реализованы.
|
||||
|
||||
## Конфигурация и перезапуск
|
||||
|
||||
@@ -20,6 +22,8 @@
|
||||
|
||||
## Одобрения
|
||||
|
||||
Для явно запрошенного повторного запуска использовать `execution_retry`: исходный run_id, chat/topic и новый idempotency_key. Broker выводит точный прежний scope и сохраняет одобрённый текст, вместо пересказа задачи моделью. Тот же Story/task/repository revision/worker/image/agent не требует нового одобрения плана. Изменение scope или позднейшие замечания владельца требуют нового решения. Сохранённый план — приватный admission snapshot; публичный status его не раскрывает. Native sign-in и ACP permissions остаются отдельными механизмами.
|
||||
|
||||
`telegram_approvals.enabled=true` и выбранная исходная сессия: запрос только в `@balda_approval_bot`; при выключенном Telegram — в исходном канале Balda. Результат, причина сбоя и очистка приходят в исходный Mattermost-тред. Original `execution_respond` сохранён для восстановления. После истечения срока самого Telegram-запроса кнопка «Обновить запрос» создаёт свежие кнопки для того же ожидающего Human в том же run и VM, пока не истёк исходный deadline запуска; она не одобряет задачу и не продлевает run. Токены находятся только в приватных secret-файлах.
|
||||
|
||||
Бот отправляет одно читаемое сообщение с кнопками. Длинный план явно помечен как preview; полный файл отправляется только по кнопке «Полный план». Просмотр не одобряет задачу. Reply на сообщение с кнопками передаёт замечания к плану: до трёх доработок в том же run с повторным одобрением. Обычное сообщение или Reply на вложение не считается ответом. Для ACP permission нужно выбрать предложенный вариант, для остановки — «Отменить задачу».
|
||||
@@ -40,6 +44,6 @@ Go `1.26.9` Darwin ARM64 автоматически загружается Broke
|
||||
|
||||
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`, для failed, expired и canceled. Реальный expired run проверен через MCP после развёртывания fd29974. Отдельным тестом воспроизведён прежний отказ журнала для длинного Human: теперь вопрос до 256 КиБ сохраняется целиком, Human event ограничен 512 КиБ, остальные события — 32 КиБ. Конкретная ошибка обработки события сохраняется в редактированном логе Runner. Cleanup, завершившийся во время отложенной доставки terminal, получает отдельное уведомление; более поздний receipt не скрывает его.
|
||||
`execution_diagnostics` проверяет checksum артефактов и извлекает bounded причину Callee или Runner из `callee.log`, даже без `quality.json`, для failed, expired и canceled. Реальный expired run проверен через MCP после развёртывания fd29974. Отдельным тестом воспроизведён прежний отказ журнала для длинного Human: теперь вопрос до 256 КиБ сохраняется целиком, Human event ограничен 512 КиБ, остальные события — 32 КиБ. Конкретная ошибка обработки события сохраняется в редактированном логе Runner. Ошибки cleanup записываются отдельно в cleanup_error и не заменяют исходную причину исполнения. 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`; они не объявлены реализованными этой приёмкой.
|
||||
Reference in new issue
Block a user