[2026-10-14] eagle: personal/projects/archive/balda-reference-before-2026-10-14.md personal/projects/balda/balda.md personal/projects/balda/execution-broker.md personal/projects/balda/setup.md personal/projects/balda/soul.md personal/projects/balda/workspace-context.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-14 20:40:18 +06:00
1 parent e67a7c67e0
commit f76558d6d3
6 files changed
+372 -255

No files matched your search

+50 -20
View File
@@ -1,42 +1,71 @@
# Execution Broker — текущий локальный контур
Проверено: 2026-10-14. Репозиторий: `/Users/admin/Developer/execution-broker`.
Проверено: **2026-10-14**, включая GitHub, репозитории, конфигурацию и работающие контейнеры.
## Состояние приёмки
## Текущий статус
`main` и `origin/main` Broker остаются на `437cbf8`. Локальный кандидат `0.1.0-rc.26` зафиксирован в `codex/production-readiness` на `b64a1ba83c82475b08276ea3fb6a54c99d4a1509`. Смежные исправления Balda — отдельная ветка `codex/production-readiness` на `223b85ad213f77edebd452147d0058588813fe6c`, checkout `/private/tmp/execution-broker-balda-production`. Broker-кандидат не развёрнут и не опубликован. Для актуальной ветки Balda открыт [upstream PR #52](https://github.com/baldaworks/balda/pull/52). Указанная Balda `223b85ad` — отклонённый прототип; актуальный HEAD `085a0d43` находится в отдельной ветке `codex/ingress-outbox-v2`, см. пересмотр после ревью ниже.
**Broker ещё не полностью реализован и не прошёл production-приёмку нового кандидата.** Локальные проверки rc.26 завершены; работающий контур использует прежние образы. Открытый [PR #52](https://github.com/baldaworks/balda/pull/52) относится к **Balda**: все **11/11 GitHub checks SUCCESS**, PR открыт и не draft, mergeable, ещё не merged. Одобрение независимого reviewer отсутствует.
Действующий Broker — `execution-broker:production-a3594c3`, gateway — `execution-broker-gateway:quality-437cbf8`, Prism — `execution-prism-adapter:session-fix-20261004`. Сверка обнаружила drift: `broker.json` и `worker.json` выбирают разные immutable images для `linux-smoke` и `linux-opencode-deepseek`; три coding-профиля worker.json по-прежнему содержат Docker socket/group. В исходниках rc.26 этот доступ запрещён, а несовпадение image pin отклоняется до выделения worker с освобождением недоставленного credential. До применения кандидата старый работающий контур этих защит не получает. macOS bootstrap-пакеты и dynamic build contexts также требуют согласованного обновления Runner/Callee/config/workflow pins. Проверки из предыдущей приёмки ниже относятся к прежним развёрнутым версиям.
## Репозитории и действующие образы
### Локальная приёмка rc.26 — 2026-10-14
| Компонент | Подтверждённое состояние |
| --- | --- |
| Broker repository | `/Users/admin/Developer/execution-broker`; `main` и `origin/main`: `437cbf8` |
| Broker candidate | `0.1.0-rc.26`; код проверен на `b64a1ba83c82475b08276ea3fb6a54c99d4a1509`; текущая `codex/production-readiness`: `b7106b5` с последующими изменениями документации |
| Broker production | `execution-broker:production-a3594c3` |
| Gateway production | `execution-broker-gateway:quality-437cbf8` |
| Prism production | `execution-prism-adapter:session-fix-20261004` |
| Balda production | контейнер `balda-mm-mac`, образ `balda-balda`, image ID `sha256:56c00100258b1a478484ef20e044981ed0a569ec0ae7d6ba8608e8878a9e1f95` |
| Balda PR candidate | `codex/ingress-outbox-v2`, HEAD `085a0d435f727a1f4628a3259998c6498d42fcf2`, checkout `/private/tmp/execution-broker-balda-upstream` |
По решению владельца GitHub Actions заменены локальным прогоном. Все запущенные финальные проверки прошли: полный Broker `make check build` на macOS ARM64 и Linux ARM64 (Colima), race-тесты Callee на обеих ОС, Balda `go test -race ./...`, golangci-lint и architecture check, проверка плагина на закреплённой версии Balda, source/binary govulncheck и gitleaks всей истории. Для Broker, Callee и Balda — 0 вызываемых уязвимостей; недостижимые findings остаются отдельно видны в полных отчётах. Исправлены Go 1.26.8 → 1.26.9 и x/net 0.58 → 0.60 у Balda/Callee. Gitleaks исключает только точный fingerprint ложного срабатывания на старый Mattermost post ID.
Ветка Broker остаётся локальной. Ветка Balda опубликована в `mallexxx/balda`. Открытие PR не обновляло контейнеры.
Проверены реальные Docker/Callee Human pause → restart → resume → 5 артефактов → cleanup, embedded Beads и signed host-plan с rollback. Отдельно Linux ARM64 архив установлен без Go и source checkout: 4 сервисных образа, MCP, перезапуск Broker, 5 артефактов, succeeded и cleanup=done. Чистая установка закреплённых Claude/OpenCode/Node и ACP initialize прошла на macOS/Linux ARM64 без provider inference. Все четыре release-архива выполнили проверки версий, vault import/revoke, MCP, отказа без авторизации и SQLite backup; AMD64 на обеих ОС проверен через эмуляцию, не на native AMD64. Пять архивов rc.26 и SHA256SUMS лежат в `dist/`.
## Что проверено у Broker rc.26
Полный отчёт и логи: `/Users/admin/Developer/execution-broker/state/production-readiness-20261014/local-checks.json`. Прежнее закрытие локальной задачи Balda `balda-7w4` пересмотрено после ревью: она переоткрывалась и закрыта заново после исправлений и новых проверок; подробности ниже. Обе ветки и коммиты сохранены локально, checkout чистые; автоматическая проверка запретила push исходников и истории без явного разрешения владельца.
На принятой ревизии прошли `make check build` и проверки Callee на macOS ARM64 и Linux ARM64, race-тесты, adapter/plugin checks, source/binary govulncheck и gitleaks истории. Reachable vulnerabilities — 0; недостижимые findings сохранены в отчётах.
### Границы Broker и оставшаяся работа
Реальный изолированный Docker/Callee flow прошёл Human pause → restart → resume → пять артефактов → cleanup. Linux ARM64 архив отдельно установлен без Go и source checkout: четыре сервисных образа, MCP, перезапуск Broker, пять артефактов, `succeeded`, `cleanup=done`. Закреплённые Claude/OpenCode/Node и ACP initialize проверены на macOS/Linux ARM64 без provider inference.
Предыдущий список смешивал Broker с локальными агентскими сценариями. Полный iPad sign/upload/install/unlock/launch, конфигурация search/Obsidian MCP, PR-workflows, миграция Hermes и решения об общем доступе к vault принадлежат Balda/локальному агенту или конкретному проекту. Включение их в условия готовности релиза Broker было ошибкой. Никакая новая политика прав Obsidian этим прогоном не реализована и не применялась. UI red/green и запись для конкретного приложения — его workflow; Broker отвечает за используемые им общие механизмы worker/guest execution и артефактов.
Четыре платформенных архива rc.26 и отдельный plugin находятся в `dist/` с SHA256SUMS. Runtime probes архивов прошли; результаты AMD64 получены через эмуляцию. Native AMD64 этим не подтверждён. Старые live coding runs ниже относятся к прежним образам.
В актуальном `docs/work-plan.md` остаются собственные задачи Broker: согласованное развёртывание принятых бинарников/образов/bootstrap/plugin, универсальная подготовка стеков Linux/macOS, immutable tooling/Git caches, run-to-run artifact inputs и retention holds. Настраиваемый remote-action API — отдельное будущее расширение; обычный локальный агент может работать по SSH без него. Native AMD64 и off-host/Keychain disaster recovery остаются отдельными неподтверждёнными границами заявляемой поддержки. Физический iPad не является release gate Broker.
## Что остаётся у Broker
### Пересмотр патчей Balda после ревью — 2026-10-14
| Область | Состояние |
| --- | --- |
| Согласованное развёртывание | Не выполнено для кандидата: Broker/gateway, Runner/Callee, workflow/config pins, VM bootstrap и plugin должны составлять один принятый комплект |
| Финальная live-приёмка | После обновления нужны реальный conversational run, артефакты, credential settlement, cleanup и outage/restart на совместимой версии Balda |
| Универсальная подготовка стеков | В плане: версии инструментов, проверенные источники, readiness probes и восстановимое изменение окружения для Make/C/C++, CMake/Ninja, Python, Node, Rust/JVM на Linux/macOS |
| Immutable caches | Общие tooling/Git caches остаются в плане; существующий Go SDK cache не является универсальным provisioning |
| Артефакты между запусками | Digest-bound inputs и retention holds остаются в плане |
| Платформы и recovery | Native AMD64 и восстановление после потери хоста/Keychain не подтверждены |
Старая `codex/production-readiness` / `223b85ad` — отклонённый прототип. Текущая `codex/ingress-outbox-v2` в `/private/tmp/execution-broker-balda-upstream` имеет HEAD `085a0d435f727a1f4628a3259998c6498d42fcf2`. База завершённых локальных проверок и саморевью — `9dcd366023105e217467510ef39582c2133ac5b9`, включённая merge-коммитом `09224f7e`. При открытии PR upstream продвинулся до `9cb3c2d7` (только QA layout test); ветка 1 behind / 7 ahead, конфликтов нет, дерево чистое, go.mod/go.sum не менялись. По явному запросу владельца ветка опубликована в `mallexxx/balda`, открыт [upstream PR #52](https://github.com/baldaworks/balda/pull/52), ready for review. GitHub CI запустился; его результат хранится отдельно от завершённых локальных проверок. Deploy не выполнялся.
В текущих `broker.json` и `worker.json` сохраняется drift image pins для `linux-smoke` и `linux-opencode-deepseek`; три coding-профиля содержат Docker socket. Защиты rc.26 запрещают такой доступ и отклоняют несовпадение pin до allocation, но прежний production-контур этих новых защит не получает.
Повторное ревью выявило, что прежний replay-only фикс `4713490a` не закрывал webhook P1: pinned tgbotkit возвращает HTTP 200 до handler, поэтому второго callback или исходного text update может не быть. Этот вывод исправляет предыдущую оценку готовности. Коммит `085a0d43` сохраняет ответ и два recovery-маркера одной SQL-операцией. Отдельный `jobs/questionoutbox` запускается через Fx и автономно восстанавливает continuation после ошибки admission или рестарта без нового inbound. После durable receipt admission помечается отдельно, затем через общий outbox сохраняется очистка controls. Ошибка cleanup не переотправляет continuation; положительный Selected следует receipt. Поздняя привязка нового delivery ref возобновляет только cleanup, старый ref не может завершить новую очистку. Повтор идентичного delivery и уже завершённой очистки не создаёт её заново.
Источник объёма работ — `/Users/admin/Developer/execution-broker/docs/work-plan.md`. Настраиваемый remote-action API — отдельное будущее расширение. iPad, прикладные UI/PR workflows, search/Obsidian и общая политика прав локального агента принадлежат Balda или конкретному проекту. Новая политика доступа к Obsidian этим прогоном не вводилась.
Новый regression использует настоящий pinned webhook/runtime, один HTTP update, production control publisher и Telegram adapter/messenger. Десять случаев — callback/text × ошибка AppKV, остановка до admission, ошибка до записи admission-маркера, commit маркера с ошибочным результатом, ошибка admission cleanup — проходят close/reopen SQLite и автономное восстановление без bot/второго callback. Проверяются ровно один continuation, сохранённый ответ и отсутствие раннего удаления controls/положительного ack. Отдельные контракты SQLite/PostgreSQL проверяют restart, delivery binding и независимые маркеры; миграционные тесты сохраняют прежние данные.
## Balda: PR #52 и восстановление ingress
Выполнено самостоятельное ревью всего diff относительно upstream: 58 файлов, включая предыдущие outbox/NATS/architecture/CI/path fixes, новые файлы и документацию. В ходе него отдельный тест воспроизвёл повтор завершённой очистки; ошибка исправлена до финальных проверок. Хэши всех 58 файлов совпали с итоговым коммитом. Это self-review основного агента, не независимый PR review.
[PR #52](https://github.com/baldaworks/balda/pull/52) открыт из `085a0d43` в `baldaworks/balda:main`. Все восемь required checks прошли: lint, test, SQLite/PostgreSQL integrations, architecture lint, projection replay, JetStream, ingress E2E. Дополнительно прошли native-launch jobs **Ubuntu, macOS и Windows** — всего 11/11 SUCCESS. Это проверки Balda; native AMD64 acceptance Broker остаётся отдельной границей.
На окончательном коде прошли `go test -race ./...` в штатном macOS TMPDIR, полные SQLite/PostgreSQL integration race suites, lint (0 issues), architecture, govulncheck (0 reachable vulnerabilities), обе Goose validations, настоящий projection replay 15 раз, JetStream, все ingress job packages, explicit native macOS MCP/stdio/provider/upgrade scenarios и build. PostgreSQL 17-alpine был одноразовым и удалён после тестов. Test cache использовался штатно. Это локальные проверки macOS ARM64; GitHub coverage upload и native Windows/Linux jobs не объявляются выполненными. Первые неудачные fixture/lint прогоны и red/green cleanup regression сохранены вместе с итоговыми логами.
Локально основной агент отревьюил весь diff из 58 файлов. Прошли полный `go test -race ./...` в штатном macOS TMPDIR, обе tagged SQL integration suites, lint, architecture, govulncheck, Goose validations, projection replay 15 раз, ingress/native MCP scenarios и build. Хэши проверенных файлов совпадают с HEAD PR. Одноразовый PostgreSQL удалён. GitHub CI завершился после локальных проверок; полный `test` job завершился 2026-10-14 14:13:40 UTC.
README, configuration, operations и architecture docs обновлены. SQL migrations — SQLite 63 / PostgreSQL 28; перед обновлением нужен согласованный backup. Исторические answered-записи автоматически не переигрываются, потому что их прежний admission неизвестен. Гарантия начинается с сохранённого SQL-ответа; HTTP 200 означает только приём transport. Сохраняются документированные границы: один publisher на state DB, outbox expiry до 24 часов, terminal dedupe/GC семь дней. Предыдущие исправления accepted после локального сохранения, retention и opt-in NATS budgets сохранены; `07546cae` по-прежнему исправляет CI selectors.
Durable admission сохраняет команду до receipt, background publication переживает NATS outage. Terminal receipts/tombstones собираются через семь дней, новые NATS budgets включаются только явно. Retry policy принадлежит `jobs/commandoutbox`, автономное восстановление ответов — `jobs/questionoutbox`; concrete wiring находится в `commandoutboxfx`.
Отчёт, история пересмотренных оценок, хэши self-review и логи: `/Users/admin/Developer/execution-broker/state/production-readiness-20261014/review-followup.json`. Beads `balda-7w4` закрыта после всех финальных проверок в явно локальной временной базе; это не shared upstream task. CLI: `/private/tmp/execution-broker-native-tools/bd`, в PATH не установлен; проектная база без issue_prefix не переинициализировалась.
Ответ и два recovery-маркера сохраняются одной SQL-операцией. Worker восстанавливает continuation без нового inbound, после receipt отдельно сохраняет cleanup controls. Ошибка cleanup не переотправляет continuation, положительный Telegram Selected следует durable admission. Late delivery binding и повтор завершённой очистки проверены. Regression использует реальный pinned webhook/runtime, production control publisher, один HTTP update и десять failure/restart случаев для callback/text; второго bot/callback после reopen нет.
SQLite migration **63** / PostgreSQL migration **28** требуют согласованного backup. Исторические answered-записи не переигрываются автоматически. Гарантия начинается с SQL settlement; webhook HTTP 200 означает transport intake. Сохраняются границы: один publisher на state DB, outbox pending lifetime до 24 часов, terminal dedupe семь дней. PR ещё не merged; его исправления не объявляются развёрнутыми.
Прежняя Balda `codex/production-readiness` / `223b85ad` — отклонённый прототип, оставленный для истории. Источником текущей реализации является PR #52. PR [#8](https://github.com/baldaworks/balda/pull/8) merged 2026-09-29, PR [#12](https://github.com/baldaworks/balda/pull/12) merged 2026-10-03.
## Навигация и доказательства
- [[personal/projects/balda/setup|Balda: действующая конфигурация и перезапуск]]
- [[personal/projects/balda/balda|Balda: обзор и актуальные PR]]
- `state/production-readiness-20261014/review-followup.json` — текущий Balda diff, self-review, проверки, PR/CI и история пересмотренных выводов.
- `state/production-readiness-20261014/local-checks.json` — исторический прогон Broker rc.26. Его результаты по старому Balda prototype не заменяют текущий review-followup.
- `state/production-readiness-20261014/balda-v5-reviewed-files.json` — хэши 58 проверенных файлов; полные логи лежат рядом.
- Beads `balda-7w4` закрыта в явно локальной временной базе. Это не shared upstream issue и не независимый PR review.
- [[personal/plans/balda-callee-prism-plan|Архив прежнего плана]], [[personal/projects/archive/balda-reference-before-2026-10-14|архив прежней карточки и шаблонов]].
### История приёмки действующих версий
@@ -82,4 +111,5 @@ Detached HEAD — штатный checkout закреплённой ревизи
`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`; они не объявлены реализованными этой приёмкой.
Подробные контракты: `docs/telegram-approvals.md`, `docs/operations.md`, `docs/protocol.md`, `docs/testing.md`. Собственные задачи Broker и границы релиза перечислены в `docs/work-plan.md`. iPad, search/Obsidian, общие права локального агента и персональные workflows относятся к вызывающему проекту или Balda; они не являются release gates Broker.