Krok padał na runnerze bez żadnego komunikatu. Powód był podwójny: - asercja zakładała, że bez backendu nginx odpowie 502, a to zależy od tego, jak szybko zawiedzie DNS. Na runnerze zapytanie wisiało 30 sekund, aż do domyślnego resolver_timeout. - grep bez dopasowania kończy się kodem 1, a Gitea uruchamia kroki w bash -e -o pipefail, więc podstawienie zmiennej przerywało cały krok, zanim zdążył wypisać powód. Lokalnie tego nie było widać, bo zsh nie ustawia tych flag. Zamiast opierać się na tym, że proxy zawiedzie, job stawia teraz atrapę backendu pod nazwą discord-bot - dokładnie tą, którą wskazuje nginx.conf i compose.yaml - i sprawdza, że przez proxy wraca treść z atrapy. Test przechodzi więc wtedy, gdy przekazywanie faktycznie działa, a nie wtedy, gdy zawodzi w oczekiwany sposób. Sprawdzane jest też /ws. Pozostałe usztywnienia: limit czasu na każde zapytanie, || true tam, gdzie brak dopasowania jest poprawnym wynikiem, jawne komunikaty błędów z logiem kontenera oraz sprzątanie kontenerów i sieci przez trap. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>