Если команда хочет на одной беарметал remote Mac mini M4 в Сингапуре, Токио, Сеуле, Гонконге, на востоке или западе США днём гонять Xcode / self-hosted Runner / Archive, а ночью — OpenClaw или другой AI Agent, первым ломается не вопрос «влезут ли два стека», а конкуренция портов симулятора, растянутая очередь сборок из‑за Agent, пересечение подписи и Keychain. Ниже — матрица ёмкости Go/No-Go, три шаблона временных окон, сужение меток Runner и чеклист отката в семь шагов, а также путь M4 / M4 Pro / расширение / второй узел в том же регионе и лестница посуточно → понедельно → помесячно. Цены и наличие — на странице тарифов NOVAKVM; заказ — на странице оформления; политика удалённых сессий — в центре помощи. Полезно читать вместе с материалом про GitHub Actions Runner и статьёй про несколько Workspace OpenClaw.
После прочтения вы сможете ответить: ① при каких сигналах запрещать сдачу машины Agent; ② как резать метки в пик будней, ночном батче и неделе заморозки релиза; ③ как откатываться по глубине очереди и базовым метрикам; ④ когда переходить на M4 Pro или параллельный узел в регионе, а не растягивать совместный режим. Поведение self-hosted Runner GitHub Actions и OpenClaw Gateway сверяйте с официальной документацией после каждого релиза.
[ SECTION_01 ] // PAIN_POINTS CI и AI Agent на одном удалённом Mac: пять типовых ловушек
Первая — неясная ответственность: CI и Agent меняют метки каждый со своей стороны, окно сдачи никто не подписывает, и в пик PR Agent всё ещё держит симулятор и кэш сборки. Вторая — ложная диагностика очереди: задержку списывают на «больше задач», хотя это конкуренция за ресурсы — на насыщенной машине ещё одна метка Runner может поднять ожидание с 12 до 35+ минут. Третья — перекрёстное окружение: один пользователь macOS и один Keychain для CI и Agent, сертификаты Archive и токены бота в одной связке, после окна остаётся полунастроенный след. Четвёртая — исчерпание симуляторов и портов: ночной Agent поднимает несколько инстансов или держит WebDriver, утром матрица XCTest ловит «device busy» и занятые порты. Пятая — несовпадение срока аренды: месячный топ‑тиер ради проверки «можно ли смешивать», а после пиковой недели платят за двойной резерв.
- Дрейф меток: после сдачи не возвращают
macos-ci, дневные job уезжают в окно Agent. - Нет запаса: во втором регионе нет Runner — сдача = единая точка отказа.
- Agent без лимита времени: многодневные прогоны без чекпоинтов забивают диск и логи.
- Секреты не разделены: ключи моделей, токены каналов и CI‑сертификаты в одном каталоге — откат болезненный.
- Запись в неделю релиза: Agent трогает подписанные pipeline в freeze — риск неконтролируем.
«Совместный режим держится на окне времени + метках + изоляции секретов, а не на фразе „ночью CI выключим“.»
[ SECTION_02 ] // LENDING_MATRIX Матрица Go/No-Go и выбор трёх шаблонов окон
Перед переключением с «режима CI» на «сдачу Agent» используйте таблицу как жёсткий шлюз. Любая строка «блокировка» — стоп сдачи или сначала запасной узел.
| Сигнал | Можно сдать | Блок / пауза |
|---|---|---|
| Запасной Runner в регионе | ≥1 принимает smoke и hotfix | Нет резерва — сдача = SPOF |
| Глубина очереди | ≤ медиана истории × 1,2 | >1,5× два часа подряд |
| Бюджет времени Agent | ≤90 мин с чекпоинтом | Без лимита или многодневно |
| Изоляция секретов | Разные пользователи или Keychain | Общие подпись и API‑файлы |
| Freeze релиза | Только чтение (без записи/подписи) | Запись в freeze‑неделю |
Три шаблона окон (часовой пояс — основной у команды; пример для UTC+8 в будни):
| Шаблон | Интервал | Метки CI | Agent |
|---|---|---|---|
| Пик будней | 10:00–19:00 | Полный CI, сдача запрещена | Стоп или read‑only health |
| Ночной срез | 23:30–06:00 | Снять macos-ci и inbound‑метки |
Сдача до 90 мин |
| Freeze релиза | ±7 дней от релиза | Archive/нотаризация монополия | Только чтение, без write‑back в каналы |
[ SECTION_03 ] // RUNBOOK Сужение меток Runner, drain и откат в семь шагов
Сдача — не «остановили сервис», а аудируемое изменение. Шаги связывают метки, очередь, метрики и откат, чтобы после Agent CI не ехал в грязное окружение.
- Тикет изменения: hostname, окно сдачи, ответственные CI и Agent; в freeze — двойная подпись.
- Проверка запаса: второй Runner в регионе — один smoke, убедиться, что PR‑hotfix примут.
- Сузить inbound‑метки: убрать
macos-ciв настройках org/repo — новые job не встают в очередь. - Drain текущих job: дождаться завершения по SLA; Archive/нотаризацию не убивать.
- Базовая линия: глубина очереди, число running job, CPU, свободное место на системном томе.
- Сдача: старт Agent (OpenClaw Gateway и т.п.), смотреть наклон диска и занятость симуляторов.
- Обратный откат: стоп Agent, вернуть метки, повторить smoke; если очередь >1,3× базы — следующую сдачу не открывать.
#!/bin/bash
RUNNER_NAME="${1:-novakvm-m4-sg}"
gh api "repos/${GITHUB_REPOSITORY}/actions/runners" --jq \
".runners[] | select(.name==\"$RUNNER_NAME\") | .labels[].name"
test -z "$(gh api ... | grep -c macos-ci)" && echo "CI_LABELS_OFF"
Семантика меток и очереди self-hosted Runner — в документации GitHub; после релиза откройте:
Постоянная работа и перезапуск OpenClaw Gateway — по репозиторию OpenClaw:
https://github.com/openclaw/openclaw
[ SECTION_04 ] // CONFIG_REGION Градации M4, шесть регионов, апгрейд аренды: когда делить узлы
Если и дневной пик CI, и ночной Agent должны держать SLA, один хост часто упирается в память и пул симуляторов. Ориентиры: M4 16GB/256GB — одна линия CI + редкий read‑only Agent; M4 24GB/512GB — средняя очередь + короткое окно Agent; M4 Pro 64GB/2TB — параллельные сборки и несколько Workspace Agent. При полной загрузке днём и ночью лучше второй узел в регионе или разделение ролей, чем растягивать окно сдачи на сутки.
| Уровень | Пик CI | Ночной Agent | Рекомендация |
|---|---|---|---|
| M4 16GB / 256GB | 1–2 лёгких pipeline | Read‑only или <30 мин | Не держать полнофункциональный Agent ночами долго |
| M4 24GB / 512GB | 3–4 средних очереди | До 90 мин с чекпоинтом | Разделить пулы симуляторов и DerivedData |
| M4 Pro 64GB / 2TB | Archive + несколько тестов | Несколько Workspace / пики каналов | В неделю релиза — split или второй узел |
| Параллель в регионе | Узел только CI | Узел только Agent | Убирает риск переключения сдачи |
Приоритет одного региона: Runner, реестр артефактов, RTT к API моделей и стенды интеграции — в одной региональной семантике. Сингапур — ЮВА; Токио/Сеул — восточноазиатские дежурства; Гонконг — южнокитайская отладка; US East / US West — привычки восточного побережья и Кремниевой долины. Посуточно/понедельно хватает, чтобы проверить «окно сдачи + откат»; при стабильных наклоне и очереди — помесячно; в пиковую неделю временно добавьте второй узел.
[ SECTION_05 ] // DATA_FAQ Технические ориентиры, FAQ, внедрение
Числа ниже — типичные диапазоны для ревью ёмкости, не паспортные цифры вендора.
- Коэффициент раздувания очереди: при конкуренции за ресурсы лишняя метка Runner может поднять P50 ожидания с ~12 мин до 35+ мин на насыщенном хосте.
- Потолок сдачи: задачи Agent без чекпоинта — ≤90 мин за раз, чтобы логи и симуляторы не ломали утренний CI.
- Заблаговременность: смена сдачи и freeze — объявление за 24–48 ч и окно отката.
- Запас: в регионе минимум 1 Runner под smoke; иначе сдача = нулевой резерв.
FAQ:
- Q: Днём CI, ночью OpenClaw — можно? A: Да, при выполнении Go/No-Go, сужении меток и семишаговом откате.
- Q: Очередь уже длинная — сдавать? A: Нет. Сначала снизьте параллелизм или добавьте запасной узел.
- Q: Неделя релиза? A: Agent только read‑only; Archive/нотаризация монополизируют машину; без записи и смешанной подписи.
- Q: Хватит посуточной аренды? A: На полный цикл сдача→откат — да; для устойчивого смешения — неделя → месяц.
Сравните альтернативы: общий виртуализированный Mac‑облако часто ломает «окно сдачи» из‑за шума соседей и неконтролируемых окон обслуживания; ноутбук «по совместительству» — из‑за сна и локальных остатков симулятора, откат не аудируется. Командам, которым нужны дневной iOS/macOS CI и ночной AI Agent на предсказуемом беарметале с шестью регионами и лестницей аренды, облачная аренда Mac mini NOVAKVM обычно выгоднее: выделенный Apple Silicon, метки Runner и параллель в регионе ведут от «одной ночи с Agent» к «нулевой перекрёстности в неделю релиза». Перед следующим изменением прикрепите к одному тикету таблицу Go/No-Go и семь шагов отката — это снижает инциденты и дрейф счёта лучше, чем спор «выключать ли CI ночью».