--- okf: "0.1" type: session-log visibility: private status: active updated: 2026-08-06 links: [] --- # Sesja 2026-08-06 (wieczór) — przyrostówka IMAP na żywo (Krok 7 fazy mailowej DONE) ## Ścieżka: recon → decyzje → implementacja Recon (`75d9695`, `kb/audits/mail-sync-2026-08-06.md`) → decyzje **(a)–(g) zatwierdzone w całości** → implementacja w trzech commitach: | Commit | Zawartość | |---|---| | `c65f0f2` | adapter IMAP w `packages/kb-mail`, migracja 005 `mail_sync_state` | | `f056b08` | job `mail-imap-sync` | | `ae16deb` | takt `kb-ingest` co 2h + etap mailowy, korekta `kb-mail-pillar` (JMAP→IMAP) | **642 testy.** ## Pierwsze uruchomienie wg runbooka `mail-sync-run.md` — z incydentami ### Run #1 — padł na `UID SEARCH ALL` Gmail: `UID SEARCH ALL` na **227 900** wiadomości przekroczył `imaplib._MAXLINE` (1 MB) → crash. Przyczyna: błąd operatora w `.env` — `MAIL_GMAIL_INITIAL_MODE=full` zamiast `since`, a `FASTMAIL_INITIAL_MODE` w ogóle niewpisany (fastmail zdążył zsynchronizować new-only i zapisać stan). > **FOLLOW-UP do CC:** utwardzić search na duże foldery — zakres UID / `SINCE` > zamiast `ALL`, podbicie `_MAXLINE`. Obecnie **tryb `full` na dużym koncie = crash**. ### Naprawa Korekta `.env` + `DELETE` stanu fastmail z `mail_sync_state` → run #2 czysty. ### Run #2 — initial | Konto | Tryb | Seen | Inserted | Dup | Conflict | |---|---|---:|---:|---:|---:| | gmail | initial (SINCE=2026-06-15) | 1 872 | 1 692 | 180 | — | | fastmail | initial-full | 96 | 87 | 1 | 8 (`conflict_other_source`) | Razem **1 779 nowych kopert, 0 błędów**. Nakładka `SINCE` zadziałała; cross-account dedup po `Message-ID` działa (te 8 konfliktów to ta sama poczta widziana z drugiego konta). ### Run #3 — test przyrostowości `mode=incremental`: gmail **+5**, fastmail **0**, kursor OK. ## Drenaż embed `mail-body-ingest --only-unchunked`: **698 embeddingów** (baseline 187 163 → **187 861**). > **Uwaga (follow-up):** tempo ~570 ms/chunk sugeruje, że `OLLAMA_URL=SOLARIA` nie > przebił się przez `sudo env` i liczyło CPU PIHA. Do weryfikacji przy następnym > dużym drenażu. ## Test end-to-end — PASS Mail wysłany 17:21 (gmail→fastmail), obie kopie wylądowały poprawnie: envelope gmail + `conflict_other_source` fastmail. Ścieżka **sync → ingest → hybrid search**: top-1 dist **0.391**. Decyzja **(g) potwierdzona**. ## Automat - `kb-mail-sync.timer` — **enabled**, tick co ~1 h, pierwszy 18:01. - `kb-ingest.timer` — co 2 h (nowa definicja `0/2:00:00`). - Reguła `fleet-prometheus/kb-mail-sync.yml` wchodzi przy najbliższym deployu fleet-prometheus *(follow-up)*. ## Poprawki do runbooka (follow-up, nie zrobione) - Ręczne runy wymagają `sudo` do odczytu `.env` (`600 root:root`) — podać wariant `sudo bash -c`. - Krok 7: `curl` na `localhost:8230` nie zadziała — `kb-query` binduje na `192.168.31.5`. ## Otwarte - **Rotacja hasła `kb-postgres` (WISI)** — wyciekło 2026-08-05/06 do transkryptu i historii shella. **Trzeci udokumentowany przypadek tej klasy.** - Fix `UID SEARCH` (patrz Run #1). - Załączniki PDF z maili (~336 + nowe). - NUL w nagłówkach `jsonb` (`gmail-header-backfill` / `bulk-import`). ## Stan fazy mailowej po sesji | Element | Status | |---|---| | (a) batching | ✓ | | (b) Etap B | ✓ | | (c) regresja | ✓ | | (d) hybrid default | ✓ | | Krok 7 — przyrostówka | ✓ **ŻYWA** | Pozostało: backfill PDF, Google Drive Takeout. **Następna duża rzecz wg roadmapy: FAZA 5 — wiki-kompilat.** Materiał mailowy jest kompletny i świeży, więc warunek wejścia spełniony.