29 KiB
Executable File
title, namespace, updated, status, tags
| title | namespace | updated | status | tags | |||||
|---|---|---|---|---|---|---|---|---|---|
| Virfield | personal | 2026-10-14 | release-hardening-waiting-lease |
|
Virfield — текущее состояние
Актуально на 2026-10-14. Поддерживаемый checkout: /Users/admin/Developer/virfield. Ветка codex/retire-lume-release-hardening опубликована по разрешению пользователя, current source 624bdfa7a88738809729e6889c679eaf0241eb78; 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 не являются инструкцией для продолжения работы.
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, API127.0.0.1:7780, launchdai.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.
Ожидаем освобождения lease-6fde5d2f33c234f2e885583fb6a8fd34 (macos27). На 2026-10-14 13:56 UTC API показывал needs_attention/vm_drift, VM в Tart running; чужую аренду/VM не меняли. Причина drift не установлена. Lease TTL — до 2026-10-15 13:20:23 UTC (19:20 по Бишкеку), она может быть released владельцем раньше. Создана heartbeat-проверка virfield-lease каждые 15 минут только для чтения status и сообщения об освобождении; future installation/publish/cleanup/push через неё не выполняются. Auto-review отклонила такое фоновое продолжение без отдельного согласия; запрос на однократное фоновое продолжение ещё ожидает ответа. Отдельно тестами доказан и исправлен дефект canceled inventory: прерванный адресный/container probe больше не превращается в успешный неполный snapshot; Control сохраняет последнее полное inventory и закрывает admission. Этот fix пока не установлен.
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. 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.
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.
- 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 — config/install/services/recovery.
- Image pipeline — актуальные Tart/node contracts.
- Verification — фактические gates/evidence.
- 3.0 plan — реализованное и оставшееся.
Ссылки ведут на опубликованную 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 imageimage-2ec1111415abc0c1e1e66a8e293b14db/ jobjob-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принят: leaselease-9e65ca2f956c0f061eb3ac021d9f6b6f, prepare jobjob-ee57f1c483518f251f1bcd095621e6e9, VMvf-9e65ca2f956c0f061eb3ac021d9f6b6f. Тело и idempotency key сохранены в~/Developer/ipad-editors/virfield-acquire-release-check.json. - Job через ~2 секунды перешёл в
needs_attention, phaseclone_dispatched, errorclone_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, а выбран destinationrelease-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. Чужая работа не затрагивается.
Сборка ещё не запускалась: готового Monterey lease нет. TTL quarantined lease — до 2026-10-15 00:58:14 Asia/Bishkek; истечение TTL само по себе не доказывает cleanup.
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 не менялись этой проверкой.
Новый clean candidate: keychain/UI readiness (2026-10-14 16:49 UTC)
Published source 624bdfa7a88738809729e6889c679eaf0241eb78, branch codex/retire-lume-release-hardening; clean worktree и remote branch совпадают. Актуальный package /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 не выполнялись.