homelab-codex-ws/docs/sessions/2026-08-06-kb-mail-sync-live.md
oskar 04884ed67d docs: session log 2026-08-06 wieczor — przyrostowka IMAP na zywo (Krok 7 DONE)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 17:35:07 +02:00

108 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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