--- okf: "0.1" type: session-log visibility: private status: active updated: 2026-08-04 links: [] --- # Session log 2026-07-31 — KB Faza 4: zamknięcie + pilot narty27 ## Zakres Finalne domknięcie fazy 4 subsystemu B (KB) — **na twardo** — oraz podsumowanie pilota fazy 5 (narty27), wykonanego równolegle. ## Faza 4 — zamknięcie (na twardo) ### Dedup podwójnej implementacji fallbacku embed - Rozstrzygnięcie: master (`e7625cd`, `app/embed_router.py`) = źródło prawdy. - Z porzuconego brancha uratowano S1–S4 (`cb8a19d`): - `retrieval_eval.py --transport http` - session log 27.07 - testy luk T1–T3 - komentarz kalibracji progów dist. - Pełny rozbiór obu implementacji: `kb/phases/kb-m5-faza4-fallback-dedup.md`. ### Deploy na PIHA (z mastera) - `ollama-piha`: named volume `ollama_piha_models`, model bge-m3, `KEEP_ALIVE=0`. - `kb-query`: port 8230, bind 192.168.31.5, `EMBED_FALLBACK_URL` ustawione. ### Test sol-down — PASS na żywej produkcji Przebieg: pause ollama@SOLARIA → cache 30 s trzyma `up` → zapytanie przełącza się one-shot na PIHA (`embed_backend: piha`, wyniki poprawne) → `sol_status: down` → unpause → powrót `up` w ≤35 s. Dodatkowo zaobserwowano **samoistne, jednorazowe zadziałanie breakera na produkcji** — przyczyna nieustalona, zachowanie zgodne z projektem (przełączenie i powrót bez utraty odpowiedzi). ### Progi dist (skalibrowane, obowiązują) `<0.45` hit / `0.45–0.55` szara strefa / `>0.55` brak odpowiedzi. ## Pilot fazy 5 — narty27 (POC, zostaje na stałe) Publiczna wystawka `narty27.kapala.org` zbudowana **pełnym wzorcem docelowym fazy 5 w miniaturze**: markdown+frontmatter (OKF v0.1) → walidator konformancji (`check_okf`) → generatory (graf cytoscape, karty HTML, tabela porównawcza, zdjęcia z filtrem percepcyjnym, landing) → statyczny hosting (PIHA nginx + named volume) → publiczny ingress (NPM VPS + Let's Encrypt). Źródło treści: `~/narty-2027/saalbach-kb` — lokalny git na SOLARII, **celowo poza repo infry**. Infra: `services/narty27`. ### Wnioski do przeniesienia na fazę 5 (wiki-kompilat) 1. **OKF v0.1 działa w praktyce**, a pinowanie wersji okazało się słuszne — spec ewoluuje (v0.2: `timestamp` → `generated: {by, at}`, provenance first-class; migracja = jedna zamiana pola). Przy fazie 5 rozważyć start od razu na v0.2 albo pin v0.1 z zaplanowaną migracją. 2. **Walidator-lint jako stały element pipeline'u** wiki, nie jednorazowy skrypt. 3. **Bug upstreamu `knowledge-catalog`**: generator grafu pomija linki od `/` wbrew §5.1 własnej spec → napisany własny generator. Kandydat na issue/PR do `GoogleCloudPlatform/knowledge-catalog`. 4. **Reserved files**: `index.md` bez frontmattera (poza `okf_version` w root) — walidator to łapie. 5. **Warstwa prezentacji z generatorów** — tani, użyteczny wzorzec do reużycia nad wiki-kompilatem KB. 6. **Każdy artefakt ma mieć dom w gicie; sesje mają logi.** ## Otwarte po sesji 1. **`expected_envelope` w `mail_queries`** (`jobs/documents-ingest/eval/queries.yaml`) — nadal `null` (placeholdery, artefakt danych, nie kodu); kryterium 4 bramki na stubie nie przechodzi wyłącznie z tego powodu. 2. **`hosts/solaria/runtime/ollama/docker-compose.override.yml` — brak w repo** (rozjazd repo↔runtime na SOLARII). 3. **R1–R3 node-agent** (incydent `kb/incidents/2026-07-30-ollama-solaria-vanish.md`) — **niezrobione**: R1 `_prune_stopped_containers` nie może kasować kontenerów zarządzanych, R2 rate-limit dla `ai_node`/`standard`, R3 logowanie usuniętych zasobów. Przyczyna nadal aktywna → blokuje/warunkuje fazę mailową (M1 = mitygacja doraźna na czas backfillu). ## Następne kroki 1. Faza mailowa: batching Ollamy → backfill ~225k kopert → IMAP przyrostówka → PDF-y (~336) → GDrive Takeout. 2. Blokada/ryzyko: node-agent R1–R3 (unfiltered prune) — eskalacja do subsystemu A; mitygacja M1 na SOLARII na czas backfillu.