Files
nexarch/mail/docs/QA-02-PRUEFPROTOKOLL.md
T
sysops 2d32157de4 feat(mail): QA-02 Prüfgate Ingestion & Import
Neues Paket mail/internal/ingestiontestgate, spiegelt das etablierte
Muster aus mail/internal/qagate (QA-03) und mail/internal/importtestgate
(IMP-09): ein echtes, ausführbares Gate statt einer nur behaupteten
Prüfung. IngestionAndImportPackages listet alle 14 aus QA-02s eigener
dependsOn-Liste folgenden Pakete (Protokoll-Server, Fehlerbehandlung/
Logging, Import-Pfade). RunTestSuites führt go test -count=1 -p 1 über
alle 14 Pakete aus — -p 1 bewusst, da parallele Testbinaries sich bei
den echten QA-07-Lasttests gegenseitig CPU-Kontingent wegnehmen und
Latenz-Zielwerte durch reine Testhost-Überlastung verfehlen lassen
(real beobachtet, mit -p 1 behoben). ScanForKnownErrorPointTests prüft
automatisiert, dass die drei in Akzeptanzkriterium 2 namentlich
geforderten Fehlerpunkte (Header-Injection, Anhang-Limit, UIDVALIDITY)
je einen passenden Regressionstest im zuständigen Paket haben.

Gate-Lauf gegen aktuellen Stand real ausgeführt und mit Zeitstempel
dokumentiert: BESTANDEN, 14 Pakete grün, alle drei bekannten
Fehlerpunkte abgedeckt. Scanner durch Negativtest bewiesen, dass er
eine tatsächlich fehlende Abdeckung real erkennt statt immer
"bestanden" zu melden.

Pflichtprüfung 3 (Zweitperson bestätigt Gate-Ergebnis unabhängig)
bleibt strukturell offen — eine einzelne Sitzung kann keine unabhängige
zweite Person sein, im Prüfprotokoll dokumentiert (analog zu ING-10 und
QA-04).

go build/go vet/golangci-lint clean, gesamtes Mail-Modul
regressionsfrei getestet.
2026-09-01 17:36:48 +02:00

4.4 KiB
Raw Blame History

QA-02 — Prüfgate Ingestion & Import: Prüfprotokoll

Datum: 2026-09-01 Host: 192.168.1.131 (Build/Test/Lint), rsync + ssh Paket: mail/internal/ingestiontestgate (neu)

Umsetzung

Spiegelt das bereits etablierte Muster aus mail/internal/qagate (QA-03) und mail/internal/importtestgate (IMP-09) — ein echtes, ausführbares Prüfgate statt einer nur behaupteten Prüfung:

  • IngestionAndImportPackages: alle 14 Pakete, die aus QA-02s eigener dependsOn-Liste folgen (ING-10: IMAP/POP3/SMTP/MIME/Folder-State; ING-07: protoguard; ING-08: protolog; IMP-04/IMP-09: imapimport; IMP-05: hotfolder; IMP-06: virusscan; IMP-07: mailboxconfig; IMP-08: syncalert; zugehörig: attachments, mailrules).
  • RunTestSuites: führt go test -count=1 -p 1 über alle 14 Pakete aus (-p 1: nacheinander statt parallel — mehrere gleichzeitige Testbinaries würden sich bei den echten QA-07-Lasttests in imap/pop3/smtp gegenseitig CPU-Kontingent wegnehmen und so Latenz-Zielwerte durch reine Testhost-Überlastung verfehlen lassen, real beobachtet und behoben).
  • ScanForKnownErrorPointTests: prüft für die drei in Akzeptanzkriterium 2 namentlich geforderten Fehlerpunkte (Header-Injection, Anhang-Limit, UIDVALIDITY), ob im jeweils zuständigen Paket eine _test.go-Datei eine passende Testfunktion enthält — automatisiert, nicht nur behauptet.

Pflichtprüfung 1: Gate-Lauf gegen aktuellen Stand von ING-10/IMP-09 dokumentiert

TestRun_RealGateAgainstCurrentIngestionImportState (ingestiontestgate/gate_test.go): echter Gate-Lauf gegen den aktuellen Quelltext, Ergebnis:

# QA-02 Gate-Ergebnis: BESTANDEN
Zeitstempel (UTC): 2026-09-01T15:35:33Z

## Testsuiten (Ingestion & Import, 14 Pakete)
Bestanden: true

## Bekannte Fehlerpunkte — Regressionstest-Stichprobe
- Header-Injection: abgedeckt=true — TestHeaderWriter_RejectsControlCharsAndCRLFInSubjectAndDisplayName in internal/mailer/mailer_test.go
- Anhang-Limit: abgedeckt=true — TestParse_OversizedAttachmentRejectedNotMemoryExhausted in internal/mimeparse/mimeparse_test.go
- UIDVALIDITY: abgedeckt=true — TestRebuild_ChangesUIDValidityOnSimulatedFolderRebuild in internal/folderstate/store_test.go

Ergebnis: BESTANDEN, dokumentiert mit Zeitstempel.

Pflichtprüfung 2: Stichprobe — mindestens ein Regressionstest je bekanntem Fehlerpunkt vorhanden

Durch Pflichtprüfung 1 automatisiert mitgeprüft. Ergänzt um zwei eigenständige Bausteintests: TestScanForKnownErrorPointTests_ RealPackagesAllCovered (positiver Nachweis gegen den echten Quelltext) und TestScanForKnownErrorPointTests_DetectsMissingCoverage (Negativtest — beweist, dass der Scanner eine tatsächlich fehlende Abdeckung auch real erkennt, nicht nur immer "bestanden" meldet).

Ergebnis: BESTANDEN.

Pflichtprüfung 3: Zweite Person bestätigt Gate-Ergebnis unabhängig

Nicht durchführbar durch diese Sitzung, aus demselben strukturellen Grund wie bereits bei ING-10 (Stichprobenreview) und QA-04 (API-Token-Prüfung) dokumentiert: eine einzelne KI-Sitzung kann keine unabhängige ZWEITE Person sein, ohne den Zweck der Prüfung (echte menschliche Gegenkontrolle) zu unterlaufen. Offen — erfordert Bestätigung durch den Nutzer oder eine weitere Person. Grundlage für dieses Review: der Gate-Bericht oben, reproduzierbar über go test ./internal/ingestiontestgate/... -run TestRun_RealGate mit gesetztem TEST_TENANT_DSN/TEST_MANTICORE_URL.

Akzeptanzkriterien

  1. Gate prüft Testabdeckung und Bestehen aller Ingestion-/ Import-Testsuiten: durch Pflichtprüfung 1 belegt.
  2. Gate prüft, dass bekannte Fehlerpunkte (Header-Injection, Anhang-Limit, UIDVALIDITY) durch Tests abgedeckt sind: durch Pflichtprüfung 2 belegt.
  3. Gate-Ergebnis ist dokumentiert und nachvollziehbar mit Zeitstempel: GateResult.Report(), siehe Pflichtprüfung 1.

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, TEST_S3_ENDPOINT/TEST_S3_ACCESS_KEY/TEST_S3_SECRET_KEY gesetzt) → alle Pakete ok, inkl. neuem internal/ingestiontestgate

Keine Regression.

Ergebnis

QA-02 erfüllt Akzeptanzkriterium 13 mit echten, ausgeführten Nachweisen; Pflichtprüfung 3 (Zweitreview) bleibt strukturell offen, siehe Abschnitt oben — analog zu ING-10 und QA-04 im Entscheidungs- verlauf vermerkt. Freigeschaltet: QA-09 (zusammen mit QA-05/QA-06/ QA-08).