[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

This commit is contained in:
Alexey Martemyanov committed 2026-10-19 12:33:21 +06:00
1 parent bd30180bbd
commit f4fdfcb93a
7 files changed
+132 -49

No files matched your search

+6 -4
View File
@@ -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).
+20 -15
View File
@@ -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]] |
@@ -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 остаются отдельной приёмкой.
## Исторический протокол проверки
@@ -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.
@@ -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 остаются отдельной приёмкой.
## Исторический протокол проверки