Skip to content

OrbitFM v0.21.0-rc.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Nov 03:05

MINOR: поддержка macOS пересобрана как заявка, которую можно проверить, — Intel и Apple
Silicon на равных условиях. Меняется код приложения (диагностика рендера), упаковка и CI,
поэтому минор, а не патч. Нотаризации по-прежнему нет, артефактов по-прежнему шесть.

Добавлено

  • ADR-0052 «Матрица поддержки macOS» — единственный источник истины про macOS: пол
    macOS 13.0 Ventura для обеих арок, аппаратная нижняя граница MacBookAir8,2
    (MacBook Air Retina 13″ 2019, Intel UHD Graphics 617, 8 ГБ), два per-arch DMG с
    обоснованным отказом от universal2, ad-hoc подпись без нотаризации, libmpv
    0.40.0_4 на Intel как заморозка с названной датой пересмотра (август 2027 или
    выход macOS 13 из бутылочной матрицы Homebrew) и таблица «чем обеспечено / чем
    подтверждено на живом железе / не проверено».
  • src/render: структура AdapterReport (только строки и скаляры, без wgpu-типов) и её
    Display — одна строка orbitfm render: … с выбранным адаптером, драйвером,
    target_format, двумя лимитами, флагом анизотропии и списком всех доступных
    GPU
    . src/app.rs пишет её на info сразу после того, как cc.wgpu_render_state
    оказался Some, — до создания GlobeRenderer, чтобы строки остались в логе и если
    создание глобуса упадёт на неподдерживаемом лимите. Ветка None вместо молчания
    получает warn! с причиной. Строка — диагностика, а не контракт: status --json и
    docs/interfaces/ не менялись.
  • packaging/macos/check-app-arch.sh — гейт архитектуры как отдельный проверяемый
    инструмент: каждый Mach-O в Contents/MacOS и Contents/Frameworks обязан иметь
    ровно объявленную арку по lipo -archs. Ловит fat-бинарник, Rosetta-подмену и
    чужеродный dylib из машины сборки; падает, если не проверено ни одного файла.
  • CI: job macos-intel на macos-15-intel — fmt, clippy --all-targets -D warnings, cargo test --all-targets и cargo build --release --locked на Intel.
    Раньше x86_64 только собирал DMG и не исполнял ни одного теста.
  • CI и release: два новых негативных fixture у новых гейтов — вызов
    check-app-arch.sh с аркой, которой в бандле нет (обязан упасть на arch FAIL), и
    Info.plist с LSMinimumSystemVersion=12.0 при Mach-O, требующем 13.0 (обязан
    упасть на «требует macOS»). Оба печатают маркер («… fixture отработал»), чтобы
    зелёный шаг нельзя было спутать с пропущенным.
  • README: бейдж macOS 13+ · x86_64 · arm64 и секция «Матрица поддержки macOS».

Изменено

  • packaging/macos/build-dmg.sh: архитектура — обязательный параметр
    --arch x86_64|arm64 вместо uname -m; без него или с неизвестным значением скрипт
    печатает usage и выходит с кодом 2. Имя DMG, путь бинарника и гейт арки выводятся из
    объявленного значения.
  • packaging/macos/check-min-os.py: предел по умолчанию читается из
    Contents/Info.plist → LSMinimumSystemVersion, --max остаётся явным
    переопределением для разбора чужих артефактов. Проверка становится односторонней:
    если plist обещает 13.0, а хоть один Mach-O требует 14.x — сборка падает. Обход
    Frameworks теперь рекурсивный, как у audit-app-dylibs.sh; в вывод печатается
    источник предела.
  • Число 13.0 живёт в одном месте — packaging/macos/Info.plist.in: оттуда же
    -mmacosx-version-min для VapourSynth-заглушки (раньше оно было зашито в скрипте
    отдельно, и заглушка могла потребовать macOS новее, чем обещает бандл).
  • CI и release: MACOSX_DEPLOYMENT_TARGET=13.0 в шагах сборки Rust на обеих арках — minos
    основного бинарника становится следствием решения проекта, а не дефолтом целевой
    тройки; check-min-os.py вызывается без жёсткого --max, а строка «самая новая
    минимальная macOS» попадает в job summary релиза.
  • Вики: --arch в разделах сборки из исходников, ловушка uname -m под Rosetta,
    протокол съёма orbitfm-render.log, убран потолок «M1, M2, M3, M4».
  • packaging/linux/org.modernbyte.OrbitFM.metainfo.xml: <release> догнал релизы —
    было застревание на 0.20.0-rc.4.

Исправлено

  • README утверждал то, чего не было. Строка «Собрано и протестировано в CI … приёмки
    на живом железе не было: MSI, DMG, Now Playing на macOS» противоречила docs/ROADMAP.md:
    именно живые отчёты с MacBookAir8,2 (macOS 14.8.9) вскрыли дефекты rc.3, rc.4 и rc.5.
    Введён уровень «Подтверждено на живом железе macOS» — с явной границей: что та машина
    доказала (бандл там реально запускали, и это увидело дефекты графа зависимостей) и чего
    она не доказывает (успешный старт исправленного бандла и первый кадр на UHD 617).
  • Оборванная фраза о платформенных требованиях в orbitfm_srs.md заменена ссылкой на
    ADR-0052 как единственный источник таких требований.
  • Сборка релиза встала на AppImage. appimagetool качался из канала continuous,
    который перезаписывается под прежним URL: пересборка upstream в 00:47 UTC разминулась
    с зафиксированным дайджестом, и гейт остановил публикацию. Инструмент переведён на
    неизменяемый релизный тег 1.9.1 (ассет не менялся с 2025-12-04), дайджест
    перепринят; linuxdeploy остаётся на continuous с дайджестом — обоснование и цена
    решения в ADR-0011, «Уточнение (2026-11-06): пиннинг appimagetool на релизный тег».

Тесты

  • Три unit-теста на формат диагностической строки: полный снимок при одном адаптере,
    два адаптера печатаются оба, без DownlevelFlags::ANISOTROPIC_FILTERING — no.
    Исполняются на Linux, защищают разбор строки, а не выбор GPU.
  • bash -n в job packaging покрывает новый check-app-arch.sh.
  • cargo test --all-targets: 674 passed, 0 failed.

Документация

  • docs/modules/04-render-globe.md: §2.1 «Наблюдаемость: какой GPU реально выбран» и
    найденная при проектировании деталь — в wgpu 30 анизотропная фильтрация это не бит
    Features, а DownlevelFlags::ANISOTROPIC_FILTERING, и для глобуса это единственная
    downlevel-зависимость.
  • Уточнения в ADR-0002 (пол платформы наследуется от eframe/wgpu, glow-fallback нет),
    ADR-0011 (DMG и пол — по ADR-0052, гейт арки) и ADR-0026 (чем подтверждён Now Playing).
  • docs/CONTRIBUTING.md: тесты исполняются и на Intel-раннере; docs/ROADMAP.md,
    docs/VERSIONMAP.md, вики и README приведены в согласие с фактами.
  • .agents/skills/orbitfm-gui/SKILL.md: правило «при проблемах с прозрачностью допустим
    fallback на glow» противоречило принятому ADR-0002 (уточнение 2026-11-06) — исправлено
    в той же задаче, как требует docs/AGENTS.md § 2.2; туда же добавлены ссылка на
    ADR-0052 и способ снимать выбранный GPU.

Руководство пользователя — в вики проекта.