Commit graph

102 commits

Author SHA1 Message Date
DonVoo
645ce25848 Codex-Brief: UID-Delta-Watcher (hoechste Prioritaet)
Der Volllauf laedt strukturell jede Quellmail, bevor er weiss, ob er sie hat -
die Identitaet ist der Body-Hash. Belegt am Lauf e.klarner: 46.415 gelesen,
10.023 geschrieben. Der Nachtlauf zieht so ~42 GB/Nacht.

Die UID ist die einzige Kennung ohne Body und bricht die Ringabhaengigkeit.
UIDVALIDITY-Pruefung ist dabei nicht Beiwerk, sondern Voraussetzung.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 20:13:05 +02:00
DonVoo
a7ffab1182 Correct Nachzuegler finding: they were source-side exact duplicates
Der in rettungslauf-fixes.md beschriebene Befund "~109 byte-verschiedene
Mails mit gleicher Message-ID" war eine HYPOTHESE, die faelschlich als
Befund formuliert wurde.

Messung nach Einbau von body_sha256 (petarus/INBOX.Sent): 518 Quell-Mails,
davon nur 463 eindeutige Identitaeten - exakt der Archivbestand. Die 55
"fehlenden" sind bitgenaue Duplikate an der Quelle (eine Identitaet 10x,
zwei je 6x, fuenf je 4x - Re-Import-Signatur). Es fehlte nie etwas.

Der body_sha256-Schluessel war dennoch richtig: er ist der Beweis der
Bitgleichheit. Waeren die Mails verschieden gewesen, waeren sie beim
kontrollierten Nachlauf archiviert worden.

Lehre im Brief ergaenzt: Eine Zaehlung taeuscht in beide Richtungen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 14:53:26 +02:00
DonVoo
9f5cc59af7 Stabilize mail identity: canonical hash, index drift, HTML panic
Behebt drei Fehler derselben Klasse: an jeder Stelle wurde derselbe Wert
zweimal berechnet, statt einmal berechnet und weitergereicht - und die
beiden Berechnungen liefen auseinander.

1. Instabiler Ersatzschluessel (bug-hashkey-instabil.md)
   Mails ohne Message-ID bekamen sha256 ueber die IMAP-Rohbytes, der
   Reindex hashte dieselbe Mail ueber die mbox-gespeicherten Bytes
   (>From-Quoting, andere Zeilenenden) -> zwei Schluessel, 4.024
   Doppel-Eintraege in copied.
   Fix: canonicalMessageBytes() bringt beide Seiten auf eine Form
   (>From zurueckdrehen, CRLF->LF, Trailing-Newlines weg). Alle Pfade
   (Index, Migration, Viewer, Dedup) nutzen dieselbe Funktion.
   body_sha256 in copied + mbox_index, UNIQUE erweitert.

2. Index-Drift (bug-index-drift.md)
   Der plain-mbox-Reader las nach Datei-Position statt nach dem
   gespeicherten file_offset. Weil SQLITE_BUSY (busy_timeout=0) je
   Ordner einen Index-Eintrag verschluckt hatte, war ab dieser Luecke
   alles um 1 verschoben: Klick auf Mail X zeigte Mail X+1.
   Betroffen genau die 6 Ordner mit Busy-Fehler beim Rettungslauf.
   Fix: busy_timeout=10000, Lesen ueber file_offset, --reindex --rebuild.

3. HTML-Vorschau-Panic (bug-htmltotext-panic.md)
   replaceCaseInsensitive/stripHTMLBlock indizierten mit Offsets aus
   strings.ToLower(s) in s - ToLower ist nicht byte-laengen-erhaltend
   (z.B. U+0130). ~0,1% der Mails brachten die Vorschau zum Absturz.
   Fix: asciiFoldIndex() sucht direkt auf den Original-Bytes; zusaetzlich
   Rohtext-Fallback, damit keine archivierte Mail unsichtbar wird.

Weiter: Archiv-zuerst-Reihenfolge (mbox_done/target_done) - ein
sterbendes Ziel kostet keine Archiv-Kopie mehr; Dedup vergleicht
zusaetzlich den Inhalt und schuetzt byte-verschiedene Varianten.

WICHTIG: Die 62.073 alten Alias-Zeilen in copied bleiben bewusst
erhalten. Sie sehen wie Muell aus, sind aber die Zeilen, auf die der
alte Schluessel matcht - ein Loeschen wuerde Mails erneut in fremde
Postfaecher kopieren.

Verifiziert: go test ./... gruen; 58.051 Archivmails, 0 ohne
copied-Zeile; Drift 0 ueber alle 69 Ordner; 2.000 HTTP-Stichproben
ueber 8 Ordner: 0 falsche Zuordnung, 0 Panics; Watcher 220 + 60 Mails
archived=0 target=0 errors=0. Live als Image fix-identity2-20260716.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 13:22:27 +02:00
DonVoo
6c4073a01c Fix plain mbox reader buffer aliasing 2026-07-15 00:57:16 +02:00
DonVoo
e63a513cff Fix mailbox UI sorting and target layout 2026-07-15 00:14:54 +02:00
DonVoo
8e8c651eaa Use UID-stable target dedup scan 2026-07-14 21:17:45 +02:00
DonVoo
b16deffa25 Fix archive reindex and add target dedup 2026-07-14 20:59:27 +02:00
DonVoo
e612896e06 Add optional zstd mbox archives 2026-07-14 20:20:30 +02:00
DonVoo
21844688ac Clarify DB rename acceptance counts 2026-07-14 19:27:28 +02:00
DonVoo
29208b7a41 Guard against missing Mail-Graveyard DB 2026-07-14 19:24:50 +02:00
DonVoo
d4d43fe672 Lazy-load mailbox previews 2026-07-14 19:08:43 +02:00
DonVoo
03ce0ad8ea Count account test without fetching bodies 2026-07-14 18:29:37 +02:00
DonVoo
a17d2c8a2c Use header-only IMAP lists 2026-07-14 18:23:31 +02:00
DonVoo
a52963c380 Stream source mailbox migration 2026-07-14 17:56:33 +02:00
DonVoo
f5f0ff1b8c Fail fast for missing watch account 2026-07-14 14:08:33 +02:00
DonVoo
813762f43f Add scoped migration acceptance run 2026-07-14 05:53:11 +02:00
DonVoo
253435d87f Replace hand-rolled IMAP with go-imap 2026-07-14 05:37:49 +02:00
DonVoo
21aa6e39e1 Document review fixes and harden mail actions 2026-07-14 05:22:26 +02:00
DonVoo
4f8a441d51 Add mail context menu 2026-07-13 15:38:18 +02:00
DonVoo
a64a6d187b Add login backoff countdown 2026-07-13 13:43:46 +02:00
DonVoo
3426cea58c Limit user role to archive viewer 2026-07-13 13:19:12 +02:00
DonVoo
53a87e57dd Allow sync dropdowns to overflow action bar 2026-07-13 12:57:06 +02:00
DonVoo
181a91c660 Add sync action dropdowns 2026-07-13 12:52:12 +02:00
DonVoo
f612454e5b Move action search after refresh 2026-07-13 12:44:07 +02:00
DonVoo
09d22931e1 Update action bar sync labels 2026-07-13 12:39:35 +02:00
DonVoo
c3d3f8e677 Parse display-name recipients for compose send 2026-07-13 12:32:14 +02:00
DonVoo
29fd3f5cae Use internal compose modal for mail actions 2026-07-13 12:16:21 +02:00
DonVoo
e8029a177c Wire mail action bar buttons 2026-07-13 12:06:41 +02:00
DonVoo
0e47f8c61f Swap ribbon and action bar colors 2026-07-13 12:00:11 +02:00
DonVoo
9a4aade072 Add secondary mail action bar 2026-07-13 11:55:52 +02:00
DonVoo
cc3f796ca3 Restore pane resizing 2026-07-13 11:39:15 +02:00
DonVoo
dee6dd8cd8 Add modal mail preview 2026-07-13 09:39:29 +02:00
DonVoo
97a65dbbd4 Make transfer panes resizable 2026-07-13 09:14:24 +02:00
DonVoo
c7f6750d6c Polish five pane transfer defaults 2026-07-13 09:06:07 +02:00
DonVoo
4f0493b5c2 Build five pane mail transfer workspace 2026-07-13 08:32:01 +02:00
DonVoo
e46c25cb72 Add archive to archive transfer mode 2026-07-13 08:13:50 +02:00
DonVoo
9d31a14f79 Unify mailbox pane labels 2026-07-13 08:04:29 +02:00
DonVoo
31419696df Simplify archive preview header 2026-07-13 07:58:35 +02:00
DonVoo
8823b431f4 Clean mailbox preview rendering 2026-07-13 07:46:07 +02:00
DonVoo
647ce4bc90 Load selected target mailbox messages 2026-07-13 03:47:39 +02:00
DonVoo
548e0fa741 Polish source mailbox reading panes 2026-07-13 03:18:53 +02:00
DonVoo
561450662c Auto-load selected source mailbox messages 2026-07-13 03:10:40 +02:00
DonVoo
2f337ee200 Load messages from selected source folder 2026-07-13 03:06:11 +02:00
DonVoo
737343b66b Return source mailbox partial for HTMX 2026-07-13 02:59:57 +02:00
DonVoo
b1f3deca1d Show folders for selected source mailbox 2026-07-13 02:53:09 +02:00
DonVoo
d5576ddbde Add archive import export and dedup tools 2026-07-13 02:39:09 +02:00
DonVoo
8d2838aea7 Decouple archive mailboxes from accounts 2026-07-13 02:28:38 +02:00
DonVoo
0bb49019b6 Show current user in top bar 2026-07-13 02:04:50 +02:00
DonVoo
8e9fb55710 Add welcome tab and icon actions 2026-07-13 01:55:08 +02:00
DonVoo
b475b03b9e Add top bar logout button 2026-07-13 01:35:21 +02:00