Четыре режима отказа same-pool и границы ответственности на выделенном M4
Арендованный Mac mini M4 выделен, но не изолирован автоматически: iOS CI, OpenClaw Gateway, SSH инженеров и ночные cron-пробы делятunified memory, один SSD, namespace launchd и часто один login keychain. Типичные сбои 2026 — не «GitHub сломался», а пересечение владельцев без полей в тикете. Первое —memory pressure: параллельный xcodebuild, симулятор и пики Gateway сжимают page cache; агент «тупит», CI пишет flakes. Второе —disk I/O и DerivedData: CI удаляет или заполняет пути, которые агент или webhook косвенно трогает через skills/. Третье —порт 18789 и listener: второй gateway start, забытый SSH-tunnel или healthcheck runner на неверном сокете дают split-brain. Четвёртое —дрейф launchd: WorkingDirectory, OPENCLAW_* и RUNNER_TOOL_CACHE после полу-апгрейда указывают на разные корни.
В change record фиксируйте: платформа владеет runner labels и concurrency; владелец агента — версией Gateway и путём workspace; security — ротацией keychain и секретов. Если в логах или workspace возможны персональные данные, в том же тикете укажитесроки хранения, доступ и удаление (раздельные log sink, не кладите ~/.openclaw в team sync, экспорт только по шифрованным каналам). Выровняйте baseline Gateway по базовой персистентности и официальному install-daemon до CI labels на том же хосте.
Память: nightly matrix + агент 24/7 на 16 ГБ без окна → swap; фиксируйте memory pressure в тикете.
SSD: DerivedData и skills/ агента без quota → падение сборки, стоп записи MEMORY.
Порт 18789: двойной daemon или tunnel vs health-probes → ложный «зелёный» статус.
launchd: runner job и plist Gateway с разным PATH → «в SSH ок, ночью нет».
При совместном хосте с подрядчиками расширьте SSH-governance runner tags: triage не должна обвинять агента, пока CI крутит keychain. После миграции памяти агента читайте миграции workspace, затем возвращайте CI на те же пути.
Матрица contention: xcodebuild, Simulator, Gateway и channels на одном Silicon-pool
Таблица ниже — не бенчмарк, апороги недели приёмки для SKU KVMNODE: M4 16 ГБ/256, 24 ГБ/512 и M4 Pro. Цифры — типичные боли команд; размер приложения и pod-граф их сдвигают. Цель — до заказа понять: same pool — проблема labels или железа.
| Нагрузка | 16 GB M4 | 24 GB/512 | M4 Pro | Сигнал same-pool |
|---|---|---|---|---|
| 1× xcodebuild archive | OK изолированно | OK агент idle | Комфорт | timeout tools агента при RAM > 70 % на link |
| 2× параллельных iOS job | Риск | Medium | Предпочтительно | DerivedData IOPS > 80 % SSD busy |
| Simulator + Gateway | Не рекомендуется | Нужно окно | OK с tags | channels-probe P95 > 5 s |
| 24/7 Gateway + nightly CI | Split рекомендован | Tags + Cron | Same pool возможен | Повтор конфликта port/launchd |
Телеметрия на неделю приёмки: ежечасно df -h на корень DerivedData и workspace, vm_stat или экспорт Activity Monitor при старте CI, латентность probe Gateway одной JSON-строкой и поле «кто разблокировал keychain» в шаблоне инцидента. Без этих четырёх строк неделями спорят о модели поверх thermal/I/O bottleneck. Симулятор планируйте вне фазы archive link — не в тот же час, что xcodebuild -exportArchive и открытые channels webhooks.
Если матрица красная, сначаларазделите время (CI только 02:00–06:00 UTC, агент днём), затемразделите пути (свой DerivedData root на label), затемразделите хост. Апгрейд памяти/SSD по фактам из уровнями памяти и Xcode CI. При выбросах Gateway сначала диагностической лестницей L1/L2, не сразу больше runner.
Same pool: один Silicon, два владельца — матрица решает, хватит ли labels.
Минимальная изоляция: runner tags, окна сборки, cron-пробы и имена keychain
Технически CI и OpenClaw могут делить хост, еслиnamespaces не становятся синонимами. Закрепите labels region-sg, workload-ios-archive, workload-openclaw-probe und pool-shared-m4 — без generic macos-ci. Concurrency по типу ветки, чтобы merge queue и agent hooks не ломали одну очередь. Окна сборки — самый дешёвый рычаг на 24 ГБ при агенте 24/7.
concurrency:
group: ios-${{ github.ref }}
cancel-in-progress: true
jobs:
archive:
runs-on: [self-hosted, macOS, region-sg, workload-ios-archive, pool-shared-m4]
Cron-пробы (health Gateway, channels, свободное место) втех же семействах launchd labels, что в channels-probe , но log paths отдельно от runner _diag. Keychain: login.keychain людей, ci-signing.keychain CI, credentials webhooks агента — три имени, три тикета ротации. Baseline Actions из гайдом runner; добавьте поле «OpenClaw listener» в change template.
Совет: Probe job workload-openclaw-probe каждые 15 минут пишет только JSON — без xcodebuild — и не даёт ночной CI маскировать порт Gateway как «runner offline».
Шесть регионов: Git/артефакты, egress API модели и размещение same-pool
Регион — не только ping, агде сходятся DerivedData, container registry и egress API модели. KVMNODE: Сингапур, Токио, Сеул, Гонконг, US East, US West — см. мультирегиональным гайдом для RTT, затем это дерево:
Основной Git + LFS в APAC: label SG или HK; US-сборки только release.
API модели только US: Gateway агента US-West, iOS CI APAC → split pool или proxy в тикете.
Неделя spike: parallel zu spike vs baseline — same pool только при зарезервированных baseline slots.
«Быстрый tarball» ≠ colocation: npm, SPM и вызовы модели через три континента сжигают wall time независимо от ядер M4. В каждом change: регион, SKU, label set, egress policy и где физически лежат логи и артефакты.
Дерево split-pool: M4 24 ГБ/512 → M4 Pro или второй выделенный узел
Оставайтесь на same pool, если: один агент, лёгкие channels, CI ≤ 1 параллельный archive, memory pressure < 1×/неделю, порт 18789 стабилен в probes. Переход наM4 Pro в том же регионе, если: 2+ параллельных iOS job, регулярный Simulator, большой memory/, или на приёмке повтор IOPS при работающем Gateway. Второйвыделенный M4, если: разные Apple Developer ID, жёсткий blast radius, или после матрицей GitLab/Jenkins нужна вторая семья executor.
| Профиль | Same Pool M4 24 GB | M4 Pro | Второй узел |
|---|---|---|---|
| Агент 24/7 + еженедельный iOS archive | OK с окном | Komfort | Избыточно |
| Nightly matrix + агент + SSH dev | Риск | Предпочтительно | По compliance обязательно |
| Два orchestrator + Gateway | Нет | Medium | Предпочтительно |
Важно: Второй узел без дисциплины labels только дублирует хаос — сначала tags и keychains, потом железо.
Rollout в шесть шагов (grayscale): (1) только Gateway до зелёных probes, (2) один smoke CI с новыми labels, (3) ужесточить concurrency, (4) nightly matrix после зелёной недели, (5) channels под нагрузкой, (6) решение same pool vs split в архитектурном логе. Не пропускайте шаг 1 — главная причина «CI сломал агента» при неверном порядке launchd.
Для команд, которым нужны аудируемые iOS CI и OpenClaw на Apple Silicon в шести регионах,аренда KVMNODE Mac mini — договорная база: выделенный хост, посуточные сроки, понятные SKU. Заказ через страница заказа, runbook в центре помощи, SKU на ценах аренды.