v0.23.0 - Krok 20: dostepnosc u klienta
AI FAQ Generator v0.23.0 — Krok 20: dostępność u klienta
Ostatni funkcyjny Krok przed v1.0.0. Zbudowany metodą „etapy w osobnych czatach": 11 etapów
wobec zamrożonego KONTRAKTU k20-v3, spięte przez jeden czat odbiorczy.
Co nowego
Link „Generator FAQ" w menu nawigacji. Podstrona generatora istniała od Kroku 17, ale nie
prowadził do niej żaden odnośnik — gość nie miał jak trafić do narzędzia. Wtyczka dokłada teraz
prawdziwą pozycję do menu przypiętego do lokalizacji motywu (primary → main → header →
menu-1 → top), z przełącznikiem, wyborem lokalizacji i etykietą w ustawieniach.
Wtyczka NIGDY nie tworzy menu za klienta. Gdy żadne menu nie jest przypięte, wyłącznie o tym
informuje. Powód jest zmierzony: wiele motywów renderuje nawigację funkcją fallback_cb, która
przestaje działać w chwili przypięcia jakiegokolwiek menu — automatyczne utworzenie menu
skasowałoby klientowi całą widoczną nawigację (na motywie testowym: 9 pozycji + przycisk CTA).
Uprawnienia. Narzędzie FAQ, panel w edytorze wpisu oraz trasy /admin/generate-faq
i /admin/export zeszły na cap publish_posts — Redaktor i Autor wreszcie widzą narzędzie,
którego używają. Klucz API, ustawienia, indeksowanie i dziennik pytań zostają przy
manage_options. Cap zmienia filtr aifaq_tool_capability, działający jednocześnie na interfejs
i na trasę REST.
Dobowy sufit witryny + kalibracja limitera. Darmowy przydział Gemini to 20 żądań na dobę na
model (zmierzone prosto z API). Doszedł sufit rag_daily_budget (domyślnie 12), a limit gościa
zszedł z 30 na 10, z wyborem okna godzina/doba. Właściciel nie jest odbijany, ale zwiększa
licznik — jego pytania realnie zjadają pulę.
Parser limitów dostawcy po quotaId + naprawa wyłącznika obwodu. Wtyczka rozróżnia limit
dobowy od minutowego: przy dobowym nie ponawia w ogóle (podawane przez API retryDelay: 8s jest
wtedy mylące) i wycisza dostawcę na godzinę. Naprawiony realny błąd: na ścieżce gościa wyłącznik
obwodu nie uzbrajał się nigdy, więc przy wyczerpanej puli każdy gość płacił jedno żądanie do
API przez resztę doby. Wyłącznik jest teraz liczony osobno dla każdej puli i modelu.
Crawl: wykrycie zagłodzenia procesów PHP. Po serii timeoutów wtyczka wykonuje jedną sondę
i mówi wprost, czy problem to za mała liczba procesów PHP na hostingu, czy niedostępne strony.
Nieudane adresy trafiają na listę „do ponowienia" (3 próby, nie częściej niż raz na godzinę),
a na Dashboardzie jest przycisk „Ponów nieudane strony".
Retencja historii generowań — opt-in, oba wymiary (liczba wierszy, wiek) domyślnie 0,
czyli „nie kasuj nic".
Podłoga progu dopasowania tematu (0.70 / 0.65, wartości zmierzone w Kroku 19) — obowiązuje
także przy odczycie, więc instalacje z zapisaną niższą wartością są chronione. Podłogę może zdjąć
wyłącznie kod (filtr aifaq_min_threshold), nie pole w ustawieniach.
Rozdzielenie kanałów w generatorze FAQ — reguły idą kanałem system, w turze użytkownika
zostają wyłącznie dane, a sekwencje ### w temacie i opisie są neutralizowane (nie kasowane).
Tożsamość gościa za proxy (D1) — opcjonalny „zaufany proxy" czyta CF-Connecting-IP albo
ostatni element X-Forwarded-For. Domyślnie zachowanie bez zmian.
Weryfikacja
- Runner: 33 segmenty / 39 plików, zero niezaliczonych
- Weryfikacja negatywna: 27 mutacji, 27 zaczerwieniło (16 obowiązkowych + 11 dodatkowych)
- Twarde kontrole granic: 14/14,
assets/bez zmian - Playwright jako gość na żywej stronie: 13/13, plus cykl deaktywacja → aktywacja
- Regresje Kroków 11–18: 204/204
- Kontrast tekstu odpowiedzi na motywie klienta przy ciemnym systemie: 14,05:1
(w Kroku 19 zmierzono tam 1,98:1)
AIFAQ_DB_VERSION bez zmian (4) — migracja nie jest potrzebna.
Uwaga przy aktualizacji
Jeżeli witryna nie ma menu przypiętego do żadnej lokalizacji, link się nie pojawi, a wtyczka
napisze o tym w kokpicie. Utworzenie menu w Wygląd → Menu i przypięcie go do lokalizacji
nawigacyjnej motywu wystarczy — pozycja dołoży się sama. Na motywach, które rysują nawigację
awaryjnie z kodu, utworzenie menu zastępuje tę nawigację, więc pozycje trzeba raz odtworzyć ręcznie.