Repository navigation
OrbitFM v0.21.0-rc.1
Pre-release
Pre-release
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в jobpackagingпокрывает новый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.
Руководство пользователя — в вики проекта.