diff --git a/personal/plans/balda-callee-prism-plan.md b/personal/plans/balda-callee-prism-plan.md index 4da5b137..7a1952e4 100755 --- a/personal/plans/balda-callee-prism-plan.md +++ b/personal/plans/balda-callee-prism-plan.md @@ -19,13 +19,15 @@ Balda ведёт исходную беседу и durable waits; Broker упра - 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`. Рабочие ключи не экспортировались. +- Linux rollout и production-приёмка нового image `e9e1ab5e8c0f` закрыты: одинаковый `b09f2be2` в Broker/gateway/worker, два успешных прогона с независимым повтором 4/4 тестов, проверенные SHA256 артефактов. Отмена во время implementer сохранила пять артефактов и checkpoint. Restart Broker/gateway/issuer сохранил тот же run/deadline/owner; после успеха credentials освобождены, собственных container/volume нет, Prism Story закрыта и повторный sync пуст. Beads `.6.5` closed; `.6.4` macOS также closed. +- Итоговые source gates: `make check`/race/vet, Callee adapter, Staticcheck 0 findings, source/binary vulnerability checks, secret scans source/трёх наборов артефактов, сборка семи binaries на четырёх OS/arch targets прошли. Результаты: `state/broker-acceptance-20261016/production-cycle-final.json`. + ## Открытые границы | Область | Условие завершения | | --- | --- | | Recovery после потери хоста | Отдельная гарантия: независимый recovery public key или secret store, off-host escrow и восстановление реальных аккаунтов; рабочие ключи пока не экспортированы. Обычный restart/reuse принят; исправления Virfield/Docker от выбора escrow не зависят | | Provider failure lifecycle | Реальные expiry/upstream revocation и повторная авторизация на отдельных тестовых identity; рабочую Claude-сессию отзывать запрещено | -| Linux Codex rollout | Явное разрешение получено, rollout image `e9e1ab5e8c0f` выполнен при нуле активных runs. Broker/gateway/worker согласованы на `b09f2be2`, health 200, реальные container config и image pack сверены. Старые конфиги/образы сохранены. Автоматическая проверка отдельно отклонила проверочную production Story; запрошено разрешение на весь конкретно описанный приёмочный цикл | Задачи и их статусы ведутся в локальном 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 dcbea850..7bd9a456 100755 --- a/personal/projects/balda/execution-broker.md +++ b/personal/projects/balda/execution-broker.md @@ -12,7 +12,7 @@ | 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`; image/gateway workflow digest `686a6269` расходится с новым Broker `b09f2be2`. Подготовлен `sha256:e9e1ab5e8c0f9f7c64d441d68a5c3c6db34462e641bbeb7b38367d1c9a194fea`: runtime binaries неизменны, reviewer deny и новый digest; production rollout ещё не выполнен | +| Codex Linux worker | `sha256:e9e1ab5e8c0f9f7c64d441d68a5c3c6db34462e641bbeb7b38367d1c9a194fea`; согласованные Broker/gateway/worker pins `b09f2be2`, reviewer deny, `nested-v1`. Runner/Callee/Codex binaries побайтно совпадают с прежним принятым `5e8568bd`; новая policy прошла production Story, отмену и restart/reuse | | 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 сохранены | @@ -58,7 +58,6 @@ Managed lifecycle и native wait restart проверены на развёрн | Область | Что остаётся | | --- | --- | -| 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-приёмки | @@ -67,11 +66,17 @@ Managed lifecycle и native wait restart проверены на развёрн ## Проверка 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. +Доказательства и копии артефактов сохранены в `state/broker-acceptance-20261016/`. `verification.json` подтверждает macOS production Story, восемь повторно скачанных артефактов, независимые четыре теста, реальный reviewer EPERM и credential settlement. Source fixes перенесены в текущую ветку; функциональные изменения сохранены в `ee2ed5a`, чистый Staticcheck — в `a80a471`. -Итоговые `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`. +Linux rollout выполнен после явного разрешения владельца и при нуле активных runs. Реальные container config и image pack сверены: новый image `e9e1ab5e8c0f`, workflow `b09f2be2` у Broker/gateway/worker, health 200. Старые конфиги/образы сохранены. `linux-policy-promotion.json`, `linux-policy-live-config.json` и `linux-policy-sandbox.json` содержат проверку pins, настоящие sandbox write-denial checks и cleanup. -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-сессию не отзывали. +Production Story `run-d643dd9154d4766fe82b72805dabdc9e` завершилась `succeeded/cleanup=done`: implementation, verifier, reviewer, quality, семь SHA256-проверенных артефактов. Независимый checkout повторил четыре unit tests и подтвердил ровно два авторских source files. Повторный fresh-worker run `run-37e61ecfcc08925e14b1531ef84b8b57` пережил restart Broker/gateway/issuer во время implementation: тот же run, исходный deadline и credential owner generation170 сохранились; затем `succeeded/cleanup=done`, ещё семь проверенных артефактов, независимые 4/4 tests и generation172 checkpointed/unowned/unrevoked. Файлы `production-linux-independent-verification.json` и `production-linux-restart-independent-verification.json`. + +Отдельная отмена `run-b2625286a00b071284fa48ad00952c7c` во время implementer дала `canceled/cleanup=done`, сохранила пять хешированных артефактов и credential checkpoint; generation167→169, owner cleared, revoked=false. Собственных worker containers/volumes после трёх запусков нет. Prism спроецировал все исходы, закрыл Story `eb-230154345220ae67e434f774`; повторный sync пуст. Все три рабочие credential identity свободны и unrevoked. Итог — `production-cycle-final.json`; секреты в трёх наборах артефактов не найдены. + +Итоговые `make check` (race/vet/scripts), Callee compatibility/race, Staticcheck (0 findings), source/binary Govulncheck и source/artifact secret scans прошли. Достижимых уязвимостей нет. Семь binaries собраны для Darwin/Linux ARM64/AMD64; это cross-build gate, не новая native archive-приёмка. Результаты — `source-validation.json`, `cross-build.json`, `staticcheck-final.log`. + +Beads `.6.4` macOS и `.6.5` Linux закрыты. Общая Story остаётся открытой по двум первоначальным пунктам: `.4` — host-loss recovery, `.6.6` — реальные provider expiry/revocation. Не выбран независимый recovery recipient/store и reachable off-host destination; локальных GPG public keys/rclone remotes нет, настроенный HTPC SSH route недоступен, Kraken не прошёл SSH banner. Отдельных test identity в vault нет; нужны аккаунты и разрешение отзыва только их авторизаций. Подготовлен `escrow-plan.json` для трёх рабочих identity, master keys не экспортировались; рабочие сессии не отзывались. Предыдущие автоматические отказы rollout/production-прогонов сняты явными подтверждениями владельца; соответствующие разрешённые действия выполнены. ## Конфигурация и восстановление @@ -90,9 +95,3 @@ Backup перед текущим обновлением: `state/backups/20261015 Актуальные согласованные state/home/config backups обоих Balda и exact image/binary hashes после обновления на чистый upstream `b5f7d5b4`: `state/balda-upstream-merged-20261015/`, итог — `final-verification.json`. Предыдущие backup и restart/native/off-host fixture receipts: `state/balda-upstream-hooks-20261015/`; более ранние state/home backups: `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. Native Darwin AMD64 proof: `state/balda-pr62-review-20261015/native-darwin-amd64.json`. Проверочный скрипт поддерживает штатный Python 3.8; публичные rc32 archives не перезаписывались. Приватные отчёты не входят в 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`. - -## Продолжение приёмки 2026-10-16 - -После явного разрешения владельца Linux rollout выполнен: новый image `e9e1ab5e8c0f`, Broker/gateway/worker workflow `b09f2be2`; до переключения активных runs не было, health после перезапуска 200. Реальные конфиги контейнеров и actual image pack независимо сверены. Proof: `state/broker-acceptance-20261016/linux-policy-promotion.json`, `linux-policy-live-config.json`; прежние конфиги в `linux-policy-before/`, старый image сохранён. Предыдущие формулировки выше о невыполненном rollout относятся к состоянию до согласия владельца. - -Все 28 замечаний Staticcheck устранены; повторный Staticcheck и `make check` прошли, тар-совместимость отдельно проверена после удаления избыточной проверки устаревшего флага. Все семь binaries собираются для Darwin/Linux ARM64/AMD64 (`cross-build.json`); это build gate, не новая native runtime-приёмка. Production Story на новом image подготовлена с неизменным ранее одобренным fixture, однако запуск отклонён автоматической проверкой: разрешение rollout/restart она не распространила на production-прогон и provider usage. Запрошено явное разрешение на конкретный оставшийся приёмочный цикл. Новый run пока не создан; рабочие авторизации не отозваны.