Files
obsidian-vault/work/macos-ui-tests-pr7562-pr7592-results-2026-10-23.md

137 lines
22 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: '2026-10-23'
status: in-progress
tags:
- work
- macos
- testing
- ci
prs:
- 7562
- 7592
---
# Актуализация: минимальное разделение PR, 23 октября 2026
Пользователь поручил переделать стек с минимальным первым PR. Предыдущие разделы ниже сохранены как история; их heads и результаты не являются проверками новой реализации.
- PR #7562: `f85df79269ea67f5f13d776f1cc7d78bf2bc1069`, GitHub подтвердил **3 изменённых файла**: только producer/consumer/top-level UI workflows. Сборка выполняется один раз на существующую комбинацию OS/Xcode/distribution, а не на каждый класс и user mode. Матрица OS/Xcode сохранена; единого бинарного бандла для разных Xcode этот минимальный diff не вводит. Схемы, test plans, fixtures, Swift, Sync/Performance, удалённая инфраструктура и архивирование приложения восстановлены к исходной базе.
- PR #7592: `4283b2cd33ea34f4370799d5b0b94d0b0c502248`, база — PR #7562, GitHub подтвердил **8 изменённых файлов**. Только отдельный macOS 12 consumer, Swift symbol bridge/discovery, его документация и 6 проверок, macOS 12 guards в двух fixtures и Intel-срез notarized приложения. Native macOS 14+ адаптер не вызывает.
- История сохранена обычными коммитами и merge; force-push/rebase не выполнялись. Оба PR опубликованы, описания обновлены под текущий diff.
- Локальные `build-for-testing` первого и второго PR завершились успешно (сборка без выполнения UI). Проверки адаптера **6/6 passed**, strict SwiftLint изменённых Swift-файлов — 0 нарушений, actionlint и `git diff --check` прошли.
- Локальный диагностический `-enumerate-tests` неожиданно поднял UI runner и завершился ошибкой Automation timeout; это **не pass**. Пользователь запретил локальные UI-прогоны. Пробник остановлен, оставшихся локальных процессов этого пробника не обнаружено; UI дальше только CI/VM.
- [CI 39949300020](https://github.com/duckduckgo/apple-browsers/actions/runs/39949300020), exact parent head `f85df79…`: DMG, HTTPSUpgradeUITests, обе user modes, существующие OS 14/15/27. На момент записи ещё выполняется notarized app producer; конечного результата переноса и запуска бандла пока нет.
- Полная runtime-квалификация новой версии адаптера на macOS 12 **не выполнена**. Старые loader/runtime результаты нельзя засчитывать. Сохранённый SSH config прежней VM отсутствует; новые TCC grants не выдавались.
- Автоматизация `ci-pr-7562` остаётся PAUSED; активная работа по переделке возобновлена прямым поручением пользователя.
Логи и сохранённые исходные версии: `/private/tmp/ddg-pr-scope-20261023/`. Новые runtime failures/результаты следует записывать с точным head.
---
# macOS UI tests: результаты PR #7562 и #7592
Статус: **работы остановлены пользователем 23 октября 2026 года**. Задача не завершена. Автоматизация `ci-pr-7562` переведена в `PAUSED`; активных локальных контроллеров квалификации не обнаружено. Новые сборки, тесты и изменения не запускаются. Все три незавершённых GitHub Actions run отменены; терминальные статусы GitHub подтверждены. Завершённый Performance run сохранён.
## Стек и сохранённый код
- [PR #7562](https://github.com/duckduckgo/apple-browsers/pull/7562): `main → codex/prebuilt-macos-ui-tests`, head `a5db06b1ad14f59ed41821b3ec9561670231486c`.
- [PR #7592](https://github.com/duckduckgo/apple-browsers/pull/7592): `codex/prebuilt-macos-ui-tests → codex/macos12-test-support`, head `12a187ff86d6599293f3061e125eed69e5355bf7`.
- Оба PR — draft; изменения закоммичены и опубликованы. Оба рабочих дерева при остановке чистые.
- PR1 содержит общую схему артефактов и штатный native XCTest для macOS 14+. PR2 добавляет только поддержку macOS 12; дочерний PR можно исключить без включения адаптера в native-путь.
- Рабочие деревья: `/Users/admin/DuckDuckGo/apple-browsers.git/prebuilt-macos-ui-tests` и `/Users/admin/DuckDuckGo/apple-browsers.git/macos12-test-support`.
## Что исправлено
1. Упаковщик больше не ожидает фиксированное имя приложения: находит единственный экспортированный `DuckDuckGo*.app` и сохраняет его версионированное имя. Коммит PR1 `c9fb27e22f60187c78295d5b432f0ac2c5476bec`.
2. Native-потребители UI, Sync и Performance устанавливают парное приложение через `--app`. Коммит `e49d10a40c50176d657af92189f3424d1e05f948`.
3. Исправлена конфигурация целевого приложения: после сборки с `TEST_TARGET_NAME=` явно сбрасывается `UseUITargetAppProvidedByTests=false`. Итог native-тестов берётся из конечного отчёта `xcresulttool`, включая фактическое число тестов, skips и failures. Коммит `4a81f3027b817d506bd90fb874ab0ec4fa3213d7`.
4. Для четырёх тестовых UI runner задан явный `CODE_SIGN_ENTITLEMENTS` с App Sandbox=false: class fixtures должны запускать reset helper. Один `ENABLE_APP_SANDBOX=NO` не отключал автоматически добавляемую Xcode песочницу; это воспроизведено отдельной native-сборкой Xcode 27.1, явный файл entitlements проверен через codesign. Подпись и песочница браузера не изменялись. Коммит `a5db06b1ad14f59ed41821b3ec9561670231486c`.
5. В macOS 12 адаптер сохраняет точные entitlements исходного native runner при переподписи копии Xcode 13; они входят в ключ compatibility cache. Коммит PR2 `40093aac23be577964e91e93b5527e87d2ced6af`.
6. Для Xcode<27 `build.sh` временно сохраняет project/local `Package.resolved`, позволяет этому компилятору разрешить граф по подходящим manifests и восстанавливает исходные файлы при успехе и ошибке. Проверена сохранность незакоммиченного lockfile после сбоя. Это исправляет прежний crash Xcode при surplus pins (`IDESwiftPackageCore / NSMutableArray insertObjects`, counts 42/41 и 41/40).
## Подтверждённые проверки
- Скриптовые проверки PR1: **29/29 passed**; PR2: **34/34 passed**. Это проверки скриптов, не полный runtime UI/Sync на всех OS.
- Проверки plist/project прошли. Для ранее изменённых Swift-файлов проходил strict SwiftLint; последние исправления затрагивали Python, конфигурацию и entitlements.
- [Performance run 39909721173](https://github.com/duckduckgo/apple-browsers/actions/runs/39909721173), точный head PR1 `a5db06b…`: **success**, фактически выполнено **5 тестов, 0 skipped, 0 failed**. Подтверждено конечной JSON summary и журналом job `120273644724`. Это результат конкретного Performance workflow, не всех suites/OS.
- Выборочно подтверждено реальное выполнение текущего native UI: [job 120275173593](https://github.com/duckduckgo/apple-browsers/actions/runs/39909724376/job/120275173593), HTTPSUpgradeUITests, macOS 14/internal: executed=4, skipped=1, failed=0, passed=true. Полный UI workflow не был завершён к моменту остановки.
## Текущие CI runs
- PR1 [UI 39909724376](https://github.com/duckduckgo/apple-browsers/actions/runs/39909724376): head `a5db06b…`, остановлен по поручению пользователя.
- PR1 [Sync 39909727852](https://github.com/duckduckgo/apple-browsers/actions/runs/39909727852): тот же head, остановлен по поручению пользователя.
- PR1 [Performance 39909721173](https://github.com/duckduckgo/apple-browsers/actions/runs/39909721173): success, сохранён завершённый результат.
- PR2 [UI 39909798220](https://github.com/duckduckgo/apple-browsers/actions/runs/39909798220): head `12a187f…`, остановлен по поручению пользователя.
Перед запросами отмены эти незавершённые runs не имели подтверждённых job failures в проверенных снимках. Частично зелёные jobs не означают полный pass. Отмену по поручению пользователя нельзя считать падением кода.
Конечные состояния подтверждены 23 октября 2026, **12:46:31 Asia/Bishkek** (06:46:31 UTC): UI PR1 39909724376 — completed/cancelled; Sync PR1 39909727852 — completed/cancelled; UI PR2 39909798220 — completed/cancelled; Performance PR1 39909721173 — completed/success. Снимок сохранён в `stopped-by-user.json`.
## macOS 12: что действительно проверено
Временная VM: `lease-376c79688b0798560d528772ecf89dd6`, ARM, macOS 12.7.6 / 21H1320, Xcode 13.4.1 / 13F100. Lease expiry: **24 октября 2026, 10:58:20 Asia/Bishkek** (04:58:20 UTC).
- Пользователь разрешил unattended UI Automation; режим был настроен.
- Native readiness probe: **1/1 passed** — реальный запуск приложения, клик, чтение Accessibility. Это только проверка среды, не runtime PR.
- На текущем head PR2 `12a187f…` прошли **5/5 loader-only** проверок: DMG UI/Performance/Sync; App Store UI/Sync App Store. Приложение при них не запускалось.
- **Ни один runtime-этап текущего head на macOS 12 не начат.**
- Контроллер `head-12a187/qualify.py` завершён. Его первая попытка ошибочно запросила `appstore/performance`, которого нет в схеме и опубликованном manifest; получен `StopIteration`. Это ошибка локального сценария квалификации, а не missing-symbol/runtime-дефект PR. Список исправлен; недостающий App Store Sync loader отдельно успешно проверен. Исходный неуспешный журнал сохранён.
- Состояние перед остановкой: `awaiting_downloads_access`, `runtime_started=false`, `controller_terminal=true`; подтверждающий readiness marker не создавался.
## Почему подготовка среды осталась незавершённой
В предыдущем runtime-прогоне старого head `695ef15b09c8dd9df0fa1293a709e2208023b694` браузер создавал PDF, но XCTest runner зависал при чтении атрибутов файла в Downloads. TCC-журнал указал `kTCCServiceSystemPolicyDownloadsFolder` для `com.duckduckgo.UI-Tests.xctrunner`; screenshot xcresult показал модальный запрос **Legacy-Runner → Downloads**.
У App Store браузера проверено наличие `com.apple.security.files.downloads.read-write=true`. Запрос относился к отдельному процессу runner. Этот же диалог перекрывал print panel, вызывая вторичные ошибки меню Save as PDF и AX timeout. Не следует менять selectors или пропускать PrintingTests, не устранив setup.
Существующий `prepare-host.py` проверяет запуск/клик/AX, но не доступ реального XCTest runner к тестовым файлам. Автоматический воспроизводимый setup **не реализован до конца**; ручное разрешение в одной VM не решило бы эту недоработку.
Автоматическая проверка разрешений отклонила попытку ограниченного нажатия OK для Downloads, потребовав явного согласия на persistent TCC-доступ. Изменения не выполнены; TCC.db не редактировалась, доступ не выдавался, Screen Sharing не использовался.
Проверено `profiles status -type enrollment`: DEP No, MDM No. Штатная автоматическая доставка такого разрешения через PPPC требует user-approved MDM; сама эта VM к MDM не подключена. Источники: [Apple PPPC](https://support.apple.com/en-au/guide/deployment/dep38df53c2a/web), [официальная schema Apple](https://github.com/apple/device-management/blob/release/mdm/profiles/com.apple.TCC.configuration-profile-policy.yaml).
Незавершённым остаётся Settings → NSPathCell → FileProvider coverage, полный UI, sandbox leg и Sync/Performance runtime текущего PR на macOS 12. Заявлений «production-ready» или «all mac12 suites pass» нет.
## Какие старые результаты нельзя засчитывать
На старых heads `e49… / 695…` UI/Performance jobs могли быть зелёными при class setup exception **No target application path specified via test configuration**. xcodebuild возвращал 0, observer показывал запланированное число тестов, хотя настоящий XCTest не выполнял методы. Эти зелёные статусы — ложные; новый parser и target configuration исправлены отдельно.
Старый macOS 12 этап `critical-production` на `695…`: requested=34, executed=32, failed_methods=4, passed=false. Прошли 26 search-тестов и часть других методов, но это **не проверка текущего head**. Результаты экспортированы, восстановление keychain подтверждено. Последний SSH exit=255 не является первопричиной четырёх test failures; удалённый supervisor завершился ошибкой.
Диагностическая попытка с сохранённым старым sandbox=true выявила `xcrun: error: cannot be used within an App Sandbox`; это тоже не текущая runtime-квалификация.
## Артефакты и восстановление контекста
Основной каталог: `/Users/admin/DuckDuckGo/apple-browsers.git/ci-validation-7562-7592-20261023`.
- `head-12a187/preflight-summary.json` — пять loader-проверок текущего head.
- `head-12a187/state.json` — состояние до остановки; `attempt-1-state.json`, `qualify-attempt-1.py` и `controller.log` сохраняют исходную ошибку сценария.
- `readiness-summary.json` — native readiness 1/1.
- `results/critical-production/` — старые результаты, xcresults и логи; head указан в корневом `state.json`.
- `entitlements-diagnostic/` — отдельная неуспешная диагностическая попытка.
- `stopped-by-user.json` — снимок остановки и конечных статусов CI.
- Логи script tests: `/private/tmp/ddg-pr-stack-20261023/parent-script-tests.log` и `child-script-tests.log`.
- Screenshot Downloads prompt: `/private/tmp/ddg-printing-32-attachments/F3925F17-1A19-4743-8643-39F2E7DD5945.jpeg`.
Пользователь разрешил одноразовый Sync account через официальный `duckduckgo/sync_crypto` с удалением после тестов, однако **аккаунт не создавался**, recovery code не передавался. Клон генератора собран в `sync-crypto/`; pin `b5a3ccb343817e592daaa0c3bb191fdcf731b9c8`.
VM и рабочие деревья не удалялись; PR не закрывались и не сливались. Работы и мониторинг не возобновлять без нового прямого поручения пользователя.
## Продолжение 23 октября 2026 года
Пользователь разрешил продолжение кода, коммитов, push и CI. Обе ветки и опубликованные PR heads сверены с сохранёнными SHA: PR #7562 — `a5db06b1ad14f59ed41821b3ec9561670231486c`, PR #7592 — `12a187ff86d6599293f3061e125eed69e5355bf7`; оба PR остаются открытыми draft, рабочие деревья чистые. Старые UI/Sync/UI runs имеют окончательное состояние cancelled, Performance run — success. На локальном хосте не обнаружено контроллера квалификации этого стека; другие активные xcodebuild/SSH процессы относятся к иным задачам и не затронуты.
Virfield подтвердил: lease Monterey `lease-376c79688b0798560d528772ecf89dd6` ready, истекает 24 октября 2026 в 10:58:20 Asia/Bishkek. Каталог прежнего SSH-ключа `/private/tmp/ddg-pr-stack-20261023/monterey-identity` пуст, поэтому доступ к этой VM из сохранённого сценария отсутствует. Попытка освобождения именно этого lease отклонена автоматической проверкой: удаление VM сочтено труднообратимым, продолжение тестов не признано явным разрешением на удаление. Освобождение и обход отказа не выполнялись. В момент проверки оба слота Tart заняты; второй lease относится к другой задаче.
Запущены независимые native CI проверки PR #7562 на неизменённом head: [UI run 39945723701](https://github.com/duckduckgo/apple-browsers/actions/runs/39945723701) (macOS 14/15/27, DMG, production+internal) и [Sync run 39945746624](https://github.com/duckduckgo/apple-browsers/actions/runs/39945746624). Это только старт, не результат; фактические xcresult и конечные статусы ещё требуется проверить.
## CI переделанного минимального стека
- [DMG 39949300020](https://github.com/duckduckgo/apple-browsers/actions/runs/39949300020): parent head `f85df79269ea67f5f13d776f1cc7d78bf2bc1069`; notarized app producer завершён success, тестовые producers macOS 14/15 работают, macOS 27 ожидает runner. На macOS 14 штатное разрешение пакетов прошло, началась test-only сборка.
- [App Store 39950239961](https://github.com/duckduckgo/apple-browsers/actions/runs/39950239961): тот же exact head, AppStoreSandboxUITests, обе user modes, три существующих OS; ещё работает app producer.
- Опубликованная metadata старого Xcode 16.2 артефакта подтверждает `DTXcodeBuild=16C5032a`, ожидаемый guard нового macOS 12 consumer. Это проверка формата/версии, не runtime нового head.
- Квитанция новой переделки: `ci-validation-7562-7592-20261023/rewrite-validation.json`.
Снимок 23 октября, 12:11 UTC (18:11 Asia/Bishkek): оба DMG producer PR1 (macOS 14/Xcode 16.2 и macOS 15/Xcode 26.2) завершились success. Скачанный новый архив macOS 14 проверен без запуска: ровно один xctestrun, относительный `UITargetAppPath=__TESTROOT__/Review/DuckDuckGo Review.app`, DTXcodeBuild=16C5032a, executable mode 0755 у test binary и tests-server, 21 symlink, браузер исключён. macOS 27 producer остаётся queued без назначенного runner; native class consumers ещё не начались из-за матричной зависимости. App Store приложение PR1 успешно собрано, его producers macOS 14/15 выполняются, 27 queued. Новый [child CI 39950846497](https://github.com/duckduckgo/apple-browsers/actions/runs/39950846497) на exact head `4283b2cd33ea34f4370799d5b0b94d0b0c502248` ещё выполняет universal app producer. Оба рабочих дерева чистые. Полный native и macOS 12 runtime pass пока не подтверждён.