diff --git a/personal/projects/virfield.md b/personal/projects/virfield.md index e34abdc8..c135549a 100755 --- a/personal/projects/virfield.md +++ b/personal/projects/virfield.md @@ -12,23 +12,27 @@ tags: --- # Virfield — текущее состояние -Актуально на 2026-10-15 11:52 UTC. Installed `750a89671f87e6def64e3c73685c08e9db6900a9` / `0.0.0-observation-recovery`, archive SHA256 `a1989f850152eb15918c5e7ca9edbfc78d1e300d93ace5c128f3dc9b5e44f428`, daemon PID92465. Signing/FDA identity, конфигурация и семь image manifests сохранены с приватным backup. Source HEAD/pushed `636967b0d25fea6566a262c6f465029e6564bccb`, ветка `codex/retire-lume-release-hardening`; поверх него выполняется исправление UI/authentication. FullCI/Staticcheck636 PASS; новый полный CI после UI-изменений ещё выполняется. Installed750 exact-version HTTP/freshstdio/all4runbooks/resources/status PASS1.24sec; уже подключённый owning MCP всё ещё2724f94. +Актуально на 2026-10-15 12:11 UTC. Source HEAD/pushed `f8b64f5974f451782c56c48182b8dd8e78bd6079`, ветка `codex/retire-lume-release-hardening`, clean. Full local make check (17 Python + Go vet/race), actual shell/JXA regressions, pinned Staticcheck0.7.0 и Gitleaks226 commits PASS. Пакет `0.0.0-console-readiness` собран, archive SHA256 `d5ce80a77f879eab87bd8c4a3bff3d594473efddf9724e0bc0fce9b07ea9bc75`. Все binary hashes/provenance и fresh stdio18tools/all4exactrunbooks/resources/status PASS. Guarded installer `/private/tmp/virfield-install-f8b64f5.py` подготовлен, НЕ выполнялся. -Monterey — macOS12.7.6/Xcode13.4.1 (13F100), не macOS13/Ventura. Обе Samsung Monterey на750 прошли native WhenUnlocked GUI/newSSH add/read/compare/delete до/после реального reboot, новые bootUUID/nonce, actual1920×1080, cross-key rejection, Swift compile/run, workload/artifact/RFB/release/revocation. Journal `virfield-installed-samsung-monterey-750a896-20261015`. Новый iPad-profile repeat пока storage-blocked: около100GB свободно при full-growth+reserve требовании≈150GB. Reserve и чужие данные не менялись; прежние iPad receipts сохраняют датированный scope. +Installed остаётся `750a89671f87e6def64e3c73685c08e9db6900a9` / `0.0.0-observation-recovery`, archive SHA256 `a1989f850152eb15918c5e7ca9edbfc78d1e300d93ace5c128f3dc9b5e44f428`, PID92465. Signing/FDA identity, keys/config и7 manifests сохранены с privatebackup. Installed750 exact HTTP/freshstdio/all4runbooks PASS1.24sec; owning MCP75554 всё ещё2724f94. Fresh archive stdio нового пакета не является installed HTTP/owning acceptance. -Обе Sonoma750 завершили native/reboot/workload/artifact/RFB/release, но это НЕ unmodified automatic-start PASS. После reboot первая Aqua LaunchAgent была зарегистрирована с runs0/neverexited и pended nondemand spawn=speculative. Один journaled kickstart без-k в10:45:23 запустил её и дал свежую proof. Source636 исправляет demand-start, ожидание регистрации/currentboot GUI startup перед worker SSH, сохранение stdin/shared deadline и same-Aqua-session idempotency. Live helper читает repository script при каждом probe, поэтому provenance смешанного эксперимента сохранён отдельно. Новый installed bridge repeat обязателен. +Наши обе диагностические Sequoia89cb/4bb штатно released исходными durable release keys; SSH listener revocation PASS. Старый STOP-runner94494 завершён, его journal не конфликтует с новыми evidence. Новая ЧУЖАЯ macOS27 lease `lease-8bec7ed8310ad4045c78a04a07174045` создана12:04:27UTC, ready, expires13:04:27UTC. Её не менять/не release. Установка и рестарт только после полностью idle pool без чужих VM/jobs; срок аренды сам по себе не доказывает cleanup. Automation virfield-lease ACTIVE15min, читает свежий checkpoint/API. -На первой Sequoia после reboot найден дополнительный реальный bug: all SecItem statuses0/unlocked/valueEqual/Aqua=true, но Keyboard Setup Assistant делал общий ready=false; старый password loop принимал UI blocker за неправильный пароль, снова блокировал рабочий login и пробовал fallback. Framebuffer показал Keyboard Setup Assistant плюс парольный диалог CommCenter. Добавление отсутствовавшего Apple PS/2 ANSI mapping и demand-start восстановили native I/O и убрали assistant, но уже открытый парольный диалог остался. Отсутствие mapping само по себе не доказано единственной причиной. +Monterey — macOS12.7.6/Xcode13.4.1 (13F100), не macOS13/Ventura. Обе Samsung Monterey на750 прошли native GUI/newSSH WhenUnlocked I/O, новые bootUUID/nonce после реального reboot, actual1920×1080, cross-key rejection, Swift compile/run, workload/artifact/RFB/release/revocation. Journal `virfield-installed-samsung-monterey-750a896-20261015`. Эти receipts не проверяют новый f8 native-console/default policy. Новый iPad-profile repeat storage-blocked:≈100GB free при требовании≈150GB fullgrowth+reserve; reserve/чужие данные не менялись. Прежние iPad receipts сохраняют датированный scope. -Disposable empty-keychain experiment подтвердил: password-change API проверяет старый пароль даже при unlocked keychain и сохраняет существующий item. Новое исправление не блокирует login для проверки пароля, отделяет native authentication от UI, запрещает fallback после successful rekey/native failure и требует доступный window snapshot без видимых KeyboardSetupAssistant/SecurityAgent. Реальные shell regressions для current/previous/public-base/unknown passwords, UI blocker и native failure PASS с нулём lock calls. Staging на exact own Sequoia с прежними account credentials дал keychain_ready=true и security_dialog_visible=true/ready=false: старый modal теперь корректно удерживает readiness. Его отдельный reboot дал свежую nativeGUI/newSSH proof без KeyboardSetupAssistant/SecurityAgent, но framebuffer показал lock screen: это НЕ полный desktop PASS. Read-only loginwindow log подтвердил screensaver idle lock11:26:33, autoLoginUserScreenLocked=1 и восстановление через kLWLockFromCookieFile11:42:35 при уже отключённых sleep/display sleep. Добавлены idleTime0 в general/currentHost, сброс+проверка autologin lock-флага при credential preparation, native Quartz console/login/lock checks в preflight и Aqua proof. На обеих own Sequoia новое staging правильно отклонило уже locked console; два отдельных новых reboot выполняются с receipt console-policy-regression-r2. Исходные reboot не replay, ручного ввода GUI-пароля нет. Собственные Sequoia89cb/4bb сохранены; старый runner94494 SIGSTOP, его journal не перезаписывается сторонними экспериментами. Evidence `virfield-installed-htpc-native-750a896-20261015/login-auth-regression-*`. +Обе Sonoma750 завершили native/reboot/workload/artifact/RFB/release, но это не unmodified automatic-start PASS. Первая Aqua LaunchAgent после reboot оставалась runs0/neverexited, pended nondemand spawn=speculative. Один journaled no-k kickstart10:45:23 запустил её и дал свежую proof. Source636/f8 исправляет demand-start, ожидание регистрации/currentboot startup перед worker SSH, сохранение stdin/shared deadline и same-Aqua-session reuse. Live helper читает repo script при каждом probe, поэтому source mix сохранён явно. Новая installed матрица обязательна. -Installed750 исправляет подтверждённый false vm_drift для unavailable host/cached VM без IP и unknown running address: verified identity сохраняется, новые tunnels получают retryable backend_unavailable. Подтверждённые missing/stopped/known endpoint changes продолжают drift. Это не доказывает exact cause старых iPad/a0bc событий, чья triggering observation не сохранена.750 также сохраняет bounded private partial stdout/stderr на credential timeout, fixed failure class и secret-free phases; точная причина раннего88add credential failure неизвестна. Собственные29e fixtures released+revoked. +Sequoia выявила три разных подтверждённых проблемы. (1) All SecItem statuses0/unlocked/valueEqual/Aqua=true, но Keyboard Setup Assistant делал общий ready=false; старый loop ошибочно блокировал уже рабочий login и пробовал fallback. После восстановления I/O/закрытия assistant старый CommCenter password dialog остался. Новый source аутентифицирует old password через password-change API без deliberate login lock, отделяет native auth от UI, не делает fallback после successful rekey/native failure, проверяет visible SecurityAgent. Disposable empty-keychain + actual-shell regressions PASS; отсутствие ApplePS2 mapping само по себе не объявлено единственной причиной. -Source8f дополнительно сохраняет established streams, блокирует новых клиентов cached listener при unverified/stale inventory, проверяет endpoint до/после dial и возвращает прежний порт после recovery; expiry/release/verified drift всё ещё revoke. RealTCP red/green/fullCI/Staticcheck PASS; в installed750 этого ещё нет. Own cleanup ждёт только typed409 operation_in_progress до dispatch с прежними key/body; lostreply/чужиеID не replay. +(2) Native I/O и отсутствие keychain окон ещё не означали desktop PASS: framebuffer показал lock screen. Actual loginwindow log: screensaver idle lock11:26:33→autoLoginUserScreenLocked=1→kLWLockFromCookieFile11:42:35 при уже отключённых sleep/display sleep. Source отключает general/currentHost saver idle, сбрасывает и проверяет autologin lock flag при credential preparation и требует native on-console/completed-login/unlocked state. Quartz omits lock key when unlocked; первая unshipped strict check это ошибочно отклоняла. Correct predicate/table JXA tests принимают absent/false только при valid console/login; true/malformed/null/off-console/incomplete остаются failures. Неуспешный reboot не replay. -Датированные Tart8/8, physicalHTPC, controller-state restore, signed binary rollback/forward и private factory/GHCR receipts сохраняют scope; это не VM-disk DR и не завершение V3 roadmap. Lume10:03 disabled/unloaded/7777closed. Mount-bound UUID/statfs fix29e устранил повторные diskutil, но не доказал причины всех задержек под чужим load455/swap38GiB. Actual root launchd ещёBackground/PRI4T, source templateStandard; guarded migration script подготовлен, unlock/admin ответа нет и он не выполнялся. taskpolicy эксперименты прежнегоPID не считаются постоянным исправлением, на92465 не применялись. +(3) Второй corrected reboot дал разблокированный Finder, но framebuffer12:00:40 показал Spotlight modal с именем custom virfield-lease keychain. Persistent custom default ещё locked до старта Aqua agent; поздний unlock не убирает queued modal. FINAL f8 source оставляет сохранённый/rekeyed login default+first search acrossboots, scoped keychain supplemental/private/unlocked. Native WhenUnlocked app-style I/O проверяет этот фактический default. Real-shell default/search/missing-login tests PASS. Последний policy ещё НЕ прошёл свежую installed clone/reboot матрицу. GUI-пароли не вводились, SecurityAgent не убивался. Evidence `virfield-installed-htpc-native-750a896-20261015`, subdirs login-auth-regression-reboot, console-policy-regression-r2/r3; оба failed full-desktop receipts сохранены как failures. -Открытые gates: новый clean package/idle install и exact MCP; текущая HTPC/Monterey native GUI/SSH/reboot acceptance всех последних guest fixes; iPad repeat при достаточном месте; root Standard registration/admin; owning MCP reconnect; browser GUI после явного unlock Mac; existing HTPC golden chmod по отдельному approval. Полный release acceptance не заявлен; CI только локально, main/release не публиковались. Записи ниже — датированные исторические checkpoints, новые воспроизведённые дефекты имеют приоритет. +Installed750 исправляет false vm_drift для unavailable host/cached VM без IP и unknown running address: verified identity сохраняется, новые tunnels получают retryable backend_unavailable. Это не доказывает exact trigger старых iPad/a0bc, whose triggering observation не сохранена.750 также сохраняет bounded private partial stdout/stderr и fixed secret-free credential phases на timeout. Source8f/f8 дополнительно сохраняет established streams, блокирует новых cached-listener clients на unverified/stale inventory, проверяет endpoint до/после dial и возвращает прежний port при recovery. RealTCP red/green/fullCI/Staticcheck PASS; в installed750 этого ещё нет. Confirmed stop/missing/known endpoint drift и release/expiry всё ещё revoke. Own cleanup ждёт только typed409 operation_in_progress до dispatch с прежним key/body; unknown replies не replay. + +Датированные Tart8/8, physicalHTPC, controller-state restore, signed binary rollback/forward и private factory/GHCR receipts сохраняют scope; это не VM-disk DR и не весь V3 roadmap. Lume12:11 повторно disabled/unloaded/7777closed, rollback files сохранены. Mount-bound UUID/statfs fix29e убрал повторные diskutil; это не доказательство причины всех timeout под чужим load455/swap38GiB. Actual root launchd ещёBackground; source templateStandard, guarded idle migration prepared, unlock/admin ответа нет и он не выполнялся. Старые taskpolicy эксперименты не постоянный fix и на92465 не применялись. + +Открытые gates: idle install exact f8 + exact HTTP/freshstdio; новая HTPC Sonoma/Sequoia и Monterey native GUI/newSSH/reboot/console/windows/RFB/workload/artifacts matrix; iPad repeat при достаточном месте; rootStandard/admin; owningMCP reconnect; browser GUI после explicit Mac unlock; existing HTPC golden chmod по отдельному approval. Full release acceptance не заявлен. CI только локально, main/tags/release не менялись. Исторические checkpoints ниже не отменяют новые воспроизведённые дефекты и не описывают одновременно текущее состояние. ## Runtime и deployment @@ -79,8 +83,8 @@ Node VM quotas реализованы и установлены в `aee89c1`: CP Историческая рабочая 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. +- **Locked keychain — ранний source624 smoke, не финальная готовность.** 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/ScopedBookmarkAgent smoke — superseded новыми регрессиями выше.** Одной смены 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 прошёл.