Dokumentacja architektoniczna i projektowa

Raport z inżynierii odwrotnej środowiska Leantime

Discovery, analiza, projekt funkcjonalny i przygotowanie rekonstrukcji systemu
Data wygenerowania
20 czerwca 2026
Autor dokumentacji
Gemini CLI
Model
OpenAI GPT-5 Codex
Środowisko źródłowe
Docker Compose
System analizowany
Leantime 3.9.5
Cel eksperymentu
Przygotowanie dokumentacji umożliwiającej odtworzenie środowiska przez niezależnego Agenta AI
Raport końcowy • Wersja 1.0

Executive Summary

Przeprowadzono pełną inżynierię odwrotną lokalnego środowiska Leantime na podstawie konfiguracji, stanu runtime, logów, sieci, wolumenów, bazy danych, kodu zawartego w obrazie oraz zachowania aplikacji HTTP.

2zdrowe kontenery
5trwałych wolumenów
35tabel w schemacie
6ról systemowych

Obraz systemu

Badany system jest jednowęzłową instalacją aplikacji do zarządzania projektami i pracą zespołu. Kontener aplikacyjny łączy nginx, PHP-FPM, Leantime i scheduler; drugi kontener zapewnia MySQL. Jedynym publicznym punktem wejścia jest http://localhost:8080, a baza pozostaje dostępna wyłącznie wewnątrz sieci Compose.

Końcowa weryfikacja wykazała stan healthy dla obu kontenerów, brak restartów, przekierowanie niezalogowanego użytkownika do formularza logowania oraz odpowiedź HTTP 200 dashboardu po uwierzytelnieniu.

Zakres funkcjonalny

Leantime wspiera projekty, cele, kamienie milowe, zadania, Kanban, kalendarz, sprinty, ewidencję czasu, raporty, wiki, pliki, komentarze, powiadomienia i administrację użytkownikami. System stosuje sześciopoziomowy model ról od Read Only do Owner.

Stan danych

Instancja ma charakter demonstracyjny: zawiera jednego właściciela, projekt My Project i jedenaście elementów pracy, głównie onboarding. Brak klientów, wpisów czasu, sprintów, komentarzy i plików biznesowych. Dane nie reprezentują kompletnego procesu organizacji.

Kluczowe decyzje rekonstrukcyjne

  • Przypiąć obrazy do zaobserwowanych digestów zamiast używać ruchomych tagów.
  • Wygenerować nowe sekrety; nie przenosić wartości z prywatnego .env.
  • Preferować czystą inicjalizację i jawny seed zamiast kopiowania anomalii danych.
  • Uzgodnić strefę czasową i decyzję o telemetrii przed odbiorem.
  • Potwierdzić rezultat pełnym zestawem testów funkcjonalnych i operacyjnych.
Wniosek wykonawczy. Sam plik Compose odtwarza procesy, ale nie gwarantuje równoważności funkcjonalnej. Potrzebne są zgodne wersje, schemat, role, dane inicjalne, reguły biznesowe i mierzalne kryteria odbioru.

Discovery środowiska

Metoda i zakres

Discovery wykonano 20 czerwca 2026 r. w katalogu /home/pawel/lab/leantime-reverse-engineering-10. Analiza objęła pliki, efektywną konfigurację Compose, kontenery, obrazy, procesy, sieć, porty, wolumeny, logi, bazę i sesję HTTP. Hasła oraz klucze nie są powielane w raporcie.

Artefakty wejściowe

ArtefaktRolaUstalenie
docker-compose.ymlDefinicja stosuDwie usługi, jedna sieć, pięć wolumenów, port 8080.
.envKonfiguracja lokalnaPołączenie DB, URL, sekret sesji, hasła i konto demonstracyjne; plik prywatny.
Wolumeny DockerStan trwałyBrak dumpa SQL i skryptu seed w katalogu; dane istnieją w aktywnych wolumenach.

Katalog nie był repozytorium Git. Istniały starsze wolumeny z prefiksem leantime0_, lecz nie należały do aktywnego projektu.

Kontenery i obrazy

UsługaKontenerObrazStanRola
leantimeleantimeleantime/leantime:latesthealthy, 0 restartówHTTP, UI, logika, scheduler
mysql_leantimeleantime_dbmysql:8.4healthy, 0 restartówRelacyjna baza danych
KomponentWersjaDowód
Leantime3.9.5CLI about
Schemat Leantime3.5.18CLI i zp_settings
MySQL8.4.10CLI DB i manifest obrazu
PHP / Laravel / nginx8.3.31 / 11.45.1 / 1.30.2CLI, nagłówki HTTP

Sieć, porty i trwałość

Sieć bridge leantime-net używa podsieci 172.18.0.0/16. Aplikacja miała IP 172.18.0.3, baza 172.18.0.2. DNS Compose rozwiązuje mysql_leantime. Tylko TCP 8080 jest publikowany na IPv4 i IPv6; 3306/33060 pozostają wewnętrzne.

WolumenMontowaniePrzeznaczenie
leantime_db_data/var/lib/mysqlSchemat oraz dane systemowe i biznesowe
leantime_userfiles/var/www/html/userfilesPrywatne pliki użytkowników i marker trwałości
leantime_public_userfiles/var/www/html/public/userfilesPubliczne zasoby użytkowników
leantime_plugins/var/www/html/app/PluginsWtyczki; wolumen pusty
leantime_logs/var/www/html/storage/logsLogi aplikacji i deprecacji

Baza i dane

Schemat obejmuje 35 tabel dotyczących użytkowników, ról, projektów, zadań, sprintów, czasu, kalendarza, plików, wiki, powiadomień, raportów, integracji, kolejek i audytu.

ObiektLiczba dokładnaCharakter
Użytkownicy / projekty1 / 1Owner oraz My Project
Elementy pracy111 milestone, 10 zadań; onboarding i ślady eksperymentu
Role / uprawnienia6 / 59Dane systemowe
Członkostwa2 rekordy, 1 relacja logicznaDuplikat wymagający decyzji migracyjnej
Klienci, sprinty, timesheety, komentarze0Brak danych biznesowych
Uwaga pomiarowa. Przybliżone TABLE_ROWS InnoDB wskazywało 9 zadań, podczas gdy dokładne COUNT(*) i odczyt rekordów wykazały 11. Walidacja rekonstrukcji musi używać dokładnych zapytań.

Weryfikacja HTTP i logów

  • GET / zwracał 302 do /auth/login.
  • Formularz logowania zawierał CSRF, e-mail, hasło i reset hasła.
  • Poprawne uwierzytelnienie utworzyło sesję; GET /dashboard/home zwrócił 200.
  • Dashboard potwierdził projekt i menu Dashboard, Project Hub, Timesheets, Calendar.
  • Logi wykazały historyczne błędy instalacji/awatara i ostrzeżenia deprecacyjne, lecz zdrowy bieżący runtime.

Analiza komponentów

Warstwa aplikacyjna

Kontener leantime jest autonomicznym pakietem runtime. tini inicjuje skrypt startowy, a Supervisor utrzymuje nginx, PHP-FPM i php bin/leantime schedule:work. Nginx realizuje front HTTP, PHP-FPM wykonuje aplikację, a scheduler obsługuje kolejki e-mail, HTTP/default, telemetrię, ingestion i kontrolę licencji.

Warstwa danych

MySQL 8.4.10 jest krytyczną zależnością i trwałym źródłem prawdy dla encji domenowych, uprawnień i ustawień. Używa utf8mb4 oraz kolacji utf8mb4_unicode_ci. Healthcheck bazy steruje kolejnością startu aplikacji.

Warstwa plikowa

Cztery wolumeny aplikacji oddzielają pliki prywatne, publiczne, wtyczki i logi od obrazu. Dzięki temu wymiana kontenera nie powinna usuwać stanu. Backup bazy bez plików albo plików bez bazy nie zapewnia pełnej spójności funkcjonalnej.

Zależności runtime

ŹródłoCelInterfejsZnaczenie
PrzeglądarkanginxHTTP :8080UI, sesja i API aplikacji
nginxPHP-FPMlokalny FastCGIObsługa żądań dynamicznych
LeantimeMySQLSQL :3306Dane i konfiguracja
LeantimeWolumenySystem plikówZałączniki, wtyczki, logi
SchedulerKolejki/usługiproces cyklicznyPraca asynchroniczna i raportowa

Konfiguracja, produkt i dane

Konfiguracja wdrożenia

URL, port, host i dane bazy, sekret sesji, obrazy, restart, healthcheck, sieć, wolumeny.

Funkcje produktu

Projekty, zadania, cele, Kanban, kalendarz, sprinty, czas, raporty, wiki, role i logowanie.

Dane instancji

Owner, My Project, statusy, onboarding, ustawienia motywu, telemetria i wersja schematu.

Brakujące integracje

Brak osobnego Redis, SMTP, reverse proxy TLS, LDAP/OIDC i aktywnych wtyczek.

Research

Charakter systemu

Leantime jest webowym systemem organizacji pracy łączącym zarządzanie projektami, zadaniami i celami. Kod, UI, migracje oraz procesy tła są dostarczane wewnątrz obrazu, a nie w katalogu operatora.

Model informacji

Centralnym kontekstem jest projekt. Użytkownicy otrzymują członkostwo, a elementy pracy tworzą strukturę rezultatu: zadanie należy do kamienia milowego, a kamień milowy mierzy cel. Zadanie może posiadać opis, kryteria akceptacji, priorytet, status, wykonawcę, daty, estymaty, tagi, sprint i zależności.

Celoczekiwany rezultat Kamień milowymierzalny etap Zadaniejednostka pracy mierzy należy do
Rysunek 1. Domyślna semantyczna struktura pracy.

Domeny biznesowe

  1. Portfel i projekty: tworzenie projektów, Project Hub, daty, budżety i członkostwo.
  2. Planowanie: cele, milestones, zadania, priorytety, terminy i zależności.
  3. Realizacja: Kanban, statusy, wykonawcy, sprinty, komentarze i załączniki.
  4. Plan osobisty: dashboard, kalendarz, własne zadania i timesheety.
  5. Współpraca: komentarze, wiki/notatki, reakcje, powiadomienia i pliki.
  6. Kontrola: statystyki, raporty, czas i zatwierdzenia.
  7. Administracja: role, uprawnienia, ustawienia, wtyczki, integracje i tokeny.

Dane demonstracyjne

Wszystkie obecne dane biznesowe sklasyfikowano jako demonstracyjne. Wskazują na to lokalna domena konta, nazwa projektu, onboardingowe tytuły, zadania rekonstrukcyjne, fikcyjny kontekst ACME i brak aktywności w pozostałych domenach. reconstruction-volume-test.txt jest markerem technicznym, nie załącznikiem użytkownika.

Architektura logiczna

Topologia

Przeglądarkaużytkownik Kontener leantime • 172.18.0.3 nginx PHP-FPM Leantime Scheduler i kolejki MySQL 8.4.10leantime_db • 172.18.0.2wolumen db_data Wolumeny aplikacjiuserfiles • public_userfilesplugins • logs HTTP :8080 SQL :3306
Rysunek 2. Topologia logiczna i przepływy między komponentami.

Przepływ żądania

  1. Przeglądarka wysyła żądanie HTTP do hosta na porcie 8080.
  2. Docker przekazuje ruch do nginx w kontenerze aplikacji.
  3. Nginx przekazuje obsługę dynamiczną do PHP-FPM i Leantime.
  4. Aplikacja weryfikuje sesję i uprawnienia, korzysta z MySQL oraz plików.
  5. Odpowiedź HTML/API wraca do przeglądarki; scheduler niezależnie obsługuje pracę cykliczną.

Właściwości jakościowe

ObszarStanKonsekwencja
DostępnośćJedna replika każdego komponentuBrak wysokiej dostępności; restart powoduje przerwę.
TrwałośćNazwane wolumenyStan przeżywa wymianę kontenera, o ile nie użyto -v.
IzolacjaBaza bez publikacji portuOgraniczona powierzchnia dostępu z hosta.
Bezpieczeństwo transportuHTTP, brak proxy TLSAkceptowalne lokalnie, nie dla produkcji.
PowtarzalnośćRuchome tagi obrazówWymaga przypięcia digestów.

Plan rekonstrukcji

Wymagania

  • Docker Engine lub Docker Desktop oraz Compose v2; host Linux, WSL lub macOS.
  • Architektura amd64 albo uprzednio zweryfikowane obrazy alternatywne.
  • Minimum około 3 GB na obrazy oraz zapas na bazę i logi.
  • Wolny port TCP 8080 i dostęp do registry lub lokalnych obrazów.
  • Generator sekretów, prywatny .env, backup i narzędzie HTTP.

Artefakty docelowe

  1. Compose z obrazami przypiętymi do digestów.
  2. .env.example bez sekretów oraz chroniony .env.
  3. Jawny, wersjonowany seed danych inicjalnych.
  4. Procedura backup/restore bazy i czterech wolumenów aplikacji.
  5. Automatyczny smoke test health, HTTP i liczników danych.

Kolejność uruchomienia

EtapDziałaniePunkt kontrolny
1Zamrozić wersje, digesty, strefę czasu i wariant danych.Specyfikacja zatwierdzona.
2Zweryfikować host, Compose, port, miejsce i architekturę.Brak konfliktów.
3Utworzyć Compose, sieć, wolumeny i nowe sekrety.docker compose config --quiet.
4Pobrać obrazy i sprawdzić digesty.Identyczne artefakty binarne.
5Uruchomić MySQL i czekać na healthcheck.healthy, charset i collation zgodne.
6Uruchomić Leantime i migracje.Leantime 3.9.5, DB 3.5.18.
7Załadować role, Ownera, projekt i zatwierdzony seed.Dokładne liczniki zgodne.
8Wykonać smoke i testy funkcjonalne.Brak defektów krytycznych.
9Zrestartować bez usuwania wolumenów.Dane i pliki zachowane.
10Wykonać backup i kontrolowany restore.Odtworzenie na nowych wolumenach.

Inicjalizacja danych

Wariant zalecany: czysta instancja + seed

Migracje obrazu, nowe konto Owner, jeden projekt, jedno unikalne członkostwo, sześć ról i 59 uprawnień. Onboarding ładowany opcjonalnie. Wariant powtarzalny i łatwy do anonimizacji.

Wariant wierny: klon eksperymentu

Spójny dump transakcyjny i archiwa wolumenów, odtworzone przed aplikacją. Zachowuje 11 elementów pracy i duplikat członkostwa; wymaga świadomej akceptacji anomalii.

Kontrole techniczne

docker compose config --quiet
docker compose up -d
docker compose ps
curl -fsS -o /dev/null http://localhost:8080/auth/login
docker compose exec leantime php bin/leantime about --only=environment
docker compose exec mysql_leantime mysql -u"$LEAN_DB_USER" -p -D leantime \
  -e 'SELECT COUNT(*) users FROM zp_user; SELECT COUNT(*) projects FROM zp_projects;'

Hasła należy przekazywać interaktywnie lub przez mechanizm secrets. Nie powinny znajdować się w historii powłoki ani w raporcie.

Kryteria odbioru

  • Oba kontenery healthy, zero nieplanowanych restartów; opublikowany tylko port 8080.
  • Poprawne logowanie, wersje, role, projekt i uzgodnione dane seed.
  • Spójne działanie dashboardu, zadań, Kanbanu, kalendarza i przypisań.
  • Trwałość po restarcie i poprawny restore na izolowanych wolumenach.
  • Brak nowych production.ERROR w przebiegu odbiorowym.

Projekt funkcjonalny

Cel systemu

System wspiera planowanie, realizację i kontrolę pracy projektowej w jednej przestrzeni współpracy. Pozwala przełożyć cele na kamienie milowe i zadania, przydzielać odpowiedzialność, monitorować terminy i postęp oraz udostępniać wiedzę zespołowi.

Zakres funkcjonalny

  • zarządzanie użytkownikami, rolami, klientami i dostępem projektowym;
  • tworzenie i prowadzenie projektów, celów, kamieni milowych i zadań;
  • Kanban, sprinty, kalendarz, statusy, priorytety, terminy i estymaty;
  • dashboardy, raportowanie i ewidencja czasu pracy;
  • komentarze, pliki, notatki/wiki i powiadomienia;
  • ustawienia organizacji, integracje i rozszerzenia dla uprawnionych osób.

Poza zakresem podstawowym pozostają księgowość, fakturowanie, kadry, repozytorium kodu, komunikator czasu rzeczywistego i automatyzacja wdrożeń.

Aktorzy

AktorOdpowiedzialność
WłaścicielOrganizacja, pełny model dostępu, administratorzy.
AdministratorUżytkownicy, role, ustawienia i dostępność funkcji.
ManagerProjekty, zespół, cele, plan i raportowanie.
EdytorTworzenie i aktualizacja elementów pracy.
KomentującyOdczyt i udział w dyskusji bez edycji planu.
Odbiorca Read OnlyPrzegląd stanu i wyników.
SystemPowiadomienia, kolejki i działania cykliczne.

Główne funkcje

Uwierzytelnienie

Logowanie e-mailem i hasłem, reset hasła, profil, sesja i autoryzacja.

Projekty i zespół

Projekt, opis, typ, daty, klient, członkowie i selektor bieżącego projektu.

Planowanie pracy

Cele, milestones i zadania z opisem, priorytetem, wykonawcą, statusem, terminem i estymatą.

Realizacja i kontrola

Kanban, sprinty, kalendarz, dashboard, timesheety i raporty.

Współpraca

Komentarze, załączniki, wiedza i powiadomienia w kontekście pracy.

Administracja

Role, uprawnienia, ustawienia, integracje, tokeny i wtyczki.

Reguły biznesowe

  • E-mail użytkownika jest unikalny, a sesję może rozpocząć tylko konto aktywne.
  • Operacja wymaga odpowiedniej roli i dostępu do projektu.
  • Zadanie należy do projektu, a jego status musi pochodzić z workflow tego projektu.
  • Zmiana statusu jest spójna w szczegółach, Kanbanie, dashboardzie i raportach.
  • Termin końcowy nie powinien poprzedzać daty rozpoczęcia.
  • Raporty wynikają z aktualnych danych źródłowych, a operacje administracyjne są chronione serwerowo.

Kryteria funkcjonalne

Uprawniony użytkownik może się zalogować, utworzyć projekt i zadanie, przypisać członka, zmienić status, zobaczyć spójny wynik w Kanbanie, dashboardzie i szczegółach, znaleźć termin w kalendarzu oraz utracić prawo edycji po obniżeniu roli.

Role użytkowników

Model uprawnień

Role są hierarchiczne i oparte na zapisanej macierzy uprawnień. Dostęp do operacji zależy jednocześnie od poziomu roli i członkostwa w projekcie. Liczba uprawnień odzwierciedla badaną bazę, lecz nie zastępuje testu poszczególnych operacji.

RolaPoziomLiczba uprawnieńZakres funkcjonalny
Read Only511Odczyt udostępnionych danych.
Commenter1015Odczyt i ograniczona współpraca/komentarze.
Editor2041Edycja projektów i elementów pracy.
Company Manager3048Zarządzanie pracą na poziomie organizacji.
Admin4059Pełna administracja operacyjna.
Owner5059Pełna administracja i właścicielstwo instancji.

Zasady dostępu

  • Stosować najmniejsze niezbędne uprawnienia.
  • Chronić operacje na serwerze; ukrycie elementu UI nie wystarcza.
  • Nie tworzyć więcej niż jednego logicznego członkostwa użytkownik-projekt.
  • Testować zmianę roli w istniejącej i nowej sesji.
  • Chronić ostatnie konto Owner przed odebraniem kontroli nad instancją.
Istotna obserwacja. Admin i Owner mają po 59 wpisów uprawnień, ale Owner może mieć dodatkowe znaczenie w logice właścicielstwa. Nie należy traktować ról jako identycznych bez testu zachowania.

Przypadki użycia

UC-01 Logowanie

Aktor
Aktywny użytkownik.
Warunek
Konto istnieje i jest aktywne.
Przebieg
Użytkownik podaje e-mail i hasło; system weryfikuje dane, tworzy sesję i pokazuje dashboard.
Rezultat
Sesja z właściwymi uprawnieniami; błędne dane nie ujawniają istnienia konta.

UC-02 Utworzenie projektu

Aktor
Owner, Admin lub Manager.
Warunek
Prawo tworzenia projektu.
Przebieg
Wprowadzenie nazwy, opisu, dat i opcjonalnego klienta w Project Hub.
Rezultat
Projekt jest dostępny w selektorze; brak nazwy blokuje zapis.

UC-03 Dodanie użytkownika do projektu

Aktor
Manager, Admin lub Owner.
Warunek
Projekt i użytkownik istnieją.
Przebieg
Wybór użytkownika i roli projektowej, zatwierdzenie członkostwa.
Rezultat
Dostęp zgodny z rolą; ponowienie nie tworzy duplikatu.

UC-04 Utworzenie zadania

Aktor
Editor lub rola wyższa.
Warunek
Dostęp do projektu.
Przebieg
Tytuł, opis, priorytet, status, daty i estymata są zapisywane.
Rezultat
Zadanie pojawia się w projekcie i właściwej kolumnie Kanban.

UC-05 Przypisanie wykonawcy

Aktor
Editor lub wyższy.
Warunek
Kandydat jest członkiem projektu.
Przebieg
Wybór wykonawcy w zadaniu i zapis.
Rezultat
Zadanie trafia do widoków osobistych wykonawcy.

UC-06 Zmiana statusu

Aktor
Uprawniony członek.
Warunek
Status należy do workflow projektu.
Przebieg
Zmiana w formularzu lub przeciągnięcie karty.
Rezultat
Spójny stan w szczegółach, Kanbanie, dashboardzie i raportach.

UC-07 Planowanie celu i kamienia milowego

Aktor
Manager lub Editor.
Przebieg
Cel, mierzący go milestone, termin i powiązane zadania.
Rezultat
Praca operacyjna jest powiązana z rezultatem.

UC-08 Praca na Kanbanie

Aktor
Członek projektu.
Przebieg
Filtrowanie, przegląd kolumn i przenoszenie dozwolonych kart.
Rezultat
Tablica odzwierciedla workflow; role niższe nie zmieniają stanu.

UC-09 Kalendarz

Aktor
Zalogowany użytkownik.
Warunek
Elementy mają daty.
Przebieg
Wybór zakresu i przejście z terminu do obiektu.
Rezultat
Harmonogram jest zgodny z projektem i strefą czasu.

UC-10 Dashboard

Aktor
Zalogowany użytkownik.
Przebieg
Przegląd własnych/projektowych zadań, terminów i postępu.
Rezultat
Aktualne dane ograniczone do dostępnych projektów.

UC-11 Rejestracja czasu

Aktor
Członek zespołu.
Przebieg
Data, czas i opis pracy w kontekście zadania.
Rezultat
Wpis widoczny w timesheetach i raportach.

UC-12 Współpraca

Aktor
Commenter lub wyższy.
Przebieg
Dodanie komentarza i opcjonalnego pliku.
Rezultat
Dyskusja i artefakty pozostają w kontekście zadania.

UC-13 Zarządzanie rolą

Aktor
Admin lub Owner.
Przebieg
Zmiana roli i zapis.
Rezultat
Nowa macierz operacji obowiązuje najpóźniej przy kolejnej sesji.

UC-14 Wylogowanie

Aktor
Zalogowany użytkownik.
Przebieg
Wylogowanie i ponowne otwarcie chronionego URL.
Rezultat
Sesja jest nieważna, wymagane ponowne logowanie.

Scenariusze testowe

Organizacja testów

Testy należy wykonywać na odtworzonej instancji, używając kont Owner, Editor, Commenter i Read Only oraz projektu TEST-Project. Dla każdego przebiegu należy zachować czas, rolę, wynik HTTP/UI, identyfikatory obiektów i wycinek logu.

IDPriorytetPrzebieg skróconyWynik oczekiwany
TC-01KrytycznyPrzekierowanie, poprawny e-mail/hasło.CSRF, sesja i dashboard bez błędu.
TC-02WysokiBłędne hasło i nieistniejący e-mail.Brak sesji i enumeracji kont; brak 500.
TC-03WysokiWylogowanie, chroniony URL, Wstecz.Wymagane ponowne uwierzytelnienie.
TC-04KrytycznyUtworzenie TEST-Project; próba bez nazwy.Jeden projekt; walidacja nazwy.
TC-05KrytycznyDodanie Editora dwa razy.Dostęp i jedno logiczne członkostwo.
TC-06KrytycznyZadanie z opisem, datami i 3 SP.Zgodne pola i karta Kanban.
TC-07WysokiBrak tytułu, błędne daty/estymata.Walidacja bez częściowego rekordu.
TC-08KrytycznyZmiana na In Progress i odświeżenie.Trwały, spójny status.
TC-09KrytycznyDrag-and-drop do Done i powrót.Brak duplikacji, zgodne szczegóły.
TC-10KrytycznyPrzypisanie Editorowi i jego logowanie.Zadanie w osobistym dashboardzie.
TC-11KrytycznyKalendarz osobisty i projektowy.Właściwa data, link i strefa czasu.
TC-12KrytycznyNew → In Progress → Done.Aktualne widgety bez podwójnego liczenia.
TC-13KrytycznyPróby edycji jako Commenter/Read Only.Serwerowa odmowa niedozwolonych działań.
TC-14KrytycznyKomentarz, plik, restart Compose.Pełna trwałość; kontenery healthy.
TC-15WysokiBackup i restore do nowych wolumenów.Kompletny, izolowany restore.
TC-16WysokiKontrola portów i dostępu DB.Tylko 8080 publiczny; SQL wewnętrzny.
TC-17WysokiZimny start i obserwacja healthchecków.Baza gotowa przed aplikacją; brak pętli.
TC-18ŚredniAnaliza logów po pełnym odbiorze.Brak nowych błędów i sekretów w logu.

Macierz odbioru

ObszarScenariuszeWarunek zaliczenia
DostępTC-01–03, TC-13Pozytywne i negatywne ścieżki bez obejścia autoryzacji.
Projekty i pracaTC-04–10Spójność CRUD, przypisań i statusów.
WidokiTC-09, 11, 12Te same dane w szczegółach, Kanbanie, kalendarzu i dashboardzie.
OperacjeTC-14–18Trwałość, restore, izolacja i brak nowych błędów.
Reguła blokująca. Brak logowania, utrata danych, obejście uprawnień lub niespójny status jest defektem krytycznym i blokuje odbiór niezależnie od liczby testów zaliczonych.

Ograniczenia i założenia

Ograniczenia badania

  • Nie wykonywano destrukcyjnego resetu, pełnego testu UI w przeglądarce ani testu obciążeniowego.
  • Integracje z pocztą, LDAP/OIDC i usługami zewnętrznymi nie były skonfigurowane.
  • Zakres modułów może zależeć od licencji lub wtyczek; wolumen wtyczek był pusty.
  • Stan demonstracyjny nie pokrywa raportowania czasu, klientów, sprintów ani współpracy wieloosobowej.

Ograniczenia rozwiązania

  • Jednowęzłowy stack nie zapewnia wysokiej dostępności.
  • HTTP bez TLS jest odpowiedni tylko dla środowiska lokalnego.
  • Jakość raportów zależy od kompletności statusów, dat, estymat i timesheetów.
  • Funkcje powiadomień i integracji zależą od zewnętrznej konfiguracji.

Założenia funkcjonalne

  • Organizacja posiada co najmniej jednego Ownera.
  • Użytkownicy otrzymują dostęp wyłącznie do potrzebnych projektów.
  • Zespół ustala znaczenie statusów i definicję zakończenia pracy.
  • Dane demonstracyjne nie trafiają do produkcji bez jawnej decyzji.
  • Testy odbiorowe używają osobnych kont dla każdej roli.

Ryzyka i zalecenia

RyzykoWpływZalecenie
Ruchome tagi latest i 8.4Niepowtarzalny runtimePrzypiąć oba digesty.
Sekrety w .envUjawnienie dostępuNowe sekrety, chmod 0600, secrets manager.
Aktywna telemetriaNieplanowany ruch/danePodjąć i udokumentować decyzję.
Strefa America/Los_AngelesRozbieżności terminów i logówUzgodnić przed seedem i testami.
Duplikat członkostwaNiespójność danychSeed przez API/CLI, unikalność logiczna.
Ostrzeżenia deprecacyjneRyzyko przyszłej aktualizacjiSkatalogować i monitorować przy upgrade.
Duplikaty nagłówków bezpieczeństwaNiejednoznaczna polityka klientaUjednolicić przed publikacją produkcyjną.

Case Study

Kontekst eksperymentu

Eksperyment miał wykazać, czy system bez wcześniejszej dokumentacji może zostać opisany na tyle precyzyjnie, aby niezależny Agent AI odtworzył go bez dostępu do aktywnych kontenerów, wolumenów i prywatnych sekretów.

Przebieg

1Start DevOpsDocker Compose 2Discovery AIruntime i artefakty 3Reverse engineeringmodel i zależności 4PF i testykontrakt odbioru 5Rekonstrukcjaniezależny Agent AI
Rysunek 3. Łańcuch eksperymentu od uruchomienia do niezależnej rekonstrukcji.

1. DevOps uruchomił środowisko

Przygotowano .env i Compose, uruchomiono MySQL z trwałym wolumenem i healthcheckiem, a następnie Leantime z czterema wolumenami oraz portem 8080. Wynikiem był sprawny, ale nieudokumentowany stack.

2. Agent AI przeprowadził discovery

Agent zinwentaryzował deklarację i runtime, obrazy, digesty, procesy, sieć, porty, wolumeny, logi, bazę, CLI oraz zachowanie HTTP. Porównanie różnych dowodów ujawniło telemetrię, strefę czasu, stare wolumeny, duplikat członkostwa i niedokładność statystyk InnoDB.

3. Agent AI wykonał inżynierię odwrotną

Konfiguracja i runtime dały architekturę, schema i dane dały model informacji, a moduły obrazu i działające UI dały funkcje biznesowe. Oddzielono produkt, konfigurację wdrożenia oraz dane demonstracyjne.

4. Powstał Projekt Funkcjonalny i testy

PF definiuje oczekiwane zachowanie bez narzucania implementacji. Przypadki użycia i 18 testów tworzą sprawdzalny kontrakt obejmujący funkcje, autoryzację, spójność widoków, trwałość i operacje.

5. Dokumentacja zasila niezależną rekonstrukcję

Drugi Agent AI powinien przygotować Compose, wygenerować sekrety, uruchomić bazę i aplikację w poprawnej kolejności, wykonać migracje i seed, a następnie przeprowadzić cały odbiór. Nie może korzystać z aktywnych wolumenów ani zgadywać obecnych haseł.

Mierniki sukcesu

  • Brak zależności od wolumenów źródłowych i prywatnego .env.
  • Zgodność architektury, wersji, granic sieci i modelu danych.
  • Spełnienie PF oraz wszystkich krytycznych scenariuszy.
  • Trwałość po restarcie i odtwarzalny backup/restore.
  • Jawne rozróżnienie produktu, konfiguracji, seedu i anomalii.

Wnioski

Ocena środowiska

Badany stack jest niewielki, logicznie spójny i poprawnie izoluje bazę od hosta. Healthchecki i nazwane wolumeny zapewniają właściwą kolejność startu oraz podstawową trwałość. Aplikacja 3.9.5 działa w zweryfikowanej ścieżce logowania i dashboardu.

Warunki wiarygodnej rekonstrukcji

Wiarygodna rekonstrukcja wymaga zamrożenia artefaktów binarnych, nowych sekretów, kontrolowanego sposobu inicjalizacji, zgodnego modelu ról, dokładnych liczników oraz testów przekrojowych. Zalecanym wariantem jest czysta instancja z jawnym seedem, ponieważ usuwa historyczne anomalie i pozwala rozróżnić dane systemowe od demonstracyjnych.

Priorytety przed użyciem produkcyjnym

  1. Przypiąć digesty i ustanowić procedurę aktualizacji z backupem.
  2. Przenieść sekrety do chronionego mechanizmu i włączyć TLS.
  3. Uzgodnić strefę czasu, locale i politykę telemetrii.
  4. Usunąć duplikat członkostwa i ujednolicić nagłówki bezpieczeństwa.
  5. Przeprowadzić testy ról, trwałości i restore oraz monitorować deprecacje.
Konkluzja. Dokument stanowi wystarczający kontrakt architektoniczny, funkcjonalny i odbiorowy do podjęcia niezależnej rekonstrukcji. Cel zostanie osiągnięty dopiero po przejściu testów, nie wyłącznie po uruchomieniu kontenerów.

Metryka dokumentu

Analizowany system
Leantime 3.9.5, schemat DB 3.5.18
Data wygenerowania
20 czerwca 2026
Autor dokumentacji
Gemini CLI
Model AI
OpenAI GPT-5 Codex
Środowisko uruchomieniowe
Docker Compose; kontenery Leantime i MySQL 8.4.10; lokalny host/WSL
Źródła discovery
docker-compose.yml, prywatny .env (bez publikacji sekretów), efektywna konfiguracja Compose, inspekcja kontenerów i obrazów, sieć i wolumeny Docker, logi, CLI Leantime, schemat i dane MySQL, procesy runtime, porty i odpowiedzi HTTP aplikacji
Zakres dokumentu
Discovery, analiza, architektura, research, PF, role, przypadki użycia, testy, plan rekonstrukcji i case study
Klasyfikacja
Raport końcowy, wersja 1.0

Koniec dokumentu. Raport nie zawiera haseł, kluczy sesyjnych ani innych wartości tajnych odczytanych ze środowiska.