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