From f94f74304fdb7f2921642b62604553691028d5e3 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 15 Oct 2026 00:13:10 +0600 Subject: [PATCH] [2026-10-15] eagle: personal/how-to/ipad-ios935-build-deploy.md personal/projects/balda/balda.md personal/projects/balda/execution-broker.md personal/projects/balda/setup.md personal/projects/virfield.md --- personal/how-to/ipad-ios935-build-deploy.md | 40 ++++++++++++++------- personal/projects/balda/balda.md | 2 +- personal/projects/balda/execution-broker.md | 4 +-- personal/projects/balda/setup.md | 8 +++-- personal/projects/virfield.md | 6 ++++ 5 files changed, 41 insertions(+), 19 deletions(-) diff --git a/personal/how-to/ipad-ios935-build-deploy.md b/personal/how-to/ipad-ios935-build-deploy.md index 09c89176..0654fcc3 100644 --- a/personal/how-to/ipad-ios935-build-deploy.md +++ b/personal/how-to/ipad-ios935-build-deploy.md @@ -1,12 +1,12 @@ --- title: iPad iOS 9.3.5 — сборка редакторов, fake sign и деплой created: '2026-10-14' -updated: '2026-10-14' +updated: '2026-10-15' tags: [ipad, ios, markdown, virfield, build, deploy] --- # iPad iOS 9.3.5 — сборка редакторов, fake sign и деплой -Запрос: checkout найденных открытых редакторов в `~/Developer`, сборка на Virfield/Monterey, fake sign и установка на физический iPad. Эта заметка описывает текущее состояние и процедуру; сборки, подписи и установка ещё не выполнены. +Запрос: checkout найденных открытых редакторов в `~/Developer`, сборка на Virfield/Monterey, fake sign и установка на физический iPad. **Notepad Example и официальный iVim 1.40 собраны, fake-signed, установлены и запущены на iOS 9.3.5; экраны приложений проверены.** Edhita и GitJournal пока не собраны; их dependency preparation прервана блокировкой новой Virfield lease (`vm_drift`). Fork holzschu дополнительно требует 32-bit rebuild зависимостей. Проверенный SSH-доступ к iPad настроен 2026-10-15 через `ssh-copy-id` после явного указания пользователем пароля. ## Устройство и доступ @@ -19,20 +19,32 @@ tags: [ipad, ios, markdown, virfield, build, deploy] - Локальный USB SSH-туннель: `iproxy -u 3a214de4ad222863b82458f3611ad6b7b53eb05f 2235:22`. - SSH-сервер устройства: `OpenSSH_6.7`, host-key algorithms `ssh-rsa,ssh-dss`. Современный клиент без compatibility flag не согласует host key. - Host key закреплён в `~/Developer/ipad-editors/ipad-known-hosts`; RSA fingerprint `SHA256:sl+pEjLygox+shHazV2JnzKGvvRFeiTbpx3ZevgT2Kk`. -- Существующий `~/.ssh/id_rsa` (`SHA256:UZ8oPNIe8z2bvBOhWQRyt+JWi99oqQnP8N5XAAm5Uhs`) отклонён для `root` и `mobile`, в том числе при принудительном `PubkeyAcceptedAlgorithms=ssh-rsa`. SSH agent не содержит identities. Путь к ранее установленному на iPad ключу пока не найден. -- Проверка стандартного пароля заблокирована автоматической проверкой разрешений; она не выполнялась. Пароли и private keys в этой заметке не хранятся. +- Первоначально `~/.ssh/id_rsa` (`SHA256:UZ8oPNIe8z2bvBOhWQRyt+JWi99oqQnP8N5XAAm5Uhs`) отклонялся для `root` и `mobile`: этот ключ ещё не был установлен. 2026-10-15 пользователь явно предоставил пароль и попросил `ssh-copy-id`; команда добавила один public key, затем вход `root` с `BatchMode=yes` без пароля прошёл. Первая password-сессия оборвалась `Broken pipe`; повторная завершилась exit 0. +- Ранее automatic approval review отклонил password probe и privileged AFC2 поиск authorized_keys до исполнения. Это исторический approval blocker, снятый новым явным запросом пользователя на парольный вход и установку ключа. Пароли и private keys здесь не хранятся. -Команда для уже авторизованного ключа (подставить проверенный путь): +Фактически исполненная установка ключа (пароль вводится в интерактивный prompt): ```sh -ssh -p 2235 -i /absolute/path/to/ipad-key \ +ssh-copy-id -i "$HOME/.ssh/id_rsa.pub" -p 2235 \ + -o HostKeyAlgorithms=ssh-rsa -o PubkeyAcceptedAlgorithms=ssh-rsa \ + -o StrictHostKeyChecking=yes \ + -o UserKnownHostsFile="$HOME/Developer/ipad-editors/ipad-known-hosts" \ + root@127.0.0.1 +``` + +Проверенный вход по ключу: + +```sh +ssh -p 2235 -i "$HOME/.ssh/id_rsa" \ -o IdentitiesOnly=yes -o BatchMode=yes \ -o HostKeyAlgorithms=ssh-rsa -o PubkeyAcceptedAlgorithms=ssh-rsa \ -o StrictHostKeyChecking=yes \ -o UserKnownHostsFile="$HOME/Developer/ipad-editors/ipad-known-hosts" \ - root@127.0.0.1 'id; command -v appinst; command -v ldid; command -v uicache; command -v uiopen' + root@127.0.0.1 'uname -a' ``` +Через SSH подтверждены `/usr/bin/appinst`, `/usr/bin/ldid`, `/usr/bin/uicache`, `/usr/bin/uiopen`; тестовые IPA установлены ниже через USB installation_proxy. Обычный `id` в окружении iPad отсутствует, поэтому для smoke check использован `uname`. + ## Checkouts Все пять source checkouts скачаны в `~/Developer/ipad-editors/`. Публичные исходники Editorial, 1Writer, Textastic, Working Copy и самого приложения Git2Go не найдены; Git2Go website repository не является приложением и не подменяет его исходники. @@ -44,13 +56,13 @@ ssh -p 2235 -i /absolute/path/to/ipad-key \ | [Notepad](https://github.com/ruddfawcett/Notepad/tree/8ae529d831380e203029381a7b1eccad68701fda) | `8ae529d831380e203029381a7b1eccad68701fda` | MIT Markdown editor component и Example app. Podspec поддерживает iOS 8.0, но Xcode targets Example/Notepad сейчас задают 10.1. Для попытки сборки — override 9.3; это требует проверки компилятором. Demo открывает встроенный tests.md, не является готовым browser для Obsidian vault. | | [GitJournal](https://github.com/GitJournal/GitJournal/tree/50dfb2d4ea2b8f00f9e5938e682970e53981ae84) | `50dfb2d4ea2b8f00f9e5938e682970e53981ae84` | Исторический 1.76.0+10 непосредственно перед повышением minimum iOS до 10.0. Runner, Podfile и AppFrameworkInfo.plist задают iOS 9.0; нужен Flutter >=2.0.3 с Dart >=2.12 и <3.0. Markdown + встроенный Git sync. Latest checkout требует iOS 11 и не подходит. | -Дополнительно найден и скачан официальный [terrychou/iVim](https://github.com/terrychou/iVim/tree/d6aaa3c8cd620f035209776f5cc998e7b2da5d5f), checkout `~/Developer/ipad-editors/iVim-upstream`, revision `d6aaa3c8cd620f035209776f5cc998e7b2da5d5f` (2018-09-29, 1.40). Targets задают iOS 9.1; внешних frameworks в проекте нет. Для Xcode 13 share/test targets со Swift 3 требуют override `SWIFT_VERSION=4.0`; успешная компиляция пока не подтверждена. +Дополнительно найден и скачан официальный [terrychou/iVim](https://github.com/terrychou/iVim/tree/d6aaa3c8cd620f035209776f5cc998e7b2da5d5f), checkout `~/Developer/ipad-editors/iVim-upstream`, revision `d6aaa3c8cd620f035209776f5cc998e7b2da5d5f` (2018-09-29, 1.40). Targets задают iOS 9.1; внешних frameworks в проекте нет. На Monterey/Xcode 13.4.1 с override `SWIFT_VERSION=4.0`, `ARCHS=armv7`, minimum 9.3 компиляция завершилась `BUILD SUCCEEDED`; приложение установлено и запущено. Форк holzschu: скачан официальный `ios_system` v2.4 `release.tar.gz`, SHA-256 `17e220bc4bd89745105f037edcbb37ce445b44b9154d207c882352ce02cc6af4`. `lipo -archs` показал `ios_system.framework` armv7+arm64, но `lua_ios.framework` и `libctags.dylib` — только arm64. Заявленный minimum iOS 9.1 не доказывает поддержку 32-bit в этих бинарных зависимостях. Upstream getPackages.sh также собирает Python/ZeroMQ с arm64 и iOS 11/12; он не запускался. [Flutter removed 32-bit iOS after the 2.10 stable cycle](https://github.com/flutter/flutter/issues/97327). Для GitJournal нельзя брать текущий Flutter; наличие deployment target 9.0 само по себе не доказывает armv7 в каждом готовом framework. -## Virfield и фактический блокер +## Virfield: исходный блокер и его восстановление Прочитаны installed `virfield_help`: workflows, verification, operations. Верифицированный template `monterey-xcode-13.4.1`: macOS 12.7.6 / 21H1320, Xcode 13.4.1 / 13F100, golden в `samsung-tart`. @@ -66,18 +78,20 @@ ssh -p 2235 -i /absolute/path/to/ipad-key \ После восстановления использовать свободное место в исходном `samsung-tart`, либо создать отдельный verified Monterey/Xcode golden непосредственно в internal `release-check` и клонировать уже его в том же контейнере. Чужую macos27 lease не останавливать и не удалять. -## Процедура сборки — ещё не исполнена +Этот исходный lease уже `released` после отдельно разрешённого recovery. Новый verified golden `ipad-editors-monterey-xcode-1341-20261014` создан в `release-check`, image `image-f8c888fcafbd1a2df2a3b9a02821685d`, macOS 12.7.6 / Xcode 13.4.1. Новая lease `lease-327bb8e4a3a06b7d5ac8e527c57d1907` прошла ready и реально собрала две apps. С 17:57:04 UTC 2026-10-14 она `needs_attention` / `vm_drift`: manager закрыл tunnel `127.0.0.1:60131`. Последний inventory при этом показывает VM running на прежнем `192.168.64.251`. Recovery новой VM требует отдельного разрешения пользователя; старое разрешение относилось только к `vf-9e65…`. Подробности в [[personal/projects/virfield]]. + +## Процедура сборки и деплоя 1. Получить job `succeeded` и lease `ready`, затем создать pinned SSH config через установленный Virfield CLI. Проверить `sw_vers`, `xcodebuild -version`, `xcrun --sdk iphoneos --show-sdk-version` в госте. Не работать на golden. 2. Передать checkouts/зафиксированные зависимости в guest `~/workspace`; сохранить SHA исходников и полный build log отдельно для каждого приложения. -3. Для Xcode targets использовать `-sdk iphoneos -configuration Release -destination generic/platform=iOS`, `ARCHS=armv7`, `ONLY_ACTIVE_ARCH=NO`, `IPHONEOS_DEPLOYMENT_TARGET=9.3`, `CODE_SIGNING_ALLOWED=NO`, `CODE_SIGNING_REQUIRED=NO`. Edhita требует `pod install` с закреплёнными версиями и template AppSecret; iVim — соответствующие старые frameworks; Notepad — app scheme `Example` (scheme `Notepad` собирает только framework). GitJournal требует старый Flutter и его pubspec.lock/Podfile.lock, затем release build без Apple signing. Подготовлен `~/Developer/ipad-editors/build-native-on-monterey.sh`; проверен только синтаксис `bash -n`, фактическая сборка ожидает ready worker. +3. Для Xcode targets использовать `-sdk iphoneos -configuration Release -destination generic/platform=iOS`, `ARCHS=armv7`, `ONLY_ACTIVE_ARCH=NO`, `IPHONEOS_DEPLOYMENT_TARGET=9.3`, `CODE_SIGNING_ALLOWED=NO`, `CODE_SIGNING_REQUIRED=NO`, `ENABLE_BITCODE=NO`. Edhita требует `pod install` с закреплёнными версиями и template AppSecret; fork iVim — старые frameworks; Notepad — app scheme `Example` (scheme `Notepad` собирает только framework). GitJournal требует старый Flutter и lockfiles. `~/Developer/ipad-editors/build-native-on-monterey.sh` реально собрал Notepad и iVim-upstream; отдельный helper GitJournal до компиляции не дошёл. 4. Экспортировать .app/IPA на Mac до окончания lease; проверять `lipo -archs` у executable и всех вложенных Mach-O: должен присутствовать `armv7`. Проверить minimum OS <=9.3.5, UIDeviceFamily включает 2, итоговые bundle IDs, отсутствие обязательной arm64 capability. Подписывать вложенные dylib/framework/appex до основного executable. 5. Fake sign выбранным совместимым `ldid`, проверить signature/entitlements; сформировать IPA с `Payload/.app` и SHA-256. `codesign -s -` без проверки совместимости старого устройства не считать проверенным эквивалентом. -6. Через уже настроенный SSH key проверить jailbreak, AppSync, `appinst` и `ldid`. Перед установкой прочитать список installed bundles: существующий экземпляр с пользовательскими документами не удалять/перезаписывать без подтверждения. Для новой тестовой сборки выбрать отдельный bundle ID при необходимости. +6. Перед установкой прочитать список installed bundles: существующий экземпляр с пользовательскими документами не удалять/перезаписывать без подтверждения. Для этой сессии отсутствие обоих target bundles подтверждено до install; ранее установленные приложения сохранены. Для установки fake-signed IPA проверен USB `ideviceinstaller`; наличие рабочего SSH не требуется этому маршруту. 7. Передать IPA, вызвать доступный installer, проверить его exit code и появление bundle. При disconnect сначала прочитать состояние устройства, затем решать о повторе. Обновить icon cache, запустить по bundle ID доступным launcher и проверить работающий процесс/экран. Installer success не доказывает launch или редактирование. 8. Сохранить результат отдельно для build, fake sign, install, launch, Markdown editing; дополнить эту заметку фактическими командами и логами. Освободить только собственную lease после экспорта и явного разрешения cleanup. -Fake signer source скачан отдельно: [ProcursusTeam/ldid](https://github.com/ProcursusTeam/ldid/tree/af86971ae72ec3ed3d0a699107c4e882324c941b), checkout `~/Developer/ipad-editors/ldid`, ревизия `af86971ae72ec3ed3d0a699107c4e882324c941b`. Это вспомогательный инструмент, не пятый редактор. Бинарник собран на локальном Mac (`make -j4`, libplist 2.8.0 / libcrypto 3.6.5); запуск usage проверен, версия `v2.1.5-procursus7-23-gaf86971`, Mach-O arm64. SHA-256: `f36d613b2fb6e245f99bef8373844e7fa6c97a2f82059faadc74dcbcc90c9458`. Это host tool для подписи, не сборка редактора; редакторы по запросу должны собираться на Monterey. Подпись armv7-приложений ещё не проверена. Для старой ОС ldid позволяет явно выбрать hash `-Hsha1`; фактическую совместимость проверить на готовом артефакте и устройстве. +Fake signer source: [ProcursusTeam/ldid](https://github.com/ProcursusTeam/ldid/tree/af86971ae72ec3ed3d0a699107c4e882324c941b), checkout `~/Developer/ipad-editors/ldid`, ревизия `af86971ae72ec3ed3d0a699107c4e882324c941b`. Это вспомогательный host tool. Бинарник собран на локальном Mac (`make -j4`), версия `v2.1.5-procursus7-23-gaf86971`, Mach-O arm64, SHA-256 `f36d613b2fb6e245f99bef8373844e7fa6c97a2f82059faadc74dcbcc90c9458`. Подпись с `-Hsha1` реально проверена на двух armv7 apps: embedded entitlements прочитаны обратно, USB install и launch прошли. ## Связь с Obsidian sync diff --git a/personal/projects/balda/balda.md b/personal/projects/balda/balda.md index 2c32ab63..fbe8a838 100755 --- a/personal/projects/balda/balda.md +++ b/personal/projects/balda/balda.md @@ -1,6 +1,6 @@ # Balda — актуальный обзор -Проверено: **2026-10-14**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **два инстанса на Mac, Mattermost, Codex ACP**: `balda-mm-mac` и `balda-mm-eagle`. Оба работают на upstream `2eed2ce8`; Eagle имеет те же основные MCP и дополнительный Asana readonly. Точные версии и проверенные границы продолжений — в карточке запуска. +Проверено: **2026-10-15**. Balda принимает задачи из чата и связывает provider execution, сессии и интеграции. Текущий локальный запуск — **два инстанса на Mac, Mattermost, Codex ACP**: `balda-mm-mac` и `balda-mm-eagle`. Оба работают на upstream `2eed2ce8`; Eagle имеет те же основные MCP и дополнительный Asana readonly. Точные версии и проверенные границы продолжений — в карточке запуска. ## Источники текущего состояния diff --git a/personal/projects/balda/execution-broker.md b/personal/projects/balda/execution-broker.md index 79d4ad99..d8a8cc21 100644 --- a/personal/projects/balda/execution-broker.md +++ b/personal/projects/balda/execution-broker.md @@ -1,6 +1,6 @@ # Execution Broker — эксплуатация -Проверено: **2026-10-14** по исходникам, работающим контейнерам и локальным проверкам. Полная release-ready приёмка ещё не завершена. +Проверено: **2026-10-15** по исходникам, работающим контейнерам и локальным проверкам. Полная release-ready приёмка ещё не завершена. ## Развёрнутый комплект @@ -22,7 +22,7 @@ Docker socket и daemon group удалены из всех coding worker profile В текущем upstream Balda generic webhook запускает изолированное задание и не продолжает исходную сессию. Старые callback routes Broker приостановлены; недоставленные cursors и история сохранены, доставкой они не считаются. -Новый плагин rc27 использует `balda.state` и `balda.session.wait`: состояние попытки и возврат в исходную сессию сохраняются до Start/retry. Broker поддерживает `execution_lookup` и атомарное закрытие потерянного admission, включая поздний Start/retry. Функциональные race/restart-тесты прошли. **Managed upgrade плагина обоих Balda пока не завершён: остаётся rc26, применение rc27 ждёт отдельного разрешения автоматической проверки. Conversational delivery нового контура ещё не принята.** +Новый плагин rc27 использует `balda.state` и `balda.session.wait`: состояние попытки и возврат в исходную сессию сохраняются до Start/retry. Broker поддерживает `execution_lookup` и атомарное закрытие потерянного admission, включая поздний Start/retry. Функциональные race/restart-тесты прошли. **rc27 активирован у обоих Balda, Enabled=true, Drifted=false. Официальная переустановка сохранила plugin data, старые revisions/catalog snapshots и прежний marketplace. Существующие сессии не сбрасывались. Conversational delivery нового контура ещё не принята.** Настроенный Telegram approval bot получает вопрос исключительно в выбранных исходных сессиях; в остальных вопрос принадлежит исходной беседе. Модель не отвечает за владельца. Подлинный ответ передаётся через bound `execution_respond`; cancellation через `execution_cancel`. Повтор coding task — `execution_retry` с исходным run_id и новым ключом: Broker сохраняет точный task, Story, revision, executor и действительное прежнее одобрение. Изменение scope требует нового решения. diff --git a/personal/projects/balda/setup.md b/personal/projects/balda/setup.md index a1cf5930..0ce61fd5 100755 --- a/personal/projects/balda/setup.md +++ b/personal/projects/balda/setup.md @@ -1,6 +1,6 @@ # Balda — актуальный локальный запуск -Проверено: **2026-10-14** по обоим работающим контейнерам, Compose, конфигурации и реальным MCP-вызовам. +Проверено: **2026-10-15** по обоим работающим контейнерам, Compose, конфигурации и реальным MCP-вызовам. Обзор: [[personal/projects/balda/balda|Balda]]. Broker, готовность кандидата и оставшаяся работа: [[personal/projects/balda/execution-broker|Execution Broker — текущий локальный контур]]. @@ -25,7 +25,7 @@ Config bind-mounted в `/workspace/.config/balda` read-only для контей Eagle работает на том же Mac в `balda-mm-eagle`; Compose, config, state и work находятся в `/Users/admin/Docker/balda-mm-eagle/`, service — `eagle`, отдельный home volume — `balda_eagle-home`. Образы обоих инстансов одинаковы. Авторизации Codex раздельные; при обновлении они сохранены. -У обоих включены одинаковые Obsidian, Execution Broker и Prism MCP, одинаковые права runtime и managed plugin `execution-broker` rc.26. Проверены реальные initialize/tools-list: Obsidian — 15, Broker — 24, Prism — 5 инструментов; списки совпадают. Eagle дополнительно имеет `asana-readonly`, URL `http://asana-readonly:3100/mcp` в приватной Docker-сети. Отдельный контейнер `balda-eagle-asana-readonly` не публикует порт на хост. Реальное чтение Asana прошло; все пять операций изменения и запись заметок в файл отклоняются сервером. +У обоих включены одинаковые Obsidian, Execution Broker и Prism MCP, одинаковые права runtime и managed plugin `execution-broker` rc.27. Проверены реальные initialize/tools-list: Obsidian — 15, Broker — 24, Prism — 5 инструментов; списки совпадают. Eagle дополнительно имеет `asana-readonly`, URL `http://asana-readonly:3100/mcp` в приватной Docker-сети. Отдельный контейнер `balda-eagle-asana-readonly` не публикует порт на хост. Реальное чтение Asana прошло; все пять операций изменения и запись заметок в файл отклоняются сервером. В обоих конфигурациях provider `codex_acp`, reasoning `medium`, явный model отсутствует. Последние записи Codex подтверждают `gpt-6.1-sol` у обоих. При выравнивании инструментов настройки основной модели не менялись. `balda.nats.max_store` у обоих — `16gb`. @@ -33,7 +33,9 @@ Eagle работает на том же Mac в `balda-mm-eagle`; Compose, config В этой версии generic webhooks выполняют изолированные задания. Они не продолжают исходную сессию. Старые `routes.*.path`, `envelope.target`, `key_from_body`, `mode` и `fallback_to` удалены из конфигурации; listener задаётся через `balda.http`. Сейчас он слушает loopback `127.0.0.1:8095`. -Штатный механизм возврата в исходную сессию — `balda.session.wait`. Миграция Broker observer на него ещё проходит отдельную приёмку; старый callback на `:8090` не работает. Наличие MCP или обновлённого плагина не доказывает автоматическую доставку будущего результата. Состояние Broker и недоставленные cursors сохраняются. +Плагин rc27 использует `balda.state` и штатный `balda.session.wait`: наблюдатель вооружается до Start/retry и возвращается в исходную сессию. Managed lifecycle и restart-контракт проверены; conversational acceptance с реальной моделью ещё открыт. Старые callbacks Broker на `:8090` приостановлены, недоставленные cursors сохранены. Native wait acceptance не является подтверждением доставки сообщения провайдером. + +Оба инстанса имеют также одинаковые пять глобальных Codex skills и одинаковую Codex tool policy; различий не найдено. Обновление плагина выполнено штатной переустановкой из нового operator source с сохранением `plugin-data/execution-broker`, старых revisions/catalog snapshots и содержимого прежнего marketplace. Существующие сессии не сбрасывались. ## Изменения и перезапуск diff --git a/personal/projects/virfield.md b/personal/projects/virfield.md index af224cc0..b0c7afe0 100755 --- a/personal/projects/virfield.md +++ b/personal/projects/virfield.md @@ -142,3 +142,9 @@ Candidate остаётся не release-accepted до installed/live gates. Full - Новая рабочая 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 агента для неё не изменялась. + +### 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 остаётся активной.