[2026-10-26] eagle: personal/projects/virfield.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-26 14:33:15 +06:00
1 parent 1ad80abdc7
commit 916e13757c
1 file changed
+23
+23
View File
@@ -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 и проверить доступность шаблонов и нормальное распределение слотов.