
Nie tylko zielone testy: ryzyko, deliberate-break check i najtańsza skuteczna bramka.
MODUŁ 3 // JAKOŚĆ
Jakość w 10x Workflow: pięć lekcji o tym, jak chronić najgroźniejsze scenariusze testem, którego asercja realnie pada - plan testów, wyrocznia i mutacja, warstwy hooków, przelot E2E i debugowanie z dowodów. Zielony test, który nie pada po zepsuciu, niczego nie pilnuje.
MAPA RYZYK POD TARCZĄ // KLIKNIJ OBSZAR, BY DOLECIEĆ DO SEKCJI
Skrót modułu · pięć lekcji w 30 sekund
Co zabija projekt najpierw? Najgroźniejsze scenariusze chronione najpierw.
LEKCJA 02Skąd test wie, co jest poprawne? Asercja, która realnie pada na zepsutym kodzie.
LEKCJA 03Co łapie błąd, zanim go zobaczysz? Dryf wykryty sekundy po powstaniu.
LEKCJA 04Czy całość naprawdę leci? Przelot tam, gdzie unit by skłamał.
LEKCJA 05Co mówią wszystkie przyrządy naraz? Diagnoza z dowodów, nie z przeczucia.
Zaczynaj od ryzyk, nie od plików - i pisz testy, których asercja naprawdę pada na zepsutym kodzie.
„Pustynia zabija w znanej kolejności: najpierw pragnienie, potem burza, na końcu czerw. Kto wychodzi z siczy bez tej mapy, nie wraca."
- nauka Fremenów, przed wyjściem z siczyFremeni nie wychodzą z siczy z listą rzeczy do zrobienia - wychodzą z mapą tego, co zabija. Pustynia jest przewidywalna w swojej wrogości: każde zagrożenie ma znaną wagę i znaną częstość. Plan testów przenosi ten rygor na projekt: zamiast pokrywać pliki po kolei, mapuje ryzyka na osi wpływ × prawdopodobieństwo, a każde ryzyko opisuje jako awarię u usera - „koszyk gubi pozycje przy odświeżeniu", nie „brak testów w cart.ts".
Plan testów zaczyna od mapy tego, co zabija projekt, a nie od listy plików: mapuje ryzyka na osi wpływ × prawdopodobieństwo, a każde ryzyko opisuje jako awarię u usera - „koszyk gubi pozycje przy odświeżeniu", nie „brak testów w cart.ts".
Wejście: działający produkt i PRD. Wyjście: context/foundation/test-plan.md - mapa ryzyk pocięta na etapy rolloutu, od najgroźniejszych scenariuszy w dół. Mechanizm: /10x-test-plan orkiestruje dowiezienie testów, nie pisze ich sam - każdy etap prowadzi przez łańcuch (research → plan → implement), a ponowne uruchomienie wznawia od następnego etapu zamiast zaczynać od zera.
zanim powstanie pierwszy test - kolejność pisania testów wyznacza mapa ryzyk, nie struktura katalogów.
Orkiestrator, nie autor testów: pisze context/foundation/test-plan.md jako etapową strategię rolloutu i prowadzi każdy etap przez łańcuch: nowa zmiana → research → plan → implement. Ponowne uruchomienie odczytuje stan z dysku i wznawia od pierwszego niedomkniętego etapu.
Wejście: PRD, roadmapa, archiwum zmian, skan hot-spotów z historii gita (ostatnie 30 dni) i wywiad z użytkownikiem - pięć pytań o realne obawy, wcześniejsze wpadki i miejsca zmieniane bez pewności. Wyjście: mapa ryzyk wpływ × prawdopodobieństwo pocięta na etapy rolloutu ze statusami.
Każde ryzyko cytuje dowód: linię PRD, odpowiedź z wywiadu, katalog o wysokim churnie. Nigdy plik:linia - kotwice w kodzie znajduje dopiero research w ramach konkretnego etapu, na aktualnym kodzie. Ryzyko to scenariusz awarii u usera, nie lokalizacja w repo.
Dla każdego ryzyka plan niesie wskazówki odpowiedzi:
Jeśli produkt ma logowanie, płatności albo przyjmuje dane od użytkownika, mapa musi zawierać co najmniej jeden scenariusz nadużycia: kontrola własności zasobu, walidacja po stronie serwera, wyciek sekretów lub danych, nadużycie zasobów. Happy path nie zawiera atakującego, więc te ryzyka nie wypłyną same z wywiadu.
Nie pisze kodu testów, nie konfiguruje hooków ani CI - to robota etapów rolloutu. Nie wymyśla ryzyk: każde musi się wywodzić z PRD, roadmapy, archiwum, hot-spotów albo wywiadu. Jeden test do jednego pliku to teren /10x-tdd, nie rollout.
„Nie pytaj teorii, czy ma rację. Zepsuj układ i patrz, czy przyrząd krzyknie - pomiar rozstrzyga, nie wiara."
- protokół eksperymentu, dziennik zespołu badawczegoW „Problemie trzech ciał" spory rozstrzyga eksperyment: teoria, której nie da się zmierzyć, jest tylko opinią. Test ma tę samą naturę - to, co poprawne, musi znać z wyroczni zbudowanej z wymagań i researchu, nie z kodu, który sprawdza. Test odczytujący oczekiwaną wartość z implementacji tylko ją powiela - przyklepie każdy bug, który już tam mieszka. Stąd antywzorce do wytępienia: asercje spisane z kodu, snapshoty bez zrozumienia, mocki testujące mocki.
To, co poprawne, test musi znać z wyroczni zbudowanej z wymagań i researchu, nie z kodu, który sprawdza. Asercja spisana z implementacji tylko ją powiela - przyklepie każdy bug, który już tam mieszka; stąd antywzorce do wytępienia: asercje spisane z kodu, snapshoty bez zrozumienia, mocki testujące mocki.
Wejście: jedno ryzyko z test-plan.md. Wyjście: test, którego asercja realnie pada na zepsutym kodzie. Mechanizm: mutation check - zepsuj chronione zachowanie celowo i potwierdź czerwień; jeśli przyrząd nie krzyczy po sabotażu, niczego nie mierzy. /10x-tdd wymusza tę kolejność od początku: czerwony test przed kodem, zieleń jako dowód, refactor na osłoniętym gruncie.
przy każdym teście pisanym przez agenta - wyrocznia pochodzi z wymagań, a dowodem jakości testu jest jego czerwień na zepsutym kodzie.
Test-first brat /10x-implement: prowadzi etapy zatwierdzonego planu przez pętlę czerwony → zielony → refactor. Padający test powstaje przed kodem produkcyjnym - wyrocznia fizycznie nie może zostać spisana z implementacji, bo tej jeszcze nie ma.
Przed każdym etapem dwa pytania: czy implementacja jeszcze nie istnieje i czy etap da się poprowadzić padającym testem. Istniejący kod - stop i przekierowanie do /10x-implement, bo testy dopisane po fakcie to nie TDD. Scaffolding, config, infra, szlif wizualny - też przekierowanie: tam padający test niczego nie prowadzi.
Jeden test na jedno zachowanie, nazwany od wyniku („zwraca 429 po przekroczeniu limitu"), asercje o wynikach, nie o wnętrznościach. Test musi spaść z właściwego powodu: brakującego zachowania, nie błędu składni w samym teście. Pomijanie testu przez it.skip, żeby „przeszło", jest zakazane - czerwień to sedno.
Najmniejszy kod produkcyjny, który gasi czerwień - bez budowania na zapas, przyszłe zachowania dostaną własny krok RED. Potem porządki przy zielonym teście: nazwy, duplikacja, typy - bez zmiany zachowania. Budżet: 2-5 testów na etap, te, które łapią realne regresje; nie test na getter.
Testowanie detali implementacji (prywatny stan, kolejność wywołań), over-mocking (gdy wszystko jest mockiem, testujesz mocki), snapshoty dla logiki biznesowej, prawie-duplikaty pod różnymi nazwami. I żelazna zasada: commit tylko na zielono - nigdy przy czerwonym albo pominiętym teście.
„Najpierw pracuje tania osłona zewnętrzna, potem deflektory, na końcu pancerz. Ogień, który dochodzi do kadłuba, to porażka wszystkich warstw."
- oficer sekcji tarcz, odprawa przed bitwąKrążownik nie przyjmuje ognia na pancerz kadłuba - od tego są tarcze deflektorowe, warstwa za warstwą, od najtańszej na zewnątrz po najdroższą przy poszyciu. Obrona jakości działa tak samo i jest uporządkowana według kosztu: per-edit (lint i typecheck sekundy po zapisie) → pre-commit → pre-push. Im dalej błąd doleci, tym droższe jest jego zestrzelenie.
Obrona jakości jest uporządkowana według kosztu: per-edit (lint i typecheck sekundy po zapisie) → pre-commit → pre-push. Im później błąd zostanie wykryty, tym droższa jest jego naprawa.
Wejście: reguły jakości projektu - lint, typecheck, szybkie testy. Wyjście: hooki zapięte na zdarzenia - per-edit, pre-commit i pre-push, każdy z własnym budżetem czasu. Mechanizm: self-checking pipeline - dryf jest wykrywany sekundy po powstaniu, w tle, bez udziału człowieka; do końca etapu dolatuje już tylko to, czego żadna warstwa nie mogła złapać wcześniej.
przy pracy z agentem, który generuje kod szybciej, niż czytasz - błąd ma zgasnąć na najtańszej warstwie, zanim dotknie historii gita.
„Makieta w doku nie powie ci, czy statek leci. Wyprowadź go, odpal silniki i czytaj przyrządy w locie."
- mechanik pokładowy, przed lotem testowymRocinante nie dowiodła, że lata, na schematach w doku - dowiodła tego lotem testowym: silniki, nawigacja, kadłub i załoga naraz, w próżni. Test E2E to ten sam manewr: przelot przez wszystkie moduły naraz - UI, API, dane - dokładnie tam, gdzie mock by skłamał. Obowiązuje zasada najtańszego testu dającego sygnał: jeśli unit wystarcza, E2E jest przepychem; jeśli unit kłamie, E2E jest jedynym uczciwym pomiarem. Celem jest sygnał, nie coverage.
Test E2E to przejście przez wszystkie moduły naraz - UI, API, dane - dokładnie tam, gdzie mock by skłamał. Obowiązuje zasada najtańszego testu dającego sygnał: jeśli unit wystarcza, E2E jest przepychem; celem jest sygnał, nie coverage.
Wejście: działająca aplikacja i ryzyko z planu, którego nie pokryje nic tańszego. Wyjście: testy Playwright + seed test przygotowujący dane pod przelot. Mechanizm: /10x-e2e prowadzi ryzyko przez plan → generate → review → verify na uruchomionej aplikacji, multimodalnie - agent czyta DOM i patrzy na zrzuty ekranu jednocześnie, więc widzi też to, czego selektor nie złapie.
dla ścieżek krytycznych - logowanie, płatność, zapis danych - E2E tylko tam, gdzie mock by skłamał, nie do gonienia coverage.
Prowadzi etapy planu wymagające przeglądarki jedno ryzyko na raz przez pętlę plan → generate → review → verify. Agent wygeneruje przechodzący test E2E w sekundy; trudne jest to, żeby test chronił realne ryzyko i przeżył jutrzejszy refactor - i właśnie tę pracę wykonuje ta pętla.
Trzy warunki naraz: ryzyko naprawdę wymaga przeglądarki (przecina auth, routing, API i dane albo istnieje tylko w wyrenderowanym UI), feature jest już zbudowany i uruchamialny, a test dla tego ryzyka jeszcze nie istnieje. Wszystko inne - przekierowanie do /10x-tdd albo /10x-implement: E2E to najdroższa i najbardziej krucha warstwa.
Testów E2E nie generuje się od zera. Jakości pilnują dwie dźwignie: seed.spec.ts - wzorcowy test, na którym modelowany jest każdy następny (co pokażesz, to dostaniesz), oraz plik reguł E2E czytany przed generowaniem. Prompt niesie tylko to, czego dźwignie nie zakodują: konkretne ryzyko, flow i granice real vs mock.
Agent widzi drzewo dostępności (role, nazwy, stany), nie piksele - stąd naturalnie lokatory getByRole, nie selektory CSS. Granice wewnętrzne (auth, routing, baza) zostają prawdziwe, bo tam mieszka ryzyko integracji; mockuje się wyłącznie drogie lub niedeterministyczne zewnętrzne API, na warstwie sieci.
Wygenerowanego testu nie przyjmuje się na słowo. Przegląd łapie pięć antywzorców: halucynowana asercja, kruchy selektor, współdzielony stan, czekanie na czas zamiast na stan, brak sprzątania. Poprawka to re-prompt po nazwie antywzorca: co jest źle, czemu nie chroni ryzyka, jaki wzorzec ma to zastąpić - nigdy ogólne „napraw ten test".
Zielony wynik to za mało. Pytanie kontrolne: czy test spadnie, gdy ryzyko z planu naprawdę się zmaterializuje? Dowodem jest deliberate break: celowe zepsucie chronionego zachowania i potwierdzona czerwień, potem natychmiastowy powrót do stanu sprzed zepsucia. Budżet: jeden test na ryzyko, rzadko więcej niż 1-3 na etap.
„Każdy z nas niesie inną opowieść i żadna z osobna niczego nie wyjaśnia. Prawda leży tam, gdzie opowieści się przecinają."
- zasada pielgrzymów, w drodze do Grobowców CzasuPielgrzymi w drodze do Grobowców Czasu docierają do prawdy tylko dlatego, że każdy opowiada własną historię - żadna z osobna niczego nie wyjaśnia, wszystkie naraz wskazują to samo miejsce. Debugowanie z agentem działa identycznie: synteza dowodów z wielu źródeł - Sentry z produkcji, wrangler logs z backendu, konsola i network z Playwrighta - zamiast mistrzostwa w jednym narzędziu.
Debugowanie z agentem to synteza dowodów z wielu źródeł naraz - Sentry z produkcji, wrangler logs z backendu, konsola i network z Playwrighta - zamiast mistrzostwa w jednym narzędziu. Żadne źródło z osobna niczego nie wyjaśnia; wszystkie naraz wskazują to samo miejsce.
Wejście: objaw - błąd u usera, czerwony test, alert. Wyjście: diagnoza poparta dowodami i naprawa przypięta testem, żeby regresja nie wróciła. Mechanizm: zbierz odczyty wszystkich przyrządów naraz i szukaj przecięcia opowieści; po drodze wytęp połykanie błędów - try/catch zwracający 200 to zamiatanie dowodów (OWASP A10:2025), przez które następna diagnoza zaczyna od zera.
gdy objaw i przyczyna mieszkają w różnych warstwach - diagnozę stawia przecięcie źródeł, nie pierwsze podejrzenie.
Jakość domyka blok 10xBuilder. Fundament stawia rampę, łańcuch lata jednostkami pracy, skalowanie podnosi rygor i autonomię, a jakość pilnuje, żeby to, co lata, nie spadało.
Jakość domyka blok 10xBuilder. Fundament przygotowuje projekt, łańcuch dowozi jednostki pracy, skalowanie podnosi przepustowość i autonomię, a jakość pilnuje, żeby poziom nie spadał, gdy tempo rośnie.
Dalej gra toczy się w cudzym kodzie: 10xArchitect otwiera moduł o legacy - zastane systemy, brak testów, archeologia decyzji. Wszystko, czego ten moduł nauczył cię na własnym kodzie, wraca tam ze zdwojoną stawką.
Blok 10xBuilder masz za sobą: fundament, łańcuch i testy, które realnie łapią błędy. Moduł 4 przenosi to wszystko do cudzego kodu - zacznij od lekcji o mapie projektu.
BRAK WYNIKÓW // ZMIEŃ FRAZĘ