137 lines
22 KiB
Markdown
137 lines
22 KiB
Markdown
---
|
||
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 пока не подтверждён.
|