Что происходит
bin/run-tests.js ловит любую ошибку из runTests и вешает одну и ту же аннотацию:
core.error('The tests have failed. Examine what they have to say. Inhale deeply. Exhale. Fix the code.');
Аннотация — единственное, что студент видит на странице прогона, не открывая лог. Она говорит «тесты упали» и тогда, когда тесты не запускались вовсе: провалился docker pull, не собрался образ, упал make setup на установке зависимостей.
Как воспроизводится
Любой отказ до сервиса test. Пример с переименованным пакетом в php-проекте (composer install не находит hexlet/code в path-репозитории):
Problem 1
- Root composer.json requires hexlet/code, it could not be found in any version, there may be a typo in the package name.
::error::The tests have failed. Examine what they have to say. Inhale deeply. Exhale. Fix the code.
Error: The process '/usr/bin/docker' failed with exit code 2
Причина в логе есть, но между ней и хвостом лежит вывод сборки, а наверху страницы висит утверждение, которое уводит студента искать ошибку в своих тестах.
Что стоит сделать
Аннотация должна называть фазу, на которой всё встало: подготовка образа, установка зависимостей, прогон тестов. Фазы уже разделены в check() и prepareProject(), не хватает только того, чтобы отказ доносил, откуда он.
🤖 Generated with Claude Code
Что происходит
bin/run-tests.jsловит любую ошибку изrunTestsи вешает одну и ту же аннотацию:Аннотация — единственное, что студент видит на странице прогона, не открывая лог. Она говорит «тесты упали» и тогда, когда тесты не запускались вовсе: провалился
docker pull, не собрался образ, упалmake setupна установке зависимостей.Как воспроизводится
Любой отказ до сервиса
test. Пример с переименованным пакетом в php-проекте (composer installне находитhexlet/codeв path-репозитории):Причина в логе есть, но между ней и хвостом лежит вывод сборки, а наверху страницы висит утверждение, которое уводит студента искать ошибку в своих тестах.
Что стоит сделать
Аннотация должна называть фазу, на которой всё встало: подготовка образа, установка зависимостей, прогон тестов. Фазы уже разделены в
check()иprepareProject(), не хватает только того, чтобы отказ доносил, откуда он.🤖 Generated with Claude Code