--- okf: "0.1" type: session-log visibility: private status: active updated: 2026-08-06 links: [] --- # Sesja 2026-08-06 — Etap B: weryfikacja korpusu + fix NUL (ZAMKNIĘTY) ## Przebieg plastrów Plastry 0-4 (`--offset 0/50000/100000/150000/200000 --limit 50000 --batch-size 64`) — **wszystkie EXIT 0** po fixie. Cały korpus 225k kopert przeskanowany idempotentnie, zero strat. ## Bug znaleziony i naprawiony: NUL byte (0x00) w treści maila Plaster offset 50k wywalił się na mailach z 2007 (Sony Ericsson, 3 chunki): bajt NUL w tekście → `asyncpg.CharacterNotInRepertoireError` przy insercie (PostgreSQL nie przyjmuje `0x00` w `text`). Fix `4ec0b78`: strip `\x00` przed chunkowaniem i embedem + liczniki `nul_bytes_stripped` / `mails_nul_sanitized`. Re-run plastra 1: **EXIT 0**, 3 chunki dobrane. ## Weryfikacja w DB (kb-postgres@PIHA, `document_chunk`) | Miara | Wartość | |---|---| | `document_chunk` total | **389 012** | | nie-excluded **bez** embeddingu | **0** | | nie-excluded z wektorem | 187 025 | | newsletter-flagged bez wektora | 201 849 (odwracalne) | | excluded **z** wektorem | 138 (artefakt kolejności flagowania, nieszkodliwy) | ## Wniosek **Korpus był w pełni zembedowany jeszcze przed dzisiejszymi plastrami.** Zapamiętany stan „6,4k embedded z Etapu A, ~225k kopert do backfillu" był nieaktualny — wcześniejsze przebiegi pokryły całość. Dzisiejsze runy to w praktyce pełna, idempotentna weryfikacja korpusu (plus wykrycie i naprawa buga NUL). Źródło mylącego odczytu: licznik `chunks_already_embedded` liczy **istnienie wiersza w DB** (w tym chunków newsletter-flagged bez wektora), a nie obecność wektora — stąd niespójne wrażenie z liczników plastrów. ## Środowisko - venv w głównym repo (`pip install -e` dla `kb-mail` / `kb-retrieval` / `mail-body-ingest`). - tmux `backfill`, logi w `~/kb/mail/ingest-logs/` (poza repo). ## Follow-upy - `jobs/gmail-header-backfill` i `jobs/gmail-bulk-import` używają `sanitize_surrogates` na nagłówkach zapisywanych do `jsonb` — **ta sama latentna podatność na NUL**. Nieruszone w tej sesji, osobny task. - **Rotacja hasła `kb-postgres`** — nadal otwarta (z sesji 2026-08-05). ## Następny krok fazy mailowej **IMAP przyrostówka gmail + fastmail** (`source='fastmail'`) — teraz odblokowana.