Files
obsidian-vault/personal/projects/virfield.md
T

80 lines
20 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Virfield
Проверено: **2026-10-16** (практика UI-тестов — 2026-10-17, см. раздел ниже). Последний опубликованный stable Latest и установленная версия — [v2.1.1](https://github.com/mallexxx/virfield/releases/tag/v2.1.1), source `2c64888abed617722e79d618dd4911efa0c4b126`. Релиз опубликован после явного подтверждения владельца. Архив macOS ARM64 и SHA256SUMS скачаны с публичных URLs без авторизации; содержимое побайтно совпадает с проверенным установленным пакетом. Предыдущая публикация: [[personal/projects/virfield-release-v2.1.0]].
Текущий local/GitHub `main`: **`2c64888abed617722e79d618dd4911efa0c4b126`**, checkout чистый, локально и на origin только `main`. Изменение исправляет обработку ошибки `launchctl bootstrap` уже зарегистрированного собственного guest Keychain agent: recovery разрешён только после проверки точного launchd job, затем остаются все прежние native readiness gates. Добавлены закрытый bootstrap diagnostic и regression с настоящим shell-блоком; контрфактический тест на старом коде воспроизвёл отказ. Make check/race, Staticcheck, module verify, Govulncheck и make check из распакованного точного кандидата прошли.
## Установленная версия и проверка обновления
Установлен опубликованный **v2.1.1**, source `2c64888`. Перед публикацией этот же пакет прошёл проверку как кандидат; повторная установка не требовалась. Tag `v2.1.1` указывает на проверенный commit. v2.1.0 сохранён для отката в `~/.virfield-v2/upgrades/20261016-v2.1.1-before`. Пакет собран из чистого committed source; установленная копия подписана прежней локальной identity без изменения исходного release archive. Сохранены system LaunchDaemon, Full Disk Access и девять исходных образов.
Stock v2.1.0 дважды не завершил fresh macOS lease preparation: `guest_keychain_failed`, в закрытой диагностике `launchctl bootstrap` exit5. Оба leases released. Это не потерянный source fix: встроенный keychain.sh в прежнем принятом binary и v2.1.0 совпадает побайтно; используется тот же golden `image-f11d9a1ee2991eada08c4f734c33df6d`.
Свежая VM кандидата `lease-52e620c674d514dd8c9c49880e8980f6` прошла native GUI/Keychain add-read-compare-delete, unlocked console без dialogs, 1920×1080 и отдельный pinned caller SSH. VM released, cleanup job succeeded. В этом успешном запуске bootstrap recovery branch не сработал; его прохождение подтверждено regression, а не выдано за наблюдённое на VM. Полный Broker → macOS XCTest post-upgrade run `run-3b679ccc08ae5aafb94643d60f0410dd` завершился успешно: XCTest 1/1, настоящий xcresult, заново скачанные SHA256-проверенные артефакты, Story closed, cleanup=done и lease released. Это scripts-only проверка без provider credentials и сообщений.
Доказательства: `state/main-production-sync-20261016/virfield-candidate-upgrade.json`, `virfield-fix-source-checks.json`, `virfield-exact-candidate-check.log`, `macos-fix-validation/verification.json`, `macos-readiness-diagnostic/finding.json`.
GitHub CI точного `2c64888` [успешен на macOS и Linux](https://github.com/mallexxx/virfield/actions/runs/38899141941): make check/race/build, Staticcheck, module verify, Govulncheck и Linux gitleaks. Свежий установленный MCP сообщает `2.1.1`, 20 tools/4 resources; authenticated status подтверждает девять прежних images и ноль active workers/jobs. Существующие MCP processes других чатов принудительно не переподключались. Receipts: `macos-candidate-production-verification.json`, `virfield-installed-mcp-2.1.1.json`, `virfield-fix-github-ci.json`.
Опубликованный пакет `virfield-v2.1.1-darwin-arm64.tar.gz`: SHA256 `dbafeea705241286622e773c4576baa3a623cbc143398aa7bbdddac63cb782fd`. Release ID `415082470`, published `2026-10-16T14:59:56Z`, stable Latest, draft=false/prerelease=false. Manifest и все binary hashes проверены. Приватные доказательства: `state/main-production-sync-20261016/virfield-v2.1.1-publication-verification.json`, `upstream-heads-after-publication.json`, `post-publication-runtime-verification.json`. Источник, tag, публичный пакет и production согласованы.
## Историческая принятая версия
Исходная приёмка VM/MCP/Broker выполнена на `0.0.0-acceptance-runbooks`, source `8bfff9f59cab918877d060437a1ad190905a5040`, schema10. Следующие результаты относятся к тому датированному контуру; они не заменяют проверку нового релиза.
Пройдены Tart/native GUI и отдельный SSH, реальные перезагрузки, ключевая изоляция, Xcode/Swift, экспорт артефактов, SSH/desktop и подтверждённый release/revocation. HTPC Sonoma/Sequoia прошли полные циклы. Проверены factory/private GHCR roundtrip, sparse golden transfer, revalidation существующей VM, durable diagnostics, admission/wait/resume и однобайтовая граница node image cache. Legacy iOS профиль прошёл свежую factory/worker квалификацию с armv7 compile/link.
Текущий владелец MCP принят: 20 инструментов, четыре точные темы/ресурса, полный рабочий цикл. Полный off-host disk/config/NVRAM DR и signed package rollback/forward приняты; собственные fixture-копии очищены. Огромный speech-dispatcher.log и его резервная копия удалены после исправления конфигурации, финальный soak прошёл.
Production Codex Story `run-12f093299e237f03a7bb9b70327efcc5` принят независимой проверкой: фактический reviewer `os.open` получил EPERM/errno 1 и exit 0; четыре теста, два новых файла, hashes и отсутствие probe подтверждены. Worker штатно released, credential больше никем не удерживается, Prism завершён. Предыдущие неудачные запуски не считаются доказательством этого результата.
Точный receipt с hashes и границами: [[personal/projects/archive/virfield-release-cleanup-2026-10-16/docs/acceptance/2026-10-16]]. Исходный подробный журнал: [[personal/projects/archive/virfield-release-cleanup-2026-10-16/docs/VERIFICATION]]. Прежняя проектная заметка сохранена целиком: [[personal/projects/archive/virfield-release-cleanup-2026-10-16/project-note-before-cleanup]].
## Релизная очистка
Сохранены 31 исходник документации, JSON/patch и прежняя проектная заметка; содержимое каждого проверено обратным чтением. [[personal/projects/archive/virfield-release-cleanup-2026-10-16/index|Индекс архива]]. В репозитории удалены планы, приёмочные receipts, исторические копии, неиспользуемые Broker patches и старый Lume reference.
README и шесть руководств содержат команды, требования и ограничения без истории прогонов и личных deployment-примеров. Убрана персональная signing identity; fixture-узлы, IP и MAC заменены синтетическими данными. Гостевой admin/home, канонический Go module/repository URL, upstream pins и legal notices сохранены как контракты проекта. MCP сохраняет 20 инструментов и четыре прежние темы; `verification` теперь отдаёт инструкции проверки окружения из ENVIRONMENT.md.
Применён anti-slop editing: https://github.com/elithrar/dotfiles/blob/main/.agents/skills/anti-slop/SKILL.md. Прочитаны SKILL.md и references/tells.md; убраны повторения, служебные рассказы о ходе работы и канцелярит, команды и технические ограничения сохранены.
Проверки нашли и исправили две ошибки: Darwin-only statfs попадал в Linux build; дерево лицензий THIRD_PARTY_NOTICES с versioned Go source мешало go vet/list после распаковки. Statfs и реальные mount-тесты разделены по платформам, Linux отказывает local Tart; notices перемещены в _THIRD_PARTY_NOTICES, который Go пропускает. Регрессионный тест воспроизводит старую ошибку и проходит с исправлением. Его фиксированный tar-fixture работает и на Python 3.11; production packaging требует Python 3.12+.
macOS make check/build/Staticcheck прошли; настоящий read-only volume probe двух смонтированных хранилищ прошёл с одним diskutil lookup на серию из 20 capacity refresh. Linux amd64 commands и тесты скомпилированы; полный Linux arm64 CI на Go 1.26.9 прошёл в отдельном локальном Colima-контейнере: make check (race), make build, Staticcheck, module verify и Govulncheck. Финальный архив распакован в чистый каталог; make check, checksum/manifest/binary hashes, подпись native browser и настоящий packaged stdio MCP (20 tools, 4 точные темы/ресурса) прошли. Gitleaks: 253 commits, 0 секретов; Govulncheck: 0 достижимых/импортированных уязвимостей, один неиспользуемый module-only advisory. Собственные Linux-контейнер и cache volume удалены.
Архив: `/private/tmp/virfield-release-clean-package-final/virfield-v0.0.0-release-cleanup-darwin-arm64.tar.gz`, SHA-256 `5522529bfd16246e7ba034dd6055c9d6ef89b00b5f290ff3ff9f64be6a32a204`. Это локальный проверенный пакет; отдельный GitHub Release/tag не создавался. [[personal/projects/virfield-release-cleanup-2026-10-16|Итоговый протокол релизной очистки]].
## Практика: UI-тесты DDG на двух VM (2026-10-17)
Использовали MCP клиент Claude Code, шаблоны `macos27` (macOS 27.0, Xcode 27.0, golden `uitest-27-v1`) и `monterey-xcode-13.4.1` (macOS 12.7.6, Xcode 13.4.1, `developer-v1`). Сборка и подпись на хосте, исполнение по pinned SSH. Подробности про macOS 12 — [[personal/tech/legacy-xctest-runner]].
Вопросы и проблемы:
- **CLI `virfield` на машине клиента нет** (`~/Library/Application Support/Virfield/bin` отсутствует), поэтому `keygen`/`ssh-config` из руководства не выполнить. Ключ создан `ssh-keygen -t ed25519`, pinned `config` и `known_hosts` написаны вручную из `vm_lease`: `ssh.host_key`, `ip`, user `admin`; `StrictHostKeyChecking yes`. Работает, потому что IP Tart VM (192.168.64.x) доступен с хоста напрямую. Удобно, если бы MCP/доки описывали этот путь без CLI.
- **`ssh_key_in_use`**: один публичный ключ на один активный lease. Для второй VM нужен второй ключ.
- **`resource_exhausted` по диску**: хранилище `samsung-tart` ≈214 ГБ, macOS 27 резервирует 140 ГБ, Monterey 120 ГБ, safety reserve 20 ГБ → вместе не помещаются (headroom −87 ГБ). Пришлось сначала освободить macOS 27 (с разрешения владельца) и только потом брать Monterey. Шаблон на другом хранилище (`release-check`) есть, но выбирать его самостоятельно клиент не стал.
- **`virfield_status` ≈112 тыс. символов** — превышает лимит ответа, сохраняется в файл. Разбирать `jq`: `.capacity`, `.leases`, `.template_availability`. В `.templates[]` нет полей `xcode`/`macos` версии; версии и `installed_images` смотреть в `image_catalog` (`inventory.configured_images`).
- Тайминги: prepare до `ready` ≈40 с для обеих VM; release → `released` ≈7 с (job сначала `delete_dispatched`, итоговое состояние читать из `vm_lease`, не ждать только `virfield_job`).
- **Запись экрана**: на `uitest-27-v1` `screencapture -v` работает по обычному SSH; на macOS 12 (`developer-v1`) `capture error`, нет Screen Recording TCC, SIP включён. Если нужна запись на старых VM, нужен golden с заранее выданным разрешением.
- **UI automation**: macOS 12 VM — Developer Mode уже включён, sudo без пароля, но `automationmodetool enable-automationmode-without-authentication` нужно выполнить; `ui_testing` проба помогла бы здесь. Для запуска из SSH нужна консольная GUI-сессия (Terminal `.command`).
- **`ready` не подтверждает готовность UI Automation — повторно 2026-10-21.** Две свежие VM, `monterey-xcode-13.4.1` (Tart, macOS 12.7.6/21H1320, ARM64, Xcode 13.4.1/13F100) и `htpc-sonoma-14-xcode-16.2` (node VM, macOS 14.8.9/23J631, Intel, Xcode 16.2/16C5032a), получили успешный prepare и lease `ready`. При этом `/usr/bin/automationmodetool` на обеих сообщил `Automation Mode is disabled` и `This device requires user authentication to enable Automation Mode`. Developer Mode был включён, `admin` входил в `_developer`, консольная сессия принадлежала `admin`. XCTest runner загрузился, но запуск через Terminal и напрямую через pinned SSH завершился `Timed out while enabling automation mode`, exit 65, **0 выполненных тестов**. `sudo automationmodetool enable-automationmode-without-authentication` затем сообщил успех; повторная проверка уже показывала `DOES NOT REQUIRE user authentication`, однако проверенный повтор по-прежнему завершился timeout до тестовых методов. Контрольные минимальные UI-тесты, собранные локально штатными SDK Xcode 13.4.1 на Monterey и Xcode 16.2 на Sonoma (без нового bundle и без shim), тоже завершились `Timed out while enabling automation mode`, exit 65, до тестового метода. Поэтому проблема ещё не закрыта, а совместимость исполнения нового bundle этим прогоном не доказана. Нужны явная проверка Automation Mode при UI-readiness, подготовка соответствующего UI-профиля и короткий настоящий XCUITest с ненулевым числом выполненных тестов; native GUI/Keychain readiness этого не заменяет. Leases: `lease-9ec9281c953de634a53572e293862901`, `lease-6994a85f7abcefd367dd40d45b08e87b`.
- Remote shell zsh: нет `timeout`, `$var` не разбивается на слова — при автоматизации писать скрипты файлами.
- Запуск из `xcodebuild test-without-building -xctestrun` по скопированным `Products` (macOS 27) работает; `Scheme`-pre-actions (`clean-app.sh`, `tests-server`) при этом **не** выполняются.
- Повторы `vm_acquire` — с новым idempotency key, если меняется ключ SSH/шаблон; тот же ключ и body только для настоящего retry.
- Клиентская сторона (не virfield): auto-mode classifier заблокировал `vm_acquire` для шаблона, который пользователь не называл; разрешение нужно давать явно.
## Ограничения и дальнейший план
Следующие задачи не входят в принятую установленную VM/MCP/Broker-приёмку и не объявляются реализованными:
- Проверить Apple-authorized download свежим входом и реальный VS Code editor / DuckDuckGo application debugging; generic installed LLDB-DAP уже проверен.
- Установить причину прежнего guest-kernel stall: 2002-stackshot diagnostic её не воспроизвёл. Поздние успешные циклы не доказывают причинное исправление.
- Развивать Orchard и другие провайдеры отдельными проверенными сценариями; mixed-primary scheduling, libvirt/Vetu и лицензируемые провайдеры остаются отдельным объёмом.
- Реализовать signed node-agent, WoL relay/power intents, grants/connectors и physical-host/browser desktop при отдельном приоритете.
- Развивать /api/v3 capability selection, Target/EnvironmentProfile/ConnectionGrant, short-lived access, VS Code extension и linked Console/Broker flows.
- Расширить crash/host-loss/partition/full-disk matrix, metrics/alerts, signed promotion/revocation.
Broker reviewer исправление уже входит в запушенный Broker main `13c29ac`. Завершённые локальные и remote ветки Broker удалены после содержательной сверки, reviewer worktree сохранён detached. Архив исходного patch: [[personal/projects/archive/virfield-release-cleanup-2026-10-16/docs/acceptance/broker-reviewer-readonly]].
Детальные прежние планы сохранены в [[personal/projects/archive/virfield-release-cleanup-2026-10-16/docs/VIRFIELD-3-PLAN]] и архиве superpowers. Их старые pending-статусы не заменяют результаты выше. Автоматизация остаётся на паузе по указанию пользователя.