From 92a72129157ab6632d7b35aff50994454a7067d1 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Fri, 23 Oct 2026 12:47:25 +0600 Subject: [PATCH] [2026-10-23] eagle: work/_index.md work/macos-ui-tests-pr7562-pr7592-results-2026-10-23.md --- work/_index.md | 2 + ...-tests-pr7562-pr7592-results-2026-10-23.md | 100 ++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 work/macos-ui-tests-pr7562-pr7592-results-2026-10-23.md diff --git a/work/_index.md b/work/_index.md index f1150f9d..3485cd00 100755 --- a/work/_index.md +++ b/work/_index.md @@ -1,3 +1,5 @@ # Work [[projects/ios-duck-ai-toggle]] | [[projects/ios-demo-tracker]] | [[projects/vscode-migration/vscode-migration]] + +[[macos-ui-tests-pr7562-pr7592-results-2026-10-23|macOS UI tests — результаты PR #7562 и #7592, работы остановлены]] diff --git a/work/macos-ui-tests-pr7562-pr7592-results-2026-10-23.md b/work/macos-ui-tests-pr7562-pr7592-results-2026-10-23.md new file mode 100644 index 00000000..bd3f4748 --- /dev/null +++ b/work/macos-ui-tests-pr7562-pr7592-results-2026-10-23.md @@ -0,0 +1,100 @@ +--- +date: '2026-10-23' +status: stopped-by-user +tags: + - work + - macos + - testing + - ci +prs: + - 7562 + - 7592 +--- +# 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 не закрывались и не сливались. Работы и мониторинг не возобновлять без нового прямого поручения пользователя.