# Sesja 2026-07-17…21 — wątek KB: faza 3 kroki 3-5 DONE (+ incydenty)

**Krok 3 — kaskada summary→chunk:** bramka **PASS at N=10, k=5** (N-sweep {1..20}: N=5 to zmierzona podłoga, N=10 niesie 2× margines); kaskada nie degraduje niczego, na 186 dok nie poprawia (test architektury pod skalę mailową, zgodnie z przewidywaniem planu); koszt +1 SQL, zero dodatkowych embedów. cascade_query = domyślna ścieżka kb-query; flat_query zostaje jako baseline. Eval przepisany do wersjonowanego eval/queries.yaml + retrieval_eval.py.

**Krok 2 finał — werdykt A/B (D3 rozstrzygnięta):** kompilacja = **claude-haiku-4-5** (157/157, zero JSON-faili, 100% dyscypliny słownika tagów, lepsza hierarchia na długich dokumentach); gemma3:12b w odwodzie (tor lokalny w bazie, job wspiera oba backendy); model fazy mailowej odłożony do jej reconu (privacy/cost flag). Bug num_ctx (gemma cicho ucinała 45% dokumentów do ~2048 tok) znaleziony i naprawiony w pilocie — dwutorowość D3 zwróciła się natychmiast.

**Krok 5 — cykliczny ingest LIVE:** systemd-timer kb-ingest na PIHA (03:30), wrapper 4-etapowy (adapter→chunk_embed→summarize→embed-summaries; 4. etap dodany po pytaniu CC — bez niego nowe summaries byłyby niewidzialne dla kaskady), tolerancja Ollama-offline, metryki przez textfile→node_exporter→fleet-prometheus (reguły KbIngestStale, KbEmbedBacklogGrowing). Test live złapał 5 realnych dokumentów pominiętych przy imporcie 07-13 (race z OCR) — pipeline domknął zaległość: 5 docs → 82 chunki (2 junk-flagged przez nowy filtr) → 5 summaries, drugi run w pełni idempotentny. Baza: 191 kopert paperless. Bonus: node_exporter PIHA wciągnięty do GitOps (owner_node: per-host — pół pozycji paczki B).

**Incydenty sesji:** (1) deploy-node.sh odpalony omyłkowo na SOLARII rozebrał node-agenta (No such container przy Recreate) — dokończony deploy naprawił; (2) stary out-of-band node-exporter na PIHA trzymał :9100 → nowy GitOps-owy kręcił się w restart-loopie ~4h niezauważony (Prometheus scrape'ował starego, up=1, brak alertu — luka klasy "podmiana bytu pod tym samym portem") — stary ubity, cutover czysty, 8 metryk kb_ingest serwowanych; (3) klucz Anthropic API zapisany na stałe w /opt/homelab/kb/.env (timer go używa) — rotowany po ekspozycji w transkrypcie.

**Następne:** wiki proof-of-concept (ostatni element fazy 3; repo kb-wiki + konwencje + 3-5 stron ręcznie sesją CC) → faza 4 (kb-query+UI) wg roadmapy.

---

## Wiki proof-of-concept — FAZA 3 MODUŁU 5 DOMKNIĘTA W CAŁOŚCI

Repo kb-wiki na Forgejo (osobne, D7): konwencje (_meta/conventions.md, frontmatter z sources[].chunks), 5 stron-encji (pzu, warta, ubezpieczenie-auto-porównanie, fll-2025-26, wspólnota-targowa-2a) — 73 przypisy inline [^envelope_id#chunk], 86 wpisów sources, wszystkie automatycznie zweryfikowane przeciwko bazie. Pierwszy lint: 1 sierota (fll), lista brakujących pojęć = kandydaci na strony. Ocena operatora: na pierwszy rzut oka zgodne (głębsza weryfikacja merytoryczna = użycie w praktyce).

Lekcje do automatyzacji kompilacji (faza 5): (1) streszczenia bywają nieprecyzyjne na gęstych dokumentach prawnych (summary pomyliło próg 300 zł) — kompilator MUSI cross-checkować z chunkami, nie ufać summary; (2) mojibake ogranicza weryfikowalność liczb — oznaczać pochodzenie; (3) podobne encje wymagają rozróżnienia (dwie wspólnoty, jeden właściciel); (4) taksonomia "duplikacji": binarny duplikat vs wersje produktu (OWU 2023/2026) vs draft-vs-przyjęta uchwała — każde inne traktowanie. Warsztatowo: kaskada do odkrywania, SQL po envelope_id do cytowania — kompilator potrzebuje obu trybów. Incydent po drodze: ollama na SOLARII odłączona od sieci dockerowej (infra glitch, naprawione restartem) — backlog: konsument healthcheck.sh Ollamy w monitoringu.

**Faza 3: kroki 1-5 + wiki-proof = komplet.** Następne: FAZA 4 — kb-query (FastAPI na PIHA, cascade_query jako silnik, aktywny fallback embed) + UI kb.kapala.org.
