# 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 1–3 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).