ADR 0174 — Автономный бинарник runner перестаёт обещать Mac Intel
Статус
Accepted. Решено сопровождающим 2026-09-27 (AT-065, HS-035).
Ссылается на ADR 0112
(автономный бинарник через bun build --compile, рождённый с пятью целями),
ADR 0106 (пакет
npm, который становится путём для Mac Intel) и
ADR 0149 (подписанный checksums.txt,
покрывающий бинарники). Не редактирует ни один из трёх.
Контекст
ADR 0112 обещал пять целей — linux-x64, linux-arm64, darwin-x64,
darwin-arm64, win32-x64, — каждая собирается на своём нативном runner.
darwin-x64 никогда не публиковался, и причина измерена на двух уровнях:
- Нет пригодного Intel runner. Метка
macos-13указывает на образ, который GitHub вывел из эксплуатации (changelog от 2025-09-19, конец в дек/2025). На трёх существующих тегах (v4.0.0,v4.0.1,v5.0.0) job провёл 24h00m01s в очереди и был отменён пределом Actions — ОДНО И ТО ЖЕ число на всех трёх, то есть он ни разу не был запланирован. В репетиции черезworkflow_dispatch(2026-09-13, run34769280227) он провёл 30 мин в очереди, снова без runner. - Замена планируется, собирает и проваливается. Intel-метка, которую GitHub
предлагает взамен,
macos-15-intel, планируется за 3–22 с (пять прогонов) и СОБИРАЕТ бинарник, но проваливается на--self-test-pty: под BunonDatanode-ptyникогда не отдаёт вывод дочернего процесса — открытая ошибка runtime, oven-sh/bun#25822, без релиза с исправлением. ТО ЖЕ доказательство проходит под Node на том же runner (run34770476634).
Второе измерение изменило природу ожидающего пункта: блокировкой перестал быть
runner (оплата Intel runner не решила бы) и стал Bun. Оставалось
два выхода — ждать исправления Bun и затем сменить метку, или убрать
платформу, — и CLAUDE.md фиксировал это как решение владельца.
Тем временем обещание пяти целей обходилось в четырёх местах: матрица
ставила в очередь job, который никогда не выполнялся; ALVOS_ESPERADOS заставлял каждый
checksums.txt вечно объявлять отсутствие цели, о которой уже было известно, что она
не придёт (RN-565); прокси
GET /runner-releases/binary принимал darwin-x64 лишь чтобы ответить 502
plataforma_nao_publicada; а install.sh запрашивал у GitHub ассет, дающий
404, — с тем же выходом "Release не публикует", неотличимым от неполного
Release.
Решение
Платформа уходит. Автономный бинарник начинает обещать ЧЕТЫРЕ цели, а
Mac Intel остаётся с путём через npm — npm install -g @brabo/runner, который работает
под Node, где доказательство node-pty проходит.
build-runner-binaries.ymlубираетdarwin-x64из матрицы и изALVOS_ESPERADOS.checksums.txtначинает объявлять отсутствие только того, что является настоящим сбоем.- Прокси
GET /runner-releases/binaryпринимает четыре цели и отвергаетdarwin-x64собственным 400 — а не общим "plataforma inválida", — называя этот ADR и команду npm, не обращаясь к GitHub. install.shнаdarwin-amd64не пытается скачать: говорит текстом, что у Mac Intel нет бинарника, что остальная установка поднята и какова команда npm, и оставляетRUNNER_BINпустым — тот же сигнал, по которому завершение (RN-547) уже сообщало об ожидании ключа и сервиса. Сама установка по-прежнему поддерживается на Mac Intel (закреплённый дляdarwin-amd64cosignостаётся), уходит лишь бинарник локального агента.- Браузер продолжает обнаруживать
darwin-x64— обнаружение Mac Intel — правда, и именно оно позволяет назвать правильный путь, — но шаг бинарника не запрашивает загрузку: он заранее падает и переходит к тому же best-effort (falhaDoBinario→ команда npm), что RN-473. scripts/ci/alvos-do-runner.spec.tsсвязывает четыре места, перечисляющих цели, на трёх языках: матрицу, список api,caseустановщика и список браузера. Убрать (или вернуть) цель в одном и забыть другое — провал.
Рассмотренные альтернативы
- Ждать Bun и сменить метку на
macos-15-intel. Сохраняет обещание без срока, а одна лишь смена метки не заставляет цель публиковаться — лишь меняет 24 ч очереди на красный job на каждом теге. Это остаётся путём назад (ниже), а не сегодняшним решением. - Собирать
darwin-x64кросс-компиляцией изdarwin-arm64. ADR 0112 отверг кросс-компиляцию нативного аддона, аself-test-ptyне выполнялся бы на целевой архитектуре — был бы опубликован бинарник, который никто не доказал. - Платить за Intel runner. Измерение показало, что блокировка — runtime, а не
машина: тот же хостируемый
macos-15-intelсобирает и проваливается.
Последствия
- Обещание автономного бинарника — четыре цели, а Release продолжает
получать две (
linux-x64,linux-arm64), пока тег не задействует исправленияwin32-x64иdarwin-arm64, которые уже вdev. Это решение этого не касается. - Пользователю Mac Intel нужен установленный Node, чтобы иметь локального агента.
install.shи панель браузера говорят это текстом; ни один из них не устанавливает Node сам. - Не измерено, и объявлено: issue Bun был открыт на darwin ARM64. Вероятно,
darwin-arm64наткнётся на тот же дефект после исправленияspawn-helper. Если это случится, этот ADR — прецедент, а не автоматический ответ — решение поdarwin-arm64— другое решение. - Путь назад: когда Bun исправит
onDatanode-ptyв каком-либо релизе, повторное включение цели — новый ADR, который сменит метку наmacos-15-intel, прогонит репетицию черезworkflow_dispatchс пустымtagи вернётdarwin-x64в четыре места, связываемые spec.