Po co recenzować ticket przed pracą?
Błąd w tickecie kosztuje najmniej, zanim ktokolwiek zacznie pisać kod. Agent AI nie zakwestionuje założenia, że "endpoint jest pod adresem X" albo że "moduł Y już to obsługuje". Przyjmie je i zbuduje na nim całą zmianę.
Skill ticket-review z pluginu Monolynx dla Claude Code sprawdza takie założenia wcześniej. Ma dwa tryby: recenzję jednego ticketu i przegląd całego sprintu.
> /monolynx:ticket-review MON-123
> /monolynx:ticket-review sprintBez argumentu skill pokazuje tablicę Kanban i pyta, który ticket zrecenzować.
Osiem kroków recenzji jednego ticketu
Recenzja ma stałą kolejność: najpierw forma, potem dwa źródła prawdy, na końcu raport i propozycje.
- Ticket i specyfikacja
Skill pobiera ticket. Gdy ticket ma powiązaną stronę specyfikacji w wiki, staje się ona głównym kontekstem.
- Forma
Osiem kryteriów, każde z oceną OK, SŁABE albo BRAK.
- Wiki
Każde konkretne twierdzenie z ticketu jest wyszukiwane w dokumentacji projektu.
- Kod
Osobny agent tylko do odczytu sprawdza te same twierdzenia w kodzie i podaje plik z numerem linii.
- Potrójna weryfikacja
Każda wstępna niezgodność jest sprawdzana jeszcze dwa razy, innymi metodami.
- Raport
Dwie tabele: forma ticketu i zgodność założeń.
- Propozycje poprawek
Osobne pytanie dla niezgodności, elementów niepewnych, braków formy i blokerów.
- Komentarz
Podsumowanie recenzji zostaje na tickecie.
Ticket przechodzi przez ocenę formy, a jego założenia są sprawdzane w wiki i w kodzie. Założenie potwierdzone dostaje status zgodne. Założenie podejrzane o niezgodność przechodzi dwie dodatkowe weryfikacje: gdy wszystkie trzy potwierdzają problem, status to niezgodne, w przeciwnym razie niepewne. Wynik trafia do raportu, a poprawki są zapisywane po zgodzie użytkownika.
flowchart TD
A[Ticket] --> B[Ocena formy]
A --> C[Założenia z ticketu]
C --> D[Wiki]
C --> E[Kod]
D --> F{Niezgodność?}
E --> F
F -->|nie| G[ZGODNE]
F -->|tak| H[Druga i trzecia weryfikacja]
H -->|wszystkie trzy potwierdzają| I[NIEZGODNE]
H -->|choć jedna nierozstrzygnięta| J[NIEPEWNE]
B --> K[Raport]
G --> K
I --> K
J --> K
K --> L[Poprawki po zgodzie]Jak skill ocenia formę ticketu?
Forma odpowiada na jedno pytanie: czy agent zrozumie ticket bez dopytywania. Każde z ośmiu kryteriów dostaje jedną z trzech ocen.
| Ocena | Znaczenie | Co dalej |
|---|---|---|
| OK | kryterium spełnione | nic |
| SŁABE | spełnione częściowo | propozycja poprawionej treści |
| BRAK | kryterium niespełnione | propozycja brakującej sekcji |
Osiem kryteriów formy
| Kryterium | Pytanie |
|---|---|
| Jasność celu | Czy wiadomo, co ma być zrobione? |
| Kontekst | Czy wiadomo, dlaczego zadanie istnieje? |
| Kryteria akceptacji | Czy są w opisie i jako osobna lista do odhaczenia? |
| Zakres zmian | Czy wiadomo, gdzie w kodzie wprowadzić zmiany, i czy jest sekcja "Pliki dotykane"? |
| Nie ruszać | Czy ticket mówi, czego nie zmieniać, z powodem? |
| Odwracalność | Czy wskazano operacje, których nie cofnie revert? |
| Zależności | Czy blokery z opisu zgadzają się z relacjami zapisanymi na tickecie? |
| Jednoznaczność | Czy opis jest wolny od sprzeczności? |
Dwa kryteria sprawdzają więcej niż samą obecność sekcji. Sekcja "Zakres zmian" dostaje ocenę SŁABE także wtedy, gdy lista "Pliki dotykane" nie zgadza się z zakresem, na przykład pomija plik wymieniony wyżej. Sekcja "Odwracalność" bywa podważana przez kod: ticket twierdzi, że nie ma operacji nieodwracalnych, a agent czytający kod znajduje w zakresie migrację bazy.
Dlaczego niezgodność wymaga trzech sprawdzeń?
Fałszywy alarm w recenzji jest gorszy niż brak recenzji. Gdy skill błędnie uzna poprawne założenie za niezgodne i "naprawi" ticket, agent dostanie złe wskazówki z pieczątką weryfikacji.
Dlatego każde założenie wstępnie oznaczone jako niezgodne przechodzi trzy sprawdzenia różnymi metodami:
- Pierwsze źródło
Wynik z wiki albo z kodu, zapisany razem z dowodem.
- Drugie źródło
Jeśli pierwsze było wiki, teraz kod. Jeśli kod, teraz wiki albo graf zależności. Z innymi słowami kluczowymi niż za pierwszym razem.
- Szersza analiza
Powiązane pliki, czyli importy, wywołania i testy, a w razie potrzeby historia zmian pliku.
Zanim oznaczysz cokolwiek jako niezgodne, musisz to zweryfikować trzy razy różnymi metodami.
Wynik w raporcie może wyglądać tak jak w tym przykładzie, gdzie większość założeń się potwierdziła:
Dane wykresu
| Status | Liczba założeń |
|---|---|
| Zgodne | 6 |
| Niepewne | 2 |
| Niezgodne | 1 |
Co skill proponuje po raporcie?
Raport jest punktem wyjścia do poprawek, a każda grupa problemów ma własne pytanie. Możesz przyjąć jedną propozycję i odrzucić pozostałe.
| Znalezisko | Propozycja | Zapis po zgodzie |
|---|---|---|
| Założenie niezgodne | konkretny nowy tekst z dowodem z trzech sprawdzeń | aktualizacja opisu |
| Założenie niepewne | sekcja "Zwróć uwagę" na końcu opisu | aktualizacja opisu |
| Brak listy kryteriów | kryteria z opisu jako pola do odhaczenia | dodanie kryteriów |
| Brak sekcji granic | gotowe sekcje "Nie ruszać" i "Odwracalność" | aktualizacja opisu |
| Blokery niezgodne z opisem | docelowa lista blokerów | zmiana relacji |
Propozycje granic nie są domysłem. Agent czytający kod sprawdza, kto jeszcze importuje pliki z zakresu, i podaje kandydatów z plikiem i numerem linii.
Jak działa przegląd sprintu?
Tryb sprint rozwiązuje inny problem niż recenzja jednego ticketu. Dwa tickety, które zmieniają ten sam plik, nie powinny iść równolegle w osobnych sesjach, bo skończą się konfliktem przy merge i dodatkową rundą CI.
Skill pobiera wszystkie tickety w statusie todo z aktywnego sprintu i z każdego czyta sekcję "Pliki dotykane". Samych przecięć nie liczy model, tylko dołączony skrypt:
{"tickets": [
{"key": "MON-1", "priority": "high",
"files": ["cli/src/a.py", "tests/unit/test_a.py"],
"blocked_by": ["MON-7"]},
{"key": "MON-2", "priority": "medium",
"files": ["cli/src/a.py"],
"blocked_by": []}
]}Skrypt układa kolejność według priorytetu: critical, high, medium, low. Przy równym priorytecie wcześniejszy jest ticket z niższym numerem. Trzy tickety na tym samym pliku dają łańcuch, a nie każdy z każdym: pierwszy blokuje drugi, drugi blokuje trzeci.
| Grupa w wyniku | Znaczenie | Działanie |
|---|---|---|
| Propozycje | wspólne pliki, brak relacji między ticketami | pytanie o zapis blokera |
| Już powiązane | wspólne pliki, relacja już istnieje | bez zmian |
| Wspólne, bez blokera | pliki zmieniane przez prawie każdy ticket | bez zmian |
| Nie porównano | ticket nie ma listy plików | prośba o uzupełnienie |
Trzecia grupa to pliki "zawsze wspólne", takie jak changelog albo manifest wersji. Zmienia je prawie każdy ticket, więc blokada na nich ustawiłaby cały sprint w jedną kolejkę1.
Propozycje blokerów
# Bloker Blokowany Wspólne pliki
1 MON-1 (high) MON-2 (medium) cli/src/a.py
Które propozycje blokerów zapisać? (wszystkie / numery, np. 1,3 / żadne)Najczęstsze pytania
Pytania poniżej dotyczą sytuacji, które wracają przy pierwszych recenzjach.
Czy skill sam poprawi mój ticket?
Nie. Skill pokazuje propozycję i pyta. Dopiero po potwierdzeniu aktualizuje opis, kryteria albo relacje blokad.
Co oznacza status NIEPEWNE?
Wiki ani kod nie potwierdziły założenia jednoznacznie, ale też mu nie zaprzeczyły w trzech sprawdzeniach. Skill proponuje wtedy sekcję "Zwróć uwagę", żeby agent realizujący ticket sprawdził ten punkt sam.
Co, jeśli ticket jest czysto organizacyjny?
Skill informuje, że ticket nie zawiera założeń technicznych, i ocenia tylko formę.
Dlaczego ticket trafił do grupy "Nie porównano"?
Ticket nie ma sekcji "Pliki dotykane" albo ma wpis, że zmiana jest poza repozytorium. Pierwszy przypadek naprawia recenzja tego ticketu, która zaproponuje listę plików.
Czy przegląd sprintu trzeba powtarzać?
Warto po przyjęciu tylko części propozycji. Para powiązana wyłącznie przez odrzuconą propozycję wróci wtedy jako nowa propozycja.
Słownik i następny krok
Pojęcia z tego wpisu, w jednym miejscu:
- Założenie
- konkretne twierdzenie z ticketu, które da się sprawdzić w wiki albo w kodzie
- Potrójna weryfikacja
- trzy niezależne sprawdzenia wymagane dla statusu NIEZGODNE
- Bloker
- ticket, który musi mieć status done, zanim zacznie się praca nad innym ticketem
- Pliki dotykane
- sekcja opisu ze ścieżkami plików, które ticket zmieni albo utworzy
- Strona specyfikacji
- strona wiki z decyzjami projektowymi powiązana z ticketem
- Pliki zawsze wspólne
- pliki zmieniane przez większość ticketów, które nie tworzą blokady
Zrecenzowany ticket podejmujesz skillem opisanym we wpisie jak działa /monolynx:work.
Recenzja działa na ticketach z backlogu i sprintów w module Scrum. Zobacz tablicę, z której skill je pobiera.
Poznaj moduł Scrum w Monolynx- W repozytorium pluginu Monolynx do tej grupy należą changelog, manifesty wersji, liczniki skilli i generowane kopie skilli. ↩