From f4fdfcb93a0da2041153ea85cdedc54f4a647ed7 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 19 Oct 2026 12:33:21 +0600 Subject: [PATCH] [2026-10-19] eagle: personal/plans/balda-remote-agent.md personal/plans/workspace-gateway.md personal/projects/balda/balda.md personal/projects/balda/setup.md personal/projects/balda/ssh-acp-verification-2026-10-18.md personal/projects/balda/ssh-client-route-2026-10-19.md personal/projects/balda/ssh-seatbelt-2026-10-18.md --- personal/plans/balda-remote-agent.md | 33 ++++++---- personal/plans/workspace-gateway.md | 33 ++++++---- personal/projects/balda/balda.md | 10 +-- personal/projects/balda/setup.md | 35 +++++----- .../balda/ssh-acp-verification-2026-10-18.md | 2 +- .../balda/ssh-client-route-2026-10-19.md | 66 +++++++++++++++++++ .../projects/balda/ssh-seatbelt-2026-10-18.md | 2 +- 7 files changed, 132 insertions(+), 49 deletions(-) create mode 100644 personal/projects/balda/ssh-client-route-2026-10-19.md diff --git a/personal/plans/balda-remote-agent.md b/personal/plans/balda-remote-agent.md index 0c0913bc..01210691 100644 --- a/personal/plans/balda-remote-agent.md +++ b/personal/plans/balda-remote-agent.md @@ -1,27 +1,32 @@ # Balda — удалённый агент по SSH -## Текущее состояние — сверено 2026-10-19 05:41 UTC +## Текущее состояние — сверено 2026-10-19 06:30 UTC -Актуальная сводка: [[personal/projects/balda/setup]]. Разделы с прежними версиями и планами ниже сохраняются как исторический журнал; они не заменяют эту сводку. - -| Компонент | Текущее состояние | +| Компонент | Проверенное состояние | | --- | --- | -| SSH Manager | 0.3.1, `afa3813`, 8 MCP-инструментов; импорт существующего Mac SSH alias без повторной передачи server key; `127.0.0.1:17796` | -| Workspace Manager | `0c82b8f`, 4 MCP-функции, native SMB3, `127.0.0.1:17795`; root только `developer: /Users/admin/Developer`, recipient `balda` | -| Balda | `254f3e29`, контейнер `balda-mm-mac`, provider `pool`, permissions `ask`; последний старт `2026-10-19T05:34:41.958112077Z` | -| Код и рабочие деревья | Все три checkout чистые; active SSH Manager binary SHA256 `f46fb2f4040ac33e94440f95556052e65f3c4e98d9b88b48c9db18d952749376` | +| SSH Manager | 0.3.2, `a86df58`, 8 MCP-инструментов, `127.0.0.1:17796` | +| Workspace Manager | `0c82b8f`, четыре функции, native SMB3, `127.0.0.1:17795`; root только `developer`, recipient `balda` | +| Balda | `3e86b995`, `balda-mm-mac`, provider `pool`, permissions `ask`; старт `2026-10-19T06:28:48.664493362Z` | +| Проверка установленного SSH-ключа | Реальный контейнер Balda, `registered`, `client_verified_at=2026-10-19T06:29:15.692883Z`; прежний key id сохранён | +| Исходники / runtime | Все три checkout чистые; build metadata обоих исправленных binaries указывает на эти чистые commits; активные hashes/inode проверены | -SSH: для уже доступного с Mac хоста достаточно alias; native SSH config/Include и доверенные known_hosts дают адрес, логин, порт и server key. Проверяется существующая аутентификация. Новый host получает отдельную identity; добавление/удаление, установка/отзыв ключа требуют штатного подтверждения владельца. Изоляция принимается до установки execution-ключа. Нет привязки к Kraken. Сейчас в inventory только `mac` и `mac-relay`; постоянная запись Kraken удалена, пустому relay запрещён forwarding. Последний тест случайных SSH aliases прошёл на установленном бинарнике: import, native isolation/ProxyJump, restart, revoke/remove. +SSH Manager импортирует существующий Mac SSH alias из native config/Include и доверенных known_hosts, проверяя существующую аутентификацию; повторно присылать server key для такого хоста не требуется. Для клиента отдельно проверяется маршрут: без `via` сначала pinned no-auth handshake из настроенного `client_container`; при сетевом отказе выбирается единственный зарегистрированный relay. Неизвестный или неверный pin не вызывает fallback; при нескольких relay нужен явный `via`. Owner-form включает точную замену relay key line с ограниченным permitopen. Хардкода Kraken или mac-relay в выборе маршрута нет. -Workspace: `workspace_folders`, `workspace_connect`, `workspace_disconnect`, `workspace_lease`; discovery выдаёт только папки. Доступ только к подтверждённой папке с RO/RW и сроком, без общего экспорта Developer/home. SMB отзывает существующие FD и истекает независимо от Manager. Сейчас журнал leases пуст. Дополнительные roots, включая Downloads, не включены. +Успех `ssh_authorize` теперь требует свежего SSH-вызова из фактического клиента его установленным dedicated key с проверкой случайного маркера. Ошибка сохраняет `installed_unverified` и возвращает tool error; удаление host до отзыва такого ключа запрещено. Существующий принятый доступ можно проверить/исправить без замены целевого ключа и sandbox policy. В operator config указан `client_container: balda-mm-mac`, volume проверяется read-only. -Balda: настроены `obsidian`, `virfield`, `workspace-manager`, `ssh-manager`, плюс встроенный `balda`. Legacy Broker/Prism MCP отсутствуют в runtime; plugin `execution-broker` выключен, оригинальные `prism`/`prism-callee` 0.7.0 включены. У Codex — `workspace-write`, writable grants только получателя и `--mcp-approval-policy=allow`; lookup не требует generic approval, изменения доступа подтверждаются владельцем. Ответы на native approval в Mattermost исправлены в `254f3e29`; новая проверка сообщений в пользовательский чат не отправляла. +Inventory сейчас: `mac`, `mac-relay`, `kraken`. Kraken добавлен владельцем через Balda в сессии по ссылке ниже; маршрут исправлен самим менеджером на `mac-relay → kraken`, relay ограничен текущим endpoint. Новый target key при исправлении не устанавливался, прежняя identity и изоляция сохранены. Отдельный независимый SSH-вызов UID 1000 из Balda вернул ожидаемый маркер. -Launchd Workspace/SSH/Beads-Dolt — running; HTTP `/backoffice/healthz` и `/backoffice/login` — 200. Последняя model policy приёмка: `01a15298-98b7-7de0-9274-b2cd63c61958` (workspace RW, outside deny, lookup без approvals). Alias-only model fixture: `01a152a5-8b64-7dc1-be62-d007ff3a09c5`; production Kraken import: `01a152a8-1659-7860-bc63-ea9e8a2d92ba` (Decline, личные SSH config/known_hosts и production доступы сохранены). +Balda: меню подтверждения рендерится один раз — permission layer передаёт готовую presentation, questions layer сохраняет structured options для ответа, но не дописывает второе меню. Regression проходит через permission review, session question delivery и decision resolution. Добавление host и установка ключа остаются двумя разными owner confirmations; дополнительные generic MCP approvals у Codex выключены, native изменения доступа подтверждаются владельцем. -Открытый объём исходного плана: полноценные Mac Codex/Claude/OpenCode model runs с отдельными CLI credentials/OpenCode network решениями, полный модельный Prism lifecycle и приёмка реальных project Beads DB. Shared Beads/Dolt concurrency и 14 Callee Role doctor проверены на fixture; реальные project DB не мигрировались. Это не блокирует принятые операции Workspace/SSH Manager и не считается завершённой полной агентной установкой. +MCP: `obsidian`, `virfield`, `workspace-manager`, `ssh-manager` и встроенный `balda`. Legacy Broker/Prism MCP отсутствуют в runtime, plugin `execution-broker` выключен, оригинальные Prism/Prism Callee 0.7.0 включены. Codex: `workspace-write`, дополнительный writable root только grants получателя, `--mcp-approval-policy=allow`. -Evidence: `~/.local/share/balda-workspace/candidate/operator-import.json`, `generic-host-manager.json`, `generic-host-policy.json`; исходная SMB/Beads приёмка — `/Users/admin/Developer/workspace-gateway/docs/acceptance-2026-10-18.md`. +Workspace: `workspace_folders`, `workspace_connect`, `workspace_disconnect`, `workspace_lease`; discovery только папок, выдача конкретной папки RO/RW с TTL. Downloads и общий Developer/home mount не включены. Lease journal пуст. Приняты SMB revoke существующих FD/expiry и shared Beads fixture; runtime Workspace в этом исправлении не менялся. + +Проверено: SSH race/vet/build; 15 native SSH lifecycle checks и 16 checks на случайных aliases в сети реальной Balda, включая alias-only import без via, автоматический relay, pin failure, retry, restart/revoke/remove. Реальная модель после финального deployment: `01a152d9-7d04-7f21-9597-91c259813c7c`, ровно одна Owner confirmation существующего key id, без generic MCP approval; client receipt выше. Полные 173 Balda package checks под race, golangci-lint и architecture checks — pass; launchd Workspace/SSH/Beads-Dolt running, health/login 200. Внешние тестовые сообщения Mattermost не отправлялись. + +Первичный провал приёмки: [сессия Mattermost](https://mm.qentra.top/qentra/pl/bjb4nhz6o3yoxqg9rs1qcpncjh). Причины и исправление: [[personal/projects/balda/ssh-client-route-2026-10-19]]. Evidence: `~/.local/share/balda-workspace/candidate/client-route/`; backup: `~/.local/share/balda-workspace/backups/client-route-20261019T062059Z`. + +Оставшийся исходный объём: полноценные удалённые Mac model runs с отдельными CLI credentials/OpenCode network решениями, полный модельный Prism lifecycle и реальные project Beads DB. Host Docker/socket/sudo authority не добавлялась: установленный target key по-прежнему ограничен принятой песочницей. Эти пункты не объявляются выполненными этим исправлением. ## Исторический журнал изменений и исходный план diff --git a/personal/plans/workspace-gateway.md b/personal/plans/workspace-gateway.md index c0f057f9..bb00f9ec 100644 --- a/personal/plans/workspace-gateway.md +++ b/personal/plans/workspace-gateway.md @@ -1,27 +1,32 @@ # Workspace Gateway — план -## Текущее состояние — сверено 2026-10-19 05:41 UTC +## Текущее состояние — сверено 2026-10-19 06:30 UTC -Актуальная сводка: [[personal/projects/balda/setup]]. Разделы с прежними версиями и планами ниже сохраняются как исторический журнал; они не заменяют эту сводку. - -| Компонент | Текущее состояние | +| Компонент | Проверенное состояние | | --- | --- | -| SSH Manager | 0.3.1, `afa3813`, 8 MCP-инструментов; импорт существующего Mac SSH alias без повторной передачи server key; `127.0.0.1:17796` | -| Workspace Manager | `0c82b8f`, 4 MCP-функции, native SMB3, `127.0.0.1:17795`; root только `developer: /Users/admin/Developer`, recipient `balda` | -| Balda | `254f3e29`, контейнер `balda-mm-mac`, provider `pool`, permissions `ask`; последний старт `2026-10-19T05:34:41.958112077Z` | -| Код и рабочие деревья | Все три checkout чистые; active SSH Manager binary SHA256 `f46fb2f4040ac33e94440f95556052e65f3c4e98d9b88b48c9db18d952749376` | +| SSH Manager | 0.3.2, `a86df58`, 8 MCP-инструментов, `127.0.0.1:17796` | +| Workspace Manager | `0c82b8f`, четыре функции, native SMB3, `127.0.0.1:17795`; root только `developer`, recipient `balda` | +| Balda | `3e86b995`, `balda-mm-mac`, provider `pool`, permissions `ask`; старт `2026-10-19T06:28:48.664493362Z` | +| Проверка установленного SSH-ключа | Реальный контейнер Balda, `registered`, `client_verified_at=2026-10-19T06:29:15.692883Z`; прежний key id сохранён | +| Исходники / runtime | Все три checkout чистые; build metadata обоих исправленных binaries указывает на эти чистые commits; активные hashes/inode проверены | -SSH: для уже доступного с Mac хоста достаточно alias; native SSH config/Include и доверенные known_hosts дают адрес, логин, порт и server key. Проверяется существующая аутентификация. Новый host получает отдельную identity; добавление/удаление, установка/отзыв ключа требуют штатного подтверждения владельца. Изоляция принимается до установки execution-ключа. Нет привязки к Kraken. Сейчас в inventory только `mac` и `mac-relay`; постоянная запись Kraken удалена, пустому relay запрещён forwarding. Последний тест случайных SSH aliases прошёл на установленном бинарнике: import, native isolation/ProxyJump, restart, revoke/remove. +SSH Manager импортирует существующий Mac SSH alias из native config/Include и доверенных known_hosts, проверяя существующую аутентификацию; повторно присылать server key для такого хоста не требуется. Для клиента отдельно проверяется маршрут: без `via` сначала pinned no-auth handshake из настроенного `client_container`; при сетевом отказе выбирается единственный зарегистрированный relay. Неизвестный или неверный pin не вызывает fallback; при нескольких relay нужен явный `via`. Owner-form включает точную замену relay key line с ограниченным permitopen. Хардкода Kraken или mac-relay в выборе маршрута нет. -Workspace: `workspace_folders`, `workspace_connect`, `workspace_disconnect`, `workspace_lease`; discovery выдаёт только папки. Доступ только к подтверждённой папке с RO/RW и сроком, без общего экспорта Developer/home. SMB отзывает существующие FD и истекает независимо от Manager. Сейчас журнал leases пуст. Дополнительные roots, включая Downloads, не включены. +Успех `ssh_authorize` теперь требует свежего SSH-вызова из фактического клиента его установленным dedicated key с проверкой случайного маркера. Ошибка сохраняет `installed_unverified` и возвращает tool error; удаление host до отзыва такого ключа запрещено. Существующий принятый доступ можно проверить/исправить без замены целевого ключа и sandbox policy. В operator config указан `client_container: balda-mm-mac`, volume проверяется read-only. -Balda: настроены `obsidian`, `virfield`, `workspace-manager`, `ssh-manager`, плюс встроенный `balda`. Legacy Broker/Prism MCP отсутствуют в runtime; plugin `execution-broker` выключен, оригинальные `prism`/`prism-callee` 0.7.0 включены. У Codex — `workspace-write`, writable grants только получателя и `--mcp-approval-policy=allow`; lookup не требует generic approval, изменения доступа подтверждаются владельцем. Ответы на native approval в Mattermost исправлены в `254f3e29`; новая проверка сообщений в пользовательский чат не отправляла. +Inventory сейчас: `mac`, `mac-relay`, `kraken`. Kraken добавлен владельцем через Balda в сессии по ссылке ниже; маршрут исправлен самим менеджером на `mac-relay → kraken`, relay ограничен текущим endpoint. Новый target key при исправлении не устанавливался, прежняя identity и изоляция сохранены. Отдельный независимый SSH-вызов UID 1000 из Balda вернул ожидаемый маркер. -Launchd Workspace/SSH/Beads-Dolt — running; HTTP `/backoffice/healthz` и `/backoffice/login` — 200. Последняя model policy приёмка: `01a15298-98b7-7de0-9274-b2cd63c61958` (workspace RW, outside deny, lookup без approvals). Alias-only model fixture: `01a152a5-8b64-7dc1-be62-d007ff3a09c5`; production Kraken import: `01a152a8-1659-7860-bc63-ea9e8a2d92ba` (Decline, личные SSH config/known_hosts и production доступы сохранены). +Balda: меню подтверждения рендерится один раз — permission layer передаёт готовую presentation, questions layer сохраняет structured options для ответа, но не дописывает второе меню. Regression проходит через permission review, session question delivery и decision resolution. Добавление host и установка ключа остаются двумя разными owner confirmations; дополнительные generic MCP approvals у Codex выключены, native изменения доступа подтверждаются владельцем. -Открытый объём исходного плана: полноценные Mac Codex/Claude/OpenCode model runs с отдельными CLI credentials/OpenCode network решениями, полный модельный Prism lifecycle и приёмка реальных project Beads DB. Shared Beads/Dolt concurrency и 14 Callee Role doctor проверены на fixture; реальные project DB не мигрировались. Это не блокирует принятые операции Workspace/SSH Manager и не считается завершённой полной агентной установкой. +MCP: `obsidian`, `virfield`, `workspace-manager`, `ssh-manager` и встроенный `balda`. Legacy Broker/Prism MCP отсутствуют в runtime, plugin `execution-broker` выключен, оригинальные Prism/Prism Callee 0.7.0 включены. Codex: `workspace-write`, дополнительный writable root только grants получателя, `--mcp-approval-policy=allow`. -Evidence: `~/.local/share/balda-workspace/candidate/operator-import.json`, `generic-host-manager.json`, `generic-host-policy.json`; исходная SMB/Beads приёмка — `/Users/admin/Developer/workspace-gateway/docs/acceptance-2026-10-18.md`. +Workspace: `workspace_folders`, `workspace_connect`, `workspace_disconnect`, `workspace_lease`; discovery только папок, выдача конкретной папки RO/RW с TTL. Downloads и общий Developer/home mount не включены. Lease journal пуст. Приняты SMB revoke существующих FD/expiry и shared Beads fixture; runtime Workspace в этом исправлении не менялся. + +Проверено: SSH race/vet/build; 15 native SSH lifecycle checks и 16 checks на случайных aliases в сети реальной Balda, включая alias-only import без via, автоматический relay, pin failure, retry, restart/revoke/remove. Реальная модель после финального deployment: `01a152d9-7d04-7f21-9597-91c259813c7c`, ровно одна Owner confirmation существующего key id, без generic MCP approval; client receipt выше. Полные 173 Balda package checks под race, golangci-lint и architecture checks — pass; launchd Workspace/SSH/Beads-Dolt running, health/login 200. Внешние тестовые сообщения Mattermost не отправлялись. + +Первичный провал приёмки: [сессия Mattermost](https://mm.qentra.top/qentra/pl/bjb4nhz6o3yoxqg9rs1qcpncjh). Причины и исправление: [[personal/projects/balda/ssh-client-route-2026-10-19]]. Evidence: `~/.local/share/balda-workspace/candidate/client-route/`; backup: `~/.local/share/balda-workspace/backups/client-route-20261019T062059Z`. + +Оставшийся исходный объём: полноценные удалённые Mac model runs с отдельными CLI credentials/OpenCode network решениями, полный модельный Prism lifecycle и реальные project Beads DB. Host Docker/socket/sudo authority не добавлялась: установленный target key по-прежнему ограничен принятой песочницей. Эти пункты не объявляются выполненными этим исправлением. ## Исторический журнал изменений и исходный план diff --git a/personal/projects/balda/balda.md b/personal/projects/balda/balda.md index db00c76a..55d77b5f 100755 --- a/personal/projects/balda/balda.md +++ b/personal/projects/balda/balda.md @@ -1,14 +1,16 @@ # Balda — актуальный обзор -Проверено: **2026-10-19** по активной конфигурации, работающим сервисам и журналам приёмки. Основной контейнер `balda-mm-mac`: Balda `254f3e29`, provider `pool`, permissions `ask`. Оригинальные Prism/Prism Callee 0.7.0 включены; прежний plugin Execution Broker выключен. Полная эксплуатационная сводка, версии и открытая работа: [[personal/projects/balda/setup]]. +Проверено: **2026-10-19** по активной конфигурации, работающим сервисам и журналам приёмки. Основной контейнер `balda-mm-mac`: Balda `3e86b995`, provider `pool`, permissions `ask`. Оригинальные Prism/Prism Callee 0.7.0 включены; прежний plugin Execution Broker выключен. Полная эксплуатационная сводка, версии и открытая работа: [[personal/projects/balda/setup]]. ## Текущее состояние -- **SSH Manager 0.3.1**: 8 MCP-инструментов, произвольные aliases; для существующего SSH-доступа Mac импортирует native config/Include и доверенные known_hosts, проверяет существующую аутентификацию. Повторно передавать server key для настроенного хоста не требуется. Добавление/авторизация — с подтверждением владельца, execution — после приёмки native изоляции. Постоянных настроек Kraken в inventory нет. +- **SSH Manager 0.3.2**: 8 MCP-инструментов, произвольные aliases; для существующего SSH-доступа Mac импортирует native config/Include и доверенные known_hosts, проверяет существующую аутентификацию. Повторно передавать server key для настроенного хоста не требуется. Добавление/авторизация — с подтверждением владельца, execution — после приёмки native изоляции. Kraken добавлен владельцем через Balda; установленный ключ проверен из реального контейнера через выбранный менеджером relay. Алгоритм не привязан к имени хоста. - **Workspace Manager**: четыре функции folders/connect/disconnect/lease, SMB3; root только `developer`, recipient `balda`. Выдаётся конкретная подтверждённая папка RO/RW с TTL; отзыв существующих FD проверен. Downloads не включён; сейчас активных leases нет. -- **Balda MCP**: Obsidian, Virfield, Workspace Manager, SSH Manager и встроенный Balda. Прежние Execution Broker/Execution Prism MCP не подключены к runtime. Generic MCP approval для Codex убран; native подтверждения изменения доступа сохранены. +- **Balda MCP**: Obsidian, Virfield, Workspace Manager, SSH Manager и встроенный Balda. Прежние Execution Broker/Execution Prism MCP не подключены к runtime. Generic MCP approval для Codex убран; native подтверждения изменения доступа сохранены. Дублирование меню исправлено в 3e86b995; один owner-form на операцию. - **Приёмка**: SSH import/lifecycle на случайных aliases и реальной модели, Workspace RW/outside deny, SMB revoke/expiry и shared Beads fixture приняты. Полные удалённые Mac model runs, модельный Prism lifecycle и реальные project Beads DB остаются отдельной незавершённой частью исходного плана. +Приёмка исправленного маршрута: [[personal/projects/balda/ssh-client-route-2026-10-19]]. `ssh_authorize` сообщает успех только после fresh SSH из настроенного клиента установленным ключом; иначе `installed_unverified`. Проверены 16 generic container-network сценариев и реальная модель Balda. + ## Конфигурация и эксплуатация Активный config: `/Users/admin/.local/share/balda-workspace/candidate/config/config.yaml`; Compose: `/Users/admin/Docker/balda-mm-mac/docker-compose.yml`. Рабочий binary смонтирован из config, изменение checkout само по себе его не обновляет. Пути, hashes, restart и границы приёмки: [[personal/projects/balda/setup]]. Eagle этой сверкой не проверялся и не изменялся. @@ -26,6 +28,6 @@ ## Репозитории -Balda: `/Users/admin/Developer/balda` (`254f3e29`); SSH Manager: `/Users/admin/Developer/ssh-manager` (`afa3813`); Workspace Manager: `/Users/admin/Developer/workspace-gateway` (`0c82b8f`). Все три checkout при сверке чистые. +Balda: `/Users/admin/Developer/balda` (`3e86b995`); SSH Manager: `/Users/admin/Developer/ssh-manager` (`a86df58`); Workspace Manager: `/Users/admin/Developer/workspace-gateway` (`0c82b8f`). Все три checkout при сверке чистые. Upstream Balda: [baldaworks/balda](https://github.com/baldaworks/balda). Fork: [mallexxx/balda](https://github.com/mallexxx/balda). diff --git a/personal/projects/balda/setup.md b/personal/projects/balda/setup.md index 22282cd5..a982d92d 100755 --- a/personal/projects/balda/setup.md +++ b/personal/projects/balda/setup.md @@ -1,27 +1,32 @@ # Balda — актуальный локальный запуск -## Текущее состояние — сверено 2026-10-19 05:41 UTC +## Текущее состояние — сверено 2026-10-19 06:30 UTC -Актуальная сводка: [[personal/projects/balda/setup]]. Разделы с прежними версиями и планами ниже сохраняются как исторический журнал; они не заменяют эту сводку. - -| Компонент | Текущее состояние | +| Компонент | Проверенное состояние | | --- | --- | -| SSH Manager | 0.3.1, `afa3813`, 8 MCP-инструментов; импорт существующего Mac SSH alias без повторной передачи server key; `127.0.0.1:17796` | -| Workspace Manager | `0c82b8f`, 4 MCP-функции, native SMB3, `127.0.0.1:17795`; root только `developer: /Users/admin/Developer`, recipient `balda` | -| Balda | `254f3e29`, контейнер `balda-mm-mac`, provider `pool`, permissions `ask`; последний старт `2026-10-19T05:34:41.958112077Z` | -| Код и рабочие деревья | Все три checkout чистые; active SSH Manager binary SHA256 `f46fb2f4040ac33e94440f95556052e65f3c4e98d9b88b48c9db18d952749376` | +| SSH Manager | 0.3.2, `a86df58`, 8 MCP-инструментов, `127.0.0.1:17796` | +| Workspace Manager | `0c82b8f`, четыре функции, native SMB3, `127.0.0.1:17795`; root только `developer`, recipient `balda` | +| Balda | `3e86b995`, `balda-mm-mac`, provider `pool`, permissions `ask`; старт `2026-10-19T06:28:48.664493362Z` | +| Проверка установленного SSH-ключа | Реальный контейнер Balda, `registered`, `client_verified_at=2026-10-19T06:29:15.692883Z`; прежний key id сохранён | +| Исходники / runtime | Все три checkout чистые; build metadata обоих исправленных binaries указывает на эти чистые commits; активные hashes/inode проверены | -SSH: для уже доступного с Mac хоста достаточно alias; native SSH config/Include и доверенные known_hosts дают адрес, логин, порт и server key. Проверяется существующая аутентификация. Новый host получает отдельную identity; добавление/удаление, установка/отзыв ключа требуют штатного подтверждения владельца. Изоляция принимается до установки execution-ключа. Нет привязки к Kraken. Сейчас в inventory только `mac` и `mac-relay`; постоянная запись Kraken удалена, пустому relay запрещён forwarding. Последний тест случайных SSH aliases прошёл на установленном бинарнике: import, native isolation/ProxyJump, restart, revoke/remove. +SSH Manager импортирует существующий Mac SSH alias из native config/Include и доверенных known_hosts, проверяя существующую аутентификацию; повторно присылать server key для такого хоста не требуется. Для клиента отдельно проверяется маршрут: без `via` сначала pinned no-auth handshake из настроенного `client_container`; при сетевом отказе выбирается единственный зарегистрированный relay. Неизвестный или неверный pin не вызывает fallback; при нескольких relay нужен явный `via`. Owner-form включает точную замену relay key line с ограниченным permitopen. Хардкода Kraken или mac-relay в выборе маршрута нет. -Workspace: `workspace_folders`, `workspace_connect`, `workspace_disconnect`, `workspace_lease`; discovery выдаёт только папки. Доступ только к подтверждённой папке с RO/RW и сроком, без общего экспорта Developer/home. SMB отзывает существующие FD и истекает независимо от Manager. Сейчас журнал leases пуст. Дополнительные roots, включая Downloads, не включены. +Успех `ssh_authorize` теперь требует свежего SSH-вызова из фактического клиента его установленным dedicated key с проверкой случайного маркера. Ошибка сохраняет `installed_unverified` и возвращает tool error; удаление host до отзыва такого ключа запрещено. Существующий принятый доступ можно проверить/исправить без замены целевого ключа и sandbox policy. В operator config указан `client_container: balda-mm-mac`, volume проверяется read-only. -Balda: настроены `obsidian`, `virfield`, `workspace-manager`, `ssh-manager`, плюс встроенный `balda`. Legacy Broker/Prism MCP отсутствуют в runtime; plugin `execution-broker` выключен, оригинальные `prism`/`prism-callee` 0.7.0 включены. У Codex — `workspace-write`, writable grants только получателя и `--mcp-approval-policy=allow`; lookup не требует generic approval, изменения доступа подтверждаются владельцем. Ответы на native approval в Mattermost исправлены в `254f3e29`; новая проверка сообщений в пользовательский чат не отправляла. +Inventory сейчас: `mac`, `mac-relay`, `kraken`. Kraken добавлен владельцем через Balda в сессии по ссылке ниже; маршрут исправлен самим менеджером на `mac-relay → kraken`, relay ограничен текущим endpoint. Новый target key при исправлении не устанавливался, прежняя identity и изоляция сохранены. Отдельный независимый SSH-вызов UID 1000 из Balda вернул ожидаемый маркер. -Launchd Workspace/SSH/Beads-Dolt — running; HTTP `/backoffice/healthz` и `/backoffice/login` — 200. Последняя model policy приёмка: `01a15298-98b7-7de0-9274-b2cd63c61958` (workspace RW, outside deny, lookup без approvals). Alias-only model fixture: `01a152a5-8b64-7dc1-be62-d007ff3a09c5`; production Kraken import: `01a152a8-1659-7860-bc63-ea9e8a2d92ba` (Decline, личные SSH config/known_hosts и production доступы сохранены). +Balda: меню подтверждения рендерится один раз — permission layer передаёт готовую presentation, questions layer сохраняет structured options для ответа, но не дописывает второе меню. Regression проходит через permission review, session question delivery и decision resolution. Добавление host и установка ключа остаются двумя разными owner confirmations; дополнительные generic MCP approvals у Codex выключены, native изменения доступа подтверждаются владельцем. -Открытый объём исходного плана: полноценные Mac Codex/Claude/OpenCode model runs с отдельными CLI credentials/OpenCode network решениями, полный модельный Prism lifecycle и приёмка реальных project Beads DB. Shared Beads/Dolt concurrency и 14 Callee Role doctor проверены на fixture; реальные project DB не мигрировались. Это не блокирует принятые операции Workspace/SSH Manager и не считается завершённой полной агентной установкой. +MCP: `obsidian`, `virfield`, `workspace-manager`, `ssh-manager` и встроенный `balda`. Legacy Broker/Prism MCP отсутствуют в runtime, plugin `execution-broker` выключен, оригинальные Prism/Prism Callee 0.7.0 включены. Codex: `workspace-write`, дополнительный writable root только grants получателя, `--mcp-approval-policy=allow`. -Evidence: `~/.local/share/balda-workspace/candidate/operator-import.json`, `generic-host-manager.json`, `generic-host-policy.json`; исходная SMB/Beads приёмка — `/Users/admin/Developer/workspace-gateway/docs/acceptance-2026-10-18.md`. +Workspace: `workspace_folders`, `workspace_connect`, `workspace_disconnect`, `workspace_lease`; discovery только папок, выдача конкретной папки RO/RW с TTL. Downloads и общий Developer/home mount не включены. Lease journal пуст. Приняты SMB revoke существующих FD/expiry и shared Beads fixture; runtime Workspace в этом исправлении не менялся. + +Проверено: SSH race/vet/build; 15 native SSH lifecycle checks и 16 checks на случайных aliases в сети реальной Balda, включая alias-only import без via, автоматический relay, pin failure, retry, restart/revoke/remove. Реальная модель после финального deployment: `01a152d9-7d04-7f21-9597-91c259813c7c`, ровно одна Owner confirmation существующего key id, без generic MCP approval; client receipt выше. Полные 173 Balda package checks под race, golangci-lint и architecture checks — pass; launchd Workspace/SSH/Beads-Dolt running, health/login 200. Внешние тестовые сообщения Mattermost не отправлялись. + +Первичный провал приёмки: [сессия Mattermost](https://mm.qentra.top/qentra/pl/bjb4nhz6o3yoxqg9rs1qcpncjh). Причины и исправление: [[personal/projects/balda/ssh-client-route-2026-10-19]]. Evidence: `~/.local/share/balda-workspace/candidate/client-route/`; backup: `~/.local/share/balda-workspace/backups/client-route-20261019T062059Z`. + +Оставшийся исходный объём: полноценные удалённые Mac model runs с отдельными CLI credentials/OpenCode network решениями, полный модельный Prism lifecycle и реальные project Beads DB. Host Docker/socket/sudo authority не добавлялась: установленный target key по-прежнему ограничен принятой песочницей. Эти пункты не объявляются выполненными этим исправлением. ## Текущие пути и эксплуатация — 2026-10-19 @@ -30,7 +35,7 @@ Evidence: `~/.local/share/balda-workspace/candidate/operator-import.json`, `gene | Compose | `/Users/admin/Docker/balda-mm-mac/docker-compose.yml` | | Активный config | `/Users/admin/.local/share/balda-workspace/candidate/config/config.yaml` | | Config mount | `/workspace/.config/balda`, read-only | -| Запускаемый binary | `/workspace/.config/balda/bin/balda`; SHA256 `b48e15ea8bc3d8a950900e8da99f7a67d391279914111f689f71667cc8be8361` | +| Запускаемый binary | `/workspace/.config/balda/bin/balda`; SHA256 `88dc7349c4eff1aae79daa95381d33e79c3bbb0097b95fde92834e4479392000` | | State / work | `/Users/admin/Docker/balda-mm-mac/state` и `/Users/admin/Docker/balda-mm-mac/work` | | Home / SSH volumes | `balda_balda-home` → `/home/node`; `balda-ssh-manager` → `/run/ssh-manager:ro` | | Инструкции Codex | Отдельный `runtime.providers.codex.system_instructions` не задан; [[personal/projects/balda/workspace-context]] | diff --git a/personal/projects/balda/ssh-acp-verification-2026-10-18.md b/personal/projects/balda/ssh-acp-verification-2026-10-18.md index 872f3b66..8fccdc9a 100644 --- a/personal/projects/balda/ssh-acp-verification-2026-10-18.md +++ b/personal/projects/balda/ssh-acp-verification-2026-10-18.md @@ -2,7 +2,7 @@ ## Статус этой заметки — 2026-10-19 -Ниже сохранён датированный технический прогон 2026-10-18, включая его тогдашние открытые проверки. Текущая эксплуатационная сводка: [[personal/projects/balda/setup]], планы: [[personal/plans/balda-remote-agent]] и [[personal/plans/workspace-gateway]]. С тех пор приняты production SSH/SRT к Mac, SMB доступ/отзыв, shared Beads fixture, native approval bridge и generic SSH Manager 0.3.1 с импортом существующего доверенного доступа Mac. Полный модельный Prism lifecycle и реальные project DB остаются отдельной приёмкой. +Ниже сохранён датированный технический прогон 2026-10-18, включая его тогдашние открытые проверки. Текущая эксплуатационная сводка: [[personal/projects/balda/setup]], планы: [[personal/plans/balda-remote-agent]] и [[personal/plans/workspace-gateway]]. С тех пор приняты production SSH/SRT к Mac, SMB доступ/отзыв, shared Beads fixture, native approval bridge и generic SSH Manager 0.3.2 с импортом существующего доверенного доступа Mac и проверкой установленного ключа из клиента; текущая приёмка: [[personal/projects/balda/ssh-client-route-2026-10-19]]. Полный модельный Prism lifecycle и реальные project DB остаются отдельной приёмкой. ## Исторический протокол проверки diff --git a/personal/projects/balda/ssh-client-route-2026-10-19.md b/personal/projects/balda/ssh-client-route-2026-10-19.md new file mode 100644 index 00000000..e0c7d0c8 --- /dev/null +++ b/personal/projects/balda/ssh-client-route-2026-10-19.md @@ -0,0 +1,66 @@ +# SSH Manager и Balda — маршрут и подтверждения, 2026-10-19 + +Проверенная установка: [[personal/projects/balda/setup]]. Commits: SSH Manager `a86df58`, Balda `3e86b995`. + + +Version 0.3.2 fixes the gap between operator-side bootstrap success and a usable +client SSH connection. No target name, address or relay alias selects code paths. + +- A Docker deployment names its actual `client_container`, trusted `client_image` + and dedicated `client_volume`. The manager checks that the running container + mounts this volume read-only at `client_dir`. +- With no explicit `via`, a native pinned no-auth handshake runs from that client. + A private temporary known_hosts file carries only the existing public pin and + is deleted after the probe. A pin failure never falls back to another route. +- If the direct network route is unavailable, one registered relay is selected. + Zero or multiple candidates require explicit `via`. The normal owner form + includes the resolved route and exact scoped relay authorized_keys replacement. +- Key installation and isolation acceptance alone do not yield success. A fresh + native SSH process in the actual client, using the installed dedicated identity + and pin, must return a random command marker. Success records client_verified_at. + Failure persists installed_unverified and returns a tool error. Such keys remain + revocable and cannot be forgotten or reused for a conflicting purpose. +- Existing accepted registrations can repair the route and verify the same key, + without reinstalling it or changing the target's accepted sandbox policy. + +Verified: + +1. Go race/vet/build, route and pin regressions, incorrect client mount rejection, + failed verification persistence, retry without bootstrap, no success receipt on + failure, and a guard against removing an installed unverified key. +2. Two temporary native sshd servers with randomized aliases: 15 lifecycle checks, + including actual isolation/ProxyJump, client pin rejection in ssh_authorize, + restart, revoke/authentication denial, removal and unrelated-key preservation. +3. A separate temporary client using the actual Balda network namespace and only + its own fixture keys: 16 checks. Alias-only import omitted via; the manager + selected the registered fixture relay, updated its exact permitopen and + completed installed-key verification. Wrong pin/retry/revoke/restart passed. +4. Production route repair used the existing registration/key id and one owner + form. It preserved the target identity and sandbox policy, personal SSH config + and known_hosts, and Balda config/Compose. An independent UID-1000 SSH call from + balda-mm-mac returned the expected marker using /run/ssh-manager/ssh_config. +5. Real Codex model inside Balda invoked the deployed ssh_authorize. Session + 01a152d6-e98f-7872-a49c-66ff415db44e received exactly one Owner confirmation and + returned registered with client_verified_at=2026-10-19T06:26:32.39965Z. + No generic MCP approval, target-key installation/rotation, model shell command + or external Mattermost test message occurred in that model check. + +Balda commit 3e86b995 fixes duplicate options independently: permissions.Service +marks its complete presentation as already rendered; questions.Service retains +structured answer options but does not append them again. A regression traverses +permission review, session question delivery and decision resolution. Full Balda +race suite, golangci-lint and architecture checks pass. + +Private evidence is stored in ~/.local/share/balda-workspace/candidate/client-route/. +The SSH verification timestamp is a point-in-time receipt, not continuous health. +The accepted target key remains isolated; host Docker/socket/sudo authority is not +added by route repair. Full remote model setup and project Beads migrations remain +outside this fix. + +Финальная повторная model-проверка после установки binaries из чистых commits: `01a152d9-7d04-7f21-9597-91c259813c7c`, ровно одна Owner confirmation, `client_verified_at=2026-10-19T06:29:15.692883Z`. + +SSH binary SHA256: `72d99bf3daca0465ba1a953f7fb8f2d460784f4e8af03158c5b95306653211d0`; Balda binary SHA256: `88dc7349c4eff1aae79daa95381d33e79c3bbb0097b95fde92834e4479392000`. Build metadata и запущенные binary hashes/inode совпадают; health/login 200. + +Коммиты сохранены локально. origin/main Balda имеет отдельную старую историю: 2 commits только в origin и 834 только в текущей установленной ветке; перенос старых DeepSeek/Zulip изменений и переписывание main в этот fix не включались. + +Remote publication: automatic approval review rejected pushing the installed source history to mallexxx/balda, branch deploy/balda-mm-mac-client-route-20261019, because separate permission for that payload and destination was missing. No push occurred. The local commits, deployed services and verified access remain intact; explicit publication permission is pending. diff --git a/personal/projects/balda/ssh-seatbelt-2026-10-18.md b/personal/projects/balda/ssh-seatbelt-2026-10-18.md index 47d98728..31fe5063 100644 --- a/personal/projects/balda/ssh-seatbelt-2026-10-18.md +++ b/personal/projects/balda/ssh-seatbelt-2026-10-18.md @@ -2,7 +2,7 @@ ## Статус этой заметки — 2026-10-19 -Ниже сохранён датированный технический прогон 2026-10-18, включая его тогдашние открытые проверки. Текущая эксплуатационная сводка: [[personal/projects/balda/setup]], планы: [[personal/plans/balda-remote-agent]] и [[personal/plans/workspace-gateway]]. С тех пор приняты production SSH/SRT к Mac, SMB доступ/отзыв, shared Beads fixture, native approval bridge и generic SSH Manager 0.3.1 с импортом существующего доверенного доступа Mac. Полный модельный Prism lifecycle и реальные project DB остаются отдельной приёмкой. +Ниже сохранён датированный технический прогон 2026-10-18, включая его тогдашние открытые проверки. Текущая эксплуатационная сводка: [[personal/projects/balda/setup]], планы: [[personal/plans/balda-remote-agent]] и [[personal/plans/workspace-gateway]]. С тех пор приняты production SSH/SRT к Mac, SMB доступ/отзыв, shared Beads fixture, native approval bridge и generic SSH Manager 0.3.2 с импортом существующего доверенного доступа Mac и проверкой установленного ключа из клиента; текущая приёмка: [[personal/projects/balda/ssh-client-route-2026-10-19]]. Полный модельный Prism lifecycle и реальные project DB остаются отдельной приёмкой. ## Исторический протокол проверки