Commit f9837b8
feat(ui): add in-app notices (#185)
* feat: add in-app notices
* fix(ui): bound the notice queue and make the stack scrollable
Persistent error notices never auto-expire, and the queue had no cap, no
dedup, and rendered in a plain Column. A re-emitting fault (a broken sink
honked repeatedly, device churn) grew the queue and the on-screen stack
without limit, pushing notices and their close buttons off-screen with no
way to clear them.
- Coalesce identical notices (same level/title/body), refreshing the expiry
in place instead of stacking duplicates.
- Cap the queue at NoticeQueue::MAX_NOTICES, evicting the oldest beyond it.
- Wrap the toast stack in a height-bounded scrollable so overflow stays
reachable and dismissable.
Addresses the CRITICAL flagged in the #185 review.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(app): treat coalesced notices as freshest for cap eviction
A re-emitted notice refreshed its expiry in place but kept its original
deque position, so oldest-first cap eviction could victimize the most
actively re-emitting notice while stale ones survived. Coalescing now
moves the refreshed notice to the back, aligning recency with eviction.
Also applies the cargo fmt cleanup that was failing the CI lint job.
Addresses CodeRabbit review on PR #185.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci(deny): ignore quick-xml RUSTSEC-2026-0194/0195 pending upstream bump
Both advisories are DoS-via-untrusted-XML in quick-xml < 0.41. The sole
consumer is wayland-scanner, a build-time proc-macro parsing vendored
Wayland protocol XML; no untrusted XML is parsed at runtime, so neither
issue is reachable in the shipped binary. wayland-scanner 0.31.10
(latest) still pins quick-xml ^0.39 — drop these ignores when it moves
to 0.41.
Closes #192.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* chore(deps): bump anyhow to 1.0.103 (RUSTSEC-2026-0190)
anyhow 1.0.102 is flagged unsound (Error::downcast_mut UB after
Error::context); 1.0.103 is the patched release already on main.
Regenerates the Flatpak cargo-sources.json for the lock change.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: retrigger checks (pull_request events for previous pushes were dropped)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: retrigger checks (pull_request events for previous pushes were dropped)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent 18b6979 commit f9837b8
5 files changed
Lines changed: 544 additions & 39 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
25 | 29 | | |
26 | 30 | | |
27 | 31 | | |
| |||
55 | 59 | | |
56 | 60 | | |
57 | 61 | | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
58 | 65 | | |
59 | 66 | | |
60 | 67 | | |
| |||
210 | 217 | | |
211 | 218 | | |
212 | 219 | | |
213 | | - | |
214 | | - | |
215 | | - | |
| 220 | + | |
| 221 | + | |
216 | 222 | | |
217 | 223 | | |
218 | 224 | | |
| |||
431 | 437 | | |
432 | 438 | | |
433 | 439 | | |
434 | | - | |
| 440 | + | |
435 | 441 | | |
436 | 442 | | |
437 | 443 | | |
| |||
493 | 499 | | |
494 | 500 | | |
495 | 501 | | |
496 | | - | |
| 502 | + | |
497 | 503 | | |
498 | 504 | | |
499 | 505 | | |
| |||
610 | 616 | | |
611 | 617 | | |
612 | 618 | | |
613 | | - | |
614 | | - | |
615 | | - | |
616 | | - | |
617 | | - | |
| 619 | + | |
| 620 | + | |
618 | 621 | | |
619 | 622 | | |
620 | 623 | | |
| |||
748 | 751 | | |
749 | 752 | | |
750 | 753 | | |
| 754 | + | |
| 755 | + | |
751 | 756 | | |
752 | 757 | | |
753 | | - | |
754 | | - | |
755 | | - | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
756 | 762 | | |
757 | 763 | | |
758 | 764 | | |
| |||
796 | 802 | | |
797 | 803 | | |
798 | 804 | | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
799 | 817 | | |
800 | 818 | | |
801 | 819 | | |
| |||
1451 | 1469 | | |
1452 | 1470 | | |
1453 | 1471 | | |
1454 | | - | |
1455 | | - | |
| 1472 | + | |
1456 | 1473 | | |
1457 | 1474 | | |
1458 | 1475 | | |
| |||
1492 | 1509 | | |
1493 | 1510 | | |
1494 | 1511 | | |
| 1512 | + | |
| 1513 | + | |
| 1514 | + | |
| 1515 | + | |
1495 | 1516 | | |
1496 | 1517 | | |
1497 | 1518 | | |
| |||
1669 | 1690 | | |
1670 | 1691 | | |
1671 | 1692 | | |
1672 | | - | |
| 1693 | + | |
1673 | 1694 | | |
1674 | 1695 | | |
1675 | 1696 | | |
| |||
1685 | 1706 | | |
1686 | 1707 | | |
1687 | 1708 | | |
| 1709 | + | |
| 1710 | + | |
| 1711 | + | |
| 1712 | + | |
| 1713 | + | |
| 1714 | + | |
| 1715 | + | |
1688 | 1716 | | |
| 1717 | + | |
| 1718 | + | |
| 1719 | + | |
| 1720 | + | |
| 1721 | + | |
1689 | 1722 | | |
1690 | 1723 | | |
1691 | 1724 | | |
| |||
1854 | 1887 | | |
1855 | 1888 | | |
1856 | 1889 | | |
1857 | | - | |
1858 | | - | |
1859 | | - | |
1860 | | - | |
1861 | | - | |
1862 | | - | |
1863 | | - | |
1864 | | - | |
1865 | | - | |
1866 | | - | |
1867 | | - | |
1868 | | - | |
1869 | | - | |
1870 | | - | |
1871 | | - | |
1872 | | - | |
1873 | | - | |
1874 | | - | |
1875 | | - | |
1876 | | - | |
1877 | | - | |
1878 | | - | |
1879 | 1890 | | |
1880 | 1891 | | |
1881 | 1892 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
0 commit comments