You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
AdminNotice dataclass and admin_notices hookspec in bragi.api / bragi.hookspecs. Plugins return per-site
operator-attention notices; bragi renders them on the per-site
dashboard (full cards), the sticky rail on per-site admin pages
(action_required + status), and the global admin index (per-site
severity dots). Stability-contract docstring + a contract
regression test land alongside the surface.
bragi.contrib.admin_notices plugin: dismiss + snooze admin
routes backed by admin_notice_dismissals, the three shared
templates (_notice_card.html, _notice_rail.html, _notice_dots.html), admin_notices.css, and the in-tree welcome_fallback hookimpl (migrated from bragi.contrib.sites).
bragi.api.invalidate_admin_notices(site) escape hatch for
plugins that resolve an action_required notice via a known
admin action (e.g. a theme calling it after a state change).
Per-(plugin, site, generation) LRU notice cache with 30s TTL,
explicit invalidation, and per-worker semantics matching the
established bragi_theme_zelda.rom.cache pattern.
Changed
bragi.contrib.sites's site dashboard renders notices through collect_notices instead of the previous inline home_status == 'welcome_fallback' banner. The replacement is
also a small UX upgrade: same title and body text, but rendered
as a card with a dedicated "Site settings →" CTA button and dismissible=False so an editor can't accidentally hide a
broken-home-page warning. Implementation is now hook-driven and
testable in isolation.