bug(ui): A filter on the Notifications tab rewrites the global Operations counts #3449
Description
Summary
Header and badges move from 502 to 34, to 2, and back to 502 when the filter is cleared; "Total 34" sits under "Pending 502".
Category: functional · Severity: Medium · Validated: source
Context
Found by the click-through UI sweep of a local instance (dev @ c90c711ee, 1.0.0-rc1), fixture agents only.
Repro
- Open
/operations?tab=notificationswith several hundred pending notifications. - Note the page header, the Notifications tab badge and the Operations nav badge.
- Set Status = Acknowledged, or tick Show dismissed, or pick one agent.
Expected
Honest status: the global pending count does not depend on the filter of the list being viewed; a stated total is the real total.
Observed
Header and badges move from 502 to 34, to 2, and back to 502 when the filter is cleared; "Total 34" sits under "Pending 502".
Validation
src/frontend/src/stores/notifications.js:139 — updatePendingCount() recomputes the global pendingCount from the currently loaded (filtered, paged) list; src/frontend/src/views/Operations.vue:291-312 uses it for the header and both badges.
Acceptance Criteria
- The repro above gives the Expected result at 1440 and 768, in light and dark.
- A regression test pins the behaviour (unit or Playwright, whichever tier can observe it).
- No new raw-palette classes or hand-rolled primitives are introduced by the fix (
docs/memory/design-system-contract.md).
Technical Notes
Evidence screenshots (kept on the machine that ran the sweep; the evidence folder is gitignored because the repository is public):
docs/testing/ui-sweep/evidence/2026-10-09-all/6d97027e-1.pngdocs/testing/ui-sweep/evidence/2026-10-09-all/6d97027e-2.png
Supersedes earlier sweep fingerprints: 1c9b4cca.
Found by /ui-sweep --all @ c90c711
Activity
fix(operations): the global pending-notification count no longer foll…