Об этом проекте

RecurSpec — это находящийся на ранней стадии разработки пакет для Node.js с лицензией MIT, который тестирует пути восстановления в инструментах командной строки. В то время как обычный тест может лишь подтвердить вывод сообщения об ошибке, RecurSpec проверяет, что команда, которую предлагает это сообщение, действительно исправляет проблему, чтобы пользователи могли реально выйти из затруднительного положения. Как это работает Тест-кейс описывается декларативно в файле recurspec.yml. Каждый случай определяет команду для запуска, ожидаемый сбой (например, ненулевой код выхода и подстроку в stderr), источник инструкции по восстановлению и этап проверки. Проверка может повторно запустить исходную команду и потребовать нулевой код выхода, таким образом инструмент подтверждает замыкание цикла восстановления, а не просто наличие совета. С чего начать Для проекта требуются Node.js 22 или более поздней версии и pnpm. Он устанавливается как зависимость для разработки, а затем используется через три основные команды: этап init, который создает стартовую конфигурацию с рабочим примером на Node.js, этап validate и этап test. В комплект поставки входит демо-версия, в которой намеренно смешаны успешные и сломанные пути восстановления. Интерфейс командной строки CLI предоставляет команды test, validate, init, explain и discover. Команда test поддерживает опции для выбора случая или тега, выбора формата отчета (human, json, junit или markdown), подробный вывод, поведение fail-fast, seed и пробный запуск (dry run). Коды выхода определены как 0 для всех успешных тестов, 1 для нарушенного контракта и 2 для ошибок конфигурации или использования. Репортеры JSON, JUnit и Markdown предназначены для CI-конвейеров и комментариев к pull-request. Программный API также доступен через runRecurSpec. Что он обнаруживает Инструмент нацелен на несоответствия между сообщением об ошибке и инструкциями к нему: предлагаемые команды, которые больше не существуют, неполные шаги восстановления, команды, которые выполняются успешно, но не решают исходную проблему, советы, приводящие к дальнейшим ошибкам, циклы инструкций, а также неоднозначные или небезопасные инструкции. Повтор и восстановление цели Поддерживаются две формы восстановления. При восстановлении по типу «повтор» (retry) удаление блокирующего фактора позволяет исходной команде успешно выполниться при второй попытке. При «восстановлении цели» (goal recovery) предлагаемая команда полностью заменяет неудачную операцию, так что цель пользователя достигается, даже если повторный запуск исходной команды все равно приведет к сбою. В README отмечается, что работа с кейсами Cargo выявила это различие и привела к внедрению проверки на основе целей. Совместимость с реальными инструментами Набор тестов на совместимость включает случаи из Git, Cargo и npm, охватывающие такие ситуации, как отсутствие идентификатора Git, удаление ветки, советы по расходящимся pull-запросам, существующий каталог проекта Cargo и отсутствующий скрипт npm. Результаты включают неоднозначные советы (несколько взаимоисключающих или обязательных команд), восстановление цели и информационные сообщения, которые правильно игнорируются. Отсутствующие инструменты пропускаются при запуске набора тестов. Модель безопасности Команды восстановления анализируются и проверяются перед выполнением. Цепочки shell, перенаправления, подстановка команд и известные деструктивные команды заблокированы по умолчанию, а каждый случай запускается в изолированном временном рабочем пространстве. В README четко указано, что локальный бэкенд не обеспечивает сетевую изоляцию на уровне ОС, поэтому настройка deny-network остается рекомендательной до появления бэкенда на базе контейнеров. Ограничения и статус В документации перечислены три ограничения: отсутствие сетевой изоляции на уровне ОС в локальном бэкенде, необходимость скриптового стандартного ввода при тестировании интерактивных TTY-программ (полная поддержка PTY planned в будущем) и зависимость от инструментов, выводящих советы, пригодные для поиска через grep (неоднозначные или отсутствующие советы сообщаются, а не угадываются). RecurSpec описывается как проект на ранней стадии, и как конфигурация, так и публичный API могут измениться до релиза версии 1.0. Отдельная документация охватывает конфигурацию, извлечение, безопасность, репортеры и обнаружение.