🇵🇱 Polska na kodach, czyli państwo open-source. Kiedy ustawa staje się "pull requestem"?

Polska Rzeczypospolita Opensourcowa… GitHub wkracza na salę sejmową? Jak cudownie to brzmi! Rewolucja w legislacji? Kiedy ustawa staje się “pull requestem”? Kontynuując myśl jednego z polityków, zobaczymy, jak mógłby działać system państwowy oparty na platformie GitHub. A tym samym poznasz funkcjonalności platformy przydatne w Twoim projekcie. Czy programiści przejmują władzę? A co na to wszystko Konstytucja? Z pomocą przychodzi sztuczna inteligencja w postaci ChatGPT! Podobno przy klawiaturze nie rozmawia się o polityce, dlatego postaramy się zostać w tym dobrym tonie i nie zanurzyć się w meandry waśni politycznych, a przy tym dowiedzieć się na czym polega Prompt Engineering. Czas na ustawowy git blame!

🧠 Z życia na kodach

Pani Marszałek, Wysoka Izbo! Szanowni programiści i programistki!

GitHub to wspaniałe narzędzie, wykorzystywane niemal na każdym kroku w branży IT. Co, gdyby coś tak potężnego wpadło w ręce Parlamentarzystów? Jak wyglądałby sejm, gdyby GitHub został na stałe włączony w proces legislacji prawa państwowego?

Wybory parlamentarne 2023 w Polsce zbliżają się wielkimi krokami. Mówi się, że “jeżeli Ty nie zainteresujesz się polityką, to polityka zainteresuje się Tobą”. Niestety i w przypadku tego wpisu to prawda — żeby prouszyć temat automatyzacji procesów (jakichkolwiek) trzeba najpierw zrozumieć, jako one działają w tzw. domenie biznesowej (takie podejście leży u podstaw praktykowanej przeze mnie metodyki, jaką jest Domain-Driven Design), która w tym przypadku niestety jest “upolityczniona”.

Jeśli nie miałeś jeszcze styczności z DDD, to koniecznie się zapoznaj z tym podejściem. Może Twój projekt jest jeszcze do uratowania, bo nie przegłosowano najgorszych rozwiązań i zespołowy “sejm” ustawy nie przyjął :) Wszystkie potrzebne źródła znajdziesz na mojej MAPIE.

Nie zniechęcając się tym politycznym wątkiem, postanowiłem zastanowić się, jak wyglądałby proces tworzenia ustaw w Polsce, gdyby opierał się na platformie GitHub. Jeśli jesteś programistą, a nie znasz specyficznych funkcjonalności GitHuba (jakie buduje wokół samego Git`a) takich jak Projects, Actions czy Issues Templates, a polityka Ciebie nie interesuje to i tak przeczytaj ten wpis — bo te rozwiązania możesz zastosować już dziś w swoim projekcie :)

Niezależnie od tego, z jaką opcją polityczną sympatyzujesz, muszę przyznać, że zainspirował mnie do tego wpis Sławomira Mentzena (LINK) z Konfederacji, którego fragment brzmi następująco:

Już jutro […] premiera moich prostych ustaw podatkowych w zakresie PIT. Opowiem o zaproponowanych zmianach oraz umieszczę link do projektów ustaw, które umieszczone będą w serwisie GitHub. Czemu tam? Ponieważ liczę na dyskusję wśród specjalistów od podatków. W każdym projekcie podatkowym są błędy, luki, przeoczenia i mam nadzieję, że specjaliści zwrócą mi na nie uwagę. Jestem otwarty na dyskusję, a ta będzie najsprawniejsza właśnie na GitHubie. Obecnie przepisy podatkowe są konsultowane metodą średniowieczną. Ministerstwo Finansów publikuje projekty ustaw, do których można się odnieść pisemnie, wysyłając list, którego i tak nikt nie czyta. Zmienimy to. Mamy 2023 rok i nie ma powodu, żeby utrzymywać metody ze średniowiecza.

Ten post powstaje jeszcze, kiedy cytowane “jutro”, to rzeczywiście kolejny dzień — dlatego czekam jeszcze z nadzieją, aby zobaczyć jak ten pomysł będzie zrealizowany.

EDIT: Wspomniane w cytacie repozytorium na GitHub już powstało. Znajdziesz je tutaj: ProjektyUstaw/Ustawy-o-PIT. Popularność zyskuje bardzo szybko, obecnie (po 8 godzinach od publikacji) ma już 303 “gwiazdek”, 40 otwartych issues z merytorycznymi uwagami i już Pull Requesty organizujące lepiej samą techniczną stronę repo. Widać, że ściąga to ludzi na GitHub w tym konkretnym celu, bo merytorycznie komentują też dopiero co pozakładane konta.

👨‍🚀 Mały krok dla programisty, ale wielki dla ludzkości.

W międzyczasie postanowiłem pójść o krok dalej. Nagle pootwierało mi się kilka szufladek w głowie, jak możnaby zorganizować “państwo open-source” i procesy wokół niego, bazując na platformie GitHub, gdzie na co dzień pracują programiści nad swoim kodem. Oczywiście to trochę pobożne życzenia, ale może kiedyś… gdy AI (albo przynajmniej partia programistów) przejmie władzę nad światem 😈 Mamy 2023 rok, a więc… zróbmy to!

📜 Wypchnij ustawę na tę gałąź!

Każda organizacja, taka jak np. software house czy firma produktowa, która używa Git’a do zarządzania kodem, musi opracować jakiś system pracy z tym narzędziem. Najpopularniejszym z nich jest GitFlow, który opiera się na dwóch głównych gałęziach: main i develop oraz wielu feature - dedykowanym pod konkretne funkcjonalności. Jeśli jeszcze nie miałeś okazji się z nim zapoznać, to polecam ten wpis. Warto też rozważyć inne możliwości. Może dla Twojego projektu lepszy będzie Trunk-Based Development?

Ale co na to sejm? Składam wniosek formalny o dołączenie systemu branchy do tego posta. Zaprzęgając do pomocy też samą platformę GitHub, możnaby pokusić się o osobne repozytorium dla każdej jednostki biorącej udział w procesie legislacyjnym (przykład jak to jest teraz). Wyglądałoby to wtedy tak, że po ukończeniu prac na danym poziomie wystawiany jest pull request z forka do kolejnego kroku w procesie. Np. sejm tworzy pull request do repozytorium senatu, gdzie GitHub Actions weryfikują takie rzeczy jak np. czy ustawa została zatwierdzona wymaganą większością głosów (Pull Request ma niestety obecnie maksymalny limit wymaganych approve jako 6) i inne kwestie formalne. A cały proces oczywiście można śledzić w zautomatyzowanym GitHub Projects. Czy Prezydent podpisał ustawę? Odpowiedź widać poniżej.

GitHub Projects - Dziennik Ustaw

GitHub Projects - Dziennik Ustaw
(Kliknij obrazek, aby powiększyć)

Dzięki utworzeniu określonych zespołów w sposób hierarchiczny w ramach organizacji naszego państwa (jak widzisz poniżej, GitHub umożliwia coś takiego), można przydzielić określonym osobom dane uprawnienia. Np. dostęp do repozytoriów dla izby parlamentu czy poszczególnych komisji sejmowych.

GitHub Organization - Teams w Parlamencie

GitHub Organization - Teams w Parlamencie
(Kliknij obrazek, aby powiększyć)

Scrum w sejmie? To pewnie też tylko kwestia czasu, jeśli zasiadaliby tam programiści. Sprawozdania komisji jako Daily Standup, czy zmiana porządku obrad jako Backlog Refinement brzmi jak coś, co może zadziałać. Może w końcu nasz kraj zacząłby działać jak dobrze zorganizowana firma, a cele projektów byłby dowożone w kolejnych sprintach.

❌ Wnoszę o odrzucenie tego “pull requesta” w całości.

No więc kiedy ustawa staje się “pull requestem”? Zapewne nie raz i nie dwa — określa to flow, jaki zostałby przyjęty i podział na branche/repozytoria.

Forma, jaką jest “pull reuqest” ma wiele zalet (wad też, ale to temat na inny wpis — sam bardziej preferuję Pair Programming), jakie znamy z naszej codziennej pracy nad kodem. Myślę, że tak jak zostało zaproponowane w cytowanym na początku poście polityka, to idealne miejsce na konsultacje z ekspertami (oby tylko potrafili założyć konto na GitHub). Robiąc Pull Requesta jako progamista, masz właśnie nadzieję, że ktoś znajdzie błąd przez Ciebie popełniony, albo zaproponuje jeszcze lepsze rozwiązanie, o jakim może nawet nie miałeś pojęcia.

Jak wyglądałaby taka dyskusja na GitHubie?

Jak wyglądałaby taka dyskusja na GitHubie?
(Kliknij obrazek, aby powiększyć)

Choć większość pomysłów, z tego posta, to prawdopodobnie pieśń przyszłości albo ostre “science-fiction”, to proponowane rozwiązanie z dyskusją nad treścią ustawy, można wdrożyć już od jutra (co zakładam, że właśnie jest planowane). To też idealne miejsce na konsultacje społeczne, które mogłyby być prowadzone w sposób bardziej przejrzysty i dawały czas do namysłu oraz kompetentnej odpowiedzi. Każdy mógłby zrobić fork repozytorium i zaproponować swoje zmiany. Głos ludzi byłby łatwiej słyszalny, a posłowie mieliby szybki dostęp do opinii ekspertów z oznaczonym dokładnie dyskutowanym fragmentem.

Pull Requesty oczywiście zazwyczaj łączą się z określonymi Issues. Patrząc na większość repozytoriów użytkownicy GitHub często są nieświadomi, że można trochę ustandaryzować prace nad nimi poprzez proste pliki markdown w folderze ISSUE_TEMPLATE - kliknij po przykład z mojego repozytorium. Wtedy tworzenie nowego Issue wygląda jak poniżej.

Przykład standaryzacji rodzajów Issues w repozytorium na GitHub.

Przykład standaryzacji rodzajów Issues w repozytorium na GitHub.
(Kliknij obrazek, aby powiększyć)

Bądźmy szczerzy — w dzisiejszych czasach sposób komunikacji poprzez listy potrafi skutecznie zniechęcić. Najprostszym przykładem jest praktyka stosowana jeszcze jakiś czas temu (może niektórzy dalej to robią) przez rejestratorów domen. Aby przenieść domenę do innego operatora, wymagali wysłania listu, co z pewnością obniżało częstotliwość takich działań, a klient nie przechodził do konkurencji.

Taka prosta możliwość wyrażenia swojej opinii jak poprzez zaproponowanie Pull Requesta i zostania “contributorem” swojego Państwa, z pewnością mogłaby zwiększyć poczucie odpowiedzialności poszczególnych obywateli, jak i dążyć do transparentności tego, co dzieje się na wyższych szczeblach. To właśnie są między innymi “wartości” (nie tylko $$$) jakich należy szukać, rozpoznając domenę w czasie takich aktywności jak Event Storming. Więcej o tym piszę na mojej LIŚCIE MAILINGOWEJ.

📚 GitHub Actions i ChatGPT w służbie Konstytucji

Większość śmiertelników z “pokolenia Z” już na pewno przeprowadziła wiele twórczych dyskusji z ChatGPT. Chociaż sam się czuję jak jakiś “boomer”, widząc szybki rozwój technologii bazujących na AI w ciągu ostatnich kilku miesięcy :D

Niestety, zazwyczaj pozostajemy na bardzo bazowym poziomie i nie dajemy się rozkręcić naszemu wirtualnemu asystentowi. Tutaj zostawię Cię tylko z zajawką. Kiedy zaczynasz rozmawiać, opisz najpierw Chatowi, jako kto ma z Tobą mówić (mi udało się pogadać nawet z “Jezusem” - bez żadnego objawienia :D). Różne techniki z tym związane można znaleźć w sieci pod hasłem “Prompt Engineering”. Większe możliwości testowania odpowiednich promptów i różnych modeli językowych umożliwia konto deweloperskie OpenAI i tzw. “Playground”. Zachęcam Cię do założenia i wejścia na adres: https://platform.openai.com/playground.

GitHub Actions i automatyczne weryfikacje Pull Requesta

GitHub Actions i automatyczne weryfikacje Pull Requesta
(Kliknij obrazek, aby powiększyć)

“Potęga! Nieograniczona moc!” - choć to cytat Imperatora ze “Star Wars: Revenge of the Sith”, jako programiści wiemy, że potęga to dopiero połączenie wielu narzędzi ze sobą. Dlatego też wystawione przez różne serwisy REST API (dostęp do interfejsu OpenAI daje właśnie konto developera) dają nam taką możliwość. Wracając do tematu naszej “państwowości” moglibyśmy postawić automatycznego strażnika konstytucji łącząc GitHub Actions z ChatemGPT.

Przykładowo użyć do tego taki prompt:

Jesteś sędzią w Trybunale Konstytucyjnym w Polsce. 
Wydaj wyrok, znając jak najlepiej treść Konstytucji RP, przywołaj określone fragmenty.
Nie pisz całego wyroku, pomiń wstęp i zakończenie.  Nie przywołuj też treści skargi konstytucyjnej, jedynie numery punktów kiedy się do nich odwołujesz. Podaj uzasadnienie wyroku.
Wypisz w formacie JSON, bez żadnych dodatkowych komentarzy. Przykład:
{"punkt": "a", "zgodny": true, "uzasadnienie": "tresci uzasadnienia"}

Dzięki tak opisanym wskazówkom i wynikowi w formacie JSON możemy użyć wygenerowanej odpowiedzi jako input dla naszych integracji i dalszego procesowania. Chat jest zazwyczaj bardzo gadatliwy, więc ograniczamy mu tę możliwość np. poprzez instrukcję “bez żadnych dodatkowych komentarzy”. Kiedy na początku podałem mu dwie pierwsze linijki promptu, zaczął mi pisać całą treść wyroku włącznie ze wstępem, datami, składem sędziowskim itp.

Aktywnośc posłów w danym repozytorium. Jako wyborca z łatwością mógłbyś zobaczyć jak pracuje ktoś wybrany przez Ciebie.

ChatGPT jako sędzia Trybunału Konstytucyjnego.
(Kliknij obrazek, aby powiększyć)

Po małych poprawkach odpowiedź wyglądała następująco:

{"punkt": "a", "zgodny": true, "uzasadnienie": "Art. 42 § 3 ustawy Kodeks karny nie narusza art. 10 ust. 1, art. 45 ust. 1 w związku z art. 175 ust. 1 oraz art. 173 Konstytucji RP, ponieważ orzeczenie dożywotniego zakazu prowadzenia wszelkich pojazdów mechanicznych ma na celu zapewnienie bezpieczeństwa publicznego oraz ochronę praw i wolności innych osób. Władza sądownicza działa na podstawie przepisów prawa, a dożywotni zakaz prowadzenia pojazdów mechanicznych jest przewidziany jako jedna z możliwych kar w ustawie Kodeks karny."}

{"punkt": "b", "zgodny": true, "uzasadnienie": "Art. 42 § 3 ustawy Kodeks karny jest zgodny z art. 31 ust. 1, art. 52 ust. 1 i 2 w związku z art. 31 ust. 3 Konstytucji RP, gdyż ograniczenie wolności i praw jednostki może nastąpić tylko za pomocą ustawy i tylko wtedy, gdy jest to konieczne w demokratycznym państwie dla ochrony bezpieczeństwa lub porządku publicznego, bądź dla ochrony środowiska, zdrowia lub moralności publicznej, albo wolności i praw innych osób. Orzeczenie dożywotniego zakazu prowadzenia pojazdów mechanicznych jest przewidziane w ustawie Kodeks karny i ma na celu ochronę tych wartości."}

{"punkt": "c", "zgodny": true, "uzasadnienie": "Art. 42 § 3 ustawy Kodeks karny nie narusza art. 32 ust. 1 w związku z art. 31 ust. 3 Konstytucji RP, ponieważ przepis ten nie prowadzi do dyskryminacji sprawców przestępstw na podstawie płci, rasy, pochodzenia, wyznania, majątku, urodzenia, wykształcenia, stanu społecznego, przekonań politycznych lub innych takich cech. Orzeczenie dożywotniego zakazu prowadzenia pojazdów mechanicznych może zostać zastosowane wobec każdej osoby spełniającej przesłanki określone w ustawie, niezależnie od jej cech indywidualnych."}

Nie wiem, co na to prawdziwi sędziowie Trybunału, ale z pewnością takie AI mogłoby pełnić funkcję “organu doradczego”. Wydaje się to wręcz nieuniknionym krokiem postępu, ponieważ już od dłuższego czasu krążą plotki do wykorzystania Sztucznej Inteligencji w sądownictwie (prędzej zastąpi sędziów niż programistów 🫠). A niektórzy już to właśnie robią, jak np: “Juan Manuel Padilla, sędzia z Kolumbii, ogłaszając wyrok powołał się na rozmowę o sprawie ze sztuczną inteligencją (ChatGPT)” [LINK]

Chociaż sam nie wiem, czy chciałbym być tak sądzony… taka perspektywa jest trochę przerażająca. W końcu to nie jedna wątpliwość, jaką budzą rozwiązania bazujące na AI, a prawo za nimi nie nadąża. Tak samo, jak wciąż wałkowana sprawa “kto ma prawa autorskie do kodu tworzonego przez takie narzędzia jak GitHub Copilot”.

🔄 Change tracking

Wracając do elementarnych funkcjonalności Gita, nie sposób przemilczeć dokładne śledzenie zmian w plikach. Zwróć uwagę na ten zapis: 8) w art. 40 w § 2 w pkt 2 wyrazy „oraz art. 305 § 1 i 2” zastępuje się wyrazami „ , art. 305 § 1–4 oraz art. 306b”; Tak wygląda fragment przykładowej “ustawy o zmianie ustawy” LINK. Kiedy ja, jako przysłowiowy “Nowak” próbowałem zrozumieć pewną ustawę w podobnej formie, to bardzo ciężko było mi wywnioskować, jaka będzie jej aktualna treść. Z pomocą Gita byśmy dokładnie widzieli, które linijki i kiedy się zmieniały. Podobno w Parlamencie Europejskim niestety nawet czasem posłowie nie wiedzą, nad czym głosują (ZOBACZ FILM) - nie wiadomo czy to śmieszne, czy przerażające 😂.

🤦 Dlaczego ja na niego zagłosowałem!?

Nie tylko byśmy wiedzieli co i kiedy, ale też kto zmienił…

Aktywność posłów w danym repozytorium. Jako wyborca z łatwością mógłbyś zobaczyć jak pracuje ktoś wybrany przez Ciebie.

Aktywność posłów w danym repozytorium. Jako wyborca z łatwością mógłbyś zobaczyć jak pracuje ktoś wybrany przez Ciebie.
(Kliknij obrazek, aby powiększyć)

Wybierając swoich przedstawicieli, w strukturach władzy mamy nadzieję, że będą realizowali to, co obiecali w kampanii wyborczej. Niestety, bardzo ciężko jest to weryfikować, tym bardziej, że nie wszystkich 460 parlamentarzystów widać na co dzień w mediach czy na mównicy sejmowej. Dzięki statystykom GitHuba o wiele łatwiej byłoby, przekonać się kto co robił, np. ile ustaw poprawił czy sformułował niewygodne dla Ciebie przepisy (istny wyborczy git blame).

🤔 Drogi wyborco!

Twój głos ma znaczenie! Jak myślisz, czy coś z tego rzeczywiście warto by było wprowadzić :) ? Jak zapatrujesz się na pomysł i realne zastosowanie GitHuba jako narzędzia do konsultacji projektów ustawy, tak jak proponuje przedstawiciel Konfederacji dla swoich ustaw o PIT? Czy to wyznacznik jakiegoś nowego kierunku we współpracy nad projektami (nie tylko programistycznymi)? Gdzie jeszcze można zastosować Sztuczną Inteligencję?

Sam jestem przekonany, że różne rozwiązania IT z pewnością będą coraz bardziej obecne w naszej codzienności. Do myślenia dało mi, kiedy organizując kurs programowania CodersCamp przeglądałem zgłoszenia uczestników. W jednym miejscu potencjalna przyszła developerka pisała, że podczas kursu “zamierza po przerwie wrócić do programowania”… Zapewne nie byłoby w tym nic dziwnego, gdyby nie to, że w polu “ile masz lat” ta osoba wpisała tylko liczbę 13! Ja w tym wieku, dopiero stawiałem swoje pierwsze kroki w pisaniu skryptów, a teraz dzieci już “wracają do programowania”. Może jeszcze nie dla obecnego pokolenia, ale dla kolejnego kodowanie może być tak naturalne jak dla nas czytanie czy pisanie.

Podziel się wpisem:

✉️ Lista Mailingowa

Zostaw swój adres e-mail i zobacz moje spojrzenie na codzienność programisty. Możesz liczyć na materiały o Event Sourcingu, Event Modelingu, Domain-Driven Design, programowaniu obiektowym i funkcyjnym oraz innych powiązanych tematach.

🫱🏻‍🫲🏽 Mentoring Online

Nauka Domain-Driven Design? Podział projektu na moduły? Zaplanowanie architektury? Konsultacja CV? A może rozwój w kierunku Seniora? Spotkajmy się! Umów się na mentoring lub konsultacje. Wspólnie opracujemy plan dla Ciebie 🫵

📖 SOLIDne CV?

🤔 Masz wymagane kompetencje, ale nikt nie daje Ci szansy ich zaprezentować?!

CV na kodach

💪 Przeprowadziłem ponad 100 rozmów rekrutacyjnych i widziałem tysiące CV. Nieraz miałem okazję porównać CV odrzucane, z tymi które robiły największe wrażenie. Na tej podstawie opracowałem porady, które pomogą Ci przejść ten etap rekrutacji.

Mailing Domain-Driven Design

Wciąż za mało życiowych cheatów?

Zostaw swój adres e-mail i zobacz moje spojrzenie na codzienność programisty.

Na sam początek opowiem Ci o zetknięciu z Domain-Driven Design, zmianie myślenia i nowej erze mojego programistycznego ja.

Możesz liczyć na materiały o Event Sourcingu, Event Modelingu, DDD, programowaniu obiektowym i funkcyjnym oraz innych powiązanych tematach.

Na pewno poświęcę trochę maili umiejętnością miękkim.

Będziesz też informowany o nowościach Życia na kodach prosto na Twoją skrzynkę!