← Alle Beiträge

Plainva 0.6.0: Mail liest sich als Gespräch — und die id, die nie eindeutig war

30. Juli 2026

Jemand hat sich Gespräche im Mail-Client gewünscht. Ich hielt das für eine Frage der Darstellung. War es nicht.

Eine id, die nichts identifiziert

IMAP gibt jeder Nachricht in einem Ordner eine Nummer — eine uid. Die ist eindeutig. In diesem Ordner. Auf diesem Konto.

Solange Plainvas Mail-Liste genau einen Ordner eines Kontos zeigte, trug das, und ich habe darauf gebaut, ohne zu merken, dass ich überhaupt eine Annahme gemacht hatte. Eine Zeile trug ihre uid, eine Aktion las sie zurück, alles passte.

Die Gespräche haben die erste Hälfte davon zerlegt. Ein Gespräch hat nicht die Form eines Ordners: Deine Antwort liegt in Gesendet, die Nachricht, auf die Du geantwortet hast, im Posteingang. Liest man beide zusammen, hat man zwei Zeilen, deren uids Verschiedenes bedeuten.

„Alle Posteingänge” hat die zweite Hälfte zerlegt. Zwei Konten, beide mit einer Nachricht Nummer 1234.

Und jetzt der Teil, wegen dem ich neu gebaut statt geflickt habe: das scheitert nicht laut. Kein Fehler, keine leere Liste, kein Absturz. Du archivierst eine Nachricht, und eine andere wird archiviert. Du löschst eine und verlierst eine zweite. Der Fehler sieht aus wie funktionierende Software.

Deshalb trägt eine Zeile jetzt keine blanke id mehr, sondern ihre Herkunft — Konto und Ordner —, und jede Aktion liest die zurück, bevor sie irgendetwas tut. Gespräche gruppieren zuerst über die Referenzkette, also über die Kopfzeilen, die tatsächlich sagen, was worauf geantwortet hat; der Betreff ist nur der Rückfall, und auch nur bei einer erkennbaren Antwort innerhalb von 30 Tagen — „Re: Mittagessen” im März und „Re: Mittagessen” im November sind nicht ein Gespräch.

Mail hat jedes Mal zuerst den Server gefragt

Als ich schon einmal dort war, fand ich etwas, das Mail seit dem ersten Tag ausgebremst hat.

Beide Oberflächen lasen den Zwischenspeicher nur im catch. Erst das Netz, der Zwischenspeicher als Trostpreis. Jeder Ordner, den Du geöffnet hast — auch einer, den Du vor einer Minute offen hattest — wartete auf einen Roundtrip, bevor überhaupt etwas zu sehen war.

Das ist verkehrt herum. Jetzt erscheint die gespeicherte Liste sofort, und die Aktualisierung läuft dahinter. Die Liste sagt dabei „wird aktualisiert”, und das ist mir wichtig: Dir alte Daten zu zeigen und dabei Frische zu behaupten, ist dieselbe Sorte Unehrlichkeit wie ein Bericht, der einen Erfolg meldet, den er nicht hatte.

Die andere Hälfte war schlimmer. Jede Mail-Aktion öffnete ihre eigene Verbindung: Ordner öffnen, drei Nachrichten lesen — vier Anmeldungen. Jetzt wird eine Sitzung je Konto weiterverwendet. Auf dem Telefon wird sie beim Wechsel in den Hintergrund freigegeben, denn eine wieder aufgenommene Verbindung ist tot, ohne es zu sagen: sie weiterzuverwenden würde die nächste Aktion hängen lassen, statt schnell zu scheitern.

Drei Löcher, die wie ein kaputtes Konto aussahen

Dann tauchte ein Vault auf mit einem Google-Konto und einem Microsoft-Konto. Was vorher nie vorgekommen war — mein eigener Aufbau hatte ein Konto je Anbieter, und jeder Test auch.

Drei verschiedene Fehler, alle im selben Kostüm: „das Konto ist kaputt, und neu anmelden hilft nicht.”

Der erste: ein über den gemeinsamen Consent verbundenes Konto lässt seinen Slot je Dienst bewusst leer, weil sein eines Token im Konto-Slot liegt. Die Bereitschaftsprüfung verlangte genau diesen Slot. Also galten ausgerechnet diese Konten als „nicht bereit” — es wurde gar kein Sync-Ziel gebaut, der Datei-Sync war still aus, und Mail fiel klanglos auf seine Offline-Kopie zurück. Ein Google-Drive-Vault kam lokal hoch.

Der zweite: die Broker-Abfrage fragte nach „einem Kalender-Token für dieses Vault” — nicht nach dem Konto. Mit einem Konto geht das zufällig gut. Mit zweien konnte der Microsoft-Kalender das Google-Token bekommen, und Google antwortet darauf mit einem 401, der sich exakt wie eine widerrufene Anmeldung liest.

Der dritte ist mein Liebling, soweit ein Fehler das sein kann. Ein Outlook-Konto hinzuzufügen brach den Google-Kalender. Das Outlook-Konto wieder zu löschen reparierte ihn. Das sieht aus, als vertrügen sich die beiden Konten nicht — und ist in Wahrheit ein Merker, der seinen Verbindungsvorgang überlebt hat und danach für alles im Vault geantwortet hat.

Alle drei sind weg, und jeder ist jetzt von einem Test gehalten, der rot wird, sobald die Kontogrenze wieder verschwimmt.

Die Vorlagen haben nichts vorgeführt

Anderer Winkel der App, dieselbe Art Befund.

Plainva bringt Vault-Vorlagen mit — PARA, GTD, Zettelkasten und so weiter. PARA lieferte ein Projekt, eine Aufgabe, einen Bereich. Der Zettelkasten hatte einen einzigen permanenten Zettel, was fachlich ein Ordner ist. Das Journal brachte eine Datenbank mit Tabellen- und Kalenderansicht und keinen einzigen Eintrag, also gingen beide Ansichten leer auf.

Eine Methoden-Vorlage, die von jedem Ding eines zeigt, lehrt die Methode nicht. Sie zeigt ihre leere Form.

Also ist der Bestand gefüllt worden — PARA von 6 auf 19 Notizen, GTD von 7 auf 16, der Zettelkasten von 4 auf 11, mit Zetteln, die einander im Text verlinken, weil genau das der Sinn eines Zettelkastens ist. Und es gibt eine neue: die Plainva-Tour, ein Vault mit neun Ordnern, sieben Datenbanken und rund vierzig verknüpften Notizen, in dem jede Ansicht einmal mit echten Daten auftaucht. Pinnwand, Kalender, Galerie, Board, Zeitleiste, Tabelle, ein Baum mit Unterelementen. Sie ist jetzt der empfohlene Einstieg im Vault-Chooser — dort saß bisher der leere Vault, was, wenn man kurz darüber nachdenkt, eine merkwürdige Empfehlung für jemanden ist, der die App noch nie gesehen hat.

Das alles existiert in allen zehn Sprachen, gebaut aus einer geteilten Struktur mit einem String-Bündel je Sprache. Vierzig Notizen zehnmal von Hand zu spiegeln ist die zuverlässigste Art, die ich kenne, sie auseinanderlaufen zu lassen.

Eine Vorlage, die fragt

Die Vorlagen selbst haben die größere Änderung bekommen. Bisher ersetzten sie eine Handvoll Platzhalter mit drei rohen Zeichenketten-Ersetzungen. Jetzt gibt es eine Engine, und die kann deutlich mehr: mit Datum und Wochentag rechnen, auf die Tagesnotiz in N Tagen verlinken, Fragen mit Vorgabewert stellen, Fragen mit Auswahlliste, einen Datums-Dialog, den Text, den Du markiert hattest, die Zwischenablage. Alle Fragen einer Vorlage erscheinen in einem Dialog — brichst Du ihn ab, wird nichts angelegt.

Und eine Vorlage kann von selbst starten. Ordner auf Vorlage abbilden oder Notiztyp auf Vorlage, und neue Notizen dort beginnen damit. Der längste Pfad gewinnt, ein Ordner schlägt einen Typ, und eine ausdrückliche Wahl schlägt beides.

Der Anlass, hier zu graben, war aber nicht die Funktionsliste. Es war das hier: die alte Ersetzung ließ {{cursor}} und {{prompt:…}} als Literale in der Datei stehen — und jede aus einer Vorlage gebaute Tagesnotiz erbte deren eigenes Frontmatter. Weil jede über den Knopf angelegte Vorlage mit plainva.tasks: false gestempelt wird, haben sich diese Tagesnotizen aus der Aufgabenübersicht ausgeblendet. Lautlos. Unter Wartung gibt es eine Reparatur, die jede betroffene Notiz zeigt, bevor sie etwas ändert.

Kleineres, das auffällt

Weiterhin wahr

Windows-Builds sind unsigniert, SmartScreen warnt also. Verschlüsselte Workspaces sind weiterhin als experimentell gekennzeichnet und bleiben das, bis ein unabhängiges Review stattgefunden hat. Und die mobile App trägt wieder dieselbe Versionsnummer wie der Desktop — 0.6.0 auf beiden, nachdem die zwei Linien ein paar Releases lang auseinandergelaufen waren.

0.6.0 herunterladen · alle Änderungen