# Filar maili — projekt (homelab-codex · KB · projekt #1)
> Pierwszy filar. Wzorzec referencyjny dla pozostałych (archiwum, embeddingi na SOLARIA, szkielet agenta, deploy).
> Zasady przekrojowe: patrz `kb-00-overview.md`.
---
## 1. Rdzeń: archiwum, nie RAG
Realna potrzeba to najpierw **archiwum**, nie „RAG nad mailami". Dwie warstwy, fundamentalnie różne:
- **Archiwum** — surowe, niezmienne, kompletne `.eml` / Maildir, append-only. To, co chcesz mieć u siebie *na zawsze*, niezależnie od jakiegokolwiek AI. Asset.
- **Indeks** — pochodny, odtwarzalny, wyrzucalny. Parse → chunk → embed → pgvector. Re-budowalny z archiwum przy lepszym modelu.
---
## 2. Dwa żywe źródła (zmiana względem pierwotnego planu)
Gmail **nie jest porzucany** — zostaje jako konto śmieciowe / loginy / 2FA. Stąd maile mają dwa żywe wejścia:
- **Fastmail** — `source: fastmail`, adapter **JMAP** (read-only token). Primary: tu ląduje sensowna poczta na przyszłość.
- **Gmail** — `source: gmail`, adapter **IMAP** (protokół, nie Gmail API → przenośność). Ciągły sync żywej skrzynki.
Plus jednorazowy **bulk historyczny Gmaila** (eksport „All Mail" / Takeout → surowy dump do archiwum). Operacja odwracalna i niezależna od reszty pipeline'u — robimy pierwsza. Urgency spadła (konto żyje), ale historia warta zassania od razu.
---
## 3. Koperta (kontrakt zamrożony)
```
id — stabilny identyfikator wiadomości
source — fastmail | gmail
ts — UTC (data wiadomości)
geo — null dla maili (uzupełniane cross-source w warstwie 3)
raw_ref — wskaźnik do .eml w archiwum
entities[] — otwarte, wypełniane przy ingeście/enrich
```
Addytywna. Nic poza tym nie usztywniamy.
---
## 4. Filtr archiwum → indeks
**Archiwizuj wszystko. Indeksuj selektywnie.**
Gmail śmieciowy (login/2FA/notyfikacje/newslettery) to szum — wpuszczony do wektorów zaśmieca wyszukiwanie i pali GPU na SOLARII. Filtr na wejściu do indeksu:
- whitelist/blacklist nadawców i nagłówków (`List-Unsubscribe`, `Auto-Submitted`, typowe domeny powiadomień),
- progi (np. odrzuć czysto automatyczne),
- surowiec zawsze leży w archiwum — filtr nie kasuje, tylko decyduje co trafia do embeddingów.
Filtr jest częścią indeksu (odtwarzalny), nie archiwum.