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

3.6 KiB
Raw Blame History

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

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 .envMAIL_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.timerenabled, 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.