v0.29.0 - Krok 22: dlugi sprzed domkniecia
v0.29.0 - Krok 22: dlugi sprzed domkniecia (v1.0.0 przesuniete na Krok 23)
Nowy, numerowany Krok wciskniety przed dawnym Krokiem 22 (teraz Krok 23 -
domkniecie v1.0.0). Zakres: dziesiec drobnych dlugow z wczesniejszych Krokow,
wybranych wprost przez usera z listy "co jeszcze warto zrobic przed
domknieciem". Zero zmian architektury, jedna migracja schematu (DB_VERSION
4->5, addytywna).
F1 - reindeks wznawia sie sam (async)
IndexController::run_reindex() przerwany budzetem czasu (F1-lite z K19) sam
planuje wznowienie przez WP-Cron (aifaq_reindex_continue, pojedyncze
zdarzenie). Wlasciciel duzej strony nie musi juz klikac "Zaindeksuj" N razy
recznie. Wznawia SIE WYLACZNIE przy powodzie "budget" (nie crawl/errors).
Wpiete w Plugin.php, odpiete w Deactivator.php.
Miernik zuzycia dobowego sufitu w kokpicie
RagService::usage_snapshot() (nowa, publiczna, statyczna) + kafelek "Sufit
dobowy (dzis): n/limit" na Dashboardzie. Wczesniej limit 20/dobe byl
niewidoczny do momentu wyczerpania (tylko komunikat post-factum).
Nonce wp_rest wygasajacy po nocy
Piec plikow JS (faq-metabox.js, faq-tool.js, generator.js, indexer.js
- nowy string
sessionExpired) pokazuja teraz konkretny komunikat WordPressa
przy 401/403 zamiast generycznego bledu. Sesja admina zostawiona na noc juz
nie daje mylacego "cos poszlo nie tak" rano.
D7 - cache odmow off-topic
Odmowa poza tematem strony jest cache'owana (transient per pytanie, 1h) -
powtorzone pytanie off-topic nie placi juz embeddingu drugi raz. Chroni
budzet API przed spamem.
D10 - pole "temperatura" na froncie
Etykieta/podpowiedz suwaka (PL/EN/DE) jawnie mowi, ze dotyczy generatora FAQ,
nie czatu asystenta (ktory steruje osobnym rag_temperature). Wczesniej
wygladalo, ze wplywa na czat, a nie wplywalo na nic w tym miejscu.
R1/R2/R3 - trzy duplikacje (DRY)
Settings::verify_error_message() (jedno zrodlo komunikatu weryfikacji
klucza zamiast dwoch kopii w Settings.php i RestController.php),
settings.php juz nie dubluje recznie listy jezykow, report-render.js to
jedyna implementacja renderu raportu indeksowania (uzywana przez indexer.js
i app.js zamiast dwoch niezaleznych kopii, ktore juz dryfowaly w tresci).
NISKIE z audytu Krokow 0-5
Trzy z czterech ( , resztki shortcode'ow, surowe bledy providera do
klienta) okazaly sie juz zamkniete przy wczesniejszych zmianach. Realny bug
znaleziony w Chunker::normalize(): preg_replace(..., '/u') bez
zabezpieczenia na null - niepoprawny UTF-8 w tresci wpisu kasowal CALY
fragment do pustego stringa, cicho. Naprawione tym samym wzorcem re() co w
WpContentSource.
Brak limitowania sciezki admina
POST /admin/generate-faq (generator FAQ) nie mial zadnego throttlingu, a
korzysta ze wspolnej puli dostawcy co /ask (20/dobe). Jedna testowa sesja
klikania "Generuj" mogla ja wyczerpac samodzielnie. Nowy bezpiecznik: 10
wywolan/h (reuzywa istniejacy RateLimiter), 429 po przekroczeniu.
D4 - realny score przy trafieniu cache
Trafienie cache logowalo do qa_log zmyslony score=1.0 niezaleznie od
realnego dopasowania. Nowa kolumna score w wp_aifaq_cache (DB_VERSION
4->5, migracja addytywna przez dbDelta) - CacheRepository::put() i
RagService zapisuja/czytaja realny wynik. Dotyczy tez cache odmow (D7).
D5 - realny "best" w logach TopicGuard
TopicGuard::evaluate() inicjalizowal $best = 0.0 - przy samych ujemnych
wynikach (kierunki przeciwne) log pokazywal falszywe best=0.0 zamiast
realnego, np. -0.2. Zmienione na -INF. Zero wplywu na decyzje pass/refuse.
Odbior
runner 43 pliki tests/*.php - 0 niezaliczonych (nowy segment
dlugi-przed-k22-test.php, 34 asercje + rozszerzenia krok5/krok6-rag-test.php)
php -l - czysto na wszystkich zmienionych plikach PHP
node --check - czysto na wszystkich zmienionych plikach JS
migracja: DB_VERSION 4->5 (kolumna score w wp_aifaq_cache, addytywna)
budzet API: 0 - caly zestaw statyczny/jednostkowy
Pominiete swiadomie: pelna ksiegowosc kwoty per pula/model (jedyny punkt z
listy usera bez taniego fixu - wymaga osobnego trackingu, to nowa funkcja,
nie poprawka). "Crawl na slabym hostingu" z pierwotnej listy okazal sie juz
zamkniety w Kroku 20 (retry/backoff w CrawlQueue) - nie bylo czego robic.
NASTEPNY KROK: Krok 23 - v1.0.0 (dawny Krok 22, bez zmian zakresu: RWA,
testy obciazeniowe, instrukcja wdrozenia, LICENSE/readme.txt, i18n, skrypt
Batch).