Od czego zacząć diagnozę?
Diagnozę zaczynasz od ustalenia warstwy, w której leży problem. Poniższa kolejność prowadzi od rzeczy najtańszych do sprawdzenia do najdroższych.
- Zapytaj router
Komenda
/monolynx:nextczyta stan repozytorium, ticketu, sprintu, sesji i merge requestów, a potem poleca od jednej do trzech komend z uzasadnieniem. Niczego nie zmienia. - Sprawdź konfigurację
Komenda
/monolynx:setuppokazuje stan siedmiu punktów: slug, stronatoolchain, LLM Wiki, graf, mutacje, flagi i CLI. - Przeczytaj ostatnią linię
Pętla dyspozytora kończy tick linią
SPRINT-RUN:, kolejka liniąMR-QUEUE:. Zatrzymanie ma własną linięSTOPz powodem. - Zajrzyj do sesji
Komenda
claude logs <id>pokazuje, na czym stanęła sesja ticketu w tle. - Dopiero potem poprawiaj
Znana przyczyna wskazuje jedną konkretną naprawę z tabel poniżej.
Jeśli agent w ogóle nie widzi Monolynx, problem leży w połączeniu. Jeśli widzi, ale komendy odmawiają startu, brakuje konfiguracji projektu albo zgód. Jeśli pętle działają, a sprint stoi, sesja czeka na człowieka albo ticket jest zablokowany. Jeśli merge request nie wchodzi, przyczyna jest w CI, konflikcie albo braku zatwierdzenia.
flowchart TD
A{"Agent widzi narzędzia Monolynx?"} -- nie --> P["Połączenie: MCP albo CLI"]
A -- tak --> B{"Komendy startują?"}
B -- nie --> K["Konfiguracja: slug, toolchain, flagi"]
B -- tak --> C{"Sprint posuwa się?"}
C -- nie --> S["Sesje: waiting, blokery, sloty"]
C -- tak --> D{"Merge requesty wchodzą?"}
D -- nie --> M["Kolejka: CI, konflikt, zatwierdzenie"]
D -- tak --> OK["Wszystko działa"]next i setupPołączenie: agent nie widzi Monolynx
Problemy tej warstwy widać od razu: agent nie zna narzędzi albo dostaje odmowę przy pierwszej operacji.
| Objaw | Przyczyna | Naprawa |
|---|---|---|
| Agent nie ma narzędzi Monolynx | serwer MCP dodany tylko dla innego katalogu | dodaj serwer dla całego użytkownika: claude mcp add --transport http --scope user monolynx https://monolynx.com/mcp |
| Błąd autoryzacji przy pierwszej operacji | logowanie OAuth niedokończone albo wygasłe | w Claude Code otwórz /mcp i zaloguj się ponownie |
| Lista projektów jest pusta | konto nie jest członkiem żadnego projektu | poproś właściciela projektu o dodanie do zespołu |
Brak uprawnienia <moduł>:<akcja> |
rola nie pozwala na tę operację | poproś o rolę z tym uprawnieniem; ponawianie nic nie da |
Brak uprawnienia blog:write |
publikacja na blogu to osobne uprawnienie konta | nadaje je administrator instancji |
Linia TRANSPORT-HINT: na starcie komendy |
CLI nie jest zainstalowane, zalogowane albo aktualne | to podpowiedź, nie błąd; praca idzie dalej przez MCP |
Pełną konfigurację połączenia opisuje wpis Jak połączyć agenta AI z Monolynx, a kanał CLI wpis CLI monolynx dla deweloperów i agentów.
Konfiguracja: komenda odmawia startu
W tej warstwie komendy działają, ale zatrzymują się na początku, bo brakuje im wejścia.
| Objaw | Przyczyna | Naprawa |
|---|---|---|
| Komenda pyta o slug projektu | brak MONOLYNX_PROJECT_SLUG w środowisku klienta |
wpisz slug do pola env w śledzonym .claude/settings.json |
Slug jest w pliku .env, a komenda dalej pyta |
plik .env nie przekazuje zmiennych do Claude Code |
przenieś slug do .claude/settings.json |
work pyta przed lintem i testami, czy kontynuować bez nich, a sesja w tle kończy turę |
brak strony wiki Toolchain |
uruchom /monolynx:project-toolchain |
work w osobnym worktree odsyła do project-toolchain |
strona Toolchain nie ma sekcji ## Worktree |
uruchom /monolynx:project-toolchain ponownie |
| Komendy wiki kończą się informacją o wyłączonej metodzie | LLM Wiki nie jest włączona w projekcie | uruchom /monolynx:wiki-init |
| Agent wypisuje komendy testów zamiast je uruchomić | MONOLYNX_AUTOTEST nie jest ustawiona na true |
uruchom testy sam albo ustaw flagę |
Dlaczego sprint-run nie startuje sesji?
Dyspozytor zaczyna każdy tick od kontroli wstępnej. Kontrola zbiera wszystkie problemy naraz, wypisuje je jako linie ERROR: i WARN:, a na końcu podaje wynik.
WARN: MONOLYNX_AUTOMR nie jest ustawiona na true
ERROR: MONOLYNX_AUTOPUSH nie jest ustawiona na true w środowisku procesu
ERROR: MONOLYNX_BASE_BRANCH i MONOLYNX_MR_TARGET wskazują różne branche
PREFLIGHT: failed problems=2Brzmienie linii w przykładzie jest poglądowe. Prawdziwy wynik zawsze kończy się linią PREFLIGHT: ok albo PREFLIGHT: failed problems=<n>.
| Objaw | Przyczyna | Naprawa |
|---|---|---|
Błąd o flagach AUTOTEST, AUTOCOMMIT albo AUTOPUSH |
flagi nie ma w środowisku procesu ticku | ustaw wszystkie trzy na true w śledzonym .claude/settings.json |
| Błąd o dwóch różnych branchach | MONOLYNX_BASE_BRANCH i MONOLYNX_MR_TARGET wskazują różne branche |
zostaw jedną zmienną, zwykle MONOLYNX_MR_TARGET |
| Błąd o pliku settings | plik .claude/settings.json ma błąd składni JSON |
popraw plik; błąd podaje linię i kolumnę |
| Błąd o trybie uprawnień | ustawiono tryb omijający wszystkie zgody | usuń to ustawienie albo ustaw MONOLYNX_SPRINT_PERMISSION_MODE=auto |
| Kontrola przechodzi, a sesje nie startują | wszystkie sloty zajęte albo osiągnięty limit sesji waiting |
odpowiedz czekającym sesjom |
| Ticket nie dostaje sesji mimo wolnych slotów | ticket ma niezamknięty bloker, etykietę needs-local albo status inny niż Do zrobienia |
zamknij bloker, zdejmij etykietę albo zmień status |
SPRINT-RUN STOP o nieaktualnym checkoucie |
główny checkout jest za zdalnym branchem bazowym | dociągnij branch w głównym checkoucie i poczekaj na następny tick |
Ticket z etykietą needs-local
Etykieta needs-local oznacza ticket, który wymaga lokalnego środowiska albo decyzji człowieka, na przykład zmiany w konfiguracji CI. Dyspozytor nigdy nie startuje go w tle. Taki ticket prowadzisz sam, w zwykłej sesji, komendą /monolynx:work. Sprint, w którym zostały tylko takie tickety, nie zakończy się sam: linia statusu pokazuje remaining większe od zera, a nic nie pracuje.
Sesja ticketu stoi albo skończyła się bez wyniku
Problemy tej warstwy widać w polu waiting linii statusu i w werdykcie needs_human.
| Objaw | Przyczyna | Naprawa |
|---|---|---|
Werdykt waiting z pytaniem |
sesja trafiła na decyzję spoza kontraktu ticketu | wejdź komendą claude attach <id> i odpowiedz |
Werdykt waiting, powód "brak postępu" |
log sesji nie zmienił się przez dwa ticki | sprawdź claude logs <id>; sesja mogła czekać na długie testy albo CI |
SPRINT-RUN STOP: kolizja testów |
równoległe sesje współdzielą stan testów, na przykład jedną bazę | uruchom testy ponownie, gdy inne sesje skończą; docelowo dodaj izolację testów do strony Toolchain |
SPRINT-RUN STOP: fast-forward ... odrzucony |
branch ticketu rozjechał się z branchem bazowym | rozwiąż rozjazd ręcznie w worktree sesji |
SPRINT-RUN STOP: pełny przebieg ci bez MR |
projekt puszcza pełne testy w CI, a brakuje zgody na push albo merge request | ustaw MONOLYNX_AUTOCOMMIT, MONOLYNX_AUTOPUSH i MONOLYNX_AUTOMR na true |
Werdykt needs_human |
sesja skończyła się bez wyniku, także po jednym automatycznym wznowieniu | przeczytaj komentarz w tickecie i log sesji, popraw ticket albo dokończ ręcznie |
| Sesja pyta o każdą komendę | sesja wystartowała w trybie uprawnień, który wymaga potwierdzeń | zostaw domyślny tryb auto w MONOLYNX_SPRINT_PERMISSION_MODE |
Jak wejść do sesji i odpowiedzieć, opisuje wpis Sesje w tle: jak obserwować pętle sprintu i odpowiadać agentom.
Merge request nie wchodzi
Kolejka mr-queue sprawdza merge request w stałej kolejności: konflikt, CI, zatwierdzenie, merge. Zatrzymuje się na pierwszej przeszkodzie i mówi, czego potrzebuje, w linii raportu zaczynającej się od "Potrzebne:".
| Werdykt albo objaw | Przyczyna | Naprawa |
|---|---|---|
| Kolejka kończy tick prośbą o logowanie | glab albo gh nie jest zalogowane |
uruchom glab auth login albo gh auth login |
wait |
pipeline merge requesta jeszcze trwa | nic; następny tick sprawdzi ponownie |
conflict |
branch docelowy zmienił się od otwarcia merge requesta | nic; kolejka sama merguje branch docelowy do brancha merge requesta |
ci_failed |
czerwony pipeline merge requesta | nic przez dwie rundy; kolejka poprawia sama |
| Kolejka stoi po dwóch rundach poprawek | poprawka CI nie udała się dwa razy | popraw branch ręcznie i wypchnij zmianę |
needs_approval |
merge request nie ma zatwierdzenia | przejrzyj i zatwierdź; tego nie zrobi żadna flaga |
needs_human po anulowanym pipeline |
ktoś ręcznie anulował pipeline | uruchom pipeline ponownie; kolejka nie ponawia cudzej decyzji |
| Kolejka stoi po merge do domyślnego brancha | CI domyślnego brancha jest czerwone | popraw branch osobnym merge requestem; kolejka ruszy po zielonym CI |
Kod 137 w zadaniu CI
exit status 137 bez żadnego czerwonego testu oznacza, że kontener z testami został zabity, najczęściej przez brak pamięci na runnerze albo przez inne zadanie na tej samej maszynie. To nie jest błąd kodu. Kolejka ponawia takie zadanie i nie liczy tego jako rundy poprawek. Gdy 137 wraca regularnie, sprawdź pamięć runnera i to, czy równoległe zadania nie używają tych samych nazw kontenerów.
Zamknięcie sprintu i wiki
Ostatnia grupa to problemy przy sprint-end i komendach wiki.
| Objaw | Przyczyna | Naprawa |
|---|---|---|
sprint-end mówi, że nie ma aktywnego sprintu |
sprint nie został wystartowany albo już jest zamknięty | podaj nazwę sprintu jako argument |
| Logi sprintu nie zostały usunięte | INGEST do wiki się nie powiódł, więc logi zostają jako jedyne źródło wiedzy | popraw przyczynę i uruchom sprint-end ponownie |
| Po zamknięciu tickety wróciły do backlogu | nie miały statusu Gotowe w chwili zamknięcia | przypisz je do następnego sprintu |
wiki-sync-merge kończy się bez zapisu |
checkout nie stoi na branchu integracyjnym | przejdź na ten branch i uruchom ponownie |
| Agent nie może usunąć strony albo ticketu | rola member nie ma prawa usuwania |
poproś o rolę z prawem usuwania |
Najczęstsze pytania
Czy mogę bezpiecznie uruchomić pętlę ponownie po błędzie?
Tak. Tick jest idempotentny: czyta stan od zera i nie dubluje sesji ani komentarzy. Ponowne uruchomienie po naprawie konfiguracji jest zawsze bezpieczne.
Sesja czeka od wczoraj. Czy coś przepadło?
Nie. Sesja waiting i jej worktree zostają nietknięte, dopóki sam ich nie usuniesz. Wejdź do niej, odpowiedz, a praca ruszy od miejsca zatrzymania.
Skąd wiem, że to problem środowiska, a nie kodu?
Dwa znaki: testy zmienionego obszaru są zielone, a błędy pojawiają się masowo na etapie przygotowania testów albo zadanie CI kończy się kodem 137 bez czerwonego testu.
Co, jeśli mojego objawu nie ma w tabelach?
Zacznij od /monolynx:next. Jeśli to nie pomoże, przeczytaj log sesji komendą claude logs <id> i ostatnią linię statusu. Powód zatrzymania jest tam zawsze zapisany wprost.
Czy agent może sam ominąć blokadę, żeby iść dalej?
Nie powinien i reguły pluginu tego pilnują. Zamiast obchodzić odmowę inną komendą, sesja kończy turę linią STOP z powodem. Obejście blokady to decyzja człowieka.
Słownik i następny krok
- Kontrola wstępna
- sprawdzenie środowiska na początku ticku, zanim wystartuje jakakolwiek sesja; w komunikatach nazywana preflight
- Linia STOP
- jedna linia z powodem, którą sesja albo kolejka kończy turę, gdy potrzebuje decyzji człowieka
- Werdykt
- stan ticketu albo merge requesta policzony przez skrypt, a nie odgadnięty z opisu
- Runda poprawek
- jedna próba naprawy czerwonego CI przez kolejkę; limit to dwie
- Kolizja testów
- błędy testów spowodowane współdzieleniem środowiska przez równoległe sesje
- Idempotentny
- bezpieczny do powtórzenia: drugie uruchomienie nie zmienia wyniku pierwszego
Cały obieg, w którym te problemy mogą się pojawić, opisuje przewodnik Sprint z Monolynx krok po kroku, a pierwszą konfigurację wpis Pierwszy projekt w Monolynx.
Chcesz widzieć błędy aplikacji i dostępność usług w tym samym miejscu co sprint?
Zobacz moduł Monitoring w Monolynx