BlogNadzór

Jaka ochrona branchy powinna obowiązywać, gdy agenci kodujący otwierają pull requesty

Gdy agenci kodujący otwierają pull requesty, docelowy branch powinien wymagać zatwierdzenia przez człowieka innego niż ten, kto wypchnął ostatnią zmianę, unieważniać zatwierdzenia po nowych commitach, przyjmować wymagane checki tylko od aplikacji, która ma je raportować, wymagać review właścicieli kodu dla plików sterujących agentem i nie dawać tożsamości agenta żadnego obejścia. Żeby inżynier, który uruchomił agenta, nie mógł zatwierdzić jego pracy, potrzebny jest jeszcze jeden element: w Copilocie jest wbudowany, przy innych agentach dodajesz go sam.

Zaktualizowano

Co się zmienia, gdy pull request otwiera agent

Ochronę branchy zaprojektowano z myślą o ludziach: jedna osoba pisze, inna zatwierdza. Agenci zmieniają trzy rzeczy. Autorem jest narzędzie działające na czyimś tokenie, więc nie jest oczywiste, kto może zatwierdzić. Agenci często pushują, czasem już po zatwierdzeniu. A agent może edytować pliki, które mówią jemu i CI, jak mają się zachowywać, w tym pliki instrukcji i workflowy.

Instrukcje w AGENTS.md czy w playbooku proszą agenta o właściwe zachowanie. O tym, co da się zmergować, decydują ustawienia repozytorium. Ten tekst dotyczy tych ustawień na GitHubie. Przegląd kodu napisanego przez agenta to osobny temat, który omawiamy w poradniku o code review z AI.

Podstawowy zestaw dla branchy, do których celują agenci

Na GitHubie to ustawienia w regule ochrony brancha albo w rulesecie dla domyślnego brancha i ewentualnych branchy release. Przy każdym punkcie piszemy, dlaczego przy agentach zyskuje na znaczeniu.

  • Wymagaj pull requesta z co najmniej jednym zatwierdzeniem, żeby każda zmiana agenta przeszła przez człowieka.
  • Unieważniaj nieaktualne zatwierdzenia, gdy nowe commity zmieniają diff, bo agenci pushują dalej po komentarzach z review.
  • Wymagaj zatwierdzenia ostatniego pusha przez kogoś innego niż osoba, która go wypchnęła.
  • Wymagaj review właścicieli kodu, z właścicielami wskazanymi dla konfiguracji agentów i workflowów.
  • Wymagaj checków statusu dla buildu i testów, a tam, gdzie się da, ustaw oczekiwaną aplikację źródłową.
  • Utrzymaj blokadę force pushy i usuwania brancha, co reguła ochrony robi domyślnie.
  • Włącz Do not allow bypassing, bo domyślnie administratorzy i role z uprawnieniem do obejścia są zwolnieni z reguł.

Wymagane checki trudne do podrobienia

GitHub dokumentuje, że każda osoba i każda integracja z prawem zapisu może ustawić stan dowolnego checka statusu w repozytorium. Token agenta z prawem zapisu mógłby więc teoretycznie zgłosić wymagany check jako zaliczony. Ustaw jako oczekiwane źródło każdego wymaganego checka aplikację GitHub, która go uruchamia, żeby status od kogoś innego nie spełniał reguły.

Ważne są jeszcze dwa szczegóły. Wymagane checki są zaliczone, gdy raportują successful, skipped albo neutral, więc check, który jest pomijany na branchach agentów albo zgłasza uwagi jako neutral, niczego nie blokuje. Nazwy jobów powinny być unikalne we wszystkich workflowach, bo duplikaty czynią wyniki niejednoznacznymi i mogą blokować merge.

Ustal, kto jest autorem

Traktuj inżyniera, który uruchomił agenta, jako autora, żeby zatwierdzał ktoś inny. GitHub wbudował to w Copilot cloud agent, i tylko tam: osoba, która poprosiła o pull request, nie może go zatwierdzić, agent pushuje tylko na własny branch copilot/ albo na branch pull requesta i nie może zatwierdzać ani mergować. Gdy Copilot otwiera pull request pod własną tożsamością aplikacji, na przykład z wspólnego wątku na Slacku, rulesety domyślnie wymagają jednego dodatkowego zatwierdzenia. GitHub oznacza to ustawienie jako public preview.

Inni agenci pushują z tożsamością, którą im dasz: osobistym tokenem, kontem bota albo aplikacją GitHub. Sprawdź, czy nie ma ona roli administratora, nie jest na żadnej liście obejść i nie może zmieniać rulesetów. Potem zobacz, kogo reguła ostatniego pusha faktycznie wyklucza. Jeśli commity pojawiają się pod kontem inżyniera, wyklucza tego inżyniera. Jeśli agent pushuje jako bot albo aplikacja, wyklucza tylko bota, a inżynier, który uruchomił przebieg, nadal może zatwierdzić. Wtedy niech system uruchamiający agenta zapisuje, kto go uruchomił, i dodaj wymagany check, raportowany przez aplikację pod twoją kontrolą, który nie przechodzi, dopóki zatwierdzenie tej osoby jest jedynym.

Chroń pliki, które sterują agentem

Wytyczne GitHuba dotyczące zabezpieczeń Copilota zalecają chronić pliki konfiguracji agentów i MCP przez CODEOWNERS i wymagane review właścicieli kodu. To samo dotyczy workflowów CI i samego pliku CODEOWNERS. Pull requesty używają pliku CODEOWNERS z brancha bazowego, więc agent nie zmieni swoich recenzentów w tym samym pull requeście.

Hipotetyczne linie na końcu .github/CODEOWNERS (wygrywa ostatni pasujący wzorzec)
/AGENTS.md                         @example-org/platform
/CLAUDE.md                         @example-org/platform
/.claude/                          @example-org/platform
/.cursor/rules/                    @example-org/platform
/.github/copilot-instructions.md   @example-org/platform
/.github/workflows/                @example-org/platform
/.github/CODEOWNERS                @example-org/platform

Rulesety mogą też wymagać zatwierdzenia przez określone zespoły, gdy pull request dotyka wybranych ścieżek, na przykład zespołu bezpieczeństwa przy kodzie uwierzytelniania. To daje regułę opartą na ścieżkach bez polegania wyłącznie na kolejności w CODEOWNERS.

Sprawdź ustawienia w repozytorium testowym

Ustawienia się zmieniają i nakładają. Kilka rulesetów na jednym branchu jest łączonych i obowiązuje najbardziej restrykcyjna wersja każdej reguły, obok ewentualnej reguły ochrony brancha. Samo przeczytanie konfiguracji nie wystarcza, więc testujemy ją prawdziwą tożsamością agenta w jednorazowym repozytorium, które kopiuje reguły produkcyjne:

  1. 1

    Push na chroniony branch

    Bezpośredni push tokenem agenta musi się nie udać.

  2. 2

    Zatwierdź pracę własnego agenta

    Inżynier, który uruchomił przebieg, zatwierdza jego pull request, a merge musi pozostać zablokowany. Copilot egzekwuje to sam; przy innych agentach działa to tylko wtedy, gdy masz check sprawdzający, kto uruchomił agenta.

  3. 3

    Push po zatwierdzeniu

    Nowy commit agenta po zatwierdzeniu musi wymagać ponownego zatwierdzenia.

  4. 4

    Podrób status

    Ustawienie wymaganego checka na success przez API statusów commitów tokenem agenta nie może odblokować merge'a.

  5. 5

    Zmień plik sterujący

    Oznacz testowy pull request jako gotowy do review, bo przy wersjach roboczych właściciele kodu nie są proszeni o przegląd. Zmiana AGENTS.md albo workflowu musi wtedy wywołać prośbę o review zespołu platformowego, a merge musi pozostać zablokowany, dopóki ktoś z tego zespołu nie zatwierdzi.

Powtarzaj test, gdy dodajesz agenta, zmieniasz jego tożsamość albo edytujesz rulesety. Takie ustawienia są częścią tego, jak wdrażamy agentów kodujących razem z zespołami platformowymi.

Pytania

Czy pull requesty agentów powinny wymagać dwóch zatwierdzeń?

Nie jako ogólna zasada. Podstawą jest jedno zatwierdzenie przez kogoś innego niż osoba, która uruchomiła agenta. Drugie zatwierdzenie dodaj regułami opartymi na ścieżkach dla obszarów takich jak uwierzytelnianie, płatności czy infrastruktura.

Czy agenci mogą sami mergować zmiany niskiego ryzyka?

Technicznie tak, jeśli ich tożsamość ma do tego prawo. Zalecamy, żeby o merge'u decydował deterministyczny kod pipeline'u, nigdy agent, i to tylko dla wąskich typów zadań, takich jak aktualizacje zależności z wiarygodnymi testami. Wszystko inne nadal zatwierdza człowiek.

Używać rulesetów czy reguł ochrony branchy?

Oba mechanizmy egzekwują te same podstawowe ustawienia i nakładają się na siebie. Na danym branchu obowiązuje naraz tylko jedna reguła ochrony, a rulesety się sumują, przy czym niektóre nowsze reguły, na przykład wymagani recenzenci według ścieżek, istnieją tylko w rulesetach.

Porozmawiaj z inżynierem

Przyjdź z jednym zadaniem, które chcesz usprawnić. Rozmowa trwa 30 minut i nie wymaga dostępu do twoich systemów ani danych.

Rezerwacja odbywa się w Kalendarzu Google.

Wolisz najpierw napisać? Zostaw adres e-mail i kilka zdań, a odpowiemy, proponując terminy.

Przycisk przygotowuje e-mail w twoim własnym programie pocztowym, a wysyłasz go samodzielnie. Polityka prywatności (wersja robocza)