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

209 lines
54 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.
---
title: Virfield
namespace: personal
updated: '2026-10-14'
status: release-hardening-waiting-lease
tags:
- virfield
- macos
- vm
- go
- infrastructure
---
# Virfield — текущее состояние
Актуально на 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-масштаб хоста. Current source/installed candidate `4a53b67ce04fd1adc164750b47e780c4bdde9ea6` задаёт `1920x1080px` во всех factory recipes и клонах. Полный локальный CI/Staticcheck/Gitleaks и clean package прошли, source pushed; два новых клона свежего iPad Monterey прошли native GUI/SSH keychain I/O, actual 1920×1080, настоящий reboot и полный release/tunnel revocation. Оставшиеся configured Tart/HTPC native matrix и private GHCR roundtrip ещё выполняются; весь кандидат пока не release accepted. GitHub CI отложен пользователем; проверки только локально. Старый worktree `virfield-v3` и ветка `codex/virfield-v3-stage1` не являются инструкцией для продолжения работы.
## Runtime и deployment
- Установленный runtime: Tart на Apple Silicon + SSH physical nodes `mbp-2014` и `htpc`. На HTPC macOS lab VM работают через rootless Podman/QEMU/OpenCore.
- Deployment `~/.virfield-v2`, config `~/.virfield-v2/config.json`, state `~/.virfield-tart`, daemon `~/.virfield-v2/bin/virfieldd`, API `127.0.0.1:7780`, launchd `ai.virfield.virfieldd`.
- Virfield переключён с Lume на Tart 2026-10-08. В текущем hardening-кандидате удалены Lume backend/factory/wrapper/patch/build/install paths. Неявный legacy runtime и `image_tools` отклоняются. Старые поля профилей читаются только для совместимости журнала; новый Tart builder отклоняет IPSW-рецепты до резервирования build.
- Старый `ai.virfield.lume` отключён (launchctl disable + bootout) 2026-10-14 после проверки пустого inventory. Служба отсутствует в загруженных system services, порт 7777 закрыт. Plist/бинарники сохранены для отката; Homebrew Lume отсутствует.
- Не создавать второй manager/listener, не менять порт и не редактировать SQLite/runtime disks в обход журнала.
## Реализованные исправления кандидата
- Один exclusive physical-host lease независимо от VM slots; VM не занимает host slot; node-side atomic host lock и post-wake проверка boot volume.
- Общий sleep hold с reference counting и сохранением чужого hold; при ошибке Podman cleanup overlay и hold сохраняются.
- Node image deletion сохраняет provider/guest identity, защищает backing goldens и проверяет отсутствие контейнера.
- Tart image_create выбирает approved digest-pinned bases из runtime.tart.bases и настроенных templates; default location соответствует конфигу. Base/developer/automation/macOS 27 recipes; generic automation проверяется после reboot.
- Shared resumable Xcode archive store, checksum/quarantine, exact-job Apple sign-in recovery в resolve до VM build.
- Registry resolver принимает Tart flat/ASIF format, image_pull сохраняет pin/provenance. Publish строит новый portable guest с публичным admin/admin, не ставит private golden credentials, sanitizes и подтверждает временный cleanup. Private managed golden не загружается.
- Init/installer используют три бинарника и только сервис Virfield; отдельный private state-dir и optional native browser. CLI config-check проверил действующий config.
- Orchard проходит обязательный per-lease SSH preparer; source-only remote template отклоняется до VM creation. Полноценная remote factory/access и live pool acceptance отсутствуют.
- Pending image build/export резервируют CPU/RAM/disk до dispatch и учитываются вместе с worker leases; для нового macOS 27 base нужен known/declared disk bound. Host IDs не могут совпадать между primary и node inventories.
- Backup включает node management keys и cached probes, отклоняет symlinks в identity tree.
- Go 1.26.9, pinned Staticcheck без замечаний, govulncheck: 0 reachable/imported-package vulnerabilities. Module-only notice openpgp относится к неиспользуемому пакету и не имеет fixed version.
- Удалён источник CI Pillow failure: retired Python image factory/tests и Lume build step. Это исправление workflow, а не результат нового GitHub CI.
## Приёмка и релизный статус
Кандидат **ещё не принят для релиза**. Установка `09ad696` сохранила signing identity/Team ID E3R68ED529 и все пять image-ready записей. Шесть последовательных Tart clones (по два Ventura/Monterey/macOS 27) прошли SSH/host-key изоляцию, OS/build/SIP, desktop, artifact export и release. External SSD не допускает два диска полного размера с сохранением резерва; concurrent acceptance будет выполняться на отдельном временном внутреннем контейнере. Exact commit `09ad696cacea2ba9cd2245fa76cc599696470d01` прошёл полный make check (docs, 7 Python tests, gofmt/vet/full race), Staticcheck, module verify, Gitleaks (196 commits), govulncheck (0 в используемом коде), действующий config-check и Packer syntax checks. Clean archive/extraction/init/checksums/native signature smoke прошёл: `/private/tmp/virfield-release-check-09ad696/virfield-v0.0.0-localcheck-darwin-arm64.tar.gz`, SHA-256 `f12f2be162cbcfa7688c814a8fcdbb13d17ff028053f878aa27ac1e87e2bbe3c`. Это локальная тестовая упаковка, не опубликованный release. Live public Tart manifest resolution также прошёл. Factory/GHCR roundtrip в работе: отдельный temporary Tart container и push source настроены, разрешён новый private `mallexxx/virfield-hardening-acceptance`. Первый cold Packer build завершился EOF; после проверки отсутствия процессов/VM его собственная запись удалена через journaled recovery. Установленный `aee89c1` prefetches source в retryable resolve и отключает implicit pruning. Factory golden `image-5387f340da4ae093162383c18449c592` rebuilt/qualified, generic automation прошёл post-reboot проверку; два последовательных клона прошли SSH/cross-key/host-key isolation, exact OS/build/SIP, desktop и artifact export, затем оба released. Private GHCR publication требует idle pool и пока не запускалась; полный roundtrip не принят. Текущие исходники, установленный daemon и published archive нельзя считать одним артефактом.
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` тоже 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.
Ранее принятые срезы сохраняют свои даты:
- Ventura 13.7.4/Xcode 15.2 и Monterey 12.7.6/Xcode 13.4.1: golden qualification и две аренды, 23/23 на каждый golden.
- macos27 27.0/26A428/Xcode 27.0/uitest-27-v1: Broker v1 smoke passed 2026-10-08.
- R1: четыре boot volumes MacBook по очереди; HTPC wake-by-lease (27 с).
- 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. 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)
Историческая рабочая 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.
- **Дисплей — исправлен в source.** Старый установленный golden отдаёт 1024×768 pt / 2048×1536 px и список преимущественно 4:3 режимов; workaround владельца на нём — 1920×1440 1x. Новые Tart recipes/clones задают 1920×1080 logical и запрещают refit окна. Host-side hint сам по себе недостаточен: Aqua agent выбирает native режим через CGBeginDisplayConfiguration → CGConfigureDisplayWithDisplayMode → CGCompleteDisplayConfiguration(permanently). Временный CGDisplaySetDisplayMode откатывается при выходе процесса. Новые isolated factory и worker подтвердили actual GUI frame 1920×1080 после reboot.
- **SSH banner после boot — исправлен в source:** 45 секунд в daemon handshake и generated CLI config; timeout до выполнения команд классифицируется как retryable connection failure. Host pin/auth failures не повторяются. Regression test прошёл.
- **macOS 27 factory / ASIF — дополнительно найден и исправлен:** отсутствие recovery_partition выбирало Packer default deletion, оставляя открытый/заблокированный ASIF file и вызывая Virtualization.framework startup failure. Все macOS 27 recipes теперь явно keep Recovery. Полный новый source resolve → Packer build → qualify/reboot → stop прошёл.
- **vm_tunnel backend_unavailable / vm_drift — installation gate остаётся.** Прямой SSH рабочей lease отвечает, API считает её needs_attention. Canceled inventory regression исправлен в source и проверен тестами; это не доказывает единственную причину drift этой конкретной чужой lease. Повтор live tunnel acceptance нужен после безопасной установки.
- **VMShare отсутствует по текущему контракту:** checkout и DerivedData копируются pinned SSH/SCP/rsync с сохранением путей, нужных pre-actions. Общий host каталог автоматически не монтируется.
- **macOS UI Tests CI ожидает prebuilt products.** CI скачивает notarized Review app; для локального запуска нужны отдельно собранные macOS Browser Review и macOS tests-server. Сам VM manager не угадывает build scheme.
- **Xcode 27.1 products → guest Xcode 27.0:** два реальных запуска DownloadsUITests.testDownloadFinishesThenPopupIsShown прошли (1 test / 0 failures каждый), включая browser startup и Settings/General clicks. Второй запуск выполнен после source guest agent/reboot без ручного unlock. Это single-test smoke, а не приёмка всей UI-suite или всех minor version сочетаний.
Дополнительная приёмка: Ventura native GUI key I/O/reboot; macOS 27 native GUI и SSH key I/O/reboot; source macOS 27 factory; два source Prepare-клона нового factory golden с SSH identity isolation, login rekey и real worker reboot — PASS. SCP upload/download с SSH bridge — PASS. Все четыре isolated VM этой проверки подтверждённо удалены; две неудачные old-daemon factory записи удалены через exact-name journaled recovery после проверки отсутствия процессов/VM. Production goldens и чужие leases не менялись.
Private evidence: `/private/tmp/virfield-keychain-macos27-standalone-20261014`, factory image `image-3ded21740aa5ee237b85aac1fc8bbe52`, source recipe SHA-256 `38a47b46c05c906e3b104d7c6a9d83479047213deaf3002b93f2e2af6debd6ae`. Exported DDG xcresult archive `ddg-final-xcresult.zip`, SHA-256 `cfe8100c567effaed5271f8b32f819b372ea2a22f65c7794e2013a0351555b76`. Local make check (docs, Python, vet, full race), Staticcheck и Gitleaks прошли. GitHub CI не использовался как acceptance.
## Каноническая документация
- [Operations](https://github.com/mallexxx/virfield/blob/codex/retire-lume-release-hardening/docs/OPERATIONS.md) — config/install/services/recovery.
- [Image pipeline](https://github.com/mallexxx/virfield/blob/codex/retire-lume-release-hardening/docs/IMAGE-PIPELINE.md) — актуальные Tart/node contracts.
- [Verification](https://github.com/mallexxx/virfield/blob/codex/retire-lume-release-hardening/docs/VERIFICATION.md) — фактические gates/evidence.
- [3.0 plan](https://github.com/mallexxx/virfield/blob/codex/retire-lume-release-hardening/docs/VIRFIELD-3-PLAN.md) — реализованное и оставшееся.
Ссылки ведут на опубликованную hardening-ветку; `main` ещё не обновлён. Старая история: [[personal/projects/archive/virfield-checkpoints-through-2026-10-08]].
## iPad Markdown editors: Monterey build (2026-10-14)
Работа: [[personal/how-to/ipad-ios935-build-deploy]]. Цель — сборка открытых редакторов на `monterey-xcode-13.4.1`, armv7/iOS 9.3.5, fake sign и установка на подключённый iPad mini 1.
Наблюдения этой сессии:
- В 21:53–21:56 (Asia/Bishkek) admission сначала был занят 2/2: чужой `lease-6fde5d2f33c234f2e885583fb6a8fd34` и quarantined image `image-2ec1111415abc0c1e1e66a8e293b14db` / job `job-9f321bedd55313ed859c8eaa9844c3ce` (`image_command_failed`). Чужие записи и VM не менялись. Позднее статус показал освобождение image reservation и один свободный слот.
- Первый `vm_acquire` для Monterey с default storage вернул `resource_exhausted`: `No eligible clone storage has enough free disk for reserved VM growth and host safety reserve: samsung-tart`. При этом status показывал `capacity.available=1` и около 251 GB физически свободного места на Samsung; admission дополнительно учитывает полные reservations и safety reserve. Это ограничение ресурса, не доказанный дефект.
- Новый запрос с явным `destination_location=release-check` принят: lease `lease-9e65ca2f956c0f061eb3ac021d9f6b6f`, prepare job `job-ee57f1c483518f251f1bcd095621e6e9`, VM `vf-9e65ca2f956c0f061eb3ac021d9f6b6f`. Тело и idempotency key сохранены в `~/Developer/ipad-editors/virfield-acquire-release-check.json`.
- Job через ~2 секунды перешёл в `needs_attention`, phase `clone_dispatched`, error `clone_outcome_unknown`; lease — `quarantined`, `clone_confirmed=false`. Events 840–842 не сохраняют исходную ошибку backend, только общий текст `Runtime create did not return confirmed success. Automatic replay and deletion are blocked.`
- Установленный Operations runbook прямо предупреждает: `Local Tart cannot clone a local golden across TART_HOME containers; do not configure a cross-container fallback for such templates.` Исходники `internal/tart/client.go:414–422` отклоняют такой cross-container clone ДО вызова Tart. Здесь golden находится в `samsung-tart`, а выбран destination `release-check`; это соответствует запрещённому пути. Controller (`internal/control/controller.go:1050–1063`) превращает любое Clone error в неоднозначный outcome и quarantine. Следствие: детерминированный preflight rejection занимает reservation и требует operator recovery, а исходная причина не видна в job/events. Это найденная проблема интерфейса admission/диагностики, не исправленная в этой сессии.
- Повтор acquire, resolve/release и обход journal не выполнялись. Для восстановления нужен exact-name operator resolve после подтверждения отсутствия операции, с отдельным подтверждением пользователя: команда recovery может навсегда удалить собственную VM. Чужая работа не затрагивается.
В этом начальном checkpoint сборка ещё не запускалась и готового Monterey lease не было. Тогда TTL quarantined lease был до 2026-10-15 00:58:14 Asia/Bishkek; истечение TTL само по себе не доказывает cleanup. Эта аренда позднее штатно released после разрешённого recovery; новая Monterey прошла rebuild и уже используется для сборок (см. проверку ниже).
### Recovery approval review, 2026-10-14 22:18 Asia/Bishkek
После пользовательского «Да» выполнены повторные read-only status/job проверки: собственный lease по-прежнему quarantined, job needs_attention, runtime inventory не содержит собственной VM; никаких running/queued операций для неё нет. Попытка штатного CLI resolve с exact lease/VM и CONFIRM-NO-OPERATION-IN-FLIGHT остановлена automatic approval review ДО запуска команды. Reason: transcript does not contain a clear user approval for this exact irreversible lease deletion. Recovery не выполнен, slot reservation остаётся. Нужен однозначный ответ пользователя с разрешением удалить только `lease-9e65ca2f956c0f061eb3ac021d9f6b6f` / `vf-9e65ca2f956c0f061eb3ac021d9f6b6f`. Это approval blocker, не новый сбой Virfield backend.
### Recovery и новый образ, 2026-10-14 22:30 Asia/Bishkek
После явного ответа пользователя «Разрешаю recovery и удаление указанной VM» повторно проверен остановленный prepare job, затем выполнен штатный exact-target CLI `resolve`. Cleanup `job-1fe239f3064566b2a4b3f75ebce13813` завершился `succeeded` в 16:29:45 UTC. Предыдущий approval blocker снят; освобождена только собственная аренда Monterey. Работающая macOS 27 VM `vf-6fde5d2f33c234f2e885583fb6a8fd34` не менялась.
Чтобы избежать cross-container clone, запущен новый `image_create` непосредственно в `release-check`: template/VM `ipad-editors-monterey-xcode-1341-20261014`, image `image-f8c888fcafbd1a2df2a3b9a02821685d`, job `job-076452fa609adc3e6d4093a8e047a693`. Exact profile: macOS 12.7.6/21H1320, Xcode 13.4.1/13F100, SIP enabled, тот же approved digest-pinned Tart upstream. Образ пока строится; это не подтверждение готовности worker или успешной сборки приложения.
### Cross-container admission fix: source versus installed (2026-10-14)
Monterey rejection выше относится к установленному `aee89c1`. В опубликованном source `624bdfa` проверка `Controller.cloneLocationCandidates` возвращает `invalid_request` при explicit wrong container для local Tart golden ДО reservation/job; `TestLocalTartGoldenRejectsWrongStorageBeforeReservation` проверяет отсутствие записанной lease. Без явного destination несовместимые default/fallback locations также отфильтровываются. Это уже исправлено в source, установка ещё ждёт освобождения рабочей macOS 27 lease. Cross-container golden copy не реализован; новый image в нужном container — допустимый отдельный workflow. Чужая iPad-сессия и её journal не менялись этой проверкой.
### Исторический checkpoint: keychain/UI package (2026-10-14 16:49 UTC; superseded by 9a740c0)
Published source `624bdfa7a88738809729e6889c679eaf0241eb78`, branch `codex/retire-lume-release-hardening`; clean worktree и remote branch совпадают. Package этого checkpoint `/private/tmp/virfield-release-keychain-624bdfa-20261014/virfield-v0.0.0-keychain-candidate-darwin-arm64.tar.gz`, SHA-256 `be29654ef02f4ab6cd747b1815c2a72532717aaf2d423a2a4d8a93e4013634bb`. Проверены extraction, все manifest binary hashes, native browser signature и deployment config-check. Idle-only installer `/private/tmp/virfield-install-624bdfa.py` подготовлен, не запускался; прежний installer/archive `8a29774` — исторический срез. Установлен по-прежнему `aee89c1`. На 16:49 UTC рабочая macOS 27 VM всё ещё running, её lease needs_attention; также работает отдельный image build `job-076452fa609adc3e6d4093a8e047a693` чужой iPad-сессии. Установка требует idle pool и ждёт выбранного пользователем освобождения рабочей lease. Полный GHCR roundtrip/node acceptance/live restore остаются release gates.
Fresh stdio MCP из clean package `624bdfa` также прошёл initialize/discovery (18 tools), актуальный embedded runbook, read-only status и проверку новых native GUI/SSH keychain + 1920×1080 descriptions. Во время smoke VM/lease mutations не выполнялись.
### Текущий candidate и разрешённое продолжение (2026-10-14 17:19:56 UTC)
Current published source `9a740c0f2a5cf64ccd9fc00cff705ff5abc90d08`, clean checkout и remote `codex/retire-lume-release-hardening` совпадают. Последний clean package: `/private/tmp/virfield-release-readiness-9a740c0-20261014/virfield-v0.0.0-readiness-candidate-darwin-arm64.tar.gz`, SHA-256 `065413f0ea81bef181230227c91ac0446ab5c040ca1dc66522eb1d0d51ae9182`. Extraction, все шесть manifest binary hashes, native browser signature и действующий config-check — PASS. Idle-only installer `/private/tmp/virfield-install-9a740c0.py` подготовлен, не запускался. Архивы/установщики прежних commits — исторические; старый installer не соответствует новому HEAD.
- Полный локальный make check: docs (26 файлов / 65 links), 9 Python tests, gofmt/vet/full Go race — PASS. Pinned Staticcheck v0.7.0 и Gitleaks v8.30.1 current tree — PASS. GitHub CI не использовался как acceptance.
- Найден отдельный stale MCP client: уже подключённый процесс отдаёт старые Lume instructions, хотя установленный daemon использует Tart. Existing stdio processes стартовали до замен executable и сохраняют старый код/docs в памяти. Новый live MCP gate проверяет точную package version и все четыре embedded runbooks/resources against exact source; negative fixtures со старой version и stale runbook отклоняются. Fresh stdio нового package (version `0.0.0-readiness-candidate`, 18 tools, все четыре runbooks/resources, status Tart/HTPC) — PASS. Приёмка уже подключённых owning clients после их безопасного reconnect ещё нужна; чужие MCP процессы не завершались.
- Acceptance journal теперь заменяется атомарно с fsync; failure до replacement сохраняет последний полный replay record. Body сохранён как точная JSON-копия отправленного запроса и не меняется при последующем изменении caller object; несовпадающий replay отклоняется до dispatch. Regression tests — PASS.
- GHCR read-only preflight: configured account `mallexxx` подтверждён, token имеет `write:packages`; acceptance package пока 404 и preflight tag `registry_not_found`. Ничего не опубликовано. Подготовлен `/private/tmp/virfield-release-roundtrip.py`: требует exact installed commit/hashes и свободный pool, создаёт новые factory/pull names и уникальный tag, проверяет private visibility/digest, выполняет по два sequential clone/workload/artifact/release, удаляет только собственные goldens и сверяет исходный image baseline. Requests/IDs сохраняются; частичная clone pair требует проверки сохранённых identity/lease IDs. Runner ещё не запускался.
- На последней read-only проверке pool занят 2/2: `lease-6fde5d2f33c234f2e885583fb6a8fd34` (`needs_attention`, VM running) и рабочая iPad lease `lease-327bb8e4a3a06b7d5ac8e527c57d1907` (`ready`). Active jobs отсутствуют: Monterey image build уже завершился. Установлен по-прежнему `aee89c1`; foreign leases/VM не изменены. Lume override `disabled`, system service отсутствует, порт 7777 закрыт — повторно подтверждено.
- Пользователь явно разрешил однократное фоновое продолжение «Продолжай доделывать до готовности». Existing heartbeat `virfield-lease` обновлена, ACTIVE каждые 15 минут; после освобождения чужих VM/jobs продолжает установку актуального кандидата, live Tart/node/MCP, factory/private GHCR, локальные CI, документацию и source push, затем отключается. Пока pool занят, установки и рестарта нет. Это согласие не закрывает отдельный ещё ожидающий approval вопрос о правах существующих HTPC goldens.
Candidate остаётся не release-accepted до installed/live gates. Full private GHCR roundtrip, node acceptance, current-client reconnect и live restore/rollback ещё не выполнены.
### Monterey: проверка причины и результата rebuild (2026-10-14 17:43:03 UTC)
Проверена именно Monterey/Xcode 13.4.1 из iPad-сессии. macOS здесь 12.7.6 / 21H1320; 13.4.1 / 13F100 — версия Xcode.
- Исходный `resource_exhausted` на Samsung объясняется full disk reservations и safety reserve; свободный VM slot не гарантирует достаточно зарезервированного места для ещё одного диска.
- Исходная cross-container lease `lease-9e65ca2f956c0f061eb3ac021d9f6b6f` клонировала local golden из `samsung-tart` в `release-check`. Tart backend детерминированно отклоняет этот путь до вызова clone; установленный `aee89c1` принял destination в admission, затем скрыл исходную причину за `clone_outcome_unknown` и quarantine. После разрешённого exact-target recovery эта lease `released`, её prepare job `canceled`; активной reservation больше нет.
- Новый image `image-f8c888fcafbd1a2df2a3b9a02821685d` / template `ipad-editors-monterey-xcode-1341-20261014` построен непосредственно в `release-check`. Build job `job-076452fa609adc3e6d4093a8e047a693` succeeded в 17:09:43 UTC. Qualification `~/.virfield-tart/images/image-f8c888fcafbd1a2df2a3b9a02821685d/verification.json` подтверждает точные OS/build/Xcode, SIP enabled, desktop и FileVault off/unlocked APFS; upstream остаётся `ghcr.io/cirruslabs/macos-monterey-vanilla@sha256:4bc904cf8f2447dfa6e6fb9a5eb70eba14196dd0f4236d30fc92aff9c2391842`. Recipe SHA-256 `c68480032289a6b8d9891765915509e8abdbd1fc5e4c39149256e27e38adcdd6`.
- Новая рабочая lease `lease-327bb8e4a3a06b7d5ac8e527c57d1907` ready и использует этот image. Сессия «Найти редактор Markdown для iPad» реально собрала Notepad Example и iVim для armv7 и экспортировала products. Локально проверены export/package verification records, а `~/Developer/ipad-editors/exported-editors/iVim-upstream/build.log` содержит `** BUILD SUCCEEDED **`, `ARCHS=armv7` и SDK iPhoneOS15.5. Это подтверждает работоспособность нового worker; успех всего iPad workload/всех приложений здесь не заявляется.
- Rebuild в правильном контейнере обходит исходный ошибочный маршрут, а не устанавливает fix в daemon. Published source `9a740c0` уже проверяет incompatible local Tart destination до reservation и возвращает `invalid_request`; regression и полный make check проходили. В production всё ещё `aee89c1`, поэтому старый admission-дефект может повториться до ожидаемой безопасной установки.
- Native GUI/SSH keychain readiness нового кандидата на Monterey после установки остаётся отдельной live-проверкой. Текущие успешные сборки с disabled Apple signing не заменяют эту приёмку; действующая lease агента для неё не изменялась.
### iPad workload: CocoaPods и новый vm_drift (2026-10-14 18:08 UTC / 2026-10-15 Asia/Bishkek)
На ready Monterey `lease-327bb8e4a3a06b7d5ac8e527c57d1907` реально собраны Notepad Example и официальный iVim 1.40. .app, revisions, toolchain и полные build logs экспортированы на Mac; оба armv7 IPA fake-signed SHA1, установлены на физический iPad2,5 / iOS 9.3.5 через USB, процессы и UI подтверждены screenshots. Процедура: [[personal/how-to/ipad-ios935-build-deploy]]. SSH iPad отдельно настроен запрошенным пользователем `ssh-copy-id`; это другой сервер/ключ, не SSH Virfield.
Проблемы гостевого toolchain, встреченные в этой VM (не доказанные ошибки Virfield backend):
- System Ruby 2.6.10 universal.arm64e на Monterey падает Bus Error в FFI/Ethon, как с FFI 1.15.5, так и 1.17.3. Причина на уровне ABI/PAC не установлена; воспроизведение на require Ethon подтверждено. Рабочий обход — отдельный `.gems-x64` / x86_64 Ruby/CocoaPods 1.11.3 через Rosetta. Native gems не удалялись. Rosetta installation завершилась successfully; warning installKBytes не помешал `arch -x86_64` smoke check. Helpers сохранены в `~/Developer/ipad-editors/setup-cocoapods*-on-monterey.sh`.
- Историческая Edhita требует old lockfile metadata: `pod install --deployment` возвращает changes for Bootstrap/Megrim/github-markdown-css checksums, repo aliases и CocoaPods 1.6.1 → 1.11.3. Host helper теперь допускает metadata migration, но проверяет точное равенство before/after массива PODS. Новый helper не успел попасть в guest из-за drift.
- Flutter 2.10.5/Dart 2.16.2 x64 реально запустился; его git version-check завис на fetch/HTTP2 EOF. Используется `--no-version-check`. Pub resolution GitJournal остановился на публично недоступном GitJournal/ext_storage (404), host fallback опубликованного 1.0.3 ещё не проверен в guest.
**Новый infrastructure blocker:** event 865 `lease.drift` в 2026-10-14T17:57:04.260529Z перевёл собственную Monterey VM `vf-327bb8e4a3a06b7d5ac8e527c57d1907` из ready в needs_attention, code vm_drift, message `Ready VM identity, address or running state changed; release the lease`. IP/SSH port очищены в lease, manager закрыл tunnel `127.0.0.1:60131`. SCP изменений и SSH сборки завершились banner timeout / connection reset, pub-get connection closed. Эти переносы не считать выполненными.
Read-only status в 18:08:52 UTC снова показывает ту же VM running, IP **192.168.64.251**, SSH available true — адрес соответствует прежнему ready worker. Pool 2/2; вторая, чужая VM macOS27 не менялась. Job preparation собственного worker succeeded; новые queued/running Virfield jobs отсутствовали. Edhita/GitJournal compile завершённым не считается.
Исследование источников установленного `aee89c1`: Tart `inspect` оставляет VM.IP пустым при любом error `tart ip --wait 0`, не возвращая lookup error; Controller считает две подряд несовпадающие runtime observations drift и необратимо сбрасывает ready/tunnel. Current source добавляет проверку canceled ctx и отбрасывает такой refresh. Это подтверждённый механизм возможного ложного drift, **но точный ipErr/observation в момент event 865 не записан**, поэтому конкретная первопричина данного события не доказана. Восстановившийся running/IP snapshot не возвращает lease в ready.
Installed Operations допускает для needs_attention штатный exact-target recovery с cleanup; не предусмотрено re-adopt ready существующей VM. Direct-IP SSH, изменение SQLite, restart чужого daemon или direct Tart manipulation не выполнялись. Новое удаление `vf-327bb8…` требует отдельного разрешения пользователя: разрешение на старую `vf-9e65…` не распространяется на эту VM. Запрошено 2026-10-15; готовые IPA уже сохранены локально, исходники/SDK воспроизводимы. Golden `ipad-editors-monterey-xcode-1341-20261014` остаётся image_ready и доступен для замены worker после разрешённого cleanup.
### Monterey: новый vm_drift (2026-10-14 18:08 UTC)
Heartbeat обнаружила изменение после предыдущей проверки: `lease-327bb8e4a3a06b7d5ac8e527c57d1907` перешла из ready в needs_attention в 17:57:04 UTC, error `vm_drift`. В свежем inventory её VM `vf-327bb8e4a3a06b7d5ac8e527c57d1907` всё ещё running, IP `192.168.64.251`, SSHAvailable true. Lease IP после перехода очищен. Это не отменяет фактические успешные build/export выше, но текущая API-readiness уже не ready. Причина конкретного drift не установлена; в прочитанных daemon diagnostics за 17:56–17:58 UTC записей нет. Source canceled-inventory fix пока не установлен, его наличие не доказывает причину этого случая.
Pool занят 2/2, active jobs нет; рабочая macOS 27 lease также не released. Ни foreign lease, ни VM, ни их tunnels/keys не изменялись этой проверкой. Установка и рестарт сохраняют ожидание согласно решению пользователя; heartbeat остаётся активной.
### Разрешённый recovery второй Monterey VM, 2026-10-14 18:15 UTC
Пользователь явно ответил «Разрешаю recovery и удаление этой VM Monterey». Exact-target CLI resolve для `lease-327bb8e4a3a06b7d5ac8e527c57d1907` / `vf-327bb8e4a3a06b7d5ac8e527c57d1907`, idempotency `ipad-editors-recover-20261015-327bb8e4`, завершился cleanup job `job-5cb66a109f395c15cd51633ab858bee7` succeeded в 18:15:12.999253 UTC; lease released. Старый blocker снят. Replacement acquire принят с новым caller key и сохранённым запросом `~/Developer/ipad-editors/virfield-acquire-replacement.json`: lease `lease-9c1a94ff2b56b396fee7f1bbd2e0dcea`, prepare `job-b47d43f833f4bc28e4ec880f8fa40b00`, тот же ready golden в release-check. Worker пока готовится; чужая macOS27 не менялась.
### Разрешённый release macOS 27 и новый pool blocker (2026-10-14 18:23 UTC)
Exact-target release `lease-6fde5d2f33c234f2e885583fb6a8fd34` / `vf-6fde5d2f33c234f2e885583fb6a8fd34` выполнен по явному разрешению пользователя. Durable idempotency request сохранён до dispatch; cleanup `job-3168397fcd2d6cf4bc821abe7dead124` succeeded. Проверены released state, отсутствие VM в inventory, сохранение исходных семи images/manifest hashes и состояния чужой Monterey на момент завершения. Private evidence: `/private/tmp/virfield-authorized-macos27-release-20261015/journal.json`.
Позже старая Monterey `lease-327bb8e4a3a06b7d5ac8e527c57d1907` released владельцем, а новая `lease-9c1a94ff2b56b396fee7f1bbd2e0dcea` уже ready с 18:15:57 UTC; тот же template `ipad-editors-monterey-xcode-1341-20261014`, location `release-check`. Pool остаётся 1/2 occupied. Installer `9a740c0` не запускался, binaries/config/daemon не заменялись. Проверенное разрешение касается только macOS 27; текущую Monterey оставляем владельцу.
### Replacement worker: Edhita deploy и GitJournal compatibility (2026-10-15)
Replacement `lease-9c1a94ff2b56b396fee7f1bbd2e0dcea` ready, actual macOS12.7.6/Xcode13.4.1 verified; IP192.168.64.252, pinned loopback tunnel55530. x86_64 CocoaPods preparation succeeded. Edhita build `20261015T001900Z` BUILD SUCCEEDED; PODS arrays before/after identical. Export, armv7/minimumOS checks, SHA1 fake sign, USB install and detached launch passed; screenshot shows Documents browser/Editor/Browser/Dual. Это третий успешно установленный редактор; процесс задокументирован в iPad how-to.
Оставшиеся ошибки GitJournal относятся к upstream dependencies, не Virfield: public ext_storage fork unavailable, Firebase8 plugin minimum iOS10 при Runner9, downgrade Firebase6 конфликтует quiver2 с dart-git/quiver3, незакреплённые git HEAD refs обновляются до Dart3 при изменении resolution. Final local compatibility patch закрепляет четыре git deps исходными resolved-ref, использует опубликованный ext_storage1.0.3 и отключает optional Firebase analytics с удалением отсутствующего GoogleService-Info plist resource. `pub get` прошёл 8.8s, CocoaPods/native compile ещё идёт. Markdown/Git code не удалялся. Точный diff сохраняется в checkout; launch/Git sync пока не проверены.
### iPad workload завершён; Monterey released (2026-10-14 18:51 UTC)
На replacement завершена и GitJournal armv7 build. Final compatibility дополнительно закрепляет platform3.1.0/photo_view0.13.0 для Flutter2.10/Dart2.16 и генерирует пустой локальный Sentry config через reviewed upstream setup_env.dart. BUILD SUCCEEDED,49 Mach-O armv7/minimum≤9.3.5, SHA1 fake sign, USB install Complete/exit0 и detached launch/отображённый onboarding UI проверены. Таким образом четыре варианта реально установлены и запущены: Edhita2.3.0, Notepad Example, upstream iVim1.40 и GitJournal1.76+local compatibility patch. Full holzschu fork требует отсутствующих armv7 зависимостей и не установлен. Реальный vault/Git remote sync отдельно не настраивался. Полная процедура и ограничения — [[personal/how-to/ipad-ios935-build-deploy]].
Пользователь явно поручил «Monterrey релизь если больше не нужен». До удаления экспортированы .app/IPA, metadata, exact source diffs/lockfiles, build logs и diagnostics/Gemfile.lock на Mac. Штатный vm_release exact `lease-9c1a94ff2b56b396fee7f1bbd2e0dcea`, key `ipad-editors-release-20261015-9c1a94ff`, cleanup job `job-efbdecc8f058d3b33ab55a2e03c2b448` succeeded в 18:51:19.492842 UTC. Lease released, runtime VM vf-9c1a94ff… отсутствует. Новый golden image-f8c888… image_ready сохранён. Никакой чужой lease этим агентом не освобождалась; daemon/journal/source installation не менялись.
## Installed Monterey native acceptance — 2026-10-14 19:37 UTC
`4a53b67ce04fd1adc164750b47e780c4bdde9ea6` установлен в idle pool с private backup, прежней Developer/FDA identity и сохранением всех семи goldens. Archive `virfield-v0.0.0-pixel-display-darwin-arm64.tar.gz`, SHA-256 `a71ceaf53dae64c2c91545cdfcff5749c656ba69677411fb154c3a3e6e301f19`; полный make check/Staticcheck/Gitleaks (206 commits) PASS, branch pushed. HTTP и fresh stdio exact-version/all-four-runbooks/resources/status smoke PASS для `0.0.0-pixel-display`.
Два новых disposable clones именно свежего `ipad-editors-monterey-xcode-1341-20261014` (`lease-ef13cff121fecbc93f3a43a12b915702`, `lease-990032a673fa5826a2efa6396c271294`) прошли native WhenUnlocked add/read/data comparison/delete отдельно в Aqua и новом SSH до/после настоящего reboot с новым boot UUID/nonce; actual GUI 1920×1080, exact OS/build/SIP, разные SSH host keys и cross-key rejection, artifact export, RFB desktop, подтверждённый release и отказ обоих tunnels после release. Оба own VM удалены, iPad golden сохранён. Private evidence `/private/tmp/virfield-installed-monterey-pixel-4a53b67-20261015/journal.json`.
Это закрывает воспроизведённый display-before-keychain defect свежего Monterey. Старый Samsung Monterey, Ventura, macOS 27 и HTPC native matrix ещё выполняются отдельно; current connected MCP по-прежнему возвращает исторический Lume runbook, owning-client reconnect не принят. Factory/private GHCR roundtrip ещё не запускался. Это не acceptance всей DDG UI-suite или всего v3 roadmap.
## Installed Tart matrix — 2026-10-14 19:48 UTC
Все четыре configured Tart profiles приняты на installed `4a53b67`: fresh iPad Monterey, Samsung Monterey, Ventura/Xcode15.2 и macOS27. По два свежих клона на каждый профиль (8/8). Каждый прошёл native GUI/новый SSH WhenUnlocked I/O до/после реального reboot с новым boot UUID/nonce и сохранённым pinned host key; actual GUI1920×1080, exact OS/build/SIP, cross-key rejection, разные host keys, artifact export, RFB desktop, штатный release и SSH/desktop revocation. Все own VM отсутствуют; семь goldens сохранены. Journals `/private/tmp/virfield-installed-monterey-pixel-4a53b67-20261015` и `/private/tmp/virfield-installed-tart-native-4a53b67-20261015`.
Дополнительно найден native Apple browser defect: trustedOrigin требовал `state_dir == deployment`, что несовместимо с действующим separate state `~/.virfield-tart`. Исправление source `8e07015cde200a41fee6b490da97a44437803d7f` разрешает отдельный private owner state, проверяет владельца/права deployment/config/state, отвергает config/state symlink и не-loopback/подменённый origin. Реальный compiled Swift trust check на текущем config PASS; boundary regression tests, full make check (10 Python tests + Go race) PASS, source pushed. New exact package `virfield-v0.0.0-browser-state-darwin-arm64.tar.gz`, SHA256 `63c697126d63d3be3160ce57848d0338d2dfd1fe04a2ebbd267e105103b510e6`; установка выполняется после Tart cleanup. VM code/guest script этого коммита идентичны принятому `4a53b67`.
Lume повторно подтверждён disabled/unloaded, port7777closed. HTPC secured goldens всё ещё0444; отдельный permission question пользователю остаётся pending, chmod не выполнялся. Live HTPC native matrix, portable private GHCR roundtrip, current owning MCP reconnect и live restore/rollback остаются gates.