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

@@ -1,6 +1,7 @@
# Hermes Eagle — example config (tokens redacted)
# Source: ~/.hermes/config.yaml
# Copy back: cp this ~/.hermes/config.yaml (then restore api_key from password manager)
# Reference only: merge required settings into the active config; do not overwrite it.
# Virfield entry updated 2026-09-30; replace placeholders before use.
model:
default: claude-sonnet-4-6
@@ -26,10 +27,14 @@ mcp_servers:
command: mcpvault
args:
- /Users/admin/obsidian
ddg-vm:
command: npx
# Virfield v2: copy paths/args from deployment launchd/mcp.json.
# Replace /ABSOLUTE/DEPLOYMENT; no token values belong in this example.
virfield:
command: /ABSOLUTE/DEPLOYMENT/bin/virfield-mcp
args:
- tsx
- /Users/admin/Developer/virfield/server/mcp-server.ts
- -url
- http://127.0.0.1:7780
- -token-file
- /ABSOLUTE/DEPLOYMENT/token
# zulip / api keys — restored from password manager
@@ -108,7 +108,7 @@ PID-file-based — survives Dashboard restarts without crashing.
| claude_proxy_node | Claude Proxy (node) | localhost | daemon |
| claude_proxy_python | Claude Proxy (python) | localhost | daemon |
| asana_mcp | Asana MCP | localhost | daemon |
| virfield | Virfield | localhost | daemon |
| virfield | [[personal/projects/virfield\|Virfield v2]] | `127.0.0.1:7780` by default | separate system LaunchDaemons; dashboard integration not verified |
### ML
@@ -328,7 +328,7 @@ When a launchd cron is created and `launchctl print gui/<uid>/<label>` shows `la
- Backend create now rejects non-`every` for launchd (frontend validator also blocks)
- `_list_launchd_crons()` now shows ALL plists (schedule: "none (manual)" if no StartInterval/StartCalendarInterval)
**Virfield port conflict** — if previously a LaunchAgent (plist deleted but still loaded), stop it: `launchctl stop com.virfield.server && launchctl remove com.virfield.server`.
**Virfield (обновлено 2026-09-30):** lifecycle сервисов принадлежит system LaunchDaemons `ai.virfield.virfieldd` и `ai.virfield.lume`, работающим от VM owner. Диагностика конфликтов портов и service update — по [Operations](https://github.com/mallexxx/virfield/blob/main/docs/OPERATIONS.md#system-services). Интеграция Dashboard с этими jobs отдельно не проверялась; текущий статус проекта — [[personal/projects/virfield]].
---
@@ -100,7 +100,6 @@ executor-autonomous (LLM agent, every 30 min)
- runs gh CLI (GitHub: open PRs, check CI, push branches)
- posts full reasoning trace to Discord thread
- posts completion comment to Asana task
- optionally: runs virfield VM tests (recording pass)
```
This job was **paused** on 2026-05-11 in the "Include UI Tests screencasts" thread. Replaced by:
@@ -122,7 +121,6 @@ During the live period, the executor autonomously:
- Read source code from `apple-browsers.git` local checkout
- Posted CI/status updates to Discord
- Posted Asana comments (unauthorized — see Section 3)
- Managed virfield VM lifecycle (clone, start, run tests, stop, delete)
---
@@ -215,8 +213,7 @@ These are co-workers whose PR authorship was surfaced in Discord via `gh pr list
### 3.5 Infrastructure details disclosed
- VM names: `uitest-26.4.1-golden`, `uitest-17-pinned-rec`, `uitest-bug08-rec`, `uitest-bug08b-rec`, `uitest-tooltip-rec`, `uitest-bug02-rec`, `macos-15-golden`
- Local paths: `/Users/admin/DuckDuckGo/apple-browsers.git/`, `/Users/admin/VMShare/`, `/Users/admin/Developer/personal-os/`
- Local paths: `/Users/admin/DuckDuckGo/apple-browsers.git/`, `/Users/admin/Developer/personal-os/`
- DB schema: `executor_queue`, `executor_runs`, field names, state values
- Hermes cron job IDs: `24fcdd1b40e0`, `62768b8cccad`, `531b242c30ad`, `e409b72d23a1`
@@ -357,7 +354,7 @@ The comment capability was the floor. Full account CRUD was the ceiling.
| GitHub PR data | PR numbers, titles, descriptions, review comments, CI status | PRs #4483, #4541, #4548, #4559, #4591, #4608, #4609, #4610, #4611 |
| Source code | File paths, function names, grep matches, code fragments | Swift files from `apple-browsers`, Cursor rules |
| Team member names | PR authors, reviewers | brindy, federicocappelli, pikorddg, jaceklyp, jleandroperez, Sam S |
| Infrastructure | VM names, local file paths, DB schema, cron IDs | Full list in Section 3.5 |
| Infrastructure | Local file paths, DB schema, cron IDs | Full list in Section 3.5 |
| Planning data | Daily briefs, task priorities, AOR assignments, inbox summaries | Entire `#daily-brief` channel history |
**Data confirmed NOT sent to Discord:**
@@ -399,8 +396,7 @@ Primary locations:
| **Anthropic/Claude API** | Execute (LLM) | `CLAUDE_CODE_OAUTH_TOKEN` in `~/.hermes/.env` | Active. Primary executor engine. |
| **OpenRouter** | Execute (LLM fallback) | `OPENROUTER_API_KEY` in `~/.hermes/.env` | Active. |
| **Telegram** | Write | `TELEGRAM_BOT_TOKEN` in `~/.hermes/.env` | Active. Not used by executor. |
| **virfield / ddg-vm MCP** | VM lifecycle (clone/start/stop) | Local MCP server at `~/Developer/virfield/` | Used by recording-pass workers. |
| **macOS filesystem** | Read + Write | User session | Full read of apple-browsers checkout, VMShare, personal-os. Write to logs, worktrees, prompts. |
| **macOS filesystem** | Read + Write | User session | Full read of apple-browsers checkout, personal-os. Write to logs, worktrees, prompts. |
| **PostgreSQL (personal_os)** | Read + Write | Local, no auth | executor_queue, executor_runs, stories, tasks tables. |
| **Zulip** | Read + Write | `ZULIP_API_KEY` in `~/.hermes/.env` | Active. Post-migration platform. |
| **Obsidian vault** | Read + Write | Local MCP server | Full vault access. |
@@ -2,6 +2,7 @@
namespace: work
tags: [system, architecture]
last_updated: 2026-04-28
virfield_updated: 2026-09-30
confidence: 1.0
---
@@ -51,7 +52,7 @@ See: `personal-os-purpose.md`
- Worktree at `~/DuckDuckGo/apple-browsers.git/.claude/worktrees/executor-{gid}-{slug}/`
- Always `git fetch origin main` + branch from `origin/main`
- State machine in `executor_runs` table
- For UI tests: spins VM via ddg-vm MCP (virfield), cleans up on PR close/merge
- UI-test VM lifecycle uses Virfield leases with explicit release/expiry cleanup; Runner integration is a separate acceptance step. See [[personal/projects/virfield]].
**Eagle commands in #executor**:
| Command | Effect |
@@ -130,7 +131,7 @@ Executor runs
**Claude Code / `claude -p` sessions:**
| Name | Command | Used for |
|------|---------|---------|
| ddg-vm | `npx tsx ~/Developer/virfield/server/mcp-server.ts` | VM lifecycle for UI tests |
| virfield | Installed `virfield-mcp`; use the generated deployment `launchd/mcp.json` | VM leases/images; see [[personal/projects/virfield]] |
| obsidian | `/opt/homebrew/bin/obsidian-mcp ~/obsidian` | Vault access |
## launchd Agents
@@ -79,7 +79,6 @@ Autonomous worker: evaluates backlog → picks task → spawns sub-agent in Disc
- Xcode scheme: `DuckDuckGo macOS`, `.xcworkspace` required, xcbeautify required
- PR template: `pull-request.mdc` strict gates overridden by Executor v2 (task known, reviewer=@me, description auto-generated)
- Cleanup: `git worktree remove --force` + `git push --delete` + stop/delete VM
- UI test VM: ddg-vm MCP at `~/Developer/virfield/server/mcp-server.ts`, VirtualBuddy at `~/Documents/VirtualBuddy/`
## Tech debt
+58
View File
@@ -0,0 +1,58 @@
---
title: Virfield
namespace: personal
updated: '2026-09-30'
status: released
tags: [virfield, macos, vm, go, infrastructure]
---
# Virfield
**Релиз:** [v2.0.0](https://github.com/mallexxx/virfield/releases/tag/v2.0.0), опубликован 2026-09-30; commit `ee3aa1d8f5906bfe591d76c0af2afd73bcad9fba`.
**Репозиторий:** [mallexxx/virfield](https://github.com/mallexxx/virfield). В `main` только Go-реализация; предыдущая реализация сохранена исключительно в Git-ветке `v1`.
## Что работает
Virfield — host control plane для одноразовых macOS VM: подготовка и проверка golden image, leases, clone/start/SSH readiness, отдельные SSH credentials для каждого lease, tunnels, expiry и cleanup. Лимит — не более двух VM с явным `capacity_exhausted`; очередь выполнения принадлежит Broker.
Четыре бинарника: `virfieldd`, `virfield`, `virfield-mcp`, `virfield-lume`. Web console встроена в daemon. CLI, stdio/HTTP MCP и UI обращаются к единому аутентифицированному API. Произвольного shell API и доступа к личным SSH-ключам нет.
## Источники истины
Obsidian хранит статус проекта и связи. Команды, конфигурацию и контракты поддерживаем в документации репозитория, без копирования runbook в заметки.
| Документ | Назначение |
|---|---|
| [README](https://github.com/mallexxx/virfield/blob/main/README.md) | Входная точка, структура и сборка |
| [Operations](https://github.com/mallexxx/virfield/blob/main/docs/OPERATIONS.md) | Установка, пути, сервисы, MCP, leases и backup |
| [Image pipeline](https://github.com/mallexxx/virfield/blob/main/docs/IMAGE-PIPELINE.md) | Golden image, зависимости, guest policy и recovery |
| [Architecture](https://github.com/mallexxx/virfield/blob/main/docs/ARCHITECTURE.md) | Модули, границы API и инварианты |
| [Verification](https://github.com/mallexxx/virfield/blob/main/docs/VERIFICATION.md) | Подтверждённые проверки и оставшиеся ограничения |
## Развёртывание и переносимость
VM-хостинг требует Apple Silicon Mac, patched Lume 0.5.3 и документированных image tools. Поддерживаемый guest — macOS 27 build `26A428`; полный профиль `uitest-27-v1` требует Xcode 27+. Суффикс recipe и `/api/v1` обозначают версии контрактов, а не старое приложение.
Каталог deployment задаётся оператором вне checkout. `deploy/prepare-services.py` берёт реального пользователя, HOME, пути и порты из конфигурации; токены не встраиваются в MCP-файлы. По умолчанию console/API — `127.0.0.1:7780`, Lume — `127.0.0.1:7777`; удалённое/container подключение требует отдельного TLS/routing setup.
На текущем Mac deployment расположен в `~/.virfield-v2`, VM-диски — в `~/.lume`. Это выбранные локальные пути, не требования к другой установке. System LaunchDaemons `ai.virfield.virfieldd` и `ai.virfield.lume` работают от владельца VM. По проверенному `release.json` установленный runtime остаётся на `44a1c15`; публикация `v2.0.0` сама по себе не обновляла сервис. Установку/обновление выполняем по Operations, не из каталога исходников.
## Проверено и что остаётся
[GitHub Actions Linux/macOS](https://github.com/mallexxx/virfield/actions/runs/36675247578) прошёл для релизного коммита. Подтверждены сборка с пустыми HOME/Go caches, deployment smoke с другими путями/портами, проверки зависимостей, секретов всей истории и релизного архива. Архив содержит четыре бинарника, source/docs, dependency notices и checksums; бинарники ad-hoc signed, без Apple notarization.
На одном физическом Mac пройдены реальный IPSW download/resume, полный golden build с Assistant/Recovery/SIP/provisioning, два изолированных clone, отказ третьему, SSH/tunnels и cleanup. Второй физический хост, длительный soak, оставшиеся crash points и восстановление VM-дисков пока не приняты. Проверки snapshot не заменяют VM-disk disaster recovery.
## Pitfalls
- `acquire` принимает job; работать по SSH можно только после lease `ready`.
- Running external VM и незавершённый cleanup занимают capacity; освобождать слот ручным редактированием SQLite нельзя.
- Неизвестный результат мутации требует inspection/recovery; повторный start/clone/delete вслепую недопустим.
- `release` удаляет disposable VM: результаты нужно выгрузить заранее.
- State backup не содержит VM-диски и IPSW cache; восстановление дисков проверяется отдельно.
## Связь с другими проектами
Целевая цепочка: `Balda → Execution Broker → Virfield → VM → Runner/Callee`. Virfield владеет VM, Broker — очередью и run lifecycle, Runner/Callee — выполнением внутри VM. Полный сценарий из Balda не подтверждён релизом Virfield; состояние остальных проектов проверяется отдельно.
- [[personal/plans/balda-callee-prism-plan]] — целевая интеграция и оставшаяся приёмка.
- [[work/wiki/apple-browsers/vm-ui-testing]] — применение VM leases для UI-тестов.