feat(#294): Sender→Label Memory — Online-Feedback-Loop für Mail-Tags #295
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!295
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/294-sender-label-memory"
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?
Closes #294
Was
Das System lernt aus User-Bestätigungen: bestätigt der User wiederholt einen Tag für einen Sender (z.B.
noreply@dhl.de→Sendung), wird der Tag beim nächsten Batch direkt vergeben — NLI wird übersprungen.Warum
Nach #268 (Threshold), #290 (Label-Wording, regression) und #292 (Subject-Weighting, regression) sind die manuellen NLI-Hebel ausgereizt. Pivot auf Online-Loop laut Issue #294.
Architektur
Backend:
mail_sender_label_memory(id, owner, senderAddr, tagId, confirmCount, removeCount, lastSeenAt) + Unique-Index auf(owner, senderAddr, tagId)SenderMemoryService.incrementConfirm/Removevia Upsert (ON CONFLICT DO UPDATE)MailTagsService.confirmTag→+confirm;removeTag→+remove— der Sender wird ausmail_messages_cache.from_addrgezogenPOST /mail/sender-memory/lookupmit{senderAddrs: string[]}(1-100)Mobile:
confirmCount ≥ 2UNDconfirm > remove; bei mehreren Tag-Treffern gewinnt höchsteconfirm - remove-MargeassignTagdirekt, NLI skip, weiterzählenShared:
normalizeSenderAddrin@mrrmlab/shared-types— beide Seiten nutzen die exakt gleiche Logik ("John <X@Y>"→x@y, lowercase, trim)Was NICHT in dieser PR
*@dhl.de)Tests
SenderMemoryService, 4 neue fürMailTagsService-Hooks (confirm/remove rufen Memory mit Sender, skip wenn fromAddr null)Manueller Test-Plan
[NLI]-Zeile, dafür direktes assignTag)Beim manuellen Test fiel auf: assignTag(status='confirmed') aus der Mobile-UI (reader.tsx, review.tsx) löste keinen Memory-Hook aus — nur confirmTag tat das. Dadurch wurden direkte User-Aktionen ("Werbung" an PayPal-Newsletter anhängen) nicht gelernt. Fix: assignTag ruft incrementConfirm auf, wenn status=confirmed. Bei status=suggested (NLI-Batch) bleibt es bei reinem Insert ohne Memory-Effekt. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>