Перейти к основному содержимому

Technical Design: Dry-run & Validation (hsm check)

Этот документ описывает механизмы предварительной проверки конфигурации стека перед его реальной сборкой. Логика валидации вынесена в отдельный модуль hsm/src/hyper_stack_manager/core/validator.py.

1. Задача

Пользователь хочет убедиться, что выбранная комбинация групп, пакетов и контейнеров в hsm.yaml корректна, компоненты существуют в Реестре, а Python-зависимости разрешимы, не выполняя долгую установку.

2. Решение: Многоуровневая валидация

2.1. Уровень 1: Структурная проверка (Manifest Check)

HSM проверяет hsm.yaml на соответствие схеме:

  • Наличие обязательных полей.
  • Корректность типов данных (например, selection должен быть списком для стратегии M-of-N).

2.2. Уровень 2: Проверка Реестра (Registry Check)

HSM проверяет, что все компоненты, указанные в hsm.yaml, существуют в Реестре:

  • Поиск в packages/, containers/, package_groups/ и container_groups/.
  • Проверка наличия необходимых источников (sources) для выбранного режима.

2.3. Уровень 3: Разрешимость зависимостей (Dependency Check)

Для Python-пакетов HSM использует uv lock как быстрый валидатор:

  1. Генерация временного артефакта: HSM создает временный pyproject.toml в памяти или в .hsm/tmp/.
  2. Запуск резолвера: Выполняет uv lock в этой временной директории.
  3. Анализ: Если uv находит конфликт версий, HSM транслирует ошибку пользователю, не меняя основной pyproject.toml проекта.

3. Интеграция в CLI

hsm check

Логика выполнения:

  1. Загрузить hsm.yaml.
  2. Для каждой группы и пакета найти манифест в Реестре.
  3. Сформировать полный список требований.
  4. Вызвать адаптеры в режиме dry-run (если поддерживается) или через lock.
  5. Вывести вердикт: "Stack configuration is valid" или список ошибок.

4. Преимущества

  • Скорость: Проверка занимает секунды, так как не требует скачивания и установки тяжелых пакетов или образов.
  • Безопасность: Гарантирует, что последующий hsm sync пройдет успешно.
  • Информативность: Дает четкое понимание причин конфликтов на раннем этапе.