feat(#296): Web-Classifier — Sender→Label Memory anbinden #304

Merged
admin-mrrm merged 1 commit from feat-296-web-classifier-sender-memory into main 2026-05-16 01:53:13 +02:00
Owner

Summary

Web-Categorizer nutzt jetzt analog zu Mobile (#294) das Sender-Memory als Short-Circuit vor NLI. Bei klarem Match (confirmCount≥2 && confirm>remove) wird der Tag direkt zugewiesen, NLI übersprungen.

  • categorizeFolderItems aus dem Hook in eigenes Service-Modul apps/web/src/services/mail-batch-categorizer.ts extrahiert (testbar, spiegelt Mobile-Layout)
  • SENDER_MEMORY_MIN_CONFIRM = 2 als gemeinsame Konstante in @mrrmlab/shared-types — Mobile zieht ihn von dort statt lokaler Magic-Number
  • 8 neue Tests für den Web-Pfad (spiegeln die Mobile-Spec): Lookup-Call-Shape, Short-Circuit-Trigger, Threshold-Boundary, Remove-Dominanz, Max-Margin-Tie-Break, leere Sender-Liste, Netzwerk-Failure-Fallback

Test plan

  • pnpm --filter @mrrmlab/web typecheck
  • pnpm --filter @mrrmlab/mobile typecheck
  • pnpm --filter @mrrmlab/shared-types typecheck
  • pnpm --filter @mrrmlab/web test — 52/52 (inkl. 8 neue)
  • pnpm --filter @mrrmlab/mobile test — 49/49 (regression nach shared-Const-Umzug)
  • Manuell verifizieren: Bekannten Sender in INBOX kategorisieren → Tag wird ohne NLI-Aufruf zugewiesen

Closes #296

## Summary Web-Categorizer nutzt jetzt analog zu Mobile (#294) das Sender-Memory als Short-Circuit vor NLI. Bei klarem Match (`confirmCount≥2 && confirm>remove`) wird der Tag direkt zugewiesen, NLI übersprungen. - `categorizeFolderItems` aus dem Hook in eigenes Service-Modul `apps/web/src/services/mail-batch-categorizer.ts` extrahiert (testbar, spiegelt Mobile-Layout) - `SENDER_MEMORY_MIN_CONFIRM = 2` als gemeinsame Konstante in `@mrrmlab/shared-types` — Mobile zieht ihn von dort statt lokaler Magic-Number - 8 neue Tests für den Web-Pfad (spiegeln die Mobile-Spec): Lookup-Call-Shape, Short-Circuit-Trigger, Threshold-Boundary, Remove-Dominanz, Max-Margin-Tie-Break, leere Sender-Liste, Netzwerk-Failure-Fallback ## Test plan - [x] `pnpm --filter @mrrmlab/web typecheck` - [x] `pnpm --filter @mrrmlab/mobile typecheck` - [x] `pnpm --filter @mrrmlab/shared-types typecheck` - [x] `pnpm --filter @mrrmlab/web test` — 52/52 (inkl. 8 neue) - [x] `pnpm --filter @mrrmlab/mobile test` — 49/49 (regression nach shared-Const-Umzug) - [ ] Manuell verifizieren: Bekannten Sender in INBOX kategorisieren → Tag wird ohne NLI-Aufruf zugewiesen Closes #296
feat(#296): Web-Classifier — Sender→Label Memory anbinden
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
3e399b2a78
Web nutzt jetzt analog zu Mobile (#294) das Sender-Memory als
Short-Circuit vor NLI: bei klarem Match (confirmCount≥2, confirm>remove)
wird der Tag direkt zugewiesen, Inference übersprungen. Schwellwert
liegt jetzt in @mrrmlab/shared-types — Mobile zieht ihn von dort.

- categorizeFolderItems aus use-categorize-folder.ts in
  services/mail-batch-categorizer.ts extrahiert (testbar)
- SENDER_MEMORY_MIN_CONFIRM=2 als gemeinsame Konstante in shared-types
- Mobile-Categorizer auf shared-types-Import umgestellt
- 8 neue Tests für Web-Pfad (spiegeln Mobile-Spec)

Closes #296

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!304
No description provided.