From 916e13757c9e854d24672fcf3c9b90fd25a62e05 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 26 Oct 2026 14:33:15 +0600 Subject: [PATCH] [2026-10-26] eagle: personal/projects/virfield.md --- personal/projects/virfield.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/personal/projects/virfield.md b/personal/projects/virfield.md index 79ce4748..4666fc57 100644 --- a/personal/projects/virfield.md +++ b/personal/projects/virfield.md @@ -146,3 +146,26 @@ Broker reviewer исправление уже входит в запушенны Польза возможна для долговечных физических Mac: централизованные настройки и аудит, управляемые приложения, отдельные PPPC разрешения (например Full Disk Access и PostEvent). Для краткоживущих VM цена — внешний сервис, сертификаты, сеть/APNs, регистрация и очистка каждого worker. Главное ограничение для UI-тестов: Apple не разрешает MDM-профилем заранее дать ScreenCapture; только запретить. На macOS 27 старый PPPC grant для Accessibility убран; новый declarative AppSettings предлагает пользователю запрос согласия, но не выдаёт доступ без него. Поэтому MDM не заменяет наши UI-readiness проверки, настройку Automation Mode и человеческое согласие там, где его требует macOS. Источники Apple: [MDM enrollment](https://developer.apple.com/documentation/devicemanagement/deploying-device-management-enrollment-profiles), [инфраструктура/APNs](https://support.apple.com/en-gb/guide/deployment/depceaf9c713/web), [PPPC и ScreenCapture](https://developer.apple.com/documentation/devicemanagement/privacypreferencespolicycontrol/services-data.dictionary), [macOS 27 AppSettings](https://developer.apple.com/documentation/devicemanagement/appsettings). Проверка текущего кода: `internal/qualify/automation.go`, `internal/guestscripts/security.sh`, `internal/guestscripts/provision27.sh`, `internal/config/config.go`. + + +## Баг: ложная занятость VM при отключённом Tart storage (2026-10-26) + +**Причина подтверждена по коду и текущему статусу Virfield.** Когда все настроенные Tart storage недоступны (сейчас `samsung-tart` сообщает `volume_unmounted`), `internal/tart/client.go` подставляет `HostUsed = HostMax`, чтобы закрыть запуск. Контроллер затем считает это реальными неизвестными VM: `capacityOn` показывает два «дополнительных слота», а `resources()` выставляет `resource_unknown: An active VM is missing from inventory`. Это не две реальные VM и не нехватка CPU/RAM; это синтетическое значение, ошибочно использованное как счётчик. + +### Путь исправления + +- Оставлять `HostUsed` и `UsedVMs` счётчиками фактически наблюдаемых VM; не использовать их для кодирования запрета. +- Закрывать локальную capacity отдельно, когда ни один primary Tart storage недоступен, и показывать конкретный blocker, например `storage container samsung-tart unavailable: volume_unmounted`. +- Передавать тот же blocker в ошибку acquire, чтобы объяснение не говорило о занятых слотах, если слоты фактически свободны. +- Сохранить fail-closed поведение: недоступный storage не должен позволять запуск/сборку, а доступный другой primary storage не должен блокироваться без необходимости. +- Регрессии: все storage отключены → фактическое `used=0`, `available=0`, причина — storage; нет ложной ошибки про отсутствующую активную VM. Также проверить смешанный случай с одним доступным storage и обычный доступный Tart путь. + +### Текущее состояние + +В `~/Developer/virfield` создан незакоммиченный локальный черновик: удалена подстановка `HostUsed = HostMax`; storage blocker перенесён в расчёт capacity; сообщение отказа включает blockers; добавлены regression tests. Прошли `go test ./internal/tart ./internal/control ./internal/domain` и `git diff --check`. Полные проверки `make check`/build, deployment и production-проверка ещё не выполнены. Изменения не закоммичены и не запушены; локальная `main` уже содержит 10 коммитов сверх `origin/main`, поэтому перед push нужно проверить полный набор коммитов. + +### Приёмка после деплоя + +1. На действующем статусе при отключённом диске увидеть фактическое число VM, `available=0` и точную причину storage; ошибка «active VM is missing from inventory» отсутствует. +2. Убедиться, что lease/build не стартует через недоступное хранилище. +3. После монтирования диска дождаться свежего inventory и проверить доступность шаблонов и нормальное распределение слотов.