Second 3.0 preview. Every formalized UI/data primitive is now applied across all relevant surfaces (charter §3 Bucket B), plus three Bucket C arc closeouts. No breaking changes in this tag — it rides on alpha.1's foundation. Ships on the :next Docker channel.
Changed — coherence sweeps
- Centralized query keys (B1, #523): 89 inline key literals + 6 stray constants across 24 files now flow through the central
query-keys.tsfactory; every shorter-prefix invalidation got an explicit*Allentry so React Query partial matching stays correct. - Semantic color tokens (B2, #527): 39 hex literals replaced with
SEMANTIC_COLORS/BRAND_COLORStokens (new:neutral, plus plex/jellyfin/emby/musicbrainz/goodreads brand entries); 8 carve-outs documented inline. - Premium components on TRaSH Guides (B3, #530): history/preview tables →
PremiumTablefamily, duplicated status badges → sharedStatusBadge(fixing an invisible-border bug in the naming badge), theme-gradient buttons →GradientButton, sync progress bar →PremiumProgress, empty states →PremiumEmptyState. Visual normalizations declared and screenshot-verified per surface. - Data freshness indicators (B4, #528): four trust-correct adoptions (Statistics, Calendar, Hunting, qui home) — multi-feed pages deliberately excluded so the indicator never overclaims.
- Incognito coverage (B6, #525/#526): high-exposure surfaces and deploy flows now anonymize titles, usernames, and instance names; display-only invariant enforced (saves/payloads never transformed).
Added
- Cleanup list-membership rules (C3, #529): TMDb/Trakt list-membership rule kinds in Library Cleanup, with executor prefetch.
- Pulse collector label gate (C4, #524): every Pulse collector must declare an explicit label — enforced by a completeness test in CI.
Closed by analysis (no code needed)
- DomainStatusBadge sweep (B5): the taxonomy's correct surfaces were already wired when the primitive shipped; remaining candidates fail the fit test.
- qui Phase 6 (C1): detail-drawer rename + tracker CRUD shipped in the v2.20 era; tier graduation to
stableshipped in alpha.1's manifest reshuffle. Arc closed.
Upgrading: alpha.2 inherits alpha.1's breaking changes (Tautulli removal with consent-gated migration, unified rule engine, tier reshuffle). If you're coming from 2.x, read the alpha.1 notes first.
🤖 Generated with Claude Code