diff --git a/frontend/src/routes/feed/+page.svelte b/frontend/src/routes/feed/+page.svelte index 753fccf..eb9fea9 100644 --- a/frontend/src/routes/feed/+page.svelte +++ b/frontend/src/routes/feed/+page.svelte @@ -450,7 +450,17 @@ const seen = new Set(uploads.map((u) => u.id)); const fresh = delta.uploads.filter((u) => !seen.has(u.id)); if (fresh.length) { - if (selectedHashtag || activeFilters.length) { + // Test the EFFECTIVE filter, not the raw chip state. `filterParams()` + // is what actually decides which rows the server returns, and in list + // view it reads `selectedHashtag` alone — `activeFilters` is ignored. + // `switchView('list')` deliberately keeps a chip there (an uploader + // chip, or a second tag) while setting `selectedHashtag` to the first + // TAG filter, which is null when the only chip was an uploader. So + // `activeFilters.length` was truthy on a list view that is genuinely + // unfiltered, and every delta raised the pill instead of merging — + // the same "a pill for rows that should have merged" this block was + // written to stop, one branch further in. + if (filterParams().toString() !== '') { // Still cannot MERGE under a filter — `/feed/delta` takes no // filter params and its rows carry no hashtags, so we cannot // tell which belong in this view. Flagging stale is right;