fix(search): re-run query on inline tag toggle so flipped items leave results
When an item's tag affordance is clicked from a search result row
(e.g. flip #todo to #done while searching #todo), the row's tag chip
updated but the item stayed visible — the local re-render reused the
same state.results array.
We already had a tag:item-added / tag:item-removed pubsub subscription
that calls debouncedRefresh, but (a) the 150ms debounce left a
visibly-stale row between click and refresh, and (b) when the bounce
didn't reach the search renderer the row stuck around indefinitely.
Fix: the affordance onToggle callback now calls runSearch + render
directly. The renderer already initiated the change, so it doesn't
need a pubsub round-trip to know to re-evaluate.