Wersja pierwsza wydana. Poniżej to, co doszło między budową a wydaniem — wszystko z rund
adwersaryjnych na zamrożonym kodzie i z czytania kodu własnymi oczami po każdej z nich.
Pierwsza wersja. Powstała po pomiarze, nie przed nim.
-
Odkrywanie linków z surowego HTML, nie z oczyszczonego Markdownu. Markdown to treść PO
usunięciu nawigacji — czyli po usunięciu miejsca, w którym dokumentacja trzyma odnośniki do
dokumentacji. Bez tego crawlDepth nie działał i klient dostawał jedną stronę bez wyjaśnienia.
-
Brama adresów: prywatne, pętlowe i link-lokalne odrzucane PO ROZWIĄZANIU NAZWY, bo nazwa
może wskazywać na 127.0.0.1. Bez niej aktor byłby narzędziem do czytania metadanych chmury.
-
robots.txt i Crawl-delay respektowane, z sufitem 10 s, żeby witryna prosząca o pięć minut
nie zawiesiła przebiegu.
-
Adres końcowy po przekierowaniach w rekordzie (finalUrl) i jako baza dla linków; po nim też
deduplikacja, żeby http:// i https:// tej samej strony nie były naliczone dwa razy.
-
Świeży kontekst przeglądarki na każdą stronę — ciasteczka i zgody nie przechodzą między nimi.
-
Rozpoznawanie stron-komunikatów: rozbudowane „Access denied" nie uchodzi za treść, podnosi
stopień, a jeśli mimo to zostanie — rekord niesie contentWarning.
-
Walidacja wejścia: crawlDepth: "abc" kończy się zdaniem, nie śladem stosu.
-
Dynamiczna pamięć: 512 MB, gdy przeglądarka jest wyłączona, 2048 MB gdy dozwolona. Rezerwacja
2 GB na każdy przebieg przeczyłaby powodowi, dla którego ten aktor istnieje.
-
Wznawianie po migracji platformy. Przeniesienie kontenera w trakcie przebiegu oznaczało
start od zera i PONOWNE naliczenie stron, za które klient już zapłacił — ta sama wada, którą
naprawialiśmy w bluesky i trends. Stan delivered w domyślnym magazynie, zapis co 25 stron
i na wyjściu (zdarzenie platformy przychodzi co minutę, a krótki przebieg kończy się wcześniej),
reboot tylko po udanym zapisie, brama dostaw zamykana przed rebootem. Przebieg, w którym
wszystko było już dostarczone, kończy się sukcesem z wyjaśnieniem, nie porażką.
-
Schemat wyjścia — dwa widoki, w tym „tylko Markdown" dla potoków osadzania.
-
Trzy stopnie pobierania: zwykłe HTTP → odcisk TLS przeglądarki → Chromium. Przeglądarka startuje
leniwie, przy pierwszej stronie, która jej naprawdę wymaga; przebieg po samej dokumentacji nie
uruchamia jej ani razu.
-
Eskalacja decydowana po TREŚCI, nie po kodzie odpowiedzi HTTP. Strona potrafi zwrócić 403
razem z pełną treścią i 200 z pustą skorupą.
-
Zwracany jest NAJLEPSZY wynik ze wszystkich prób, nie ostatni — zmierzone przypadki, w których
przeglądarka oddaje mniej niż zwykłe pobranie.
-
Każdy rekord niesie fetchedWith i tiersTried, więc klient widzi, co go kosztowała ta strona.
-
Rozliczenie za dostarczoną stronę; pusty przebieg kończy się porażką z powodem, nie zielonym zerem.