diff --git a/personal/projects/virfield.md b/personal/projects/virfield.md index 3673926e..55692443 100755 --- a/personal/projects/virfield.md +++ b/personal/projects/virfield.md @@ -12,7 +12,7 @@ tags: --- # Virfield — текущее состояние -Актуально на 2026-10-14. Поддерживаемый checkout: `/Users/admin/Developer/virfield`. Ветка `codex/retire-lume-release-hardening` опубликована по разрешению пользователя, current source `9a740c0f2a5cf64ccd9fc00cff705ff5abc90d08`; `main` ещё не обновлён. Установлен `aee89c1`: node resource/cache quotas и source-prefetch. Новый source также содержит HTPC `vms.storage_dir`, строгий Tart clone routing, отказ от неполных inventory snapshots при отмене проверки, native GUI/SSH keychain readiness, постоянный 1920×1080 Tart desktop, SSH banner budget 45 s и macOS 27 ASIF Recovery keep. Установка последнего кандидата ждёт освобождения чужой lease по решению пользователя. GitHub CI пока отложен пользователем; проверки выполняются локально. Старый worktree `virfield-v3` и ветка `codex/virfield-v3-stage1` не являются инструкцией для продолжения работы. +Актуально на 2026-10-15 Asia/Bishkek (2026-10-14 UTC). Поддерживаемый checkout: `/Users/admin/Developer/virfield`, ветка `codex/retire-lume-release-hardening`; `main` ещё не обновлён. После освобождения обеих чужих VM установлен сначала `9a740c0`, затем diagnostic candidate `24512c7fb6fef19b6a3d8af73ccbf35706895803` с backup, прежней signing/FDA identity и сохранением всех семи goldens. Полный локальный CI/Staticcheck diagnostic source прошёл. HTTP/fresh stdio MCP exact-version/all-four-runbooks/resources/status проверены для installed `9a740c0`; ранее подключённый owning client всё ещё отдаёт старый Lume runbook. Live native Monterey acceptance обнаружила сбой display до keychain: фактические 3840×2160, режима 1920×1080 нет. Причина подтверждена кодом Tart: default/`pt` использует Retina-масштаб хоста. Source `4a53b67ce04fd1adc164750b47e780c4bdde9ea6` задаёт `1920x1080px` во всех factory recipes и клонах; локальные проверки и новая упаковка выполняются, installed native gate ещё не пройден. GitHub CI отложен пользователем; проверки только локально. Старый worktree `virfield-v3` и ветка `codex/virfield-v3-stage1` не являются инструкцией для продолжения работы. ## Runtime и deployment @@ -43,7 +43,7 @@ tags: Installed MCP прошёл HTTP и fresh stdio discovery/help/status с 18 tools, HTTP 401 без авторизации и ещё два полных fresh stdio acquire/replay → SSH/workload/artifact/desktop → release цикла на собственных factory-клонах. Оба дополнительных клона удалены. Live discovery gate исправлен: проверяет обязательные имена вместо устаревшего hardcoded count 17. Source MCP metadata теперь соответствует Tart/node budgets, approved bases и unlocked APFS/FileVault policy. Ventura `TestLiveLeaseSSH` прошёл exact Xcode 15.2/15C500b, Swift workload, SCP, cross-key/image-key rejection, desktop/tunnel revocation, cleanup и рестарт daemon с сохранением lease SSH identity. Signed installed archive `aee89c1`: SHA-256 `2313602b2c380e5e74640c47ee6ad50d9c10d750f856a0949833a4489803cf35`; хеши трёх подписанных бинарников сохранены в `~/.virfield-v2/upgrades/20261014-aee89c1/installed.json`. Полный локальный make check, Staticcheck, Gitleaks и регрессионные race-тесты нового inventory fix прошли. Clean archive exact source `8a297748eac5035fa0f0453aa51e11e9cb77d4e4`: `/private/tmp/virfield-release-candidate-20261014/virfield-v0.0.0-candidate-darwin-arm64.tar.gz`, SHA-256 `e2efde0214c7f4967528308b850575baac4a464e4e6c86425e871e11b8879488`; extraction, все binary checksums, native browser signature и действующий config-check проверены. Idle-only installer `/private/tmp/virfield-install-8a29774.py` подготовлен, не запускался; включает три бинарника и актуальный native Apple browser, rollback backup и повторную проверку свободного pool. Fresh MCP из этого clean archive прошёл discovery/help/status и проверку исправленных metadata. -macOS 27 lease `lease-6fde5d2f33c234f2e885583fb6a8fd34` штатно released по прямому разрешению пользователя «27ю вм можно отпускать» (2026-10-15 Asia/Bishkek). Cleanup `job-3168397fcd2d6cf4bc821abe7dead124` succeeded; VM `vf-6fde5d2f33c234f2e885583fb6a8fd34` подтверждённо отсутствует, все семь image-ready records/manifest identities сохранены. Прежняя iPad lease `lease-327bb8e4a3a06b7d5ac8e527c57d1907` также released её владельцем. Однако iPad-сессия уже держит новую Monterey lease `lease-9c1a94ff2b56b396fee7f1bbd2e0dcea` (ready, VM `vf-9c1a94ff2b56b396fee7f1bbd2e0dcea`, `release-check`, TTL до 2026-10-14 22:15:57 UTC). Pool 1/2 occupied; установка ещё не запускалась и ждёт полного освобождения pool. Heartbeat `virfield-lease` ACTIVE каждые 15 минут; пользователь разрешил однократное продолжение установки/live/factory/private GHCR/локального CI/docs/push, после завершения она отключится. Новую рабочую Monterey не освобождаем. Canceled-inventory fix проверен в source и ещё не установлен; причина drift старых рабочих leases не установлена. +macOS 27 lease `lease-6fde5d2f33c234f2e885583fb6a8fd34` штатно released по прямому разрешению пользователя «27ю вм можно отпускать» (2026-10-15 Asia/Bishkek). Cleanup `job-3168397fcd2d6cf4bc821abe7dead124` succeeded; VM `vf-6fde5d2f33c234f2e885583fb6a8fd34` подтверждённо отсутствует, все семь image-ready records/manifest identities сохранены. Прежняя iPad lease `lease-327bb8e4a3a06b7d5ac8e527c57d1907` также released её владельцем. Новая iPad Monterey lease `lease-9c1a94ff2b56b396fee7f1bbd2e0dcea` тоже released владельцем; пользователь подтвердил «Вторая вм отпущена, можешь продолжать». Idle pool 0/2 проверен до установки `9a740c0` и diagnostic `24512c7`; сохранены все семь goldens. Heartbeat `virfield-lease` ACTIVE каждые 15 минут; пользователь разрешил однократное продолжение установки/live/factory/private GHCR/локального CI/docs/push, после завершения она отключится. Чужие ресурсы сохраняем. Canceled-inventory fix теперь установлен; причина drift старых рабочих leases не установлена. Offline restore `backup-5cdef526c555f6a53ed5f565c6e2edaf` в отдельный private каталог прошёл: 18 файлов, SQLite integrity, пять active image identities/credentials/verification, тот же node management key, новый operator token и config-check. Restored daemon не запускался; live restore/rollback остаются gates. @@ -55,11 +55,11 @@ Offline restore `backup-5cdef526c555f6a53ed5f565c6e2edaf` в отдельный - R2: secured Sonoma 14.8.9 и Sequoia 15.8.1 на HTPC, 19/19. - R3: Screen Sharing VM lease tunnels, 11/11. Physical desktop и browser noVNC не реализованы. -Node VM quotas реализованы и установлены в `aee89c1`: CPU/RAM/full disk reservations, pending image builds, cache cap, qcow2/storage probes и post-wake clone/start/commit checks. Live probe корректно отказал в 100 GiB VM на home NVMe с 99 GiB free и reserve 20 GiB. `d2daf4e` добавляет private storage root для HDD (2.7 TiB free); новые пустые owner-only directories подготовлены, deployment config ещё не переключён. Новый live node suite ещё нужен; права существующих HTPC goldens не менялись без отдельного разрешения. Read-only namei подтвердил 0444 у двух старых secured qcow2/OpenCore файлов и traversable directories; migration к 0400 остаётся permission/release gate. Будущий v3 capability API, grants, node-agent, Access/noVNC, VS Code extension и расширенный fleet/hardening остаются roadmap. Опубликованный v2.0.0 — исторический Lume-релиз 2026-09-30. +Node VM quotas реализованы и установлены в `aee89c1`: CPU/RAM/full disk reservations, pending image builds, cache cap, qcow2/storage probes и post-wake clone/start/commit checks. Live probe корректно отказал в 100 GiB VM на home NVMe с 99 GiB free и reserve 20 GiB. HTPC deployment config уже переключён на private storage root HDD `/run/media/system/Data/virfield/runtime`. После Wake API свежий available probe подтверждает около 2.87 TB free, CPU budget 8, RAM 24 GiB и cache cap 512 GiB; старый asleep cached probe относился к NVMe. Новый live node suite ещё нужен; права существующих HTPC goldens не менялись без отдельного разрешения. Read-only namei подтвердил 0444 у двух старых secured qcow2/OpenCore файлов и traversable directories; migration к 0400 остаётся permission/release gate. Будущий v3 capability API, grants, node-agent, Access/noVNC, VS Code extension и расширенный fleet/hardening остаются roadmap. Опубликованный v2.0.0 — исторический Lume-релиз 2026-09-30. ## DDG macOS UI tests: проверенные проблемы и исправления (2026-10-14) -Сессия Claude Code (`apple-browsers.git/fix-macos-ui-test-failures`) держит `lease-6fde5d2f33c234f2e885583fb6a8fd34` (`macos27`, TTL до 2026-10-15 13:20 UTC). Установленный daemon `aee89c1` и эта рабочая VM ещё не обновлялись: пользователь выбрал дождаться освобождения lease. Исправления опубликованы в source `624bdfa7a88738809729e6889c679eaf0241eb78`. +Историческая рабочая lease `lease-6fde5d2f33c234f2e885583fb6a8fd34` сессии Claude Code (`apple-browsers.git/fix-macos-ui-test-failures`) уже released по разрешению пользователя. Следующие результаты относятся к source-проверке `624bdfa7a88738809729e6889c679eaf0241eb78`; текущая installed acceptance более нового кандидата выполняется отдельно. - **Locked keychain — исправлен и live-проверен в source.** DDG CI вызывает `create_keychain_ui_tests` в `macOS/fastlane/Fastfile`: DefaultKeychain/`default`, default + unlock, timeout 54000, без lock on sleep. DDG EncryptionKeyStore хранит encryption key через native generic-password SecItemAdd с WhenUnlocked. GUI и каждое SSH-подключение имеют отдельную Security audit session, поэтому разблокировка только одного контекста недостаточна. Кандидат готовит private per-image/lease default keychain через Aqua LaunchAgent и разблокирует его непосредственно перед каждой исходной SSH-командой через VM-only ForceCommand. Native запись/чтение/сравнение данных/удаление проверяются в обоих контекстах, после reboot — с новым boot UUID и nonce. Публичный/пустой пароль не используется. - **Старый login keychain и ScopedBookmarkAgent — тоже закрыты.** Одной смены default keychain оказалось мало: OS service продолжает обращаться к login и оставляет модальный password dialog над браузером. Новый preparer сохраняет его items, меняет пароль на текущий private VM password, проверяет native доступ после lock/unlock новым паролем и сохраняет login в search list. Старый image password не остаётся в worker identity. Ручное убийство SecurityAgent не является частью нового readiness.