dccda8ebc9
Root cause: autoAddCriticalItems used stale in-memory cache (old critical items) and re-added items to Bring right after manual removal, because on_bring was now false but urgency was still 'critical' in the old cache. PHP smartShopping(): - Rename stockByFirstToken → stockByAnyToken (indexes ALL significant tokens) - 'Passata di pomodoro' depleted + 'Polpa di pomodoro' in stock → share token 'pomodoro' → passata no longer flagged as critical (COVERS: passata/polpa/pelato and any future tomato product variant) - Same logic: 'aglio'/'aglio rosso', 'latte'/'latte di montagna', etc. JS loadSmartShopping(): - When critical item set changes (items added OR removed), immediately reset _autoAddedCriticalTs and _bringCleanupTs so next shopping load uses fresh data instead of debounced old data JS cleanupObsoleteBringItems(): - Use any-token matching (like PHP) for both stockByAnyToken and urgentSmartByToken → 'Passata di pomodoro' in Bring, 'polpa' in stock → share 'pomodoro' → removed