docs: consolidate current Virfield release and remove legacy notes

This commit is contained in:
Alexey Martemyanov committed 2026-09-30 12:03:52 +06:00
1 parent 0e4202c5de
commit 3c0895e62c
11 files changed
+152 -272

No files matched your search

+37 -108
View File
@@ -1,7 +1,8 @@
# Balda + Prism/Beads + Execution Broker + Callee + Codex
> Обновлено: 2026-09-29
> Статус: целевая архитектура зафиксирована; Broker и интеграции ещё не реализованы.
> Обновлено: 2026-09-30
> Статус: Virfield v2.0.0 опубликован. Этот план описывает целевую интеграцию Balda → Broker → VM → Runner/Callee; сквозная приёмка ещё не подтверждена.
> Текущий проект и runbook: [[personal/projects/virfield]].
## 1. Цель
@@ -41,32 +42,19 @@ Codex
→ Prism/Beads + Mattermost
```
## 2. Что уже есть
## 2. Подтверждённый статус и оставшаяся интеграция
### Подтверждено
Virfield v2.0.0 опубликован: Go daemon, leases/images, аутентифицированные HTTP/MCP, SSH isolation, tunnels и embedded console. Live golden/clone E2E и release CI прошли в объёме [[personal/projects/virfield]]. Установленные сервисы используют deployment вне checkout; публикация нового архива не обновляет runtime автоматически.
1. Balda работает в Docker на Mac и отвечает в Mattermost.
2. Mattermost-сервер остаётся на Kraken; Balda подключается к нему с Mac.
3. Obsidian MCP доступен Balda по `http://host.docker.internal:3101/sse`.
4. Virfield MCP работает на хостовом Mac и умеет подготовить VM: clone golden image, start, wait for IP/SSH, create tunnel.
5. Host Codex и Claude уже подключены к Virfield MCP.
Для полной цепочки остаётся подтвердить:
### Текущая конфигурация Balda
- отдельные deployment и совместимость Execution Broker/Runner;
- доступ Broker к реализованному Virfield HTTP API: TLS/routing, credentials и SSH transport из контейнера;
- запуск Callee и обратный журнал событий до Balda;
- адаптер Balda → Prism/Beads;
- сквозной запуск Story → VM → build/test → отчёт с cleanup.
- основной provider: DeepSeek через OpenAI-compatible API;
- `permissions.mode: allow_all`;
- `workspace.mode: off`;
- Virfield в Balda не подключён;
- Callee CLI и описания агентов находятся в окружении Balda по текущему сетапу, но целевой запуск Callee должен происходить внутри VM.
### Чего пока нет
- Execution Broker;
- сетевого API управления Virfield для Broker;
- VM runner для управляемого запуска Callee;
- обратного журнала событий Callee → Balda;
- адаптера Balda → Prism/Beads;
- подтверждённого сквозного запуска Story → VM → build/test → отчёт.
Статус остальных проектов и provider-конфигурация проверяются в их собственных источниках; релиз Virfield не является подтверждением их готовности.
## 3. Владельцы ответственности
@@ -119,7 +107,7 @@ Virfield работает на Mac-хосте и владеет жизненны
- сетевые туннели;
- lease и принудительная уборка VM.
Для Broker нужен узкий аутентифицированный HTTP API или HTTP MCP-обёртка над этими операциями. Произвольного host shell в этом API нет.
Аутентифицированный HTTP API `/api/v1` и HTTP MCP `/mcp` реализованы; daemon слушает loopback. Для Broker остаются проверяемая сетевая доступность и integration contract. Произвольного host shell в API нет.
### Callee и Codex — выполнение внутри VM
@@ -323,19 +311,11 @@ Callee поддерживает `Parallel`, но это fan-out Role visits вн
Хостовый Virfield API разрешает только операции жизненного цикла VM. Balda и Broker не получают `docker.sock`, пользовательский `~/.ssh` или произвольный shell на Mac.
### Shared folder Lume
### Workspace и артефакты
Lume монтирует shared folder через virtiofs. Изменения содержимого должны появляться динамически; Lume также умеет добавлять folder к уже запущенной VM без reboot/remount.
Текущий recipe Virfield создаёт VM без shared host folders. Код, mutable workspace и Xcode build живут на локальном диске VM; перенос исходников/результатов — через scoped SSH и Git либо `rsync/scp`. Артефакты выгружаются до release lease и получают уникальный путь `run_id/...`.
Для mutable workspace и Xcode build shared folder не считается надёжным источником истины. В текущем Virfield уже потребовались `sudo purge` и уникальные DerivedData snapshots из-за stale guest cache.
Рабочий контракт:
- репозиторий клонируется на локальный диск VM;
- обновления передаются через Git или `rsync/scp`;
- shared folder используется для immutable inputs и выгрузки artifacts;
- каждый набор artifacts получает уникальный путь `run_id/...`;
- Xcode не собирает проект непосредственно из `/Volumes/My Shared Files`.
Добавление host mounts потребует отдельного решения по изоляции и проверки согласованности данных; это не часть принятого recipe.
### Изменение других хостов
@@ -359,7 +339,7 @@ Lume монтирует shared folder через virtiofs. Изменения с
2. Можно ли запустить workflow pack `prism/story` отдельно от stock plugin host.
3. Как Codex ACP получает workspace/cwd и сохраняет его между Role visits.
4. Как передавать cancel в Callee без повреждения terminal result.
5. Какой минимальный Virfield API можно безопасно открыть Broker.
5. Как подключить Broker к реализованному Virfield API через TLS/routing и проверить lease/SSH contract из его окружения.
### Требует проверки до production
@@ -387,63 +367,21 @@ Balda остаётся оркестратором, Broker изолирует и
Будущая transport abstraction в `runtime + acpagent` позволит Balda или Callee подключаться к ACP по WebSocket/Streamable HTTP. Она может заменить SSH-транспорт, но не заменяет Broker, VM lifecycle, durable events и cleanup.
## 13. Аудит Virfield и целевая версия v2
## 13. Virfield v2 — реализовано и опубликовано
### Что существует сейчас
Релиз [v2.0.0](https://github.com/mallexxx/virfield/releases/tag/v2.0.0) опубликован 2026-09-30, commit `ee3aa1d`. Текущая карточка — [[personal/projects/virfield]]; команды и контракты принадлежат документации репозитория.
Virfield — TypeScript/Node.js приложение:
Реализованы единый Go control plane, SQLite journal, reconciliation, leases/idempotency, resource admission, image pipeline, scoped SSH, cleanup, CLI/MCP и embedded console. Лимит двух VM и неизвестные состояния обрабатываются явно; неопределённая мутация не повторяется автоматически. Personal SSH keys/PAT storage и client-side lifecycle fallback в текущей реализации отсутствуют.
- Express + WebSocket backend;
- React/Vite Web UI;
- SQLite;
- отдельный stdio MCP server;
- shell/Python provisioning scripts.
Web UI уже реализован. TypeScript typecheck проходит. Собственной automated test suite практически нет.
### Подтверждённые архитектурные проблемы
1. Состояние VM определяется одновременно Lume API, Lume CLI, SQLite, JSON-файлами, PID и in-memory maps.
2. REST и MCP дублируют orchestration; MCP вызывает REST, а при ошибке обходит его и управляет Lume напрямую.
3. Recovery основан на `pgrep`, `pkill`, PID probing и ручном склеивании stale states.
4. Virfield читает личные SSH keys, имеет password fallback `lume`, хранит GitHub PAT в SQLite и предоставляет широкий `vm_ssh_exec`.
5. Long-running jobs частично живут только в памяти и теряют нормальную управляемость после restart.
### Решение: переписать control plane, не Lume
Lume остаётся hypervisor/backend. Проверенные provisioning scripts временно сохраняются как versioned jobs и постепенно заменяются только при наличии тестов.
Virfield v2 состоит из пяти частей:
1. `virfieldd` на Go — единственный владелец SQLite, Lume adapter, VM leases, jobs, events и cleanup; запускается через `launchd`.
2. Image Manager — модуль `virfieldd` для download/pull/build/promote golden images; отдельный daemon ему не нужен.
3. Web UI — отдельный API client на embedded HTML/HTMX или простом JavaScript без Node toolchain.
4. `virfield-mcp` на Go — тонкий stdio/HTTP adapter; не обращается к Lume или SQLite напрямую.
5. Execution Broker и Runner на Go — отдельный execution-контур рядом с Balda и внутри workers.
Один Lume adapter скрывает различия HTTP/CLI. UI, MCP и Broker используют только versioned API `virfieldd`.
Оценка: Virfield v2 MVP — 7–12 рабочих дней; Broker/Runner — 5–10 дней; UI migration и hardening — ещё 5–8 дней.
Lume остаётся backend; используется закреплённый 0.5.3 с двумя проверенными исправлениями shutdown. Guest automation встроена и версионируется вместе с Go-кодом. Полный golden/clone E2E пройден на одном Mac; Linux/macOS CI и проверки переносимости/секретов прошли для release commit. Точные результаты и непринятый scope — в [Verification](https://github.com/mallexxx/virfield/blob/main/docs/VERIFICATION.md).
### Граница проектов и репозиториев — принятое решение
`virfield` и `execution-broker` — два независимых проекта. Их нельзя объединять в один репозиторий или один daemon.
Репозиторий `virfield` содержит только host control plane:
Репозиторий `virfield` содержит host control plane: корневой Go module, `cmd/virfieldd`, `cmd/virfield`, `cmd/virfield-mcp`, `cmd/virfield-lume`, реализации в `internal/`, deployment в `deploy/`. Актуальная карта модулей — [Architecture](https://github.com/mallexxx/virfield/blob/main/docs/ARCHITECTURE.md); отдельного каталога приложения v2 нет.
```text
cmd/virfieldd
cmd/virfieldctl
cmd/virfield-mcp
internal/lume
internal/images
internal/leases
internal/jobs
web/
api/
```
Новый репозиторий `execution-broker` содержит execution plane:
Целевая структура отдельного `execution-broker` (реализацию сверять в его репозитории):
```text
cmd/broker
@@ -463,11 +401,9 @@ api/
1. `virfield` управляет VM, images, leases и host-level cleanup; он ничего не знает о Callee, Prism, Beads и model providers.
2. `execution-broker` выбирает execution class, запускает Runner/Callee, управляет agent profiles и хранит run event log; он не управляет Lume напрямую.
3. `balda` вызывает Broker по MCP и отражает события в Prism/Beads; Virfield напрямую из Balda не вызывается.
4. `execution-broker → virfieldd` использует versioned authenticated HTTP API, описанный OpenAPI.
4. `execution-broker → virfieldd` использует versioned authenticated HTTP API `/api/v1`; текущие модели и маршруты — `internal/domain`, `internal/httpapi`, `internal/client`. Отдельная OpenAPI-спецификация Virfield в v2.0.0 не опубликована.
5. Общих Go-пакетов между репозиториями нет; совместимость обеспечивается API contract и contract tests.
Старый репозиторий/компонент `agents-bridge` не развивается и не переиспользуется для новой системы. Название `execution-broker` выбрано специально, чтобы не смешивать новый scheduler/event broker со старым SSH/MCP-мостом.
## 14. Agent profiles и модельная политика
Broker и Runner не содержат vendor-specific workflow logic. Run выбирает `agent_profile` из статического allowlist.
@@ -478,7 +414,7 @@ Worker image содержит Runner, Callee и нужные provider binaries.
### Распределение моделей
Схема `Balda → Callee → coding agent` остаётся правильной. Текущее назначение DeepSeek единственным оркестратором не оптимально: Balda использует один app-scoped provider для всех sessions.
Схема `Balda → Callee → coding agent` остаётся правильной. Provider для Balda и профили исполнителей настраиваются в соответствующих проектах; конкретное назначение не фиксируется в плане Virfield.
Рекомендуемая раскладка:
@@ -528,27 +464,21 @@ DeepSeek подходит для ограниченного routing и прос
## 16. План реализации
### Этап 1 — live spike контрактов, 1–2 дня
### Этап 1 — live spike интеграционных контрактов
1. Запустить Virfield и Lume и проверить clone/start/stop/delete без fallback paths.
2. Проверить stale-cache сценарии shared folder и зафиксировать Git/rsync contract.
1. **Выполнено для Virfield:** clone/start/stop/delete, SSH readiness и cleanup проверены live; повтор для полного Broker/Runner flow входит в сквозную приёмку.
2. Проверить передачу workspace/artifacts через Git/scoped SSH на локальный диск VM; shared host folders в recipe отсутствуют.
3. Запустить один Callee workflow вручную внутри тестовой VM.
4. Проверить Codex ACP, Human pause/resume, cancel и terminal result.
5. Принять versioned contracts Virfield API и VM Runner.
Результат: фактические runtime-контракты без предположений.
### Этап 2 — Virfield v2 core, 7–12 дней
### Этап 2 — Virfield v2 core: завершён 2026-09-30
1. Реализовать `virfieldd` и единую SQLite job/event model.
2. Реализовать один Lume adapter и reconciliation loop.
3. Добавить leases, idempotency, quotas, audit и cleanup.
4. Подключить существующие image/provisioning scripts как jobs.
5. Реализовать Go CLI/MCP adapters и минимальный Web UI.
Результат опубликован как `v2.0.0`: один владелец VM/images, durable jobs/events, API/CLI/MCP/UI, image automation и проверенная переносимая сборка. Выполненные задачи не остаются в backlog. Непринятые проверки перечислены в [[personal/projects/virfield]] и repository Verification.
Результат: один надёжный владелец VM и images без Node runtime.
### Этап 3 — универсальный Runner, 2–4 дня
### Этап 3 — универсальный Runner
1. Описать versioned JSON protocol command/event.
2. Реализовать start, events, Human response и cancel.
@@ -558,7 +488,7 @@ DeepSeek подходит для ограниченного routing и прос
Результат: один протокол запускает workflow в VM или container и возвращает структурированные события.
### Этап 4 — Broker MVP, 3–6 дней
### Этап 4 — Broker MVP
1. Реализовать SQLite schema для runs, events, responses и artifacts.
2. Реализовать state machine и транзакционный event journal.
@@ -568,7 +498,7 @@ DeepSeek подходит для ограниченного routing и прос
Результат: Balda управляет долговечным run через HTTP MCP.
### Этап 5 — Balda + Prism, 2–4 дня
### Этап 5 — Balda + Prism
1. Подключить Broker MCP к runtime Balda.
2. Развернуть Prism adapter и Dolt/Beads container.
@@ -578,7 +508,7 @@ DeepSeek подходит для ограниченного routing и прос
Результат: Story ведётся в Beads, выполнение и approvals видны в Mattermost.
### Этап 6 — сквозная приёмка, 1–2 дня
### Этап 6 — сквозная приёмка
1. Создать Story из реального сообщения Mattermost.
2. Пройти specify/design/approval/implement/review/verify.
@@ -588,7 +518,7 @@ DeepSeek подходит для ограниченного routing и прос
Результат: воспроизводимый end-to-end прогон без исполнения агентских команд на хосте.
Оценка после spike: рабочий end-to-end MVP — 17–30 рабочих дней. Срок сильнее всего зависит от Callee machine API, Lume reconciliation и переноса Web UI.
Срок оставшихся этапов определяется после сверки текущего Broker/Runner и проверки Callee/Prism контрактов.
## 17. Критерии готовности
@@ -603,7 +533,6 @@ DeepSeek подходит для ограниченного routing и прос
## Связанные заметки
- [[personal/projects/virfield]] — текущий релиз, подтверждённый scope и каноническая документация.
- [[personal/tech/callee-prism]] — контракты Callee, ACP и Prism.
- [[personal/tech/agents-bridge]] — предыдущий мост; не часть целевой схемы.
- [[personal/tech/balda-executor-mcp]] — предыдущий исполнитель; не часть целевой схемы.
- [[personal/plans/balda-mm-phase4-agents]] — история предыдущей интеграции.