# Eval-set for the retrieval quality gate (module 5, phase 3, plan §6.2, # kb/phases/kb-m5-faza3.md). Transcribed 1:1 from the pilot baseline, # kb/phases/kb-m5-eval-retrieval-pilot.md (read-only source -- this file is the versioned # copy the plan asked for, so the set stops living only in a session transcript). # # kind: # hit -- pilot found a correct top-1 match (dist < 0.45) # grey_zone -- pilot landed in the 0.45-0.55 band (on-topic, imprecise) # negative_control -- pilot correctly found nothing (dist > 0.55) # negative_control_borderline -- pilot correctly found nothing, but close to the 0.55 edge # # expected_envelope is null for both negative-control kinds: there is no document these # queries should match, by design. queries: - id: "1" text: "polisa ubezpieczeniowa PZU warunki odpowiedzialności" kind: hit expected_envelope: "paperless:14" baseline_top1_dist: 0.3418 note: > Pilot top-1 = paperless:14 (OWU PZU Auto); ujawnił duplikat paperless:14 ≡ paperless:74 (flagowany excluded_reason='duplicate' w kroku 1 fazy 3). - id: "2" text: "faktura za usługi telekomunikacyjne kwota do zapłaty" kind: hit expected_envelope: "paperless:192" baseline_top1_dist: 0.3447 note: > Pilot top-1 = paperless:192 (faktura P4); poz. 3/5 w pilocie był chunk z OCR-śmieciem (kody kreskowe) -- powinien wypaść po excluded_reason='ocr_junk' z kroku 1. - id: "3" text: "zasady punktacji FLL Challenge robot game (PL)" kind: grey_zone expected_envelope: "paperless:5" baseline_top1_dist: 0.4154 note: > Pilot: szara strefa -- rodzina dokumentów OK, sedno (zasady punktacji) nie trafione precyzyjnie. Kandydat na poprawę: czy pre-filtr po streszczeniu podnosi trafność? - id: "4" text: "FLL robot game mission scoring points table (EN)" kind: hit expected_envelope: "paperless:5" baseline_top1_dist: 0.4114 note: > Cross-lingual (EN zapytanie) trafia lepiej niż PL (zapytanie 3); poz. 2+ w pilocie = paperless:119 (scoresheet, mojibake) -- mojibake nie jest śmieciem, niesie sygnał. - id: "5" text: "innovation project scoring" kind: hit expected_envelope: "paperless:3" baseline_top1_dist: 0.3869 note: "Najlepszy wynik pilota: top-5 spójnie z jednego właściwego dokumentu (arkusz ocen IP)." - id: "N" text: "przepis na sernik z rodzynkami" kind: negative_control expected_envelope: null baseline_top1_dist: 0.6210 note: "Poprawny brak w pilocie; separacja od trafień wyraźna." - id: "N2" text: "piaskownica plastikowa" kind: negative_control_borderline expected_envelope: null baseline_top1_dist: 0.5533 no_answer_threshold: 0.50 note: > Poprawnie na granicy "brak" w pilocie -- semantycznie sąsiednie dokumenty wspólnoty mieszkaniowej, nie odpowiedź na zapytanie. Faza mailowa, bramka po Etapie A (2026-07-23): po dolaniu chunków mailowych top-1 = newsletter szkoły narciarskiej (Rossignol, rozmiary nart 155-181cm, dist 0.5298) -- zweryfikowana treść pokazuje, że to kolizja semantyczna krótkich, liczbowych tekstów w przestrzeni wektorowej, NIE realny mail o piaskownicy -- korpus mailowy takiego trafienia nie zawiera (próbne zapytanie "piaskownica plac zabaw wspólnota" dało dist 0.5585, miss; odrzucone jako mail_queries wpis, patrz historia sesji). Próg tej kontroli obniżony do 0.50 (z 0.55) właśnie z powodu tej znanej kolizji, żeby bramka nie płonęła co uruchomienie na nie-problemie. # Faza mailowa (kb/phases/kb-m5-faza-mailowa.md, §8, Krok 5) -- bramka jakościowa dla # treści mailowej wprowadzonej w Etapie A (ostatnie 12 miesięcy, plan §7 Krok 4). Wypełniona # przez operatora 2026-07-23 (5 zapytań "wiem że to mam w mailach z ostatniego roku"; M5 # odrzucone po weryfikacji, patrz N2 powyżej i historia sesji). expected_envelope celowo null # dla wszystkich -- operator dostarczył treść zapytania, nie surowy Message-ID; kind: mail_hit # ma inną semantykę hit@3 niż `queries:` powyżej: hit iff top-3 hybrid zawiera wynik z gałęzi # mailowej (envelope.source w summaryless_sources, dziś gmail) z dist < 0.45 # (retrieval_eval.py::mail_hit_at_3) -- identity-match na expected_envelope nie ma tu # zastosowania, bo nie ma czego dopasować. # # Format wpisu (identyczny co do pól z `queries:` powyżej, minus baseline_top1_dist -- nie było # pilota mailowego przed tą bramką): # - id: "M1" # text: "..." # kind: mail_hit # expected_envelope: "" # note: "..." mail_queries: - id: "M1" text: "szkolenie narciarskie zegrze termin" kind: mail_hit expected_envelope: null note: "Wątek listy klubowej (lasery-zegrze) — celowo na granicy filtra newsletterowego." - id: "M2" text: "faktura Play kwota do zapłaty telefon" kind: mail_hit expected_envelope: null note: "Faktury operatora przychodzą mailem co miesiąc." - id: "M3" text: "wznowienie polisy OC składka samochód" kind: mail_hit expected_envelope: null note: "Korespondencja ubezpieczeniowa — cross-source z dokumentami OWU." - id: "M4" text: "rejestracja drużyny FLL zgłoszenie sezon" kind: mail_hit expected_envelope: null note: "Wątki organizacyjne FLL 25-26."