Jakość i kontrole#
Ta strona opisuje, jak sprawdzamy Fyndi przed wypuszczeniem zmiany: jakie bramki muszą być zielone, czego pilnuje bramka dokumentacji i co da się sprawdzić tylko na prawdziwym urządzeniu.
Bramki i kontrole#
Zasada jest jedna: każda kontrola, której nie da się zaczerwienić, nie pilnuje niczego. Dlatego każda bramka ma własny test samej siebie (mutuje drzewo tak, by kontrola musiała zgłosić problem) i tylko wtedy liczy się jako bramka.
| Kiedy | Co się uruchamia |
|---|---|
| Przed wypchnięciem zmian (hook w repozytorium) | Szybki przebieg kontroli — składnia modułów, parytet tabel, układy ekranów, motywy, gesty mapy, katalog odznak i zgodność strony z serwerem; przy wykrytym błędzie wypchnięcie jest wstrzymane |
| Raz w tygodniu (poniedziałek rano) | Pełny audyt postaci: kolizje w ruchu i odstępy między elementami; wynik trafia do właściciela |
| Przy wdrożeniu strony | Porównanie sum kontrolnych plików repozytorium z produkcją, prawa plików i próba działania przez HTTPS |
| Przy zmianie wyglądu panelu | Przeliczenie polityki bezpieczeństwa i sprawdzenie, że skrypty strony naprawdę się wykonują (nie tylko że plik jest nowy) |
| Przed wydaniem APK | Własne bramki wydania: podpis nie może być kluczem testowym, w aplikacji muszą być wbudowane wymagane klucze usług, a wydanie jest sprawdzane przez HTTPS |
Podstawowe narzędzia (wszystkie działają na tym samym kodzie, który idzie na produkcję, a nie na makietach):
| Narzędzie | Co sprawdza |
|---|---|
| kontrola parytetu tabel postaci | Identyczne bryły, strefy, kolory i palety w wersji przeglądarkowej i w aplikacji |
| audyt animacji | Przepuszcza postać przez wszystkie klipy i mierzy realne przecięcia brył w kilkunastu zestawach garderoby |
| detektor odstępów | Że żaden dodatek nie wisi w powietrzu — każda bryła musi dotykać ciała albo elementu, do którego jest przypięta |
| pasek klatek i zrzut atlasu | Ruch i malunek do oceny wzrokiem, tam gdzie liczby nie wystarczą |
| strażnik kompilacji Androida | 12 klas błędów, które inaczej kosztowałyby rundę budowania: brakujące importy, konflikty nazw, błędy w shaderach, zapomniane elementy układu i gestów |
| parytet znaczników i botów | Te same rozmiary, progi zbliżenia i kolory po stronie aplikacji i strony |
| pomiar wydajności mapy | Koszt klatki i liczbę wywołań rysowania przy dokładaniu kolejnych warstw: pionek → znajdźki → trasa → gracze → lobby → boty |
Rozdział odpowiedzialności jest sztywny: jedna reguła ma jedno miejsce w kodzie. Jeśli ta sama reguła istnieje w dwóch plikach, to nie jest zabezpieczenie, a zaproszenie do rozjazdu — dlatego strażnicy delegują szczegółowe reguły do jednej bramki i pilnują tylko tego, że ta bramka nadal istnieje i nadal umie czerwienić.
Jak uruchomić kontrole#
| Polecenie | Co robi |
|---|---|
bash tools/lab/run-checks.sh --quick | Skrócony przebieg wszystkich kontroli — kilka sekund zamiast minut; to samo uruchamia hook przed wypchnięciem |
bash tools/lab/run-checks.sh | Pełny przebieg, z audytem animacji i pomiarami |
python3 tools/ci/check-user-docs.py | Bramka dokumentacji (struktura, odsyłacze, parytet języków) |
python3 tools/ci/check-user-docs.py --self-test | Dowód, że bramka dokumentacji umie czerwienić — kilkanaście mutacji, każda musi zostać złapana |
node tools/docs/build-user-docs.mjs --out <katalog> | Budowa strony dokumentacji ze plików markdown |
Skrócony przebieg jest tym, co realnie uruchamia się przy każdej zmianie; pełny — z audytem animacji i pomiarami — chodzi według harmonogramu, bo trwa minuty, a nie sekundy. Kontrola, która nie ma --self-test, jest traktowana jako niesprawdzona.
Co pilnuje bramka dokumentacji#
Bramka tools/ci/check-user-docs.py ma 10 reguł i własny zestaw kilkunastu mutacji w self-teście. Nie ocenia stylu — pilnuje tego, co da się sprawdzić maszynowo:
- Każda funkcja ze spisu funkcji ma stronę w obu językach, a jej kotwica naprawdę istnieje w tekście.
- Każdy obraz wskazany w treści i w spisie funkcji leży na dysku.
- Każdy odsyłacz wewnętrzny trafia w istniejącą stronę i istniejącą kotwicę.
- Nie ma stron-sierot: każdy plik jest wymieniony w spisie stron (źródle menu bocznego).
- Każda pozycja z katalogu ekranu Ustawień aplikacji ma swoje odzwierciedlenie w spisie funkcji.
- Polska i angielska wersja mają identyczny zestaw stron i komplet etykiet.
- Skan treści pod kątem sekretów, adresów wewnętrznych i danych, których nie wolno publikować — trafienie blokuje publikację.
- Każda strona ma stopkę wersji, nie zawiera znaczników „do uzupełnienia” ani nieznanych tokenów.
- W trybie wydania: wersja aplikacji w spisie funkcji jest zgodna z wersją w konfiguracji Androida.
- Arkusz stylów nie zawiera pułapki komentarza, która po cichu wycina reguły.
Reguła 5 jest tą, która wymusza aktualność treści, a nie tylko jej spójność: nowa opcja na ekranie Ustawień bez zdania w dokumentacji czerwieni kontrole. Bez niej „dokumentacja jest aktualna” znowu byłoby obietnicą.
Czego bramka nie sprawdzi: czy zdanie jest prawdziwe. To zostaje człowiekowi i osobie weryfikującej zmianę.
Weryfikacja na urządzeniu#
Nie każda rzecz wynika z liczb. To, co zależy od prawdziwego telefonu, sprawdzamy na emulatorze uruchomionym na serwerze, w kolejności od instalacji do kadru:
- uruchomienie emulatora i instalacja tego samego pliku APK, który jest wydany,
- założenie konta testowego przez API i jego sprzątnięcie po testach (na produkcji nie zostają konta testowe),
- ustawienie pozycji w mieście z konkretnej trasy, żeby punkt był w zasięgu,
- ustawienie motywu i pory dnia w preferencjach aplikacji, bez klikania po ekranie,
- wykonanie jednej akcji i wtedy zrobienie jednego kadru — nie „kilku z rzędu”,
- wygaszenie emulatora na koniec, żeby nie zjadał pamięci serwera produkcyjnego.
Czego emulator nie pokaże: widoku AR. Sesja AR wymaga usług rozszerzonej rzeczywistości zainstalowanych na urządzeniu, a tych na emulatorze nie ma — dlatego kadry z widoku AR pochodzą z prawdziwego telefonu. To nie luka w kontroli, a jawna granica: widok AR opisujemy tak, żeby dało się go sprawdzić bez zrzutu ekranu.
Przykładowe wyniki pełnej kontroli (stan z konkretnych dni — liczby zmieniają się z każdym wydaniem): logika mapy i znaczników w aplikacji 95/95 sprawdzeń, znaczniki na stronie 224/224, reguła „znajdźka nie jest stopem trasy” 86/86 tras, dodanie znajdźki jako stopu odrzucane przez API, audyt odstępów postaci: 83 bryły w 60 zestawach, żaden element nie wisi w powietrzu.
Opis zgodny z aplikacją 0.120.1 (zaktualizowano 2026-09-26).