feat(#299): Sender→Label Memory — Domain-Fallback #307
No reviewers
Labels
No labels
app/archiv
app/einkaufslisten
app/imap-client
app/wissensbasis
arch-answered
arch-question
area/api
area/auth
area/infra
area/mobile
area/shared
area/ui
area/web
portfolio-status
prio/high
prio/low
prio/medium
roadmap/public
size/l
size/m
size/s
size/xl
size/xs
status/blocked
status/needs-info
type/bug
type/chore
type/docs
type/feature
type/idea
type/refactor
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin-mrrm/mrrmlabapp!307
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/299-sender-memory-domain-fallback"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
SenderMemoryService.lookupfällt bei fehlendem Exact-Match auf eine Aggregat-Query pro Domain zurück (split_part(sender_addr, '@', 2),SUM(confirmCount),SUM(removeCount),COUNT(DISTINCT senderAddr)).gmail,outlook,gmx,web.de,icloud,proton,t-online, …) schließt Multi-Tenant-Domains vom Fallback aus → keine false positives zwischen verschiedenen Nutzern derselben Mail-Provider.SenderMemoryEntry.matchType: 'exact' | 'domain'exponiert die Herkunft für UI/Logging.API-Contract
senderMemoryTagSchemaerhältmatchType: z.enum(['exact', 'domain']).default('exact')— alte Server, die das Feld nicht senden, bleiben kompatibel.Die bestehenden Categorizer-Threshold-Checks (
confirmCount ≥ 2 AND confirm > remove) gelten für Domain-Treffer weiter; die strengeren Server-seitigen Filter laufen vorher und garantieren, dass Domain-Aggregate nur mit echter Evidenz kommen.Test plan
extractDomain,isProviderDomain, alle Lookup-Pfade inkl. Threshold-Edges + Provider-Blacklist)pnpm vitest runapps/api: 271/271 grünpnpm typecheck -r: clean (alle 11 Packages)pnpm test -r: apps/web 57/57, apps/mobile 49/49 — kein Bruch durch das neue optionalematchTypeBezug
Follow-up zu #294 (Sender→Label Memory). Komplementär zu #298 (Auto-Decay, PR #306). Kein Schema-Change, keine Migration nötig — reine Live-Aggregation auf der bestehenden
mail_sender_label_memory-Tabelle.Closes #299
Bei fehlendem Exact-Match auf `senderAddr` zusätzliche Aggregat-Query nach Domain (`split_part(sender_addr, '@', 2)`), gefiltert auf: - distinctSenders ≥ 2 (mind. 2 verschiedene Adressen derselben Domain) - sum(confirmCount) ≥ 3 - sum(confirmCount) > sum(removeCount) Damit löst `info@dhl.de` und `service@dhl.de` denselben Tag aus, sobald genug exakte Bestätigungen aus der DHL-Domain vorliegen. - Provider-Domain-Blacklist (gmail/outlook/gmx/web.de/icloud/proton/...) schließt Multi-Tenant-Domains aus, um false positives zu vermeiden. - `SenderMemoryEntry.matchType: 'exact' | 'domain'` exponiert die Match-Herkunft; api-client zod-Schema mit `.default('exact')` für Backwards-Compat mit alten Servern. - Schwelle ist strenger als Exact-Match (`confirmCount ≥ 2`), weil Domain-Aggregate inhärent weniger spezifisch sind. Closes #299