- superporn: feed /videos/latest/N zamiast rotujacej strony glownej
- pornbusy: karty ze strony glownej przed spoznion sitemapa
- dooplay/streamporn: nowy motyw (card__th, h1 vid__t, data-servers JSON,
st--duration, time datetime, chipy gatunkow), odstep i ponowienia w _fetch
- porndoe: listing z sitemap_videos.xml; None gdy zadna strona sceny nie parsuje
- hentaimama: /episodes/feed/ poza regexem odcinkow
- watchdog: progi per zrodlo dla serwisow publikujacych rzadko
- backend: tabela survey_responses (0055), GET /survey/current z bramka po obejrzanych
scenach, POST /survey/{id} (upsert per urzadzenie), GET /survey/{id}/summary
- apka: SurveyModal po tutorialu i po "What's new" (popupBus), raz na urzadzenie,
pomijalna, flaga w SecureStore; wpis w changelogu
Tablety: obrot odblokowany przy starcie aplikacji, odtwarzacz go nie rusza.
Wczesniej aplikacja byla pionowym paskiem, a odblokowanie w odtwarzaczu
zmienialo najmniejszy wymiar okna, aktywnosc byla tworzona od nowa i
ExoPlayer zwalniany po 2 s. Manifest dostaje smallestScreenSize (nastepne APK).
porndoe: po bledzie w ExoPlayerze gramy w stronie zamiast wyciagac adres.
canPlayType dla HLS zwraca pusto, bo WebView mowi "maybe", a nie gra (strona
bierze wtedy wlasne hls.js). Sukces liczy sie od filmu dluzszego niz minuta,
nie od reklamy. Zapamietujemy tryb na 7 dni dopiero po udanym odtworzeniu.
Telemetria via=page, blad page_no_play po 25 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PIN: kazdy etap (obecny, nowy, potwierdzenie) to ten sam PinEntry w tym samym
miejscu, wiec React zostawial wpisane cyfry. Potwierdzenie startowalo z wpisanym
juz PIN-em, a przy zmianie PIN-u nowe cyfry doklejaly sie do starych i zapisywal
sie sklejony PIN (zgloszenie a8d85930 "I forgot my pin"). key={stage}. Emulator:
na paczce z produkcji 1234 dwa razy = "PINs do not match", z poprawka zapisane.
Forgot PIN? przy zmianie i wylaczaniu PIN-u: odcisk albo blokada ekranu
telefonu (expo-local-authentication z device fallback); bez blokady komunikat.
Sprawdzone na emulatorze w obu wariantach.
Cast: Huawei z EMUI i uslugami Google (YAL-L21, Android 10) mial przy kazdym
otwarciu filmu krach "background can not be translucent" w MediaRouteButton
(GOON-82, 7 zdarzen). Przycisk Cast wylaczony na Huawei.
Edge: bez wibracji przy przewinieciu (zgloszenie 12db400a).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zgloszenie 6799253d: filmy Tushy Raw bez okladek, linki dzialaja. Okladki
sieci pandanetwork (i*.wp.com/pandanetwork.club/.../<numer>h.jpg) to kopie
okladek Adult Empire pod tym samym numerem produktu; zrodlo oddaje 404,
a pamiec wp.com wygasa (40 z 40 losowych martwych). Normalizacja nowych
filmow podmienia adres na imgs1cdn.adultempire.com/products/<NN>/<numer>h.jpg.
Jednorazowo na produkcji przepisane 51 900 okladek (kopia starych adresow
w movies_poster_backup_20261012), probka 80 z 80 zywych z VPS. Zgodnosc
numeru z filmem sprawdzona po tytulach i wzrokowo na okladkach.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zgloszenie 436121fb: "Takase Rina" (japonska kolejnosc) nie znajdowalo
"Rina Takase" (15 scen) i wygladalo, jakby jej nie bylo. Wyszukiwanie
patrzy teraz na podciag nazwy albo aliasu, dla dwoch slow tez w odwrotnej
kolejnosci; trafienia w nazwie ida przed trafieniami tylko w aliasie.
Obie kolumny maja indeksy trigramowe, 0,2 do 1,1 s w sandboksie.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Przytrzymanie strony otwiera menu Pin/Unpin, Hide this site. Ukryte znikaja
z listy, nad nia "N hidden sites, tap to manage" prowadzi do Hidden content,
gdzie nowa sekcja Hidden sites ma Unhide. Emulator: ukrycie sxyprn, sekcja
z wpisem, odkrycie i powrot na liste, wpis w hidden_sites i jego usuniecie.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zgloszenie 3910b19b: brak przycisku ukrywania stron. Tabela hidden_sites
(0054), POST/DELETE /blacklist/sites/{origin}, pole sites w GET /blacklist.
Scena znika z list tylko gdy wszystkie jej zywe zrodla sa z ukrytych stron
(ta sama scena z innego serwisu zostaje); w szczegolach sceny przyciski
ukrytych stron znikaja, o ile zostaje inne zrodlo.
Cache pustosci blacklist trzyma teraz, ktore listy sa niepuste, wiec ukryte
strony nie doklejaja trzech pustych NOT EXISTS, i jest czyszczony przy kazdej
zmianie (wczesniej pierwszy wpis dzialal po 5 minutach). Kod synchronizacji
kopiuje hidden_sites oraz favorite_sites, ktorych tam brakowalo.
Sandbox na produkcyjnej bazie: strona porndoe 42 z 60 scen tylko z porndoe
przed ukryciem, 0 po; feed 0,34 s, duze tagi 0,3 do 0,8 s z dwiema ukrytymi.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Po przejsciu porndoe na resolver po stronie telefonu 35 urzadzen dalej
dostawalo wylacznie 403 i nie dalo sie odroznic, czy pada nowa droga, zapas
przez WebView, czy stara paczka. Apka wysyla teraz via: phone, backend,
hoster, webview, proxy, movie; '-re' po ponownym rozwiazaniu w tym samym
ekranie, '<droga>>wv' gdy adres wyciagnal WebView jako zapas. NULL = paczka
sprzed tej zmiany. Migracja 0053 (kolumna nullable, sama zmiana metadanych).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Osobny punkt wejscia (update-required.tsx) z samym ekranem blokady, bez
reszty aplikacji i bez przycisku "Pozniej". Publikowany tylko na kanaly OTA
starych runtime'ow 1.0-1.3 (0.3.0 to dzis ~8% ruchu): stare APK nie dostaja
poprawek natywnych, a ich bledy wracaly w zgloszeniach. Uzywa tylko modulow
obecnych w kazdym APK. Runtime 1.0/1.1 (stary klucz podpisu) dostaje kroki
z kodem synchronizacji, od 1.2 nowa wersja instaluje sie na wierzchu.
publish_update.py --entry podmienia pole main w package.json na czas
eksportu i odmawia publikacji na biezacy runtime.
Emulator: prawdziwe APK 0.3.0 i 0.2.1 z ta paczka pokazuja ekran, pobieranie
otwiera APK w przegladarce, kopiowanie kodu dziala, Wstecz zamyka apke,
0.4.2 instaluje sie na 0.3.0 i startuje normalnie.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Onboarding Edge i zdarzenia z pierwszych klipow przychodza naraz, oba
widzialy brak wiersza clip_affinity i oba robily INSERT, drugi konczyl sie
UniqueViolation i bledem 500 (GOON-7X). Pusty wiersz przez ON CONFLICT DO
NOTHING, potem odczyt z blokada i dodanie naszych przyrostow do tego, co
zapisalo rownolegle zadanie. Test z dwoma watkami: bez bledow, obie wagi.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ekran Playera mial w nawigacji orientation: 'all', ktore react-native-screens
zamienia na SCREEN_ORIENTATION_FULL_SENSOR, a ten ignoruje blokade obrotu
z ustawien Androida i wygrywal z naszym unlockAsync (UNSPECIFIED). Zgloszenie
62d0192e: ekran sie obracal mimo wylaczonego autoobrotu. Opcja usunieta,
obrotem steruje tylko PlayerScreenActive. Emulator: przed zmiana przy
blokadzie FULL_SENSOR i obrot do 270, po zmianie UNSPECIFIED i pion,
a przy wlaczonym autoobrocie ekran dalej obraca sie za telefonem.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tworcy kasuja zwykle cale konto naraz, a przemial przy 1000 klipow na
godzine robi okrazenie katalogu w okolo tydzien. Zgloszenie d343a9b6:
strona tworcy z pustymi kafelkami, 120 "zywych" klipow, kazdy 403.
Po oznaczeniu martwego klipu (przemial albo zgloszenie z apki) od razu
HEAD na pozostalych zywych klipach tego tworcy niesprawdzanych od 6 h,
do 600 na przebieg. Sprawdzone na produkcji: 120 z 120 oznaczone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Przy ~10 tys. nowych klipow dziennie 40% zywego katalogu miesci sie w
progu 7 dni, wiec znaczek stal przy prawie kazdym klipie i nic nie mowil.
Pole is_fresh zostaje w API (swiezosc dalej liczy sie w punktacji feedu).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
latestpornvideo osadza nowsze filmy na lulust.com, nowej domenie rodziny
lulu (luluvid, luluvdo, lulustream). Bez niej na liscie isPackerHoster
zwracal false, szlo przez WebView i konczylo sie 403 albo "Source not
loading". Domena dopisana plus regula na przedrostek lulu z sciezka /e/,
bo rodzina rotuje domeny. Emulator: przed zmiana "Source not loading",
po zmianie gra.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
_build_headers dokleja Origin zawsze, gdy znamy Referer. okcdn (OK.ru,
porndupe) na ten sam adres z Refererem daje 206, a z Refererem i Originem
400, wiec kazdy zapasowy proxy porndupe konczyl sie 502 (120 bledow 502
w tydzien). Przy 400 jedno ponowienie bez Origin; zwykly <video> w
przegladarce i tak go nie wysyla.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Linki porndoe (mp4 z ip= i HLS z tokenem w sciezce) sa podpisane pod adres,
z ktorego przyszlo /service/index.json: token z IPv4 gra tylko przez IPv4,
z IPv6 tylko przez IPv6, z VPS 403. Token pobieral WebView (Chromium),
a plik ExoPlayer (OkHttp), wiec na sieciach dual-stack i za CGNAT wychodzily
innymi adresami: 164 bledy 403 na 278 udanych w tydzien.
Nowy resolver po stronie telefonu robi jedno zapytanie (film rozpoznawany po
Refererze) zwyklym fetch, ta sama droga co odtwarzacz; mp4 przed HLS, ponowne
rozwiazanie przy bledzie jak eporner/sxyprn. Pusto = dotychczasowy WebView.
Emulator: gra bez WebView.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Wyjscie z wstrzykiwanego skryptu dla stron z Turnstile siedzialo w tym samym
try co oswajanie strony vikingfile. Skrypt startuje przed powstaniem <html>,
appendChild na null rzucal, a catch omijal return. Na vikingfile szedl caly
skrypt ekstrakcji i podsluch fetch bral zapytanie Adcash
(adexchangerapid.com/...&cbtitle=<plik>.mp4) za film: "None of the available
extractors" albo brak polaczenia z adexchangerapid przy blokadzie reklam,
polowa odtworzen galaxyporn.
Host liczony na poczatku, wyjscie poza try, styl dokladany po zaladowaniu
DOM, podsluch tylko na POST do wlasnej domeny, zapas z <video>.src.
Domeny Adcash na liscie reklam. Sprawdzone na emulatorze przez DevTools
WebView: stara paczka 3x blad, nowa gra (link z POST vikingfile).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
get_file jest przypiety do IP i sesji ladujacej strone i bywa jednorazowy.
Gdy resolver na telefonie zawiodl, proxy dostawalo ten sam zuzyty adres i
oddawalo 410/503: 14 urzadzen w tydzien mialo na tych serwisach same porazki
(inne serwisy graly im bez problemu). Teraz po 403/404/410 albo trwalym 503
proxy pobiera strone na nowo (try_extract) i bierze adres w tej samej jakosci.
Test: adres pobrany z innego IP przez proxy 410 -> z odswiezaniem 206 video/mp4.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zrodlo znikalo tylko po dlugim przytrzymaniu przez uzytkownika. Teraz
zgloszenie "Response code: 404/410" uruchamia w tle ponowny resolve z serwera;
martwe dopiero, gdy ekstraktor mowi "usuniete" albo plik z serwera tez daje
404/410 (dwie kontrole). Na sucho na 84 parach z 14 dni: 0 martwych, 83 zywe,
czyli 410 z telefonu prawie zawsze znaczy zly adres, nie skasowany plik.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Trzy zrodla filmow od tygodnia nie dawaly nic, a watchdog widzial tylko
"brak nowych":
- streamporn.vip -> 302 streamporn.li; konektor odrzuca linki spoza swojej
domeny, wiec lista byla pusta. Id filmu to slug, domena nie robi duplikatow.
- mangoporn: /movies/ daje 404, lista z /page/N/; link ma class przed href,
tytul w golym <h1> (zapas po itemprop i class="data"); limit 75 s, strona
odpowiada z VPS po 30-60 s.
- yourdailypornmovies: nowe linie miedzy znacznikami karty, wzorzec bez \s*
nie lapal nic przy dzialajacej stronie.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
edge_replay_features.py liczy na prodzie cechy znane w chwili kazdego
wyswietlenia, edge_tuning_analysis.py ocenia formuly (AUC w obrebie
urzadzenia, podzial w czasie). Na nich dobrana punktacja z 4666fcb.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Grupy po hashu urzadzenia, tylko slot affinity, srednie po urzadzeniach.
Test A/A na tygodniu przed wdrozeniem: dokonczenia 13,0% vs 13,1%, lajki
3,4% vs 3,1%, ucieczki 49,1% vs 49,6% (357 i 111 urzadzen), czyli szum ~0,5 pp.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Odtworzenie uczenia na 189 tys. zdarzen (wagi zdarzenie po zdarzeniu, bez
zagladania w przyszlosc, test na 30% najnowszych): stara punktacja porzadkowala
klipy w obrebie urzadzenia z AUC 0,576 (lajk albo >= 10 s vs ucieczka < 2 s).
Tagi RedGifs sa liczne i ogolne, wiec ich suma dominowala, a mowila malo; nisze
prawie nic, popularnosc z RedGifs slabo, tworca i przyjecie klipu u nas najwiecej.
Nowa: log(waga tagu x rzadkosc tagu) + 0,25 log(nisze) + 2,5 log(tworca)
+ 0,8 ln(1+lajki RedGifs) + 120 (odsetek lajkow u nas - 3%) - 15 (odsetek
ucieczek - 50%) + 0,3 za swiezosc. Na tescie 0,652, regresja na tych samych
cechach 0,654. Liczniki clips.feed_views/skips/likes (migracja 0052, wypelnione
z historii), bumpowane w POST /clips/events. 25% urzadzen (hash id) zostaje na
starej punktacji do porownania na zywym ruchu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Szablon playera playmogo zawsze zawiera ukryty (d-none) blok "Not Found",
a resolver bral te slowa za usuniety film i poddawal sie od razu, wiec cala
rodzina DoodStream szla do WebView z klikanym Cloudflare. pass_md5 jest w
HTML, a adres gra bez weryfikacji. Teraz usuniety = tytul "not found" albo
widoczny blok. Sprawdzone na emulatorze: ExoPlayer, ttff 4,2 s, postep rosnie.
Bledy cichego resolvera ida do telemetrii (error_kind 'resolver'), poza ocena
zrodel. Wpis changelogu dla OTA d5906704.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Klip skasowany u zrodla daje 403 i na wideo, i na plakacie, a apka nic z tym
nie robila. Teraz odtwarzacz zglasza zdarzenie 'error' (i 'stall' po 12 s bez
obrazu), przy 403/404/410 przewija dalej (max 3 z rzedu, bledy sieci i TLS nie
przewijaja), a serwer od razu sprawdza plik i oznacza klip martwy. Reaper co
godzine po 1000 klipow zamiast 2000 na dobe: ~4% zywych klipow w feedzie
zwracalo juz 403. Zejscie z zepsutego klipu nie psuje wag jako "skip".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zgloszenie 5a724cc8: aktorki i studia z "+N" grupowane u gory listy, a znaczek
rozbity na sceny i filmy (new_scene_count, new_movie_count). new_count zostaje
jako suma dla starszych wersji apki, ktore dostaja tez nowa kolejnosc.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zadanie (co 6 h po 200) bralo zawsze 200 najnowszych kandydatow. Przebieg
o 05:00 wzbogacal 14-19 swiezych filmow, trzy kolejne mielily te same 200
bez trafienia z wynikiem zero, a 12,9 tys. starszych kandydatow nie bylo
sprawdzonych ani razu. Teraz movies.tpdb_checked_at (migracja 0051): najpierw
niesprawdzone, film bez trafienia wraca po 30 dniach, blad nie oznacza.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kafelek na 1/3 ekranu bral plakat RedGifs 1080x1920 (~120 KB), choc jest
-mobile.jpg 480x854 (~37 KB). Tuzin plakatow ladowal sie tak dlugo, ze
przyszlo zgloszenie z pusta siatka (a2fad93f). Jeszcze nie w OTA.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refresh licznikow (co 3 h) i tag_tail_trim (raz dziennie) startuja razem
o 05:00. Kasowanie osieroconych tagow schodzilo kaskada do
tag_vertical_counts i czekalo na refresh, a refresh przy wstawianiu czekal
na blokade tego samego tagu przez sprawdzenie klucza obcego. Od 29.09
Postgres co rano zabijal przycinanie (Sentry GOON-7N). Tabela to kopia
liczona od zera, wiec klucz obcy nie byl potrzebny (migracja 0050).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Analiza zrodel z theporndude (zrzuty JSON, raporty i piec skryptow,
ktore je czytaly), probka strony streamtape i nieuzywana strona
landing/ (goon-foss.org serwuje site/).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ekran serwisu (/scenes?origin=tube:X&sort=release_date) dla serwisow,
ktorych scen nie ma wsrod najnowszych w katalogu (perverzija, hdporn.gg,
tubepornclassic, yesporn), sortowal wszystkie ich sceny: 9-19 s na
zimnym cache, 1-4 s na cieplym, 39 wejsc w 3 h.
Wzorem scene_tags.sort_date (GOON-64): data sortu powielona w
playback_sources i pilnowana wyzwalaczami (0048), wypelniona skryptem,
indeks (origin, sort_date DESC, scene_id DESC) WHERE dead_at IS NULL
(0049). API dolacza DISTINCT ON zgodny z indeksem, bo 190 tys. scen ma
dwa zywe zrodla z tego samego serwisu. Po zmianie 0,03-0,24 s, takze
dalsze strony.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Scraper siski do 494b15a zapisywal kilka osob z alt jako jedna. Skrypt
przepina sceny, filmy i ulubione na prawdziwe osoby (resolve_performer),
czarnych list nie przenosi. "Woods, Monique" rozpoznaje jako jedna osobe
tylko gdy tytul sceny to potwierdza. Na prodzie: 660 zlepkow, 1194
powiazania, 4 nowe osoby, 4 niejasne zostaly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
/tags?vertical=jav liczyl agregat po zrodlach i scene_tags na kazde
wejscie, dwa razy: 1 s na rozgrzanym cache, 17-24 s na zimnym. Teraz
czyta tabele tag_vertical_counts (migracja 0047), ktora odswieza
refresh_taxonomy_counts co 3 h. Zakladka JAV: 0,35 s. Gdy tabela jest
pusta dla wertykalu, zostaje stary agregat.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Strona nie escapuje apostrofu w title/alt, wiec "Brenna's Mouths" urywal
dopasowanie i kafelek wypadal (3 z 18 na stronie). Pierwszy czlon alt z
kilkoma osobami ("A, B - Tytul") szedl jako jeden wykonawca.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bramka nazwy w slugu zwracala True, gdy zaden czlon nazwy nie mial 3 znakow ("Wa A",
"Al B", "T P"), a wolajacy pomijali ja przy pustych tokenach. Performer-driven
dopinal wiec takiego wykonawce do kazdego wyniku wyszukiwarki tuba: 108 wykonawcow,
10,5 tys. blednych przypisan w 7,9 tys. scen. Teraz takie nazwy nic nie dopasowuja.
Na produkcji bledne przypisania usuniete (kopia w scene_performers_removed_20260924).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Strona filmu hqporner nie ma wlasnej okladki, a pierwszy _main.jpg na niej to kafelek
polecanego filmu. Scraper go bral, wiec ~90% zrodel dostalo cudze miniatury (62 tys.
zrodel, 5,4 tys. roznych miniatur). Okladka jest tylko w kafelku listingu
(cover_<id>): browse zbiera je z listingu, wyszukiwarka z wynikow wyszukiwania.
scripts/hqporner_fix_thumbs.py poprawia zapisane miniatury przechodzac listing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
close() odtwarzacza (watek JS albo sprzatajacy obiekty) wypisywal AudioFocusManager
z listy sluchaczy, a glowny watek w tym samym czasie rozsylal zdarzenie po prepare()
i iterowal ta liste (0.4.2, GOON-7A, Edge przy przewijaniu). Listy sluchaczy
odtwarzacza i odtwarzaczy w AudioFocusManager to teraz CopyOnWriteArrayList,
dopisywanie pod synchronized, usuwanie przez atomowe removeIf. Natywne, czeka na APK.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- db: prepare_threshold=None. psycopg przygotowywal zapytanie po 5 wykonaniach na
polaczeniu, a Postgres przechodzil potem na plan ogolny. Lista duzego tagu na takim
planie: "pov" 44 s zamiast 0,46 s, "masturbation" 46 s zamiast 0,18 s. Stad listy
ladowaly sie raz szybko, raz minute, zaleznie od polaczenia z puli (tez GOON-73/75).
- Lista jednego serwisu bez frazy: przejscie od najnowszych z limitem 1 s, a po nim
start od scen serwisu (do 150 tys.). Serwis, ktory stoi, mial sceny gleboko:
superporn 72-92 s -> 1,7 s, yespornvip 15 s -> 1,5 s, hentaiplay 9 s -> 0,06 s.
Porownanie ze starym kodem na 88 listach serwisow: wyniki identyczne przy
zapytaniach puszczonych po sobie.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Szukanie w jednym serwisie do 60 tys. scen zaczyna od jego scen (scenes.id = ANY),
gdy fraza jest popularna albo bez trigramu: "sel" w hqporner 3,4 s -> 0,1 s, "brat"
w fullmoviesxxx 2,9 s -> 0,15 s. Rzadkie frazy dalej trigramami (GOON-75).
- Poprawka regresji z c08abf6: fraza bez trigramu przy zawezeniu po 3 s oddawala
pusta liste ("ai" w fullmoviesxxx: 0 wynikow). Teraz od serwisu albo limit 10 s.
- sort=studio z rzadka fraza: JOIN ze studiami i sort samych trafien zamiast
przejscia po 33 tys. studiow ("sunny leone" 928 s -> 0,26 s, "savanna" 20 s -> 0,17 s).
Porownanie ze starym kodem na 100 wyszukiwaniach w serwisach i 12 z sortem po studiu:
wyniki identyczne poza naprawionymi pustymi listami.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
enrich-tags wolal resolve_tag dla kazdej nazwy spoza slugow, a ten szukal po
alnum-kluczu i liczbie mnogiej osobnymi zapytaniami (N+1, GOON-5F). Nowe
resolve_tags_by_altkey robi to jednym IN po indeksie ix_tags_name_altkey;
_resolve_by_altkey dla jednej nazwy korzysta z niego (1 zapytanie zamiast 2).
Na 603 nazwach z produkcji wyniki identyczne, 0,77 s -> 0,03 s.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
siska.video od 2026-09-22 nie istnieje (NXDOMAIN), ten sam serwis dziala pod
siska.tv z tymi samymi videoID i sciezkami miniatur. Scraper bierze kafelki z obu
domen i z www, zapisuje jeden kanoniczny adres. Lista najnowszych jest pod
best_xvideos.php?page=N, bo /page/N/ na siska.tv zawsze oddaje strone 1.
Na produkcji adresy stron, miniatur i external_id przepisane na siska.tv
(16 007 zrodel, 16 265 powiazan scen); 103 duplikaty www.siska.video oznaczone
jako martwe.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Od ~15.09 nowe karty maja okladke imgs4cdn.adultempire.com/movie/<id>?w=... (czesc
i.ibb.co albo bez okladki), a regex karty wymagal starego products/NN/<id>h.jpg.
33 z 40 filmow strony 1 odpadalo po cichu, ingest przez tydzien: 0 nowych.
Okladka teraz opcjonalna i w dowolnym formacie, id Adult Empire z obu wariantow.
Nadrobione: 26 nowych filmow, 6 dopietych do istniejacych.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Planer szacowal kazda fraze na 427 trafien (histogram 100 probek, dolny limit), wiec
zawsze szedl indeksem trigramow i sortowal wszystkie trafienia: "vo" 44 s (dwie
litery nie maja trigramu, indeks oddaje 4,3 mln wierszy), "mis" 6,5 s, "free" 1,9 s
(GOON-73/75).
- 0046: histogram title_normalized 1000 probek, szacunki bliskie prawdy.
- list_scenes: przy q i sorcie po dacie najpierw przejscie po indeksie sortu z
limitem 300 ms (bez bitmap, w SAVEPOINT wycofywanym zawsze), gdy probka tytulow
z pg_stats mowi, ze wystarczy przejsc do 30 tys. scen; inaczej zwykly plan.
Frazy bez trigramu zawsze przejsciem (limit 3 s, potem pusto).
115 prawdziwych wyszukiwan z logow: wyniki identyczne, najgorszy 44 s -> 0,8 s,
srednie frazy dotykaja 3-7x mniej stron ("bad" 122 tys. -> 16 tys.).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Blacklisty sa per urzadzenie od 2026-06-10, a SEO dalej wycinalo sume blacklist
wszystkich urzadzen: 465 osob, 4477 tagow, z publicznych stron znikalo ~86% scen.
To samo zapytanie przy liczeniu do /sitemap.xml pisalo 3,7 GB plikow tymczasowych
i przy kilku wejsciach robota naraz zapychalo dysk (GOON-22). Teraz strony SEO
pokazuja to, co katalog nowemu urzadzeniu, a indeks sitemapy liczy sie raz na 6 h
(blokada na rownolegle zadania). Liczenie 135 MB plikow tymczasowych, indeks 13 s,
potem 0,2 s. Wykonawcy 20 tys. -> 81 tys., sceny 3,5 mln.
Na VPS dodatkowo temp_file_limit=2GB dla API w override.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
toList() na values ConcurrentHashMap przy rozmiarze 1 robi iterator().next(); gdy
sesja zniknie miedzy size() i next(), leci NoSuchElementException (0.4.2, GOON-72).
ArrayList(values) idzie przez toArray(), ktore mapa robi bezpiecznie. Natywne,
czeka na nastepne APK.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
source-stats liczyl flagi tag/obsada dla 2,5 mln par serwis-scena, czyli ok. 5 mln
losowych odczytow indeksow; trwal 22-32 min i przekroczyl limit (GOON-V). Teraz
flagi z probki 3000 scen na serwis (stala, po md5), liczba scen, swiezosc i
miniatury dalej dokladnie. 1 min 51 s, gwiazdki bez zmian, procenty +-2 pkt.
Autovacuum na domyslnych 20% nie ruszal duzych tabel od tygodni (scene_performers
11% stron widocznych, statystyki scenes z 25.08). Migracja 0045 daje 2% dla
szesciu najwiekszych tabel.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Przebieg nadrabiajacy zaleglosci scalil 67 tys. scen (xnxx/xvideos, ten sam tytul, dlugosc
i obsada) i trwal 90 min, wiec przy limicie 30 min job raportowal sie jako zawieszony
(Sentry GOON-V), mimo ze pracowal. Zaleglosc wzieła sie z restartow workera, ktore ucinaly
wczesniejsze przebiegi.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>