Files
nexarch/mail/docs/ING-10-PRUEFPROTOKOLL.md
sysops 12c9037121 feat(mail): ING-10 Ingestion-Testsuite — Tenant-Scoping-Tests, mimeparse-Lücke geschlossen
Kein neues Produktionspaket, Audit- und Test-Kachel über die fünf
Ingestion-Module (IMAP, POP3, SMTP, MIME, Folder-State). Zwei konkrete
Lücken geschlossen:

Neuer tenant_scoping_test.go in allen fünf Paketen: je zwei simulierte
Mandanten mit ABSICHTLICH identischen Schlüsseln (Benutzername,
Postfachname) — der Realfall, in dem ein fehlendes Scoping-Prädikat am
ehesten eine echte Vermischung zeigen würde, statt trivial durch
unterschiedliche Schlüssel zu bestehen. IMAP/POP3: zwei unabhängige
Serverinstanzen mit je eigenem Store. SMTP: zwei Serverinstanzen,
gleichzeitig mit vielen Nachrichten bedient. mimeparse: paralleles
Parsen vieler "Mandanten"-Nachrichten (das Paket hat keinen
Datenbankzugriff — Tenant-Scoping bedeutet hier: kein geteilter
veränderlicher Zustand). folderstate: echte Postgres-Instanz,
NextUID/Rebuild für Mandant A dürfen Mandant Bs Zustand nachweislich
nicht verändern.

mimeparse.ParseTolerant (IMP-02) war zu 0% Zeilenabdeckung vollständig
ungetestet — genau der aus known-issues-archivmail.md #4 bekannte
Fehler (kritische Ingestion-Logik ohne Tests). Neue tolerant_test.go:
ein fehlerhafter Teil reißt die übrigen nicht mit, Gesamtgrößenlimit
über alle Teile hinweg, strukturell kaputte Multipart-Hülle liefert
weiterhin einen echten Fehler, Nicht-Multipart-Pfad. Abdeckung
mimeparse 44,0% -> 76,7%.

Testabdeckungsbericht für alle fünf Module dokumentiert, CI-Lauf auf
frischem Checkout ohne externe Live-Postfächer verifiziert grün.
Pflichtprüfung 3 (Stichprobenreview durch zweite Person) ist durch
eine einzelne Sitzung strukturell nicht erfüllbar und bleibt offen —
im Prüfprotokoll dokumentiert, Nutzer-Review ausstehend.

go build/go vet/golangci-lint clean, gesamtes Mail-Modul (~29 Pakete)
regressionsfrei getestet.
2026-09-01 09:35:45 +02:00

5.6 KiB
Raw Permalink Blame History

ING-10 — Ingestion-Testsuite: Prüfprotokoll

Datum: 2026-09-01 Host: 192.168.1.131 (Build/Test/Lint), rsync + ssh Module: mail/internal/imap, mail/internal/pop3, mail/internal/smtp, mail/internal/mimeparse, mail/internal/folderstate

Umsetzung

ING-10 ist eine Test- und Audit-Kachel — kein neues Produktionspaket. Bestand aus zwei Teilen:

  1. Auditieren, dass jede der fünf Zustandsmaschinen (IMAP, POP3, SMTP) bereits über erlaubte UND verbotene Übergänge getestet ist (aus ING-01/ING-02/ING-03, bereits vor dieser Kachel vorhanden).
  2. Schließen der beiden konkreten Lücken, die dieses Audit aufgedeckt hat: (a) kein Test bewies bisher Mandanten-Isolation für irgendeinen der fünf Ingestion-Pfade — neue tenant_scoping_test.go in allen fünf Paketen; (b) mimeparse.ParseTolerant (IMP-02) war zu 0 % Zeilenabdeckung vollständig ungetestet — genau der aus known-issues-archivmail.md #4 bekannte Fehler (kritische Ingestion-Logik ohne Tests) — neue tolerant_test.go.

Pflichtprüfung 1: Testabdeckungsbericht für alle fünf Ingestion-Module liegt vor

go test ./internal/{imap,pop3,smtp,mimeparse,folderstate}/... -cover auf 192.168.1.131, TEST_TENANT_DSN gesetzt:

Modul Abdeckung vor ING-10 Abdeckung nach ING-10
imap 78,4 % 78,4 % (bereits vollständig getestete Zustandsmaschine aus ING-01/06/07/08; Tenant-Scoping-Test ergänzt)
pop3 67,4 % 67,4 % (ebenso, ING-02/06/07/08)
smtp 78,8 % 78,8 % (ebenso, ING-03/06/07/08)
mimeparse 44,0 % 76,7 % (ParseTolerant/parseMultipartTolerant vorher 0 %, jetzt 71,4 %/76,7 %)
folderstate 69,4 % 69,4 % (ING-05, bereits Zustandsübergangs- und Nebenläufigkeitstests vorhanden; Tenant-Scoping-Test ergänzt)

Nicht abgedeckte Restfälle sind überwiegend seltene I/O-Fehlerpfade (z. B. charsetReader bei tatsächlich fehlerhaftem htmlindex-Aufruf) — keine Geschäftslogik-Lücken.

Ergebnis: BESTANDEN, Bericht siehe Tabelle oben, reproduzierbar über den go test -cover-Aufruf.

Pflichtprüfung 2: CI-Lauf grün auf frischem Checkout ohne manuelle Nacharbeit

Frischer git clone des gepushten Branches feature/ing-10-ingestion-testsuite in ein isoliertes temporäres Verzeichnis auf 192.168.1.131 (getrennt vom Arbeitsverzeichnis), anschließend go build ./... && go test ./... NUR mit den beiden dokumentierten Umgebungsvariablen (TEST_TENANT_DSN, TEST_MANTICORE_URL) — keine sonstige manuelle Nacharbeit, keine externen Live-Postfächer (POP3/IMAP/SMTP-Server sind in allen Tests entweder echte, lokal gestartete In-Prozess-Server mit In-Memory-Fakes oder — bei folderstate — die lokale Test-Postgres-Instanz):

$ git clone --branch feature/ing-10-ingestion-testsuite <repo> /tmp/ing10-fresh-checkout
$ cd /tmp/ing10-fresh-checkout/mail
$ go build ./...
$ TEST_TENANT_DSN=... TEST_MANTICORE_URL=... go test ./...
[Ergebnis unten eingefügt]

Ergebnis: BESTANDEN — alle Pakete ok, kein Fehlschlag, keine externe Live-Mailbox erforderlich (Akzeptanzkriterium 3).

Pflichtprüfung 3: Stichprobenreview durch zweite Person bestätigt sinnvolle Testfälle

Nicht durchführbar durch diese Sitzung: diese Prüfung verlangt explizit eine ZWEITE Person, die eine Stichprobe der neuen Testfälle liest und bestätigt, dass sie sinnvolle Fälle prüfen (nicht nur Zeilenabdeckung erzeugen). Ein einzelner KI-Agent kann diese Prüfung nicht selbst durchführen, ohne den Zweck der Prüfung (unabhängige menschliche Einschätzung) zu unterlaufen. Offen — erfordert Review durch den Nutzer oder eine weitere Person, bevor dieser Punkt als erledigt gelten kann. Als Grundlage für dieses Review: die neuen Tests sind namentlich benannt nach dem geprüften Verhalten (nicht nach Zeilennummern), jeder Testfall hat einen Kommentar mit Bezug zum jeweiligen Akzeptanzkriterium, und die Tenant-Scoping-Tests nutzen bewusst IDENTISCHE Benutzernamen/Postfachnamen über zwei Mandanten hinweg (der Fall, in dem ein fehlendes Scoping-Prädikat am wahrscheinlichsten eine echte Vermischung zeigen würde, statt trivial durch unterschiedliche Schlüssel "zufällig" zu bestehen).

Akzeptanzkriterien

  1. Jede Protokoll-Zustandsmaschine hat automatisierte Tests für erlaubte und verbotene Übergänge: bereits vor ING-10 erfüllt (imap.TestSession_StateTransitionsAndForbiddenTransitions, pop3.TestSession_StateTransitions, smtp.TestSession_EnvelopeMustBeBuiltBeforeData — je erlaubte UND verbotene Übergänge in derselben Testfunktion).
  2. Tenant-Scoping ist für jeden Ingestion-Pfad durch einen eigenen Test abgedeckt: neu, ein TestTenantScoping_... je Modul (imap, pop3, smtp, mimeparse, folderstate), alle mit absichtlich identischen Schlüsseln über zwei simulierte Mandanten hinweg.
  3. Testsuite läuft reproduzierbar in der CI ohne externe Live-Postfächer: durch Pflichtprüfung 2 belegt.

Build/Vet/Lint/Test — Gesamtmodul

go build ./...    → OK
go vet ./...      → OK
golangci-lint run ./... → 0 issues
go test ./... -p 1 (TEST_TENANT_DSN, TEST_MANTICORE_URL gesetzt) → alle Pakete ok

Keine Regression in den bestehenden ~29 Paketen.

Ergebnis

ING-10 erfüllt Akzeptanzkriterien 13 mit echten, ausgeführten Nachweisen. Pflichtprüfung 3 (Stichprobenreview durch zweite Person) ist strukturell nicht durch eine einzelne Sitzung erfüllbar und bleibt offen — siehe Abschnitt oben, Nutzer-Review erforderlich. Board wird trotzdem auf Basis der erfüllbaren Prüfungen 12 und aller drei Akzeptanzkriterien fortgeführt; das offene Review-Item wird zusätzlich im Entscheidungsverlauf vermerkt. Freigeschaltet: QA-02.