diff --git a/personal/plans/balda-callee-prism-plan.md b/personal/plans/balda-callee-prism-plan.md index 99b07649..4e31ae8b 100755 --- a/personal/plans/balda-callee-prism-plan.md +++ b/personal/plans/balda-callee-prism-plan.md @@ -1,6 +1,6 @@ # Balda / Execution Broker — план приёмки -Проверено: **2026-10-15**. Общая release-ready приёмка ещё не закрыта. Точные работающие версии и доказательства: [[personal/projects/balda/execution-broker]]. Запуск двух Balda: [[personal/projects/balda/setup]]. +Проверено: **2026-10-16**. Общая release-ready приёмка ещё не закрыта. Точные работающие версии и доказательства: [[personal/projects/balda/execution-broker]]. Запуск двух Balda: [[personal/projects/balda/setup]]. ## Контур @@ -16,13 +16,16 @@ Balda ведёт исходную беседу и durable waits; Broker упра - Read-only permission-handler Claude/OpenCode отклоняет инъецированные ACP-запросы записи; тестовый файл не создаётся. У OpenCode native plan policy не менялась. - Исправленные macOS bootstrap развёрнуты; прежние архивы и конфиг сохранены для отката. Подготовлен защищённый GPG escrow; шесть тестов используют синтетические ключи. +- Production macOS27/Codex принят на Virfield `8bfff9f`: фактический owner-approved continuation, reviewer `os.open` → EPERM, восемь заново скачанных SHA256-проверенных артефактов, независимый повтор четырёх тестов, закрытая Prism Story, credentials свободны и cleanup подтверждён. Приватное доказательство: `state/broker-acceptance-20261016/verification.json`. Задача `.6.4` закрыта; старые неудачные попытки сохранены как история. +- Reviewer fix `6c70647` перенесён в текущую ветку Broker; добавлены развёрнутое Darwin zombie-group исправление и native regression. Исходный workflow совпадает с принятым macOS pack `b09f2be2`. Рабочие ключи не экспортировались. + ## Открытые границы | Область | Условие завершения | | --- | --- | | Recovery после потери хоста | Отдельная гарантия: независимый recovery public key или secret store, off-host escrow и восстановление реальных аккаунтов; рабочие ключи пока не экспортированы. Обычный restart/reuse принят; исправления Virfield/Docker от выбора escrow не зависят | | Provider failure lifecycle | Реальные expiry/upstream revocation и повторная авторизация на отдельных тестовых identity; рабочую Claude-сессию отзывать запрещено | -| macOS worker readiness / Codex | Три старые production-попытки, последняя на `614daf5`, получили `guest_keychain_failed` до bootstrap; все lease released. Installed `f60efe3` + Standard service ещё не проходили Broker/macOS27 повторную приёмку. Закрытие: native GUI/new SSH/console, production Story, Codex denied-write, tests/artifacts/checkpoint/release. Единый record — [[personal/projects/virfield]] и Virfield `docs/VERIFICATION.md#broker-macos27-reacceptance` | +| Linux Codex rollout | Новый reviewer-deny workflow уже работает на macOS, но production Linux image/gateway закреплены на прежнем digest. Подготовлен image `e9e1ab5e8c0f` с неизменными Runner/Callee/Codex binaries; настоящие sandbox write-denial checks прошли. Смена двух pins и перезапуск Broker/gateway ожидают явного разрешения: автоматическая проверка отклонила production rollout | Задачи и их статусы ведутся в локальном Beads/Prism, корневая Story `eb-71b7971ac3fdd03b8ff6b198`. Этот документ задаёт границы приёмки, а не второй backlog. Контракты и команды — в `docs/work-plan.md`, `docs/support.md`, `docs/recovery.md`, `docs/executors.md` репозитория Broker. diff --git a/personal/projects/balda/execution-broker.md b/personal/projects/balda/execution-broker.md index 02f950d3..d786b359 100755 --- a/personal/projects/balda/execution-broker.md +++ b/personal/projects/balda/execution-broker.md @@ -1,19 +1,19 @@ # Execution Broker — эксплуатация -Проверено: **2026-10-15** по исходникам, работающим контейнерам и реальным запускам. Полная release-ready приёмка ещё не завершена. +Проверено: **2026-10-16** по исходникам, работающим контейнерам и реальным запускам. Полная release-ready приёмка ещё не завершена. ## Развёрнутый комплект | Компонент | Текущее состояние | | --- | --- | | Репозиторий | `/Users/admin/Developer/execution-broker`, `codex/production-readiness`; основной комплект `fee5409`, Broker hotfix `1b09e0f` | -| Broker | `execution-broker:1b09e0f`, версия `0.1.0-rc.32+approval30.1b09e0f`, immutable SHA256 pin в Compose | +| Broker | `sha256:921bb903be546b4703ed17d994cda3357421729a72383dfb1199c84f25349122`, версия `0.1.0-rc.32+approval30.1b09e0f`; исправленные macOS assets и workflow закреплены отдельно | | Gateway | `sha256:f13b362a49100050a1ae8a70db1a9c7a4d7e059dc7d71b413dc29b681ab21f99`, версия `0.1.0-rc.32+nested-sandbox`; проверенный `nested-v1` включён только для `linux-codex-default` | | Prism | `execution-prism-adapter:fee5409`, версия `0.1.0-rc.32` | | Smoke worker | `execution-broker-worker:fee5409`; один SHA256 image pin в Broker и gateway | | OpenCode worker | `execution-broker-executors:workflow-alias-20261015`, image `sha256:99e4c786a47fe03877dd4d8186528a5e4fe8676f5677116f89c8543e1d942734`; одинаковый pin в Broker/gateway, оба workflow `docker/story` и `opencode/story`, Go SDK 1.26.9 | -| Codex Linux worker | `sha256:5e8568bd1d8cb57af791ac28647ea6278dec894645da866539d0079ff14d204f`; фиксированный одинаковый pin в Broker/gateway, отдельные enforce-mode AppArmor/seccomp `nested-v1` | -| macOS bootstrap | Codex/Claude/OpenCode — три пакета `*-c5f63ef.tar.gz` с исправленным ACP launcher и фильтрацией runtime links; Runner/Callee binaries прежнего комплекта. Xcode — `macos-xcode-fee5409.tar.gz`. SHA256 и rollback config в `state/provider-acceptance-20261015/` | +| Codex Linux worker | Пока `sha256:5e8568bd1d8cb57af791ac28647ea6278dec894645da866539d0079ff14d204f`; image/gateway workflow digest `686a6269` расходится с новым Broker `b09f2be2`. Подготовлен `sha256:e9e1ab5e8c0f9f7c64d441d68a5c3c6db34462e641bbeb7b38367d1c9a194fea`: runtime binaries неизменны, reviewer deny и новый digest; production rollout ещё не выполнен | +| macOS bootstrap | Codex: `macos-codex-review-probe-20261016.tar.gz`, SHA256 `463f47ce73bc76e02082faa8b34f3619a135012ee1f077bff5aa536cd7843d62`, Runner с Darwin zombie-group fix, workflow `b09f2be2` и ограниченный ACP audit. Claude/OpenCode сохраняют `*-c5f63ef.tar.gz`; Xcode — `macos-xcode-fee5409.tar.gz`. Старые assets/config сохранены | | Оба Balda | Чистый upstream `b5f7d5b4`, image `sha256:6703dfc84b0d383cd0bbdd014a803074963a1ce87a11ae036b46cd3a3c0389bd`; подробности в [[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 проверены | @@ -47,7 +47,7 @@ Managed lifecycle и native wait restart проверены на развёрн - 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 подтверждён. -- Codex на macOS: две полные Story на свежих VM, включая restart Broker/issuer и восстановление того же run; quality, SHA256 всех артефактов, независимый повтор unit tests, credential checkpoint и cleanup подтверждены без нового OAuth. Три последующие production-попытки остановились до bootstrap на Virfield `guest_keychain_failed`; последний проверенный installed — `614daf5`, все три lease released, cleanup=done. Позднейшие `f60efe3` и миграция службы в Standard ещё не проверены через Broker/macOS27. Gate повторной native GUI/new SSH/console и production Story остаётся открытым; исход новой сборки не установлен. Изолированный успех не считается завершением этой проверки. +- Codex на macOS: production gate принят 2026-10-16 на installed Virfield `8bfff9f`. Story `eb-3b52387d73c10e8d64ad1ef2`, итоговый run `run-12f093299e237f03a7bb9b70327efcc5` использовал реально сохранённый owner-approved plan. Reviewer фактически выполнил `os.open` и получил EPERM; восемь артефактов повторно скачаны и сверены по size/SHA256, независимый checkout прошёл четыре теста, содержит ровно два новых committed файла и остаётся чистым. Prism Story closed, `succeeded`, `cleanup=done`; все три credential identity unrevoked/unowned, Virfield workers/jobs — 0, девять goldens сохранены. Две более ранние свежие VM Story/restart и три исторические pre-bootstrap ошибки сохранены в прежних receipts. Текущая проверка закрывает macOS readiness и Codex denied-write. - Реальные 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: все четыре платформы — native. Linux AMD64 проверен на физическом htpc x86_64; Darwin AMD64 — на MacBook Pro 13″ 2014, Intel i5-4278U, macOS 12.6.8 (21G725), Python 3.8.9 через pinned Virfield SSH. Оба AMD64-прогона проверили семь binaries, MCP/auth rejection, synthetic vault import/revoke, SQLite backup и graceful shutdown; рабочие provider credentials не использовались. @@ -58,13 +58,21 @@ Managed lifecycle и native wait restart проверены на развёрн | Область | Что остаётся | | --- | --- | -| macOS worker readiness | Три production-попытки, последний installed `614daf5`, получили `guest_keychain_failed` до Runner/Callee; все lease released. Позднейшие `f60efe3` + Standard service ещё не проходили Broker/macOS27 повторную приёмку. Нужны native GUI/new SSH/console readiness, production Story и Codex denied-write; [единый Virfield record](https://github.com/mallexxx/virfield/blob/codex/retire-lume-release-hardening/docs/VERIFICATION.md#broker-macos27-reacceptance) содержит критерии закрытия; точные job/lease — в [[personal/projects/virfield]] | +| Linux Codex rollout | Production macOS gate закрыт; source reviewer fix `6c70647` перенесён в текущую ветку, Darwin zombie-group fix и regression добавлены. Обнаружено расхождение общего `prism/story`: Broker `b09f2be2`, gateway/Linux image `686a6269`. Новый image `e9e1ab5e8c0f` подготовлен, бинарники сверены, credential-free реальные read-only и workspace-write boundary checks прошли, собственный fixture удалён. Переключение pins и перезапуск Broker/gateway отклонены автоматической проверкой из-за отсутствия явного разрешения на production rollout. Запрошено решение владельца; production не менялся | | Recovery | Выбран порядок: unattended восстановление рабочих ключей из защищённой копии, затем OAuth при неудаче восстановления/refresh. Это отдельная гарантия восстановления после потери хоста/Keychain; обычный restart и повторное использование авторизаций уже проверены. Production escrow ещё не настроен: нужен независимый recovery public key или secret store. Отсутствие escrow не блокирует исправления Virfield/Docker. Подготовлен helper для GPG escrow исходных master keys и безопасного восстановления key-files/Keychain; шесть тестов с синтетическими ключами прошли, включая восстановление encrypted vault, отказ при порче/чужом recipient и запрет замены существующего ключа. Рабочие master keys не экспортировались; production host-loss recovery не принят | | Docker providers | Linux OpenCode/DeepSeek прошёл две полные Story на свежих workers: реальные роли, повторное выполнение quality assertions, SHA256 всех артефактов, restart Broker/issuer, credential checkpoint/reuse, `cleanup=done`, без нового OAuth. Linux Claude также прошёл две полные Story на свежих workers, включая restart Broker/issuer: шесть ролей, независимый повтор unit tests, SHA256 семи артефактов каждого запуска, checkpoint и cleanup подтверждены; новый OAuth не понадобился. Linux Claude прошёл также component-проверку: фактический permission-handler обеих read-only ролей отклонил инъецированные ACP-запросы записи; marker не создан. Expiry/upstream revocation остаются открыты. Linux Codex прошёл две полные Story на свежих workers с `nested-v1`: все шесть ролей, quality, независимые unit tests (4/4 и 3/3), SHA256 артефактов, restart Broker/gateway/issuer, checkpoint/reuse и cleanup. Штатный Codex fallback сохраняет Docker proc masks; отдельные AppArmor/seccomp профили сохраняют non-root, cap-drop, read-only root и no-new-privileges. Реальная попытка записи в read-only workspace отклонена. Исправление `f9ca7c3`, gateway развёрнут с точным worker pin; итоговая Story через production Broker/Prism также прошла все шесть ролей, quality, независимые unit tests (3/3), SHA256 артефактов и cleanup=done. Default Docker policy не поддерживает нужные namespaces. Expiry/upstream revocation остаются отдельными gates. Проверка запрета записи OpenCode прошла на Linux и свежей macOS VM: обе read-only сессии получили прямые ACP-запросы записи, Callee отклонил их, marker отсутствовал; native plan policy не менялась. Это protocol fault injection, а не попытка tool call, выбранная моделью | | Provider lifecycle | Для macOS Claude не закрыта реальная expiry/upstream revocation; для macOS OpenCode/DeepSeek — upstream revocation; component-проверка фактического ACP-запрета записи обеими read-only ролями прошла на свежей VM с неизменённой native policy. Claude умеет сохранить явный отказ native cache как reauthentication-required и запросить OAuth при следующем admission; это не доказательство реальной provider-приёмки | Источник требований — `docs/work-plan.md`. iPad, прикладные UI/PR workflows и права Obsidian принадлежат вызывающему проекту или Balda. +## Проверка 2026-10-16 + +Доказательства и копии артефактов перенесены из временного Virfield-каталога в `state/broker-acceptance-20261016/`. `verification.json` подтверждает заново прочитанное production состояние, download/hash всех восьми артефактов, независимые тесты и credential settlement. `linux-policy-image.json` и `linux-policy-sandbox.json` фиксируют подготовленный Linux image и настоящий запрет записи без provider credentials и сети. История fixture timeout сохранена в рабочем протоколе; окончательный прогон использовал штатную схему worker (`sleep` PID1, Codex child) и подтвердил cleanup. + +Итоговые `make check` (race/vet и штатные script gates), Callee compatibility/race, source и binary Govulncheck прошли; достижимых уязвимостей нет. Publication check — 360 файлов. Дополнительный Staticcheck 0.7.0 сообщил 28 замечаний в файлах, побайтно неизменных относительно `6c70647`; этот checker не настроен как обязательный CI gate. Его полный результат сохранён в `staticcheck.log`, а статусы всех проверок — в `source-validation.json`. + +Beads `.6.4` закрыта. `.6.5` — production Linux rollout, `.6.6` — реальные provider expiry/revocation; `.4` — host-loss recovery. Общая Story остаётся открытой. В локальном GPG нет public recipient, отдельные test identity отсутствуют; подготовлен `escrow-plan.json` для трёх рабочих identity, без экспорта master keys. Для продолжения нужны production rollout approval, независимый recovery recipient/store и off-host destination, а также отдельные тестовые identity и разрешение их отзыва. Рабочую Claude-сессию не отзывали. + ## Конфигурация и восстановление Приватный Compose: `state/deploy/compose.production.json`; конфиги `broker.json`, `worker.json`, assets в `state/deploy/assets`. Токены находятся только в secret-файлах.