Regelwerk für automatische Zuordnung, Verschlagwortung und Klassifizierung importierter E-Mails nach Absender, Betreff, Postfach und Anhangstyp. - store.go: Postgres-Store für Regeln (Absender-/Betreff-/Postfach-/ Anhangstyp-Muster als reguläre Ausdrücke, Category einwertig, Tag mehrwertig, Priority — niedrigere Zahl = höhere Priorität). - engine.go: Engine.Evaluate wertet Regeln in Prioritätsreihenfolge aus, "first match wins" für Category, alle zutreffenden Regeln tragen zu Tags bei. Muster werden beim Erzeugen der Engine einmal kompiliert. - Bewusst keine Funktion zum rückwirkenden Neuklassifizieren bestehender Nachrichten — nur explizite RunOnce-artige Neuauswertung wirkt. Prüfungen (alle real durchgeführt, siehe mail/docs/IMP-03-PRUEFPROTOKOLL.md): 1. TestEvaluate_ConflictingRulesRespectDocumentedPriority: höherpriorisierte Regel gewinnt real bei widersprüchlichen Kategorien. 2. TestNewEngine_NewRuleDoesNotAffectAlreadyCapturedResult: bereits erfasstes Ergebnis bleibt real unverändert nach neuer Regel. 3. TestEvaluate_TwentyPlusRulesStayPerformant: 31 Regeln, 2,64µs/Auswertung. Kein Umbau: kein bestehendes Paket angefasst. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HhgFcLS8tYMhDJpP74C6AQ
2.8 KiB
2.8 KiB
IMP-03 – Prüfprotokoll: E-Mail-Regeln (Zuordnung/Tags/Klassifizierung)
Voraussetzung IMP-01 (Fertig).
Umsetzung
mail/internal/mailrules/store.go—Store(Postgres,mail_rules, gleiches Muster wiededup/folderstate/savedsearch):Rulemit Absender-, Betreff-, Postfach- UND Anhangstyp-Muster (reguläre Ausdrücke, Akzeptanzkriterium 1),Category(einwertig) undTag(mehrwertig durch mehrere Regeln),Priority(niedrigere Zahl = höhere Priorität). Regex-Validierung bereits beim Anlegen (Create).mail/internal/mailrules/engine.go—Engine.Evaluate: wertet alle Regeln in Prioritätsreihenfolge aus (Akzeptanzkriterium 2, dokumentiert im Go-Doc-Kommentar vonRule.Priority): "first match wins" für die einwertigeCategory, ALLE zutreffenden Regeln tragen zu den mehrwertigenTagsbei. Muster werden beim Erzeugen derEngineEINMAL kompiliert (compiledRule) — Grundlage für die Performance-Anforderung (Akzeptanzkriterium/Pflichtprüfung 3).- Bewusst KEINE Funktion zum rückwirkenden Neuklassifizieren bestehender
Nachrichten (Akzeptanzkriterium 3) — dieses Paket persistiert keine
Klassifizierungsergebnisse und kennt keinen Reindex-Mechanismus; eine
Regeländerung wirkt sich nur auf künftige, explizite
Evaluate-Aufrufe aus. - Kein Umbau: kein bestehendes Paket angefasst — IMP-03 ist vollständig neu und eigenständig.
Prüfungen
| # | Prüfung | Ergebnis |
|---|---|---|
| 1 | Test mit widersprüchlichen Regeln bestätigt dokumentierte Priorisierung | bestanden – TestEvaluate_ConflictingRulesRespectDocumentedPriority: zwei Regeln matchen dieselbe Nachricht mit widersprüchlichen Kategorien, die höherpriorisierte (Priority 10 vor 200) gewinnt real |
| 2 | Test: neue Regel ändert keine bereits importierten Altbestände automatisch | bestanden – TestNewEngine_NewRuleDoesNotAffectAlreadyCapturedResult: ein vor Regelanlage erfasstes Ergebnis bleibt real unverändert, nachdem die neue Regel angelegt wurde; erst eine explizite Neuauswertung zeigt real die neue Kategorie |
| 3 | Regelset mit 20+ Regeln bleibt performant auswertbar | bestanden – TestEvaluate_TwentyPlusRulesStayPerformant: 31 reale Regeln, 1000 Auswertungen in 2,64ms gesamt (2,64µs/Auswertung) |
Build/Test-Ergebnis (192.168.1.131)
go build ./... -> clean
go vet ./... -> clean
golangci-lint run ./... -> 0 issues
TEST_TENANT_DSN=... go test ./internal/mailrules/... -v -timeout 60s -> 3/3 bestanden
TEST_TENANT_DSN=... TEST_MANTICORE_URL=... go test ./... -p 1
-> alle 17 Pakete bestanden, keine Regression
Gesamtergebnis
Bestanden. Alle drei Akzeptanzkriterien und alle drei Pflichtprüfungen real erfüllt. Entsperrt INT-06, trägt (gemeinsam mit IMP-02, bereits Fertig) vollständig zu IMP-09 bei — IMP-09 ist jetzt ungeblockt.