Полный vs affected · ключи кэша · read-only fan-out · шестишаговый контур
Команды с крупным monorepo на нескольких удалённых Mac Mesh узлах теряют CI из‑за дрейфа ключей кэша, рассинхрона графа affected с метками Runner и полузаписанных кэшей. Статья даёт матрицу полная сборка / affected / выделенный heavy‑узел, границы воспроизводимых входов, read-only fan-out и шестишаговый контур. Читайте вместе с fan-out артефактов и Merge Queue.
Affected зависит от согласованности графа изменений, lockfile и отпечатка toolchain. Смешение интерактивных сессий и пакетных задач на одном префиксе портит ключи через фантомные зависимости.
Кэш и артефакты про байты; здесь обрезка графа и триггеры.
Дрейф графа и меток: разные метки Runner дают разные корни workspace.
Lockfile вне ключа: resolver изменился, старый tarball всё ещё попадает.
Нет отпечатка toolchain: малый патч Xcode не в manifest.
Смешение fan-out: читатели пишут в кэш‑префикс.
Нет отката на полный: меняются codegen или общие ядра, но остаётся только affected.
Оси для monorepo CI на мультирегиональном пуле удалённых Mac.
| Ось | Сначала полный | Сначала affected | Разделить heavy |
|---|---|---|---|
| Тип изменения | codegen, скрипты сборки, общие native‑границы | UI и копирайт в одном пакете | ночной bulk и дневные PR на одном пуле |
| Сигналы | два провала affected или flaky интеграция | стабильный граф, проверки lock ок | CPU свободен, растёт wall time |
| Ключ кэша | усилить вес toolchain, остановить reuse | hash lock + hash изменений + OS Runner | изолированный heavy‑префикс, read‑only зеркало |
| Регионы | одна генерация manifest до компиляции | лаг зеркала ок, без записи в главный префикс | primary пишет, спутники читают |
| Откат на полный | до первого зелёного после protected merge | еженедельная сверка полным | неделя полных после крупного Xcode |
Сначала заморозить воспроизводимые входы, затем настраивать affected.
SSH доверие в пуле по гайду. Океанические байты — lease и manifest из артефактов.
Тройка входов: commit, digest lockfile, отпечаток xcodebuild в заголовке.
Один граф: парсинг на фиксированной метке, список пакетов как артефакт.
Порог полного: codegen, общие ядра, список toolchain → полный шорткат + код аудита.
Первичная запись: пишет только primary, спутники read-only.
Проверка fan-out: двойное поле hash+size до переключения указателя.
Повтор и откат: сеть — экспоненциальный backoff; checksum — инцидент и следующий коммит только полный.
CACHE_KEY="${CI_COMMIT_SHORT_SHA}:${LOCKFILE_SHA256}:$(xcodebuild -version | shasum -a 256 | cut -c1-12)"
export TURBO_REMOTE_CACHE_SIGNATURE="${CACHE_KEY}"
echo "affected=$(npx turbo run build --dry=json | jq -r '.packages | length')" > "${CI_PROJECT_DIR}/affected.meta"
Заметка: Turbo можно заменить на Nx/Bazel; важен единый авторитетный граф и монотонный ключ.
Два PR на общий пакет перемешивают префиксы. Писатель только CI primary.
Сочетать с блокировками мест и конвертами наблюдаемой цепочки.
Внимание: не открывать мультирегиональный fan-out до закрытия прав записи.
Один писатель: на префикс один активный lease записи.
Правило читателя: компиляция после current manifest generation.
Человеческий шлюз: два checksum подряд → заморозить affected до подписанного полного зелёного.
Ниже стартовые значения планирования, не SLA.
Ночной affected и индексация IDE на одном диске делают CPU-метрику обманчивой.
| Сигнал команды | Стартовая поза | Fan-out |
|---|---|---|
| Малая | один регион primary + локальный affected | низкий fan-out |
| Мульти PR | primary пишет, спутники читают | связка с rsync/объектным хранилищем |
| Ночные агенты | heavy отдельно от интерактивного пула | без истощения ключей |
Личные ноутбуки как шлюз одновременно проигрывают сну, блокировке экрана и нестабильному uplink.
Для контрактных узлов и аудируемой полосы аренда Mac Mini в облаке VpsMesh обычно лучший выбор: hit-rate и глубина очереди ревьюятся вместе.
Codegen, скрипты сборки, общие native‑поверхности, апгрейды toolchain, до первого зелёного после protected merge. См. матрицу артефактов.
Дайджест коммита/графа, хэш lockfile, отпечаток toolchain, слой ОС runner, плюс поколение и lease id при fan-out. Регионы на странице заказа.
Справочный центр по удалённому доступу и сети, цены перед выбором.