#103 — Bug — Smart-Add ignoriert Mengen-Präfix und globale Kategorie-Wissensbasis #106
Labels
No labels
priority/could
priority/must
priority/should
priority/wont
status/blocked
status/claimed
status/done-migrated
type/bug
type/feature
type/infra
type/tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
robert/todo#106
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Story: Bug — Smart-Add ignoriert Mengen-Präfix und globale Kategorie-Wissensbasis
As a Nutzer der Einkaufsliste,
I want to dass Smart-Add eine bereits im Text enthaltene Menge (z. B. "5 Dosen Kokosmilch") und eine
bereits bekannte Kategorie (z. B. "Gurke" → Obst & Gemüse) automatisch erkennt,
so that ich nicht bei jedem Hinzufügen erneut nach Menge und Kategorie gefragt werde, obwohl das System
das längst wissen könnte.
Hintergrund / Root Cause (verifiziert im Code, 2026-08-08): Es gibt zwei parallele Backend-Pfade:
AddOrActivateShoppingProductCommandHandler(der "Plain Fallback") strippt eine Mengen-Präfix aus demNamen (
ShoppingQuantityPrefixParser.Strip) und summiert sie korrekt mit einer vorhandenen Menge; er ruftaußerdem
ShoppingCategoryResolver.ResolveFromKnowledgeBase— die aus#90stammende, per Seed-CSVbefüllte globale Produkt→Kategorie-Zuordnung — nicht selbst auf (das übernehmen
CreateShoppingProductCommandHandler/AddOrActivateShoppingProductCommandHandlerbereits serverseitig).Das Problem liegt im Frontend:
SmartAddInput.tsx'ssubmit()nimmt diesen Fallback-Pfad nur, wenn derML-Worker noch nicht bereit ist oder die Eingabe kürzer als 2 Zeichen ist — für jede normale Eingabe (Worker
bereit, ≥2 Zeichen, kein starker Produkt-/Kategorie-Treffer im lokalen Embedding-Korpus) wird stattdessen
setCategoryPickerOpen(true)aufgerufen. Der resultierendecreateInCategory-Pfad (a) übergibt denungestrippten Namen (inkl. Mengen-Präfix) an den serverseitigen Dubletten-Check, wodurch z. B. "3
Bananen" nie mit dem existierenden Produkt "Bananen" gematcht wird und stattdessen als neues Produkt "3
Bananen" mit Menge
nullangelegt wird (das vom Nutzer beobachtete "Überschreiben" statt Summieren ist einSymptom dieser Namens-Nichtübereinstimmung), und (b) ruft nie
ShoppingCategoryResolver.ResolveFromKnowledgeBaseauf, sondern verlangt immer eine manuelleKategorie-Auswahl über den Picker-Dialog.
Acceptance criteria:
Produkt→Kategorie-Wissensbasis geprüft (dieselbe Logik wie
ShoppingCategoryResolver .ResolveFromKnowledgeBase); bei einem Treffer wird das Produkt direkt in die passende (ggf. auf derListe noch anzulegende) Kategorie einsortiert, ohne Nachfrage.
jedem Namens-Abgleich und jeder Produkterstellung abgetrennt (
ShoppingQuantityPrefixParser-Logik),egal über welchen der Smart-Add-Pfade (Produkt-Treffer, Kategorie-Treffer, manueller Picker, Plain
Fallback) das Produkt am Ende angelegt/aktiviert wird.
Mengen-Bestätigungs-Popup für diesen Fall vollständig (keine überflüssige Nachfrage für Werte, die
schon aus dem Text bekannt sind).
jeden Smart-Add-Pfad korrekt erkannt und seine Menge summiert statt eine Dublette anzulegen — die
Regression aus dem Beispiel "5 Bananen vorhanden + 3 Bananen hinzugefügt → 8" ist damit behoben.
Mengen-Popup erscheinen weiterhin).
Out of scope for this story:
zusätzliche Abkürzung on top of der jetzt korrekt greifenden Backend-Logik.
#108, die auf dieser hier aufbaut).