homelab-codex-ws/docs/sessions/2026-08-06-kb-etapb-backfill.md
oskar 83bb7ab130 docs(kb): zamkniecie Etapu B fazy mailowej + session log 2026-08-06
Pelny korpus gmail zchunkowany i zembedowany: 389 012 chunkow,
0 nie-excluded bez wektora. Weryfikacja plastrami 0-4 (wszystkie EXIT 0)
plus fix bajtu NUL (4ec0b78). Krok 6 -> WYKONANE, Krok 7 (przyrostowka
IMAP/JMAP) oznaczony jako next.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 12:42:25 +02:00

2.3 KiB

okf type visibility status updated links
0.1 session-log private active 2026-08-06

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 jsonbta 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.