В Bundler 4.0.13 появилась защита Cooldown — временной фильтр, который не даёт разрешать зависимости, пока гем не провисел в реестре минимум N дней. Идея простая: большинство supply-chain атак на RubyGems работают в узком окне — аккаунт скомпрометирован, выложена вредоносная версия, и любой bundle install в следующие минуты тянет её напрямую. Cooldown этот интервал перекрывает: версии, слишком свежие для проверки сообществом, просто игнорируются.
Фильтр опциональный и дополняет, а не заменяет существующую защиту — обязательную двухфакторную аутентификацию и trusted publishing. Cooldown читает метку created_at у каждой версии из v2 compact index на rubygems.org. Если источник не отдаёт эту метку (старые гем-серверы, исторические записи до перехода на v2, приватные регистры на v1), версия считается «вне окна» и остаётся доступной. Фильтр никогда не блокирует молча — он задерживает только те версии, которые может проверить.
Настроить просто. В Gemfile пишете source "https://rubygems.org", cooldown: 7, и при каждом bundle install или bundle update новые гемы моложе семи дней не подтягиваются. Уже зафиксированный Gemfile.lock не трогается. Можно задать кdown через bundle config set cooldown 7 (проект или глобально) или переменную BUNDLE_COOLDOWN=7. Для разового запуска — флаг --cooldown 7. Приоритет: флаг > конфиг > поле в Gemfile. Значение — целое неотрицательное число дней, всё остальное ловится ошибкой.
Для приватных реестров можно смешивать: указать cooldown: 0 на внутреннем источнике, оставив задержку для публичных гемов. Флаг --cooldown N перекрывает все источники, включая exempt.
Экстренный выход — --cooldown 0. Он отключает фильтр на один запуск. Это нужно, когда выходит заплатка под активно эксплуатируемую уязвимость и ждать нельзя. Bundler сам подскажет: если все кандидаты внутри окна, он сообщит, сколько версий отсечено, и предложит --cooldown 0.
Утилита bundle outdated теперь помечает версии, которые новее, но ещё под кdown — пишет (cooldown 3d), показывая, что пакет не «устарел», а сознательно отложен.
Cooldown — часть большой работы по безопасности rubygems.org: реестр проверяет содержимое гемов при публикации, сверяет логины с Have I Been Pwned, а критичные гемы сканируются через ИИ при поддержке Alpha Omega и Anthropic. Сам фильтр — тонкий клиентский слой поверх меток created_at, которые rubygems.org начал отдавать через v2 compact index. Все эти защиты складываются, и resolving зависимостей через rubygems.org остаётся самым безопасным вариантом для Ruby-проектов.